全7015文字
PR

CIパイプラインの整備により、開発プロセスの「手戻り」を防げる。コンテナを使って実行環境の再現性を高めれば、CIパイプラインの自動化はより有効に機能する。利点の多いコンテナ技術は、一般企業にも導入する価値がある。

 今回は、コンテナと様々なツールを活用して、どのようにソフトウエア開発を効率化していくのかを中心に解説します。

Question 1

 開発業務を担当しています。コンテナを使うとどのように開発が便利になるのか、具体的に教えてください。

Answer 1

 「便利になる」というよりも、「楽になる」と言った方が正確でしょう。では、「楽になる」の反対を意味する「大変なこと」とはなんでしょう。コーディングでしょうか、テストでしょうか、あるいは要件定義でしょうか。開発プロセスの中で最も「大変なこと」は「手戻り」だと思います。なぜなら、手戻りはコストに直接影響するからです。

 手戻りにはいくつかの原因が考えられます。

  1. コーディングのバグ
  2. 仕様作成時のミス
  3. 要件定義の失敗

 開発手法がウオーターフォール型であれ、アジャイル型であれ、これらの手戻りをゼロにすることはできません。しかし手戻りの影響(修正コスト)をより小さくすることはできます。それが開発を「楽にする」ことにつながります。具体的には、仕様やコーディンのバグといったアプリケーションの修正ポイントをなるべく早く発見して、素早く修正することです。早く発見できれば、その分、早くフィードバックできて、修正のためのコストを下げられます(図1)。

図1●修正、確認サイクル周期とコストの関係
図1●修正、確認サイクル周期とコストの関係
[画像のクリックで拡大表示]

 では、どうしたらより早く効率的にテストして問題を発見できるでしょうか。最善のテスト方法は、ソースコードを修正して保存するとすぐにプログラムを実行して、その結果を確認することです。なぜなら、何かエラーが発生しても、問題点はたった今修正したところにあると分かるからです。

 しかし、簡単なスクリプトでもない限り、ソフトを書いて即座に動かすことが従来はできませんでした。この課題に対して、ソースコードを修正して保存すると自動的にアプリとして動作する状態にするCI(Continuous Integration)パイプラインという考え方が生み出されました。Continuousには連続してとか、切れ目なく、途切れることなく常にという意味があります。ソースコードを保存すると自動的にコンパイル、ビルドの処理が動きます。このCIの代表的なツールがJenkinsです。

 Jenkinsによって開発者がソースコードを保存し(コミット)、共有しているリポジトリーにマージすると、自動的にビルドとテストを実行することができます。少しの修正でも手間をかけることなく、自動的にテストができるようになるのです。こうしたCIによって以下が実現できます。

  • ビルドの自動化
  • ソースコード解析の自動化
  • ユニットテストの自動化

 開発担当者はバグ対応にかける時間を短縮し、開発作業自体により多くの時間をかけることができます。その結果、チームとして開発に集中できるようになり、問題を発見するためのターンアラウンドタイムが短縮されます。そして、コンテナ技術の導入によって、CIの自動化にさらに以下が加わります。

  • コンテナイメージのビルド
  • コンテナでのテスト環境デプロイ
  • テスト環境でのテスト

 これによって、環境問題によるテストの失敗を減らし、CIパイプラインに対する信頼性を保つことができるようになります。

 自動的にソースコードをビルドして、テストする環境を作ってくれるCIパイプラインとそのアプリをパッケージングして独立して保管できるコンテナの2つが合わさって、CIパイプラインの自動化をより有効に機能させられるようになるのです(図2)。

図2●コンテナがCIパイプラインにもたらす効果
図2●コンテナがCIパイプラインにもたらす効果
[画像のクリックで拡大表示]

運用負荷も軽減

 開発作業とは別に、もう1つ「楽になる」ポイントがあります。それは、運用における「大変なこと」を解消してくれる点です。

 ここで以下の書籍を紹介します。 「The DevOps 逆転だ!」(日経BP)

 ある自動車部品販売会社が陥った危機(ITシステムのプロジェク管理の失敗)を開発(Development)と運用(Operation)を軸に立て直していくという小説仕立てで書かれた書籍です。

 DevOpsというと「B2CのWebサービス企業だけができることなんじゃないの」と思われる方も多いと思いますが、この書籍に出ている会社のような製造業を含めた一般的な企業の開発にも適用することは十分に可能です。書籍の中で主人公が遭遇するトラブルがデプロイの問題です。デプロイが複雑で環境に依存していて、ノウハウが属人的になっており作業ができるメンバーが限られた状況で、重要な基幹システムのデプロイで失敗してしまいます。そして社内システムが停止してしまい、業務が立ち往生してしまうストーリーが描かれています。

 それらをDevOpsの活動によって、どのように改善していくかの詳細は書籍を読んでいただくとして、大切なのは企業の基幹システムにおいて、デプロイは大きなボトルネックになるということです。上記の書籍では、DevOpsへの取り組みによってデプロイの負荷を軽減する対策を取っていきます。