ソフトウェア開発の世界では、設計者やプログラマなど非常に多くのエンジニアが関わり、非常に多くの時間を費やします。例えば、金融機関の基幹系システムなどは、10MStepを優に超える規模のソフトウェアを生産します。仮にこの内の半分でもソースコードを自動生成できれば……そう考えるエンジニアも多いはずです。

ただし、実はコーディングにかかる時間はソフトウェア開発全体の1/4~1/5です。効率化を図るのであれば、コーディング作業のみではなく、テストや基盤を含めソフトウェア開発全体に渡って探る必要があります。

ソフトウェア開発自動化とは、読んで字のごとくソフトウェア開発に関わる作業を自動化し、高生産性を実現するためのものです。設計書を入力にソースコードを生成するなどは一例にすぎず、他にも自動化できるシーンがあります。

本連載ではソフトウェア開発自動化について4つの領域を中心に解説していきます。

4つの自動化領域

No 対象領域 内容
1 コーディングの自動化 複雑・多様なロジックの自動生成
2 テストの自動化 試験項目の自動生成と自動実行
3 ビルド・リリースの自動化 ビルドやテスト環境へのリリースの自動化
4 システム基盤構築の自動化 システム基盤の自動インストール・設定

データから見る生産性の重要性

独立行政法人情報処理推進機構(IPA)から提供されている「ソフトウェア開発データ白書」をみると、国内企業 31 社から収集した、4,067件のプロジェクトデータが登録されています。

基本設計からシステムテストまでの開発5工程の生産性の中央値が、新規開発で0.87KStep/人月 、改良開発で0.53KStep/人月となっており、10MStepのソフトウェアを生産するのに新規開発で11,494人月、改良開発で18,863人月かかる計算になります。要件定義工程の工数も加味するとさらに多くの工数がかかります。

ソフトウェア開発自動化により10%生産性を向上できたとすれば、大きな価値を産むことがわかるでしょう。

ソフトウェア開発の「抽象化」と「汎用化」の歴史

アジャイル、クラウド、DevOps、マイクロサービス、コンテナオーケストレーション――。

「今度こそ決定打では?」と思われる技術が続々と出てきています。

製造業と比較すると、ソフトウェア開発の歴史は浅く、革新的な生産性を誇る技術として期待されるものが次々と現れては消え、技術の進化の速度も爆発的とは言い難いものがあります。

ソフトウェア開発自動化の歴史を振り返ってみると、CASEツールでお絵描きによる開発、4GLが目指した言語のさらなる高級言語化、UMLやMDAといったモデル記述などさまざまなものが存在しました。

いずれもソフトウェア開発の「抽象度」を高め、特定領域の作業を高速化することを目指す、いわゆるDSL(ドメイン記述言語)とも言えます。ちなみに、DSLの一例としては、RDB向けのクエリ言語であるSQLや、特定業務の効率化を狙ったパッケージ製品があります。

また、製造業の長所を模した、部品の組み合わせにより開発を行うソフトウェアファクトリについては、部品の「汎用性」の課題などがあり、必ずしも成功したとは言い切れません。

つまり、過度に汎用的な部品も作っても、大した生産性を確保できず、特定領域に特化し抽象度を上げすぎても適用領域が極端に狭まってしまうというトレードオフの関係にあります。

システム開発のコード化の潮流

旧来、コーディングと言えばアプリケーションのソースコードを書くことを指していました。システムを小さな単位で構築し、高頻度でシステムのリリースサイクルを回すマイクロサービス時代において、コーディング範囲がシステムのライフサイクル全体に広がってきています。

テスト領域を見ると、JUnitコードのコーディングによる単体テストはもちろん、Seleniumコードによる機能テストの自動化にもコーディング領域は広がっており、RPAの登場からもPC操作の自動化が普及してきています。

ビルド・デプロイメント領域は、これまで、ライブラリ管理担当者が手動でソースコードをビルド・デプロイしてきた領域においても、ビルド自動化が当たり前になってきており、CI/CD(継続的インテグレーション/継続的デリバリ)として地位を確立しています。

基盤領域については、これまではオンプレミスが中心でしたが、クラウドが当たり前の時代となっています。ChefやPuppetなどのサーバ構築自動化に加えて、DockerやKubernetesといったコンテナ技術の登場により、基盤領域にまで自動化が広がってきており、Infrastructure as Code(インフラのコーディング)として普及してきています。

マイクロサービス時代のコーディング範囲と自動化対象

次のトレンドは?

Low Code Platform(ローコード開発、以降LCP)とはソフトウェア開発におけるコーディング量を極限まで減らし、高生産性を実現するためのプラットホームです。クラウドやDevOps環境を前提とし、開発者はアプリケーション開発に注力できます。

LCPの領域にてGartnerやForresterからLeaderに位置付けられているポルトガル発祥のOutSystemsが、2018年6月5日KKR社とゴールドマン・サックス社から約400億円の資金調達 、ユニコーン化しました。また、OutSystemsと並びLeaderに位置付けられるMendixを2018年8月6日Siemensが約830億円にて買収 しました。巨額の資金が動いており、ビジネス面からも注目度が高いことがわかります。

クラウドベンダーの動きを見ても、2018年6月14日にGoogleがAppMakerの一般提供を発表 し、Microsoft社もPowerAppsを提供しており、注目度が高まっています。

*  *  *

今回、歴史や種類、世の中の生産性データなどソフトウェア開発自動化の概要と全体像を説明しました。システム開発のコーディング範囲の広がりに応じて、ソフトウェア開発自動化の重要性が増してきています。

次回以降はコーディングの自動化、テスト自動化、ビルド・リリース自動化、システム基盤構築自動化それぞれについて説明していきます。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ 課長

2011年まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。2児のパパ。