SlideShare une entreprise Scribd logo
1  sur  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!

Contenu connexe

Tendances

一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
【初心者向け】Go言語勉強会資料
 【初心者向け】Go言語勉強会資料 【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料Yuji Otani
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例Hirohito Kato
 
会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話Shuji Yamada
 
新たな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を超えれるか?naoki koyama
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩Ayana Yokota
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みTakeshi Ogawa
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたKouji Matsui
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門Tomohiko Himura
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話Tier_IV
 
GitLab CI/CD パイプライン
GitLab CI/CD パイプラインGitLab CI/CD パイプライン
GitLab CI/CD パイプラインTetsurou Yano
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級Kouji Matsui
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンドYUKI Kaoru
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIKoichiro Sumi
 

Tendances (20)

一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
GitHubの使い方
GitHubの使い方 GitHubの使い方
GitHubの使い方
 
【初心者向け】Go言語勉強会資料
 【初心者向け】Go言語勉強会資料 【初心者向け】Go言語勉強会資料
【初心者向け】Go言語勉強会資料
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
Git flowの活用事例
Git flowの活用事例Git flowの活用事例
Git flowの活用事例
 
会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話
 
新たな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を超えれるか?
 
Gitはじめの一歩
Gitはじめの一歩Gitはじめの一歩
Gitはじめの一歩
 
いつやるの?Git入門
いつやるの?Git入門いつやるの?Git入門
いつやるの?Git入門
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
いまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitしたいまさら恥ずかしくてAsyncをawaitした
いまさら恥ずかしくてAsyncをawaitした
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
 
GitLab CI/CD パイプライン
GitLab CI/CD パイプラインGitLab CI/CD パイプライン
GitLab CI/CD パイプライン
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 
どうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCIどうやらテスト駆動型開発は死んだようです。これからのCI
どうやらテスト駆動型開発は死んだようです。これからのCI
 

En vedette

Wantedly - 世界一"いいね!"される 求人サイトの作り方
Wantedly - 世界一"いいね!"される 求人サイトの作り方Wantedly - 世界一"いいね!"される 求人サイトの作り方
Wantedly - 世界一"いいね!"される 求人サイトの作り方Yoshinori Kawasaki
 
Apache 3.0 (a tall tale)
Apache 3.0 (a tall tale)Apache 3.0 (a tall tale)
Apache 3.0 (a tall tale)Roy Fielding
 
グリーを支えるソーシャルコーディングのすべて
グリーを支えるソーシャルコーディングのすべてグリーを支えるソーシャルコーディングのすべて
グリーを支えるソーシャルコーディングのすべてKoichiro Ohba
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 

En vedette (7)

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
 

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

Build insider offline session チームでのgit
Build insider offline session チームでのgitBuild insider offline session チームでのgit
Build insider offline session チームでのgitTadahiro Ishisaka
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Shota Umeda
 
マジカルsvnとキュアgit
マジカルsvnとキュアgitマジカルsvnとキュアgit
マジカルsvnとキュアgitTakafumi ONAKA
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべKaoru NAKAMURA
 
2018 07-18 git-hub講座
2018 07-18 git-hub講座2018 07-18 git-hub講座
2018 07-18 git-hub講座貴一 末田
 
ノンプログラマのGit入門
ノンプログラマのGit入門ノンプログラマのGit入門
ノンプログラマのGit入門Muyuu Fujita
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Makoto Kawano
 
今さら聞けない人のためのGit超入門 GitLab 13対応版
今さら聞けない人のためのGit超入門 GitLab 13対応版今さら聞けない人のためのGit超入門 GitLab 13対応版
今さら聞けない人のためのGit超入門 GitLab 13対応版VirtualTech Japan Inc./Begi.net Inc.
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編kimulla
 
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.
 
"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another Approach"Continuous Publication" with Python: Another Approach
"Continuous Publication" with Python: Another ApproachDaisuke Miyakawa
 
Metahub for github
Metahub for githubMetahub for github
Metahub for githubSuguru Oho
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発s_taichan
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発Taichi Shindo
 

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

今さら聞けない人のための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 チーム開発
 
20120125 チーム開発
20120125 チーム開発20120125 チーム開発
20120125 チーム開発
 

Plus de ymmt

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

Plus 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つの誤解
 
プログラマ人生論
プログラマ人生論プログラマ人生論
プログラマ人生論
 

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