対象読者
- JavaScriptの基本をある程度理解している方
- テストコードをこれから書こうと考えている方
継続的インテグレーションで「コードを健康的な状態に保つ」
皆さんはどのように開発したコードのテストとビルドを行っていますか? もう15年ほど前になりますが、筆者が行っていたJavaプロジェクトの方法を紹介しましょう。
- テキストエディタでJavaのコードを修正
- 共有ディレクトリにコピー
- システムすべてのコードをコンパイル
- システムすべてのコードをjarファイル化
- 共有開発環境を手動シャットダウン
- 共有開発環境に手動ビルド
- 共有開発環境を手動起動
- 手動で画面から動作テスト
- エラーが起きた場合は1.に戻る
箇条書きにするとやることが多いですね。もしかすると古いシステムを開発されている方々は、これと近い方法でテストをしている場合もあるのではないでしょうか。何をやっているかはわかりやすいのですが、少しでもエラーがあるごとにこれらを手作業で行うことを考えると、相当な時間を使うことになるでしょう。また、この方法ですと、当然ながらシステム全体にエラーが存在しない状態を保証することはできません。
継続的インテグレーションとは
このような手順を出来るだけ少なくしたいと考える開発者の方は多いのではないでしょうか。そこで継続的インテグレーション(CI)の登場です。まずはビルドのプロセスを整理してみましょう。
おおまかに分けるとこのようなプロセスに分かれます。開発をする際はこれを繰り返しながら行っているはずです。これを行うことができる仕組みと、常に行っているという状態を継続的インテグレーションと言います。「継続的インテグレーション」という言葉は、「インテグレーション(結合、統合)」を「継続的に実行する」という意味です。気がついた時や動作確認をしたい時のみにビルドのプロセスを実行するのではなく、常に実行し続け、いつでもエラーの無い状態を保っておきます。
また、Jenkins等の継続的インテグレーションのツールを使用すると、ビルドプロセスを自動化することができます。コーディング以外の部分を自動化することで、コーディングし、ソースコード管理システムに登録を行うだけで、ビルドが回ります。では、そのような環境を作ることでどんな利点があるかを整理してみましょう。
大きな利点である「フィードバックプロセス」
コーディングが終わり、gitなどのバージョン管理システムに登録(push)を行うと、自動的にコンパイル、テストの実行が行われ、その結果を終わり次第知ることができます。エラーにならなければ次の開発を行い、エラーになればすぐに直すことができます。常にコードの状態が見える化されるということになります。見える化されることで、すぐに直すことができますし、エラーが出ていなければ安心して別のコーディングを行うことができます。
これはまさにフィードバックプロセスが回っている状態です。見える化し、その状態や結果によって修正を行う。このフィードバックプロセスが回り出した時に品質を常に高い状態を維持することができます。エラーが出ると放置しがちですが、放置せずに常にグリーンの状態を保つことが重要です。グリーンの状態を保つということは「常にコードを健康的な状態に保つ」ということです。コードの健康状態が良ければ開発者の健康状態も良くなります。実はやろうとすると習慣化するのはなかなか難しいのですが、チームでルールを決めるなどして補い合い、コードの健康状態を保つようにしていきましょう。
JavaScriptでの継続的インテグレーション
継続的インテグレーションはサーバサイドアプリケーションの開発だけでなく、JavaScriptでも大切です。ただ、JavaScriptの場合はブラウザで動作させる必要があるだけでなく、様々なブラウザとバージョンに対応する必要もあり、サーバサイドアプリケーションとは少し勝手が違います。そこで、自動テストを記述するだけでなく、ツールを使って必要なブラウザでのテストを行うなどの工夫が必要になります。
では、具体的にJavaScriptで継続的インテグレーションを動かしてみましょう。今回は、オープンソースの継続的インテグレーションツールであるJenkinsと、複数ブラウザでテストが実行できるJavaScriptのテストツールであるtestemを使って方法を説明します。