コラム

開発環境改善!ヘルシーなWEB開発環境に近づくまでの軌跡

2014-12-11

RM STAFF

WRITER:

RM STAFF

どうも、リッチメディアの沼野です。4月から新卒エンジニアとして入社してもう12月になりました。この半年で劇的に開発環境がヘルシーに変化したので、その経過などをお話し出来ればと思います。

 

健康的でない開発環境

 

まず、最初に配属された部署は超俗人化された開発環境でした。というのも、今までそのサービスに携わっていたのが、1~2人だったり、システムを開発した人が志半ばでいなくなったりしていて、しっかりとしたドキュメントや開発のルールがなく、個人の采配に任せられている環境でした。開発のスピードはMAXですが、複数人体制でやるのには向いていません。スタートアップあるあるだと思います。

 

shutterstock_58384366
 

・バージョン管理無し

「誰ですか?僕のファイル上書きしたのは!」

 

・手動デプロイ(FTPアップロード)

「○○.php、今からアップロードします!」

 

・ドキュメント無し

「とりあえず、コード読みますね…」

 

・コミュニケーションはメールか口頭

・タスク管理はツールが分散

・コードレビュー無し etc…

 

初めのうちは人数も少なく、タスクも分離できていたのですが、そのうち扱う案件も大きくなっていくのと共に、開発人員の増加によって、現状の環境ではタスクが思うように回らない状態になりました。そもそもこんな状況では、コアメンバーが何らかの理由で作業が出来なくなった時のことを想像すると、ゾッとします。

 

健康的ではありません!!

 

 環境をヘルシーにするために実施したこと

 

そこで、開発環境を円滑かつ、複数人でもヘルシーに稼働するために、以下の4つを実施することに決めました。

 

shutterstock_173113388
 

・チャットによるコミュニケーション

・Gitによるバージョン管理とPull Request駆動の開発

・ローカル開発環境の構築

・デプロイの自動化

 

■チャットツールの導入

 

まず一番簡単そうな、チャットによるコミュニケーションから始めることにしました。チャットツールは無数にあるので、どれにするか迷いましたが、最終的にHipChatに落ち着きました。理由は、丁度チャットツールを選定しているタイミングで、HipChatの5人まで無料だった標準機能の人数制限が、「無制限」になったというのが大きいです。

 

今ではHipChatを使って、プロジェクトやサービス単位で密なコミュニケーションが取れています。メールのように流れないし、検索機能を使えば「このスレッドで、この人が確かこんなこと言ってたな」というのがすぐに見つけられるので、非常に重宝しています。また、チャットを使うことで、忙しそうな人にも気兼ねなく連絡できる、というのも魅力的の1つです。

 

 

■Gitによるバージョン管理とPull Request駆動の開発

 

次に実施したのが、Gitによるバージョン管理とPull Request駆動の開発への移行です。これまたツールで悩みましたが、最終的にBitbucketに落ち着きました。理由は、GitHubと料金で比較した際に、Bitbucketの方がコストパフォーマンスが良かったからです。

 

GitHubの料金はリポジトリ数なのに対して、Bitbucketの料金はアカウント数だったというのが、その時の決め手です。今後の会社の規模感や、展開するサービス、世の中の流れ、個人の好みなど、色々な判断要素があり、会議でもなかなか決まりませんでしたが、最終的には「状況に応じて変化すれば良い」とのことで、まずはBitbucketで始めることに着地しました(ちなみに同Atlassian製品のプロジェクト管理ツールであるJiraは導入できていません。サービスでお金をいっぱい稼いで、導入するのが直近の目標です)。

 

shutterstock_168534275
 

Gitを導入するにあたって、フローの整備やPull Requestをベースにした開発は、言葉で言うのは簡単なものの、運用に乗せるまでがとても大変でした。手探りな状況から「今の自分たちに合った」やり方を構築するのに、様々な試行錯誤をおこないました。

 

最初は少人数で試して、1週間単位で振り返えりを実施しながら徐々に定着させていきました。特に通常の「gitフロー」と呼ばれるフローに乗せた開発は、今の自分たちの開発体制にあわなかったので、自分たち用にローカライズしたフローを採用することにしました。ブランチの切り方や、コミットの粒度、レビューの方法などなど、今でもまだ細かく決まっている訳ではありませんが、

 

ブランチ切る→PullRequestに実装の概要を書く → 随時レビューしながら開発→承認を得てマージ

 

というような安定した開発フローが現在では確立されています。また、これらの仕組みのおかげで、社内だけでなく外部ベンダーともリモートでシームレスに開発することが可能となりました。最近は山梨の開発会社とリモートでやり取りを行っています。

 

■ローカル開発環境の導入

 

ローカル開発環境はVagrantで構築しました。共有のBoxファイルを使えば、新しく入った人でも1時間足らずで自分のPC内にWebとほぼ同じ開発環境を導入可能です(この辺りのお話は、後日書いてもらおうと思います) 。

 

shutterstock_210599689

■デプロイ自動化

 

最後に残ったのがデプロイ自動化でした。FTPアップロードによるデプロイは1ファイル毎に更新しなければならず、非常に神経をすり減らせる作業でした。

 

デプロイの自動化にはJenkinsを用いました。構成としては、リモートのmasterブランチをJenkinsのワーキングディレクトリに保存し、それをrsyncで本番サーバに転送するというシンプルなものなのです。

 

しかし、既にgitのフローを導入してからかなり時間が経過しており、commit漏れなどを含む本番サーバとリモートのmasterブランチに大きな差が生まれていたので、それらの精査に多くの時間と労力を削られました。(実は未だ一部しか実施できていない)ただ、ボタン1つでデプロイできるようになった時の感動は、今でも忘れられません。

 

結局これらの改善を実施したことによって、個人がガンガンギスギス開発する環境から、新しいチームメンバーも暖かく迎え入れることの出来る、ヘルシーでアットホームな開発チームになりました。

 

どちらも一長一短があるものの、一人で完結できる仕事はないので、今の環境は昔に比べると非常に良くなっていると思います(私事ですが、今はほとんどの開発をチームメンバーや外部ベンダーに引き継ぎ、新サービスの立ち上げの企画部分に注力出来ていることも事実です)。まだまだ多くの課題は残っているものの、4月に入社したときに比べると、劇的に環境が変化しています。

 

まとめ

■入社時

・コミュニケーションはメールか口頭

・バージョン管理無し

・手動デプロイ(FTPアップロード)

・ドキュメント無し

・タスク管理はツールが分散

・コードレビュー無し etc…

 

■半年とちょっと経って

 

・チャットによる円滑なコミュニケーション

・プルリクエスト駆動で外部ベンダーさんともシームレスな開発

・ローカル開発環境によるヘルシーなテスト実装

・デプロイ自動化による安定したリリース

 

今回はお話しませんでしたが、

 

・ドキュメント管理はgoogle site

・タスク管理はカンバン方式

 

を導入しています。

 

shutterstock_160000313
 

以上、何もない(むしろマイナスな)ところから、自分たちで環境を作ってきたお話でした。これらの中で一番感じることは、どのツールを使うか、どうやって進めていくか、どれが今の自分達にあっているか分からない!という葛藤から「ある程度比較検討したら、後は思い切ってやってみるしかない」という決断をしていくこと、ノウハウや知見が少ない中で、自分たちで手探りで探したり、勉強会にも積極的に参加したりして、自分たちで開拓していくこと(特にDevlove甲子園では、色んな人たちに勇気づけられました、感謝です)。

 

そして、これらを新卒や若手のエンジニアが中心となって行えたこと。チームとしての信頼関係を培っただけでなく、自分の自信にもつながっています。苦労もたくさんありましたが、その分、刺激的で実りがあったなと、今になって実感できます。今後はこれらの開発環境を武器に、もっとユーザに価値を還元していきたいです。こういう環境で働けることに感謝です。

 

リッチメディアでは、そんな我々と一緒に、何もないところから環境を構築してくれる仲間や、新しいことに一緒に挑戦してくれるアツい仲間を募集中です。