Development

Github Flow的な作業の始めかた

ハレノヒではプロジェクト管理はtrelloかgithubを使っています。これは決まりではありませんがどちらもチームが使い慣れていますので今では当たり前のようにこれらを使っています。
他にもいいプロジェクト管理ツールがあれば使ってみたいですね。

さて、Githubを使っているということは当然gitを使ってバージョンを管理をしているのですが、ブランチを作り作業を始める際の定番手順を紹介したいとおもいます。

Github Flowについてはこちらに日本語翻訳記事がありますので御覧ください
https://gist.github.com/Gab-km/3705015

はじめに

例としてSuper Awesomeなポートフォリオサイトを構築していたとします。
ポートフォリオサイトなので作品紹介ページは作ったのですが、お問い合わせページがまだ無いのでそれを追加する作業を進めていきます。

またGithub社が提供する hub コマンドを使うと便利なのでこれも合わせて紹介します。

1. masterブランチからfeatureブランチを作成する

まずは作業するためのブランチを作成します。この場合新機能の開発なので feature(機能)という名前空間の下に作業内容がわかりやすい名前で作成します。

git checkout -b feature/contact_form

git checkout -bを使うとブランチの作成とチェックアウトを同時に行えるので便利です。

2. 空のコミットをしておく

新しいブランチではcommitが一つもないのでこのままではPull Requestが作成できません。
なので以下のように空のコミットでブランチを作成したという内容だけを記録しておきます。

git commit --allow-empty -m "Create a branch"

3. originにpushする

git push origin feature/contact_form

4. Pull Requestを作成する

ここでhubコマンドの登場です。
https://github.com/github/hub

Mac OS XならHomebrewでインストールできます。

brew install hub

hub コマンドでPull Requestを作成する方法はこちらです

hub pull-request -m "[WIP] お問い合わせフォームを実装"

-m でPull Requestのタイトルを付けられますが、先頭に[WIP]をつけました。
これは Work In Progress の略称です。
つまりまだ作業中ですよという意味ですね。

5. チェックリストを作成する

hubコマンドでPull Requestを作成すると標準出力にWebページのURLが表示されますのでそこにアクセスしましょう。

 hub pull-request -m "[WIP] お問い合わせフォームを実装"
https://github.com/yourname/yourrepo/pull/1

チェックリストは作業を意味のある単位で分割して書くようにしています。
たとえば `GET /conatct_us` と `POST /contact_us` という2つのRouteを追加するのであれば
「contact_usのroutesを追加」という項目にまとめてしまいます。

より詳細に記述したい場合はチェックリストに階層をつけるといいとおもいます。

今回は以下のようにしました

Githubのコメント欄にはMarkdownが書けますが、- [ ]というリストを使うとチェックリストを作成できます

このように

6. 作業をすすめる

ここまでできたら後はガンガンコードを書いて開発をすすめます。
途中で一段落ついたらこまめにoriginへpushすることをオススメします。
そうすると何か間違っていたり、別のブランチで同じ作業をしてしまっていたりしたらお互いにコメントしあえるからです。

紆余曲折があってレビューの際に質問されそうだなと思う部分があるなら自分から先にコメントしてしまうのも手です。

例えば以下のように

7. レビューしてもらう

チェックリストが全部Doneしてマージする準備ができたらチームメンバーにレビューしてもらいます。
先にPull Requestのタイトルから [WIP] を削除しておきましょう。

ほんの小さな変更であればこの手順を省略してもいいとおもいますが、できるだけレビューしてもらうことで自分でも気づかなかった部分が見えてくることがあります。

この時、粗探しだけをするのではなく感心したり勉強になるようなことがあれば伝えてあげるといいとおもいます。

8. マージする

マージは基本Pull Requestを作った本人が行います。
GithubのWebページからマージボタンを使うと、忘れがちなDeleteもすぐに行えてマージ済みブランチがたくさんある状態を防げます。

リモートでマージをしたら忘れずにローカルにも反映しておきます。

git checkout master
git pull origin master
git branch -d feature/contact_form

ローカルの feature/contact_form ブランチも削除しておきましょう。

まとめ

以上がgithubを使った作業の進め方です。
そんなに難しいことはありませんが、気をつけるとことがあるとすれば自分の書いたコードは誰かに読んでもらうということを前提に作業をしていると、レビューしてもらう相手はもちろん未来の自分にも優しくなれるように気がします。

標準