本当はすごい codefirst の開発環境
(本記事は @suer, @mallowlabs, @mzp がノリノリで共同執筆しました!)
近代的なソフトウェア開発に必要なツールは3つある。
- 分散バージョン管理ツール
- ITS
- CI ツール
私はこれに AsakusaSatellite (以下AS)を加えたいと思う。
以上の4ツールを使用することによって、迅速なコミュニケーション、洗練された自動化をベースとした開発リズムを体験することができる。
このあとの節では具体的なユースケースをベースに、上記ツールの連携方法及びそのメリットをみていく。
ユースケース:開発中にソースコードの特定行で例外が発生した原因を探る
ここは codefirst の開発室。
@suer と @mallowlabs と @mzp はリズム良くコードを書いています。
そんなとき、ビルドの異常を知らせるポップアップが表示されます。
さっそくAS 上でミーティングがはじまります。
@suer「あれ?なんか失敗してる。さっきの push で関係ないところがバグったみたいだ。
Searcher.scala の23行目で例外が発生してる」
@mallowlabs「ウケルわー。誰だよこれ書いたやつwwww」
@mzp「…」
該当ソースコードを開くために、Redmineの「コード検索プラグイン」を使います。
@suer「最速で開けて便利だ」
@mallowlabs「ウケルわー」
Redmine の「注釈」機能を用いて、その行が誰がどのコミットで変更したかを調査します
@suer「コミットログにチケット番号が入ってるからコミットの意図が追えるね」
@mallowlabs「意図丸出しでウケルんですけどーw」
@mzp「…(僕しかコード書いてない)」
「TiDD」 を実現するためのツールである「bleis-hook(正式名称 Git-Hooks)」 により、開発者はトピックブランチ呼ばれるチケット単位のブランチで作業することになります。これにより、1つのコミットの単位は、2つ以上のチケットを解決する大きさにはなりません。また、すべてのコミットにはチケット番号が必ず含まれるようになるため、すべての行の意図を後から知ることができます。ブランチを使った開発で問題になるのがマージ作業ですが、分散バージョン管理システムの強力なマージ機能がこれをサポートします。
@suer「#643 の変更でバグったみたいだ。これは特定の条件が重なったときに起こるらしい。
単体テストだけでなく、シナリオテストを書いておいてよかったな」
@mallowlabs「最速で見つけてさすがっす!」
@mzp「…(見つけたの Jenkins だし)」
「Jenkins 」による CI でソースコードが push されるたびに ビルド / 単体テスト / シナリオテスト / 配備 が実行されるため、問題が発生・修正されたことが即座に分かります。バグのあるコミットをしたあと、その問題が何日も後に発見されて原因が特定しにくくなるという心配はありません。
@suer「ビルドが成功した瞬間にポップアップが表示されるし、XFD でもわかるし便利だ」
@mallowlabs「便利すぎてウケるわー」
@mzp「Websocket おいしいです」
Jenkins プラグインとそれと連携する Chrome エクステンション を独自に開発しているため、最速で問題に気づくことができます。
@suer「AS にも通知されるから見逃す心配もない」
@mallowlabs「通知も最速だわー」
Jenkinsのビルドが完了するたびに、AS に結果を通知するプラグインを使っているので、AS 上でもビルド結果が即座にわかります。
@suer「じゃあこの問題をコードレビューのチケットにしておいて」
@mallowlabs「ウケルわー」
@mzp 「…(直すのどうせ僕だし)」
@mallowlabs「チケット作ったわー」
AS では、チケット番号を入力するだけで、自動でチケットのタイトルが補完されたり、発言からチケットを作成できます。Redmine と AS の画面を往復せずに議論を進めることができ、開発のリズムを損ねません。
こうして根の深そうな問題も、発生からわずか10分たらずで解決。もちろん、このやりとりも AS や チケットに残るため、未来の自分たちを助けることになるのです。
@suer「バグ修正とかちょれーわ」
@mallowlabs「カッケー!」
@mzp 「…(直したの僕だし)」
半年後...
@suer 「なんでライブラリ変更したんだっけ?」
@mallowlabs「覚えてるわけないわーw」
@mzp「Redmine と AS を検索してみましょう」
Redmine と AS に記録が残っているため、簡単に検索してその意図を確認することができます。
@suer「設計意図がすぐに検索できて便利だなー」
@mallowlabs 「ウケルわー」
@mzp 「そういえば実装したの僕でした」
まとめ
- 4ツールが噛み合ったときの開発リズムの中毒性は異常
- おっさんかわいいよおっさん。
- @mzp ががんばっている
注意事項
- このストーリーはフィクションです。実在の人物、団体、事件などにはいっさい関係ありません。
- @mzp が辛い思いをしていることはありません
- @mallowlabs はアホの子ではありません
- @suer は最速です。ただし、何が最速かは謎です。
- どんなにツールが優れていても、チームのメンバを信頼できなければソフトウェア開発にリズムは生まれません。ストーリーの中の @mzp のように不信感を持ってはなりません。まずは信頼することから始めましょう。
ユースケース中に登場したソフトウェア
- codefirst.org の開発したツール
- その他のツール
- Redmine
- Jenkins
- git
- bleis-hook(Git-Hooks)
- Remine Code Review Plugin