19
Git & GitHub & kintone で ででででででででででででででででで でででで @ymmt2005 © 2012 Cybozu. All rights reserved.

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

Embed Size (px)

DESCRIPTION

ブログで補足してます: http://developer.cybozu.co.jp/tech/?p=919 cybozu.com インフラ開発・運用チームのソースコード管理システムを Subversion & Fisheye + Crucible から Git & GitHub & kintone に変えるまでのお話です。

Citation preview

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

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

サイボウズ株式会社 山本泰宇@ y m m t 2 0 0 5

© 2012 Cybozu. All rights reserved.

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

どんな人にうれしい話?

• Git なら素早く解決!• ブランチ & マージは日常作業になり

ますブランチ管理が地獄のようだと悩んでいる人

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

• Hazama のノウハウ集、共有します!

Git やってみたいけど、きっかけがつかめない

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

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

cybozu.com 運用管理ツール

• ストレージ管理• VM 管理• 各種モニタリング

データセンター用

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

頻繁なリリース

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

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

開発の流れ

• 設計レビュー• 実装レビュー&修正

各自開発

• 開発環境用に結合• バグが混じり、不安定• 検出不具合を追加修正

開発 DC で QA試験 • 試験済み、かつ

• リリース可のコードを適用

• 週に何回も適用することも

運用 DC に適用

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

Subversion 時代 : 不幸のどん底

• trunk に直接コミット• ブランチ作成は遅すぎて滅多にしな

い( 作った後のチェックアウトが遅い )

• 安定版を作るには1. ブランチを作成2. 未試験のコミットをリバースマージ

• 問題点• コミットログの精査が人力• 後回しにすると、ますます辛い

• 安定版ブランチを持つ?• 目でログを探す点は変わらない• マージしていないコミットの管理が

辛い

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

解決したい問題

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

ブランチ作成の高速化

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

マージ

マージを繰り返したい

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

マージを楽にしたい

• 日々のストレスにもう耐えられませんSubversion が遅い

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

Git で解決! その理由

• ブランチ作成やマージはすべてローカル操作

• だから高速!

手元にレポジトリが丸ごと

ある

• 日々の作業は極めて高速• 初回のクローンだけ遅い

リモートレポジトリとは差

分更新

• Git のブランチ=分岐したグラフの枝• Git のマージ=二つの枝の合流

コミット履歴は

グラフ管理

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

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

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

GitHub Enterprise

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

ルは?• 共有レポジトリは誰が管理するの?

そこで GitHub Enterprise• github.com を仮想アプライアンスで社内運

用• 1ユーザー年間2万円くらい

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

GitHub いいよ!

• GitHub = Git レポジトリ管理 + レビューツール• ユーザーが自由にレポジトリを作れる!• Fisheye® + Atlassian Crucible® より速い• Fisheye® + Atlassian Crucible® より落ちない• Fisheye® + Atlassian Crucible® よりメンテナンスが楽• おまけに Wiki と Gist もついてくる

• Wiki 便利• Git レポジトリになっているので、テキストエディタで編集が

可能• 編集がコンフリクトしてもうまくマージできるよ

• Issues はしょぼい• kintone と連携すれば最強

※kintone は cybozu.com のアプリ作成ツール Hazama の開発タスク管理にも使っています

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

PULL リクエスト駆動開発

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

う!

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

ここが肝

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

導入後のワークフロー

• 設計レビュー• 実装レビュー&修正w

各自開発

トピックブランチ

開発レポジトリ

hazama/infra

安定レポジトリ

forest/infra

PULL リクエストPULL リクエスト

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

言うは易しだが・・・

•hazama/infra は Hazama 開発チーム管理•forest/infra は運用チーム管理

管理権限を分離

•試験が終わるまでは hazama/infra にマージ•試験終了後は forest/infra にマージ

二つのレポジトリを

意識する必要あり

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

開発完了の順に試験完了はしな

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

管理権限を分離

二つのレポジトリを

意識する必要あり

開発完了の順に試験完了はしな

行うは難し

$ 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

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

hazama tools でウルトラハッピー!

git-hazama 拡張コマンド

kintone API クライアント

github v3 API クライアント

github-kintone 連携 Chrome 拡張

GitHub で公開してます!https://github.com/ymmt2005/hazama-tools

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

管理権限を分離

二つのレポジトリを

意識する必要あり

開発完了の順に試験完了はしな

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 更新 )

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

GitHub ⇔ kintone 連携

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

↑ git hazama が PULL リク自動記載

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

Git に乗り換えるには?

•要望あれば公開検討します!•@ymmt2005 までどうぞ

Hazama謹製チュートリアル

•git svn のラッパー•関連の薄いモジュールのレポジトリは分割インポートがお勧めsvn2git•サインアップしてご自由にどうぞGitHub アカウ

ント

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

一人は慣れていること

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

Good Luck!