SlideShare una empresa de Scribd logo
1 de 19
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!

Más contenido relacionado

La actualidad más candente

ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
nagise
 

La actualidad más candente (20)

UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
 
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
 
ゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめゲームの仕様書を書こうまとめ
ゲームの仕様書を書こうまとめ
 
インタフェース完全に理解した
インタフェース完全に理解したインタフェース完全に理解した
インタフェース完全に理解した
 
DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容DeNAの最新のマスタデータ管理システム Oyakata の全容
DeNAの最新のマスタデータ管理システム Oyakata の全容
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
 
いつやるの?Git入門
いつやるの?Git入門いつやるの?Git入門
いつやるの?Git入門
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
Multibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだことMultibranch pipelineでいろいろ学んだこと
Multibranch pipelineでいろいろ学んだこと
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクトUnityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
Unityとアセットツールで学ぶ「絵づくり」の基礎 ライト、シェーダー、イメージエフェクト
 
ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
Photonのサービス選択の勘どころ
Photonのサービス選択の勘どころPhotonのサービス選択の勘どころ
Photonのサービス選択の勘どころ
 
kintone x AWSで超ファストシステムを作ろう 〜 AWSでkintone APIをよりよく使う〜
kintone x AWSで超ファストシステムを作ろう 〜 AWSでkintone APIをよりよく使う〜kintone x AWSで超ファストシステムを作ろう 〜 AWSでkintone APIをよりよく使う〜
kintone x AWSで超ファストシステムを作ろう 〜 AWSでkintone APIをよりよく使う〜
 

Destacado

ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
 

Destacado (8)

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

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

Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
 
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
GitLab & web hooks & git-flowで実現する企業向けgit環境の構築
CROOZ, inc.
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
s_taichan
 

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

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

Más de ymmt (6)

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

Último

Último (12)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

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 ユーザーがいるでしょう 