20-すばやくデプロイ、こまめにデプロイ

プログラマが知るべき97のこと」の20個目のエピソードは、デプロイなどの開発環境に関する話題です。インストールやデプロイなどに関わる作業、メトリクス測定や静的なコードチェック等もそうですが、開発の開始時期には後回しにされがちな作業です。最悪なケースでは、複数の会社が関わるプロジェクトで、どこの会社もデプロイやインストールに関する作業を担当しなかった場合がありました。それは上流の会社が作業として認識していなかったのが直接の原因ですが、後回しにされた為に起こったとも言えます。ですが、それらのインストールやデプロイに関わる作業は早い段階で行っておくことが望ましいです。
このエピソードでは、その理由として「インストール/デプロイ作業こそが、顧客がはじめて製品に触れる機会」であるため、インストール等に失敗するとそれだけで全ての信頼が失われる、と書かれています。国内のプロジェクトではインストール等の作業は開発側が行うパターンが多いかもしれません。しかし、インストールに手間がかかりデモやリリースが予定通りに始められれない、リリース手順を間違えたためバグを発生させた、といった話はどこかで聞いたことがあるでしょう。
デプロイやインストールはプロジェクトの早い段階から検討し、自動化すべきです。開発環境である程度動くようになったならば、デプロイやインストールの手順を整理します。早い段階から検討することで、少しづつ進められるでしょう。複雑になってきたならば手順を改善するなどしていきますが、これはコードのリファクタリングと同じであると書かれています。また、自動化も重要です。幾らインストールやデプロイの手順を整備したとしても、人間が手作業で行ってしまえば必ずミスが発生します。ミスを防止するために二重チェックなどを行っているケースもありますが、そんなコストをかけるくらいならば自動化すべきです。コマンド1つでインストールやデプロイが完了するのがベストですが、コマンド2つでも構いません。複雑な手順を単純化するだけで、ミスの確率は減るでしょう。そして自動化は早い段階でやればやるほど、繰り返して実行されて効果があります。最後に1回だけインストールするためにインストール用のスクリプトを組むのはあまりにも勿体ないと思います。
JavaではMavenやAntといったビルドツールを有効に使うことでデプロイ作業のほとんどを自動化できます。サーバの起動や停止が必要であれば簡単なスクリプトを書けば良いでしょう。全てを自動化するべきではありませんが、可能な限りは自動化し、すばやく、こまめにデプロイできる体制を作りましょう。

プログラマが知るべき97のこと

プログラマが知るべき97のこと