By

ALL-IN を支える技術 (開発環境編)

ビジネスバンクグループ CTO の @shoutakenaka です。

今回は、ALL-IN の開発に携わっているエンジニアが日々どんな 開発環境を利用しているのかご紹介します。

今でこそビジネスバンクグループの CTO をやらせていただいていますが、 その前は某社で2年くらいエンジニア1人という体制で開発をしていて、 エンジニア間のコミュニケーションもマネジメントも全く必要ない環境にいたので、 そっち系のサービスやツールにはやや疎いところがありました。 後からジョインしてくれたメンバーの知恵を借りつつ、 今こんな環境で開発をやっています。

JIRA & Confluence

Atlassian の製品です。 タスクやバグの管理に JIRA、ドキュメント管理に Confluence を使っています。

以前 Microsoft でエバンジェリストだった 長沢さん が 今 Atlassian でエバンジェリストをなさっていて、 色々と Twitter に流してくださるのでどんな製品かおおよそ知ってはいましたが、 エンジニアメンバーの勧めで今回初めて使ってみました。 かなり使い勝手が良く、エンジニア間のコミュニケーションがスムーズに なっています。

でも、まだまだ使いこなせていないので、 一度長沢さんに御指南いただきたい、とか思ったりしています :D

Crucible

これも Atlassian の製品で、コードレビューをサポートしてくれるサービスです。

Crucible を採用する前は GitHub のプルリクをレビューしていましたが、 やりにくさを感じていました。 縦スクロールの画面なので変更がたくさん含まれていると見るのが大変とか、 やりとりを繰り返していると元々どういう実装になっていて何故指摘をしたか よくわからなくなるとか。 原因はプルリクの粒度の問題が大きいのですが、 エンジニアにプルリクの粒度まで細かく強制したくなかったので、 その辺りが解決できそうな Crucible を採用しました。

結果的には、Crucible にしてからレビューがかなりやりやすくなりました。 master ブランチにマージする前のコードレビューを必須にしていて、 全てのコードをレビューしているので、 Crucible には非常に助けられています :D

Slack

メンバー間のコミュニケーションに使っています。

Slack を採用した理由は、Rebuild.fm や、 Backspace.fm をはじめ、情報収集に使用している 複数のチャネルから Slack いいという噂が流れてきたからです。 で、使ってみたら本当によかったのでそのまま使い続けています :)

GitHub

ソース管理は GitHub です。 プライベートプロジェクトのホスティングでもお世話になっています。

Vagrant

弊社では「OS もエディタも好きなもの (各自が最も生産性を発揮できるもの) を使っていいよ」 というルールにしています。

ただ、環境の不一致による再現困難なバグはあるあるなので、 「開発は何使ってもいいけど動作確認は Vagrant の標準環境でやってね」ということにしています。

Vagrant で動かしている VM は サーバーと全く同じ OS で、 かつ Chef でサーバーに入れているのと同じパッケージを入れています。 これによって、開発者間や、開発環境と運用環境間で環境が統一され、 環境依存のバグが発生しにくい体制になっています (これまでのところ、環境依存のバグは出たことがないです)。

Chef

開発環境とサーバーの構築、設定変更に使っています。

以前からサーバーの設定をバージョン管理できないのが課題だと思っていたのですが、 前職の時に Chef を使って以来、サーバー構築には必ず何らかのプロビジョニングツールを 使うようになりました。

設定がバージョン管理できる他にも

  • 全サーバーに同じ操作を自動適用できて人的ミスが起こらない
  • 最新のサーバー設定が「レシピ」としてバージョン管理されているので、ドキュメントが最小限で済む

といったメリットがあって、プロビジョニングツールを使わない手はないと思っています。

まだサーバー台数が少ないので Chef Server は使っていません。

Rubocop & JSHint

RuboCop は Ruby コードの静的解析ツールです。

前述のように全ての変更は必ずレビューを通すようにしていますが、 コーディングスタイル関連の指摘は、される側もイラっとするし、 する側もコードが見にくくて本来レビューすべき箇所に集中できないので、 スタイルチェックはツールでやってもらうようにしています。 エディタによってはエクステンションなどで 保存時に自動チェックを走らせることもできるので、 実行のコストはかなり低く押さえることができます。

JavaScript も Ruby 同様、コーディングスタイルを JSHint で自動チェックしています。

SimpleCov

カバレッジ計測に使っています。

開発時やコードレビュー時にテスト漏れをチェックするのに使っています。

CircleCI

CI には CircleCI を利用しています。

GitHub にコードをプッシュすると、おもむろに CircleCI でビルドが走り、 RSpec でのテスト実行とカバレッジ計測をやってくれます。

+αで、デプロイ用のブランチにコードをプッシュすると、 テスト後に Capistrano でサーバーにデプロイまでやってくれるようになっています。

エンジニア募集中!

ビジネスバンクグループではエンジニアを募集中しています。

弊社が採用しているテクノロジや開発環境に興味を持った方は、 ここから是非エントリー を!