- 講演資料:CI/CDを使い倒して数段上のソフトウェア開発をしよう!
- CircleCI Japan金洋国氏のCodeZine連載:「エンジニアのためのCI/CD再入門」
CIを導入するために知っておきたいこと
近年、ソフトウェア開発において「テストコードを書くこと」が重要だと提唱されることが多くなった。
人間はコンピューターとは違い、同じ手順を100%正確に行うことはできない。何度も同じことをしていると、必ず見落としやミスが発生する。それを避けるために、テストコードを書いてテストを実施することが重要なのだ。そして、テストを自動的に実行し続けるために有効な仕組みがCIである。
では、なぜテストコードを書くだけではなく、CIを行う必要があるのか。その答えは、テストコードがアプリケーションの品質を保証し"続けられる"状態を保つためである。
「テストはあるけれど実行し忘れた。過去にテストを書いたけれど、いまは動かない状態になっている。テスト結果が環境依存で、ある環境では動くけれど別の環境では動かない。こういった問題を経験したことのある方は多いでしょう。CIを導入することで、これらの問題を防ぐことが可能になります。
CIはテストを常に自動で実行することで、開発者に環境やテストコードのメンテナンスを強制します。そうすることで、テストの信頼性を高められるのです」
金氏は次に、CIを導入するにあたって乗り越えるべき問題とその解決策について解説した。CIの導入を妨げる主な要因として「現在、テストコードがまったく書かれていない」という問題がある。これはCIを導入する上で最も厄介な問題である。この状態からCIを始めるには、以下の5ステップに沿って導入を進めるといいそうだ。
- 好きなCIツールを選ぶ。おすすめは、メンテナンスの負担が軽いCircleCIのようなクラウド型のCIツール
- ソースコードの構文チェックやカバレッジ計測、循環的複雑度のチェック、ドキュメントの自動生成など、テスト以外のさまざまなタスクをCI上で自動化する
- CIの実行結果を可視化する
- バージョン管理システムの機能を用いて、マージブロックを有効化する
- テストを追加していく
「何もない状態からテストを追加する場合、すでに動いているアプリケーションのユニットテストを書くのはメリットが少ないので、後回しで大丈夫です。代わりに、最も重要なビジネスロジックを検証するテストコードから追加していきましょう。
このフェーズで注意すべきは、無理は禁物だということです。テストしにくい処理に対して無理にテストコードを書こうとすると、燃え尽きてしまい継続し続けることが困難になります」