最近の急速な環境変化にソフトウエアが対応するためには、開発や運用の現場にもスピードを高める技術の導入が必要になります。各種の自動化技術を取り入れることで、いままで手作業でしていたことが瞬時に実現できるようになります。

 こうした中、「ソフトウエアをリリースするまでの作業のすべて」の自動化が始まっています。個々の要素を自動化するだけではなく、ビジネス価値の源泉であるソフトウエアをユーザーに届けるまでの全体フローにかかる時間を縮めようとしています。こうした取り組みにより、ユーザーに最新のサービスを提供することを可能にしています。

 このため、常に最新のソフトウエアを利用できるようにする技術である「継続的デリバリー」と、それを実現する体制である「DevOps」を取り入れる企業が増えています。

ソフトウエアの「開発」から「デリバリー」へ

 本連載を読んでいるのはソフトウエア開発に携わっている方、あるいはソフトウエア開発に関心がある方が多いと思います。筆者も開発プロジェクトに参画したり、プロジェクトマネージャにインタビューしたりするなかで、開発現場の難しさを常に痛感しています。

 ソフトウエアの開発(Development)とは、顧客の要求をソフトウエア製品に落とし込む一連のプロセスを指します。具体的には、要求項目の抽出や設計、コーディング、テストなどによってソフトウエアを開発するだけでなく、開発したソフトウエアを顧客に受け入れて使ってもらうところまでが含まれます。

 要件全体を一気に決めて作業を進める開発プロセスはウォーターフォール型と呼ばれていました。開発サイクルを繰り返して細かな要件を盛り込む、アジャイル開発に代表される反復型のプロセスも広がっています。ほとんどの開発者は上記の工程について役割に応じた技術を学び、実践しては悩みに直面してきたと思われます。ただし、これまで重視されてきたソフトウエアの「開発」技術については今や多くの解決案が提案されています。

 その一方でソフトウエアをユーザーに提供するには、「開発」だけでは足りない作業があります。ソフトウエアを利用者に届ける(デリバリー)ため、ソースコードの状態から「ビルド」(プログラムをコンパイルするなど利用できる状態に整えること)し、環境へ「インストール」や「デプロイ」(アプリケーションサーバーなどにソフトウエアをアップロードして配備すること)などが必要になります。こうした作業は、アプリを開発したり修正したりするたびに発生します。

 さらに管理・統制のため、バージョン管理やリリース管理などが必要になります。これらは従来、顧客や最上位のプロジェクトマネージャにとっては「細かすぎる」作業のため、プロジェクトに必須な大項目としては挙がらない場合が少なくありませんでした。大規模な開発でない限り、デリバリーのために専用の体制が組まれることはほとんどなかったのです。

 しかし開発現場でデリバリーは常に必須な作業であり、何がしかの手段により実現されてきました。プロジェクト管理チームやアーキテクト、共通チームなどが必要に迫られて作業していることが多いようです。こうした構造のため、常に効率的かつ効果的な手法で進められているとは限りません。