実践ぼっち駆動開発

この投稿は[mixiグループ Advent Calendar 2015](http://qiita.com/advent-calendar/2015/mixi)の19日目の記事です。

最近一人でぽちぽちアプリ書いてて良かった、ぼっちでも楽しくなる開発手法について紹介します。

## 1. [GitHub](https://github.com)の導入
GitHubは差分が見やすく、他のサービスと連携し易い点でよく使ってます。

またChrome拡張を使うとより一掃使いやすくなります。僕がよくお世話になってるのは、WIPをマージできないようにする[Do Not Merge WIP for GitHub](https://chrome.google.com/webstore/detail/do-not-merge-wip-for-gith/nimelepbpejjlbmoobocpfnjhihnpked)、差分をより見やすくする[Pretty Pull Requests (Github)](https://chrome.google.com/webstore/detail/pretty-pull-requests-gith/ljnjpkadhhcdniohpfilddnhahoigdec)、リポジトリのwikiを検索できる[GitHub Wiki Search](https://chrome.google.com/webstore/detail/github-wiki-search/gdifdhnjmjaidbajhapmbcbnoocoeooc)(一人だとあまり使わないかも)をよく使っています。

あと、僕は使ってないですが、[ZenHub for GitHub](https://chrome.google.com/webstore/detail/zenhub-for-github/ogcgkffhplmphkaahpmffcafajaocjbd)はIssueをそのままカンバンにできて良さそうです。


## 2. 開発用の[Slack](https://slack.com/)チャンネルを作る
Slackはチャットツールですが、連携機能が強力で沢山のサービスと連携することができ、テスト結果の通知やデプロイ通知などしてくれます。ちなみに僕のSlackはアニメ管理もしてくれます。

![](https://gyazo.com/394a5b46d68c8fd98f3eecbabf428861.png)

もちろんGitHubとの連携もあり、PRのコメントやコミットの通知などの新着管理ができます。また、後ほど紹介する[CircleCI](https://circleci.com)や[TravisCI](travis-ci.org)といったCIサービスのビルド結果や[Heroku](https://dashboard.heroku.com/)へのデプロイログなども残すことができます。

BotやIntegrationが増えると1人のSlackでも賑やかになります。やったね、たえちゃん。

## 3. CIサービスと連携させる

[CircleCI](https://circleci.com)や[TravisCI](travis-ci.org)と言ったCIサービスを使うことで最新のコードのビルドを行った結果をPRに表示したり、masterへマージ後デプロイしたりできます。

僕はPrivateリポジトリが無料なCircleCIが好きでよく好んで利用しています。先日行われた[mixi git challenge](http://alpha.mixi.co.jp/entry/2015/10/16/114203)でもこのCircleCIを利用しておりました。


## 4. [SideCI](https://www.sideci.com/ja)と連携

[SideCI](https://www.sideci.com/ja)は[HoundCI](https://houndci.com)のようにRubocopやJSHintのコーディンスタイルの警告をPRにコメントをしてくれるサービスです。また様々なLintを利用できるのもこのサービスの特徴です。

![](https://i.gyazo.com/1c118230ae7e37b339b2e50912eefa4d.png)

かわいい女の子のbotにコメントさせたりするとSlackにも表示されるので開発モチベーションがちょっとだけ上がります。
またどう直せばよいかのリファレンスが付いているのでとても便利です🍣🍣

## 5. [Heroku](https://dashboard.heroku.com/)にデプロイ

[Heroku](https://dashboard.heroku.com/)はゴミみたいなプロダクトでもいくつでもローンチできるぼっち開発者にとてもフレンドリーなサービスです。ステージング環境やプロトタイピング環境にはすごい便利です。

HerokuはGitHubのリポジトリをそのままデプロイする機能があります。

![](https://gyazo.com/3ea6333fc1def9198266309949b1b9a7.png)

また、ブランチを監視してコミットされるとそのブランチを自動的にデプロイしてくれる機能があります。僕はよくステージング環境と本番環境を用意して、`staging`ブランチにコミットがあるとステージングデプロイが始まるようにして、`master`ブランチには本番デプロイが始まるようにしています。こうすることによって、PRをマージする前に`staging`にマージして動作を確認した後に、PRをマージして`master`が更新されるとそのまま本番デプロイが走るようにしています。

これでデプロイ作業を意識せず開発に専念することができます。
任意のブランチを指定することができるのでお使いの開発フローに合わせることもできますね。


## 6. PR駆動開発

個人開発では、masterを常にデプロイできる状態にする[GitHubFlow](https://gist.github.com/Gab-km/3705015)を取り入れています。また、CI機能が整ったのでPR駆動+TDDでの開発スタイルを利用しています。

1つの機能ごとにPRを作成し、タイトルに`[WIP]`をつけた状態ではじめ、本文にはTODOを書いていきます。これによって誤マージやオペレーションミスをなくしていきます。

PRベースで開発を行うとコミット単位でLintやテストが走るため不慣れな言語の場合は正確なレビューをしてもらえるので勉強としてはとても最適です。

マージする前に`staging`ブランチに差分を適応し、ステージング環境で確認することも可能です。(この辺はHerokuのパイプラインを使うと綺麗にできるようですが、僕はいまいち使いこなせてないので誰かおしえてください)


## 7. [DeployGate](https://deploygate.com)でデプロイ

iOSアプリやAndroidアプリの場合は[dg](https://github.com/DeployGate/deploygate-cli)を使って配布します。dgはapkやipaを1コマンドでdeploygateに配信できる超便利コマンドです。

まだCircleCIに取り入れていませんがクライアントのリポジトリが`master`へマージしたタイミングで自動的に配信するような仕組みを考えています。

えっ、1人なのに誰に配布するのって？他に人が増えた時にだよ！！

## 8. その他
CIサービスには他にもカバレッジ計測のCIサービスの[Coveralls](https://coveralls.io/)や脆弱性診断のCIサービスの[Vaddy](http://vaddy.net/ja/)などといったものがあります。


## まとめ
GitHubを始め、CIサービスやSlack,Herokuなどを使って一人ぼっちでも楽しい開発方法を紹介しました。またbotを挟むと賑やかになるので楽しいです。これらは基本的に無料で使えるので本当に凄い。

次の日は[Kuniwak](http://qiita.com/Kuniwak)くんの「総行数57,000の巨大CSS群をLessに書き換えた軌跡」です。