きっとできるGitセミナーまとめ

# セミナー情報
* 名称 : [Getting Git Right 〜 きっとできる Git](https://atlassianggrtokyo.attendease.com/)
* 日時 : 2014/09/26(金) 16:00開始
* 場所
 * 会場 : [ベルサール八重洲 room 2 + 3](http://www.bellesalle.co.jp/room/bs_yaesu/)
 * 住所 : [東京都中央区八重洲1-3-7八重洲ファーストフィナンシャルビル3F](https://www.google.co.jp/maps/place/東京都中央区八重洲１丁目３−７/@35.6829213,139.7718388,17z/data=!3m1!4b1!4m2!3m1!1s0x60188bfde96a8471:0xe8ea498d8cb4644e?hl=ja)
* Twitter
 * ハッシュタグ : [#gettinggitright](https://twitter.com/hashtag/gettinggitright)
 * まとめ : [Getting Git Right きっとできる Git まとめ - Togetterまとめ](http://togetter.com/li/724486)

# セミナープログラム
| 時刻 | アジェンダ | タイトル | Speaker | 資料 | 動画 |
|:--:|:--:|:--:|:--:|:--:|:--:|
| 15:30 | 開場 |||||
| 16:00 | 挨拶 ||Stuart Harringtonさん(アトラシアン 日本法人代表取締役社長)|||
||||大貫 浩さん(リックソフト)|||
| 16:10 | 講演 |Be a Happier Developer with git|Tim Pettersenさん(Developer Advocate, Atlassian)|参考 : [Getting Git Right](http://de.slideshare.net/svenpeters/getting-git-right)|[Be a Happier Developer with Git and Productive Teams #gettinggitright - YouTube](https://www.youtube.com/watch?v=o9HEzOveSsk)|
|| 講演 |Productive teams|Abhin Chhabraさん(Bitbucket Developer, Atlassian)|参考 : [Getting Git Right](http://de.slideshare.net/svenpeters/getting-git-right)|[Be a Happier Developer with Git and Productive Teams #gettinggitright - YouTube](https://www.youtube.com/watch?v=o9HEzOveSsk)|
| 17:55 | デモとまとめ ||長沢 智治さん(アトラシアン株式会社テクニカル エバンジェリスト)|[Getting Git Right 〜 きっとできる Git 〜 世界ツアー東京開催の資料と動画 #GettingGitRight](http://re-workstyle.com/articles/getting-git-right-sessions-contents-published/)|[Getting Git Right 〜 きっとできる Git 〜 世界ツアー東京開催の資料と動画 #GettingGitRight](http://re-workstyle.com/articles/getting-git-right-sessions-contents-published/)|
| 18:30 | 懇親会 |||||
資料に挙げた[Getting Git Right](http://de.slideshare.net/svenpeters/getting-git-right)は、2014年6月までに講演された内容であり、本公演での内容とは細部が異なります。

# 内容
## 挨拶
### Stuart Harringtonさん
* 1スライド、1笑いを要求され、こなしていた
* 会社が[マリノスタウン](http://www.f-marinos.com/access/marinostown)にある
* アトラシアンの前は、イタリアレストランが入っていた
 * イタリア料理店やマリノスショップと間違えられる事がしばしば...
 * シェフが会社にいる開発会社
  * でもって、ピザ食って、うまー

### 大貫 浩さん
* [リックソフト](https://www.ricksoft.jp/)は、アトラシアン製品の販売とプロフェッショナルサービスをおこなっている会社
 * FY14(2014会計年度)において、日本での売上第1位エキスパートになった
 * 販売の為のパンフレットは、Atlassianエキスパートの会社(リックソフト)が作っている
* Atlassian製品の販売だけでなく、アドオンも作り、販売している([WBSガントチャート for JIRA](https://www.ricksoft.jp/product/atlassian/wbsganttchart))
* クラウドサービスもおこなっている([リッククラウド](https://www.ricksoft.jp/product/atlassian/wbsganttchart))

## 講演
### Abhin Chhabraさん
Gitの優位性に関する話

1. Speed, speed, **Speed**
 * Everything is **local**
     * localというのは、pushとpullを除く
     * Written in **C** by Linux **kernel** and **filesystem** developers
          * Linus Benedict Torvalds : ワイがLinuxとGitを作った
     * (最初のCloneを除き、)svnと比べて、Gitは速い
     * なぜ、リポジトリが大きくなるの?
1. Freedom & Safety
 * Feature Branching
     * やる事
          * 何か(バグ修正、機能追加、typoなど)あったら、まずブランチを切れ
          * そして、切られたブランチでの開発が完了したら、Mainブランチ(trunk)にマージしろ
     * コマンド
          * ローカル : git **checkout** -b new-branch
          * サーバー : git **push** origin new-branch
 * git **stash**はスゴイ
     * コマンドの意味
          * 今の作業内容を一時的に保存するコマンド
     * 例えば、ボスが「バグ修正版のリリース早よ!」と叫びながら、あなたの席に来たら...
          * Gitでは、慌てる事は無い。あなたは、git stashを実行し、Mainブランチに切り替えして、バグを修正し、マージし、push、デプロイ。終わったら、途中の作業をリストアする。
          * svnでは、こうはいかないよね
 * Safety
     * もし、サーバーがクラッシュしたら、どうする?
          * 問題ない。Gitは、全てのクライアントに全てのデータ(clone)がある。それを復元するだけだ。
          * Gitには、ファイルを復帰させるコマンドもいろいろある
     * 詳しくは、[Titanium Armor: Recovering From Various Disasters | Atlassian Git Tutorial](https://www.atlassian.com/git/articles/titanium-armor-recovering-from-various-disasters/)を参照
1. Explore & Understand
 * Gitは、ログからいろいろな事が分かる
     * 誰が、いつ、何を変更したのか
     * 誰がファイルを消したのか
 * grepすれば、定数が何処で宣言されているのかも分かる
 * mergeしたかどうかも分かる
1. Control & Assemble
 * **merge**とは、「featureブランチの変更をmasterブランチに適用する」事
 * Gitのmergeが優れている所 : 速く、優れている
     * mergeは**local**でおこなう
     * Gitは親のリビジョンを遡る事で過去を遡る事が出来るが、SVNは全てのリビジョンを保持している為に遅い
     * mergeが賢い
 * mergeはイベントじゃなくなるよ
 * rebase
     * コミットを1対1でリプレイする事。masterブランチの最後に、featureブランチの全てのコミットを繋げる
     * **注意 : rebaseはコミットログ(歴史)を書き換えるので、気を付けて使う事**

### Tim Pettersenさん
 * Efficient Workflows
     * 一番良いGitを使ったワークフローとは?
         * 異なる文化、製品、チーム。それぞれに異なったワークフローがある
         * 自分たちのチームに合ったワークフローを作ろう
     * アトラシアンでのワークフローは
         * Issueごとにブランチを切る
             * ブランチは完了するまでmasterブランチから切り離し、テストが完了したらmasterブランチへマージする
             * ブランチはtypoでも、機能追加でも、バグ修正でも、何でも切る
             * ブランチの例
                 * JIRAの30番のissueでユーザーのアバター関するFeatureブランチ : feature/JIRA-30-user-avatars
                 * JIRAの31番のissueで認証に関するbugfixブランチ : bugfix/JIRA-31-3lo-NPE
                 * JIRAの32番のissueでIE8に関するhotfixブランチ : hotfix/JIRA-32-broke-ie8-again
             * JIRAは、切るブランチの名前をある程度自動で決めてくれ、ブランチを切る前に、ビルドが成功しているかを確認する事が出来る
     * **Automatic merges**
        * [with a Git hook](https://bitbucket.org/durdn/automatic-merge-hook)
        * with Stash
 * Improving Code Quality
     * コードレビューの良い所
        * コードをより良く出来る
        * 知識を共有できる
        * コードをチームで共同所有する
     * レビューをおこなう事で、何かあった時の開発者の罪悪感が薄れる
     * コードレビューは、GitではPull Requestsを通しておこなう
         * Stashにはコードレビューを助けてくれる機能をがある
 * Git and Yout Toolchain
     * Issueがどんな状態かは、Stashですぐ分かる
     * 何が行われているかはHipChatでやり取りされると、メールを辿る必要が無い。
 * 何故、Gitを使うか?
     * それは、経済的だから
         * ソフトウェア開発が速くなり、バグが少なくなり、顧客が喜ぶから
     * 速く、賢くソフトウェアをリリースする

## 質疑応答
### 2人目
Q. ゲーム会社で、現在は[PERFORCE](http://www.toyo.co.jp/ss/perforce/)を使っている。開発者はGitを使いたいけど、アーティストは「Git分かんない、無理」という状況。どうしてもローカルに全てのファイルを置けないという事情もある。何か良い案やソリューションはありませんか?
A. [git-media](https://github.com/alebedev/git-media)を使いましょう。(参考 : [もう巨大なデータをgitignoreしなくていい！ ~git-mediaの使い方~ - 3度の飯と最新技術](http://endorno.github.io/blog/2013/10/06/how-to-use-git-media/))

## デモとまとめ
### 長沢 智治さん
 * デモシナリオ
     * 1. [Confluence](https://www.atlassian.com/ja/software/confluence)で企画を立てる
     * 2. [JIRA](https://www.atlassian.com/ja/software/jira)で計画を立てる
     * 3. 開発に[Stash](https://www.atlassian.com/ja/software/stash)と[BitBucket](https://www.atlassian.com/ja/software/bitbucket/overview)を使う
     * 4. [Bamboo](https://www.atlassian.com/ja/software/bamboo)でビルドし、デプロイする
 * デモ
     * JIRA, Bambooは、何が変わったかを全て知っている。変更により何が追加されるか、以前のバージョンに戻す事で何が失われるかもすぐ分かる
     * 開発が正しく(嘘なく)進められる。ずっと変わらない進捗85%とかは無くなるね
     * それぞれの関係者(開発、企画など)が必要な所にフォーカスしやすくなる
     * Gitだけだと、分散しやすくなるので、JIRAを中心としたワークフローを作るのが良い

# 感想
 * 「サーバーが死んでも、ブランチを全部消しても戻せる」→「死んだと言ったな。あれは嘘だ」というセリフが頭をよぎった
 * Gitは、SVNよりもかなり優れているんだな
 * 「Gitが優れているから使う」のではなく、「自分たちの製品を出す為に、最適なワークフローをまず考え、その上でGitをベースとした開発をおこなう」事を選ぶ方が賢い。
    * ワークフローを作る/変更するなら、それを良い機会と考え、企画/計画/開発/テスト/リリースをどのようにおこなうか、どのようなツールを使うかを考えると良いと思う
    * 基本的なワークフローについては、このセミナーで触れられていたので、ある程度の期間、部分的に取り入れてみて、自分たちに合うかどうかを振り返ってみると良いと思う

# 資料
 * 会社
     * [Atllasian](https://www.atlassian.com/ja/)
         * [製品](https://www.atlassian.com/ja/software)
         * Git
             * [概要](https://www.atlassian.com/ja/git/)
             * [Git チュートリアル](https://www.atlassian.com/ja/git/tutorial)
             * [Git ワークフロー](https://www.atlassian.com/ja/git/workflows)
     * [リックソフト](https://www.ricksoft.jp/)
 * ツール
     * [Automatic merges with a Git hook](https://bitbucket.org/durdn/automatic-merge-hook)
     * [git-media](https://github.com/alebedev/git-media)
         * [もう巨大なデータをgitignoreしなくていい！ ~git-mediaの使い方~ - 3度の飯と最新技術](http://endorno.github.io/blog/2013/10/06/how-to-use-git-media/)
 * [Git チートシート](https://training.github.com/kit/downloads/ja/github-git-cheat-sheet.pdf)