SlideShare a Scribd company logo
Git & GitHub & kintone で
      ウルトラハッピー!
     サイボウズ株式会社 山本泰宇
         @ymmt2005




                     © 2012 Cybozu. All rights reserved.
どんな人にうれしい話?

ブランチ管理が地獄のよう      • Git なら素早く解決!
  だと悩んでいる人        • ブランチ & マージは日常作業になります


Fisheye® + Crucible®
                     • GitHub は速いしメンテナンスも楽々
    に悩んでいる人



Git やってみたいけど、きっ
                  • Hazama のノウハウ集、共有します!
   かけがつかめない人

              ※Fisheye, Atlassian Crucible は Atlassian の商標です
              ※Hazama は cybozu.com のインフラツール開発チームです
cybozu.com 運用管理ツール

           • ストレージ管理

データセンター用   • VM管理
           • 各種モニタリング




           • 深刻な問題が発生すれば即改修が必要
頻繁なリリース    • 依存関係の都合でリリース期日指定も良くある




           • 開発環境(試験用)
 環境が二つ     • 運用環境(試験済み)
開発の流れ




                開発DCでQA試験
•設計レビュー                     •試験済み、かつ
•実装レビュー&修正   •開発環境用に結合      •リリース可のコードを適用

             •バグが混じり、不安定    •週に何回も適用することも

             •検出不具合を追加修正


      各自開発                      運用DCに適用
Subversion時代: 不幸のどん底

• trunk に直接コミット
 • ブランチ作成は遅すぎて滅多にしない
   (作った後のチェックアウトが遅い)
• 安定版を作るには
 1. ブランチを作成
 2. 未試験のコミットをリバースマージ
• 問題点
 • コミットログの精査が人力
 • 後回しにすると、ますます辛い
• 安定版ブランチを持つ?
 • 目でログを探す点は変わらない
 • マージしていないコミットの管理が辛い
解決したい問題

ブランチ作成の高速化       • 個々のタスクごとにブランチを作成したい(トピックブランチ)



                 • 一度マージした後、追加の改修を再度マージ
マージを繰り返したい       • 親ブランチの変更を取り込み後、親ブランチに再度マージ


                 • まだマージしていないコミットを自動検出したい
マージを楽にしたい        • 特定のコミットをすばやくマージしたい



Subversion が遅い   • 日々のストレスにもう耐えられません
Gitで解決! その理由

手元にレポジトリ    • ブランチ作成やマージはすべてローカル操作

 が丸ごとある     • だから高速!


リモートレポジトリ   • 日々の作業は極めて高速

 とは差分更新     • 初回のクローンだけ遅い


コミット履歴は     • Git のブランチ=分岐したグラフの枝

 グラフ管理      • Git のマージ=二つの枝の合流
Git vs. Mercurial

Git のほうが強力で、速くて、省スペースで、難しい
• 慣れれば Git の利点が大きい

GitHub が便利すぎる
• これから解説します 

Linux カーネルとその周辺が Git 管理
• Hazama は良く Linux の不具合追うので…

というのは私だけの意見じゃないですよ!
• Why did Git get so much hype? …while others don't?
• Git, Mercurial and Bazaar – A Comparison
GitHub Enterprise

   Git だけでサイボウズの開発はまわらない
   • コードレビューどうする?
   • レポジトリ管理・アクセスコントロールは?
   • 共有レポジトリは誰が管理するの?




        そこで   GitHub Enterprise
        • github.com を仮想アプライアンスで社内運用
        • 1ユーザー年間2万円くらい
GitHub いいよ!

• GitHub = Gitレポジトリ管理 + レビューツール
 •   ユーザーが自由にレポジトリを作れる!
 •   Fisheye® + Atlassian Crucible® より速い
 •   Fisheye® + Atlassian Crucible® より落ちない
 •   Fisheye® + Atlassian Crucible® よりメンテナンスが楽
 •   おまけに Wiki と Gist もついてくる
• Wiki 便利
 • Gitレポジトリになっているので、テキストエディタで編集が可能
 • 編集がコンフリクトしてもうまくマージできるよ 
• Issues はしょぼい
 • kintone と連携すれば最強
                       ※kintone は cybozu.com のアプリ作成ツール
                        Hazama の開発タスク管理にも使っています
PULLリクエスト駆動開発

• PULLリクエスト
 •   レビュー&マージツール
 •   よそのプロジェクトにパッチ投げることもできる
 •   レビュー OK ならボタン一発でブランチをマージ
 •   死ぬほど便利なので、PULLリクエスト中心にワークフローは考えよう!

• ワークフローの例                   ここが肝
 1.   タスクごとにトピックブランチを作る
 2.   PULLリクエストを投げてレビューしてもらう
 3.   指摘事項を修正してトピックブランチにPUSH
 4.   PULLリクエストの中身が更新されるので、再レビュー
 5.   レビューOKならレビュワーがボタンクリックでマージ&クローズ!
導入後のワークフロー

            PULLリクエスト    開発レポジトリ       PULLリクエスト   安定レポジトリ
 トピックブランチ
                        hazama/infra               forest/infra


                        開発DCでQA試験
•設計レビュー                                     •試験済み、かつ
•実装レビュー&修正w        •開発環境用に結合                •リリース可のコードを適用

                   •バグが混じり、不安定              •週に何回も適用することも

                   •検出不具合を追加修正


      各自開発                                         運用DCに適用
言うは易しだが・・・

            • hazama/infra は Hazama 開発チーム管理
管理権限を分離     • forest/infra は運用チーム管理




二つのレポジトリを   • 試験が終わるまでは hazama/infra にマージ

意識する必要あり    • 試験終了後は forest/infra にマージ




開発完了の順に     • リリースするべきものだけを chrry-pick
            • うまくやらないと、意図しない hazama のコミットが紛れ込む
試験完了はしない    • トピックブランチから必要なコミットを自動的に抜き出したい
行うは難し

            $ git clone github:hazama/infra
管理権限を分離     $ git remote add stable github:forest/infra
            $ git fetch stable



二つのレポジトリを   $ git fetch origin
            $ git checkout –b INFRA-xx origin/master
意識する必要あり    $ git push origin INFRA-xx


            $ git fetch stable

開発完了の順に     $ git checkout –b INFRA-xx-forest stable/master
            $ git fetch origin
            $ BRANCH_ORIG=$(複雑なコマンド)

試験完了はしない    $ git cherry-pick --first-parent --no-merges $BRANCH_ORIG..origin/INFRA-xx
            $ (コンフリクト修正)
            $ git push origin INFRA-xx-forest
hazama tools でウルトラハッピー!


git-hazama 拡張コマンド

kintone API クライアント

github v3 API クライアント

github-kintone 連携 Chrome 拡張

             GitHub で公開してます!
             https://github.com/ymmt2005/hazama-tools
git hazama でこうなる!

            $ git hazama setup infra
管理権限を分離      (clone して remote 追加)



            $ git hazama dev
二つのレポジトリを     ….
            $ git hazama review dev TICKET
意識する必要あり    (トピックブランチ作成, PUSH, PULLリク作成, kintone 更新)




            $ git hazama pick TICKET
開発完了の順に       (必要なコミットを自動 cherry-pick)
            $ git hazama stage TICKET
試験完了はしない      (forest/infra へのPULLリク作成, kintone 更新)
GitHub ⇔ kintone 連携

        ← Chrome 拡張でチケットに自動リンク




         ↑ git hazama が PULL リク自動記載
Git に乗り換えるには?

 Hazama謹製       • 要望あれば公開検討します!

  チュートリアル       • @ymmt2005 までどうぞ


                • git svn のラッパー
   svn2git
                • 関連の薄いモジュールのレポジトリは分割インポートがお勧め



GitHub アカウント    • サインアップしてご自由にどうぞ



                • 「コミットグラフ」の意味がわかるくらいでないと厳しい
一人は慣れていること
                • 各チーム一人は、隠れ Git ユーザーがいるでしょう 
Good Luck!

More Related Content

PPTX
Qiita Night 足場固めからやるマイクロサービス
PPTX
WebRTC SFU mediasoup sample
PPTX
Amazon SageMakerでカスタムコンテナを使った学習
PPTX
マイクロサービスにおける 結果整合性との戦い
PDF
CSI Driverを開発し自社プライベートクラウドにより適した安全なKubernetes Secrets管理を実現した話
PDF
Deep Dive into Spark SQL with Advanced Performance Tuning
PPTX
Dockerからcontainerdへの移行
PDF
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)
Qiita Night 足場固めからやるマイクロサービス
WebRTC SFU mediasoup sample
Amazon SageMakerでカスタムコンテナを使った学習
マイクロサービスにおける 結果整合性との戦い
CSI Driverを開発し自社プライベートクラウドにより適した安全なKubernetes Secrets管理を実現した話
Deep Dive into Spark SQL with Advanced Performance Tuning
Dockerからcontainerdへの移行
Hadoop/Spark で Amazon S3 を徹底的に使いこなすワザ (Hadoop / Spark Conference Japan 2019)

What's hot (20)

PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PPTX
Prometheus入門から運用まで徹底解説
PDF
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
PDF
Snowflake Architecture and Performance
PDF
SharePoint Online モダンサイトの設計 - SharePoint の利用計画 - #‎MSInteract19‬ #PR05
PDF
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
PDF
Dockerからcontainerdへの移行
PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
PDF
自治体Gisの勘違い(3)
PDF
Travel & Leisure Platform Department's tech info
PDF
ベアメタルで実現するSpark&Trino on K8sなデータ基盤
PDF
Viva Connections 拡張機能入門
PDF
[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送
PPTX
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
PDF
【HinemosWorld2016】A2-5_Hinemosによる運用管理テクニック
PDF
WebRTC-RTP Forwarder を 作って得られた知見
PDF
カッコいい SharePoint モダンサイトを作ろう
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
SharePoint Framework Extension 基礎講座
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Prometheus入門から運用まで徹底解説
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Snowflake Architecture and Performance
SharePoint Online モダンサイトの設計 - SharePoint の利用計画 - #‎MSInteract19‬ #PR05
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
Dockerからcontainerdへの移行
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
自治体Gisの勘違い(3)
Travel & Leisure Platform Department's tech info
ベアメタルで実現するSpark&Trino on K8sなデータ基盤
Viva Connections 拡張機能入門
[Cloud OnAir] Bigtable に迫る!基本機能も含めユースケースまで丸ごと紹介 2018年8月30日 放送
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
【HinemosWorld2016】A2-5_Hinemosによる運用管理テクニック
WebRTC-RTP Forwarder を 作って得られた知見
カッコいい SharePoint モダンサイトを作ろう
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
SharePoint Framework Extension 基礎講座
Ad

Viewers also liked (8)

PDF
Wantedly - 世界一"いいね!"される 求人サイトの作り方
PDF
Apache 3.0 (a tall tale)
PPTX
How Perl Changed My Life
KEY
Yapc2012資料
PDF
グリーを支えるソーシャルコーディングのすべて
PDF
ホームディレクトリに埋もれた便利なコードをさがせ!
PDF
Github of project
PDF
会社にGitHub Enterpriseを導入してみた話
Wantedly - 世界一"いいね!"される 求人サイトの作り方
Apache 3.0 (a tall tale)
How Perl Changed My Life
Yapc2012資料
グリーを支えるソーシャルコーディングのすべて
ホームディレクトリに埋もれた便利なコードをさがせ!
Github of project
会社にGitHub Enterpriseを導入してみた話
Ad

Similar to Git & GitHub & kintone でウルトラハッピー! (20)

KEY
一人でもはじめるGitでバージョン管理
PPTX
今さら聞けない人のためのGitLabの始め方 Ubuntu編
PPTX
Build insider offline session チームでのgit
PDF
Gitと出会って人生変わった テックヒルズ2013-03-22
PDF
ALMツールたべくらべ
PPTX
2018 07-18 git-hub講座
PDF
ノンプログラマのGit入門
PPTX
Gitを使った運用方法
PDF
Python for Data Analysis第1回勉強会(+git入門)
PPTX
今さら聞けない人のためのGit超入門 GitLab 13対応版
PPTX
Multibranch Pipeline with Docker 入門編
PPTX
今さら聞けない人のためのGit超入門 2020/12/19
PPTX
今さら聞けない人のためのGit超入門 2019/11/21
PDF
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
PPTX
今さら聞けない人のためのgit超入門
PDF
"Continuous Publication" with Python: Another Approach
PDF
Metahub for github
PDF
20120125 チーム開発
PDF
20120125 チーム開発
一人でもはじめるGitでバージョン管理
今さら聞けない人のためのGitLabの始め方 Ubuntu編
Build insider offline session チームでのgit
Gitと出会って人生変わった テックヒルズ2013-03-22
ALMツールたべくらべ
2018 07-18 git-hub講座
ノンプログラマのGit入門
Gitを使った運用方法
Python for Data Analysis第1回勉強会(+git入門)
今さら聞けない人のためのGit超入門 GitLab 13対応版
Multibranch Pipeline with Docker 入門編
今さら聞けない人のためのGit超入門 2020/12/19
今さら聞けない人のためのGit超入門 2019/11/21
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
今さら聞けない人のためのgit超入門
"Continuous Publication" with Python: Another Approach
Metahub for github
20120125 チーム開発
20120125 チーム開発

More from ymmt (6)

PPTX
Cybozu Meetup #2 SRE
PPTX
正しく恐れるクラウドのセキュリティ
PPTX
Cybozu Meetup Osaka #2 SRE
PDF
アーキテクトになるには
PPTX
rebaseにまつわる3つの誤解
PPTX
プログラマ人生論
Cybozu Meetup #2 SRE
正しく恐れるクラウドのセキュリティ
Cybozu Meetup Osaka #2 SRE
アーキテクトになるには
rebaseにまつわる3つの誤解
プログラマ人生論

Git & GitHub & kintone でウルトラハッピー!

  • 1. Git & GitHub & kintone で ウルトラハッピー! サイボウズ株式会社 山本泰宇 @ymmt2005 © 2012 Cybozu. All rights reserved.
  • 2. どんな人にうれしい話? ブランチ管理が地獄のよう • Git なら素早く解決! だと悩んでいる人 • ブランチ & マージは日常作業になります Fisheye® + Crucible® • GitHub は速いしメンテナンスも楽々 に悩んでいる人 Git やってみたいけど、きっ • Hazama のノウハウ集、共有します! かけがつかめない人 ※Fisheye, Atlassian Crucible は Atlassian の商標です ※Hazama は cybozu.com のインフラツール開発チームです
  • 3. cybozu.com 運用管理ツール • ストレージ管理 データセンター用 • VM管理 • 各種モニタリング • 深刻な問題が発生すれば即改修が必要 頻繁なリリース • 依存関係の都合でリリース期日指定も良くある • 開発環境(試験用) 環境が二つ • 運用環境(試験済み)
  • 4. 開発の流れ 開発DCでQA試験 •設計レビュー •試験済み、かつ •実装レビュー&修正 •開発環境用に結合 •リリース可のコードを適用 •バグが混じり、不安定 •週に何回も適用することも •検出不具合を追加修正 各自開発 運用DCに適用
  • 5. Subversion時代: 不幸のどん底 • trunk に直接コミット • ブランチ作成は遅すぎて滅多にしない (作った後のチェックアウトが遅い) • 安定版を作るには 1. ブランチを作成 2. 未試験のコミットをリバースマージ • 問題点 • コミットログの精査が人力 • 後回しにすると、ますます辛い • 安定版ブランチを持つ? • 目でログを探す点は変わらない • マージしていないコミットの管理が辛い
  • 6. 解決したい問題 ブランチ作成の高速化 • 個々のタスクごとにブランチを作成したい(トピックブランチ) • 一度マージした後、追加の改修を再度マージ マージを繰り返したい • 親ブランチの変更を取り込み後、親ブランチに再度マージ • まだマージしていないコミットを自動検出したい マージを楽にしたい • 特定のコミットをすばやくマージしたい Subversion が遅い • 日々のストレスにもう耐えられません
  • 7. Gitで解決! その理由 手元にレポジトリ • ブランチ作成やマージはすべてローカル操作 が丸ごとある • だから高速! リモートレポジトリ • 日々の作業は極めて高速 とは差分更新 • 初回のクローンだけ遅い コミット履歴は • Git のブランチ=分岐したグラフの枝 グラフ管理 • Git のマージ=二つの枝の合流
  • 8. Git vs. Mercurial Git のほうが強力で、速くて、省スペースで、難しい • 慣れれば Git の利点が大きい GitHub が便利すぎる • これから解説します  Linux カーネルとその周辺が Git 管理 • Hazama は良く Linux の不具合追うので… というのは私だけの意見じゃないですよ! • Why did Git get so much hype? …while others don't? • Git, Mercurial and Bazaar – A Comparison
  • 9. GitHub Enterprise Git だけでサイボウズの開発はまわらない • コードレビューどうする? • レポジトリ管理・アクセスコントロールは? • 共有レポジトリは誰が管理するの? そこで GitHub Enterprise • github.com を仮想アプライアンスで社内運用 • 1ユーザー年間2万円くらい
  • 10. GitHub いいよ! • GitHub = Gitレポジトリ管理 + レビューツール • ユーザーが自由にレポジトリを作れる! • Fisheye® + Atlassian Crucible® より速い • Fisheye® + Atlassian Crucible® より落ちない • Fisheye® + Atlassian Crucible® よりメンテナンスが楽 • おまけに Wiki と Gist もついてくる • Wiki 便利 • Gitレポジトリになっているので、テキストエディタで編集が可能 • 編集がコンフリクトしてもうまくマージできるよ  • Issues はしょぼい • kintone と連携すれば最強 ※kintone は cybozu.com のアプリ作成ツール Hazama の開発タスク管理にも使っています
  • 11. PULLリクエスト駆動開発 • PULLリクエスト • レビュー&マージツール • よそのプロジェクトにパッチ投げることもできる • レビュー OK ならボタン一発でブランチをマージ • 死ぬほど便利なので、PULLリクエスト中心にワークフローは考えよう! • ワークフローの例 ここが肝 1. タスクごとにトピックブランチを作る 2. PULLリクエストを投げてレビューしてもらう 3. 指摘事項を修正してトピックブランチにPUSH 4. PULLリクエストの中身が更新されるので、再レビュー 5. レビューOKならレビュワーがボタンクリックでマージ&クローズ!
  • 12. 導入後のワークフロー PULLリクエスト 開発レポジトリ PULLリクエスト 安定レポジトリ トピックブランチ hazama/infra forest/infra 開発DCでQA試験 •設計レビュー •試験済み、かつ •実装レビュー&修正w •開発環境用に結合 •リリース可のコードを適用 •バグが混じり、不安定 •週に何回も適用することも •検出不具合を追加修正 各自開発 運用DCに適用
  • 13. 言うは易しだが・・・ • hazama/infra は Hazama 開発チーム管理 管理権限を分離 • forest/infra は運用チーム管理 二つのレポジトリを • 試験が終わるまでは hazama/infra にマージ 意識する必要あり • 試験終了後は forest/infra にマージ 開発完了の順に • リリースするべきものだけを chrry-pick • うまくやらないと、意図しない hazama のコミットが紛れ込む 試験完了はしない • トピックブランチから必要なコミットを自動的に抜き出したい
  • 14. 行うは難し $ git clone github:hazama/infra 管理権限を分離 $ git remote add stable github:forest/infra $ git fetch stable 二つのレポジトリを $ git fetch origin $ git checkout –b INFRA-xx origin/master 意識する必要あり $ git push origin INFRA-xx $ git fetch stable 開発完了の順に $ git checkout –b INFRA-xx-forest stable/master $ git fetch origin $ BRANCH_ORIG=$(複雑なコマンド) 試験完了はしない $ git cherry-pick --first-parent --no-merges $BRANCH_ORIG..origin/INFRA-xx $ (コンフリクト修正) $ git push origin INFRA-xx-forest
  • 15. hazama tools でウルトラハッピー! git-hazama 拡張コマンド kintone API クライアント github v3 API クライアント github-kintone 連携 Chrome 拡張 GitHub で公開してます! https://github.com/ymmt2005/hazama-tools
  • 16. git hazama でこうなる! $ git hazama setup infra 管理権限を分離 (clone して remote 追加) $ git hazama dev 二つのレポジトリを …. $ git hazama review dev TICKET 意識する必要あり (トピックブランチ作成, PUSH, PULLリク作成, kintone 更新) $ git hazama pick TICKET 開発完了の順に (必要なコミットを自動 cherry-pick) $ git hazama stage TICKET 試験完了はしない (forest/infra へのPULLリク作成, kintone 更新)
  • 17. GitHub ⇔ kintone 連携 ← Chrome 拡張でチケットに自動リンク ↑ git hazama が PULL リク自動記載
  • 18. Git に乗り換えるには? Hazama謹製 • 要望あれば公開検討します! チュートリアル • @ymmt2005 までどうぞ • git svn のラッパー svn2git • 関連の薄いモジュールのレポジトリは分割インポートがお勧め GitHub アカウント • サインアップしてご自由にどうぞ • 「コミットグラフ」の意味がわかるくらいでないと厳しい 一人は慣れていること • 各チーム一人は、隠れ Git ユーザーがいるでしょう 