DXを実現するためのポイントとして、【1】データ活用、【2】スピード・アジリティ、【3】全体最適の3点について解説しました。今回は、DXを実現する上での重要な技術である「自動化」の役割について解説します。
自動化とは
自動化とは、ITシステムにおいて、従来であればエンジニアが手作業で行っていた作業を、ツールを利用して自動的に行う手法を指します。現在では「インフラ構築や運用の自動化」や「開発工程の自動化」など、様々な場面で自動化が行われるようになりつつあります。
なぜDXにおいて自動化が重要なのか
DX実現における3つのポイントを挙げましたが、自動化が直接関係するのは②スピード・アジリティでしょう。システムを素早く開発し、ビジネスに繋げていく。何か改善すべきフィードバックがあった時にも素早く改修を行う必要があります。従来のウォーターフォール型システム開発では、システムの検討から開発、そして実際に利用可能となる本番リリースまでのスケジュールが半年や1年となることが当たり前だったので、多くの作業が手作業でもスピード感としては問題ありませんでした。しかし、アジャイル開発のように1週間から2週間間隔で開発工程を繰り返す手法では、多くの作業が手作業では間に合わないので自動的かつ高速に行えるようにする必要があります。
手作業の課題は多い
手動で行う作業は、多くの場合手順書に従って作業を行います。人間が行う作業なので時間がかかるため生産性は低いと言わざるを得ませんし、繰り返し行うことが困難です。また、作業に間違いがあるとそれが致命的なエラーを引き起こしたり、問題の原因を見つけ出すのが難しくなります。作業もそれほど簡単ではないので、一定のスキルを持つエンジニアでないと作業が行えないなど、手作業には多くの課題があります。
自動化による生産性向上の恩恵
一方、自動化のメリットは手作業の課題を解決する点にあります。自動化された作業はコンピューターが行うので高速ですし、時間がかかる場合でも作業にかかりきりになる必要がありません。また、作業内容を決めて自動化するのには一定のスキルが必要ですが、実行は誰でも行えますし、必要な時に繰り返し行えます。結果的に、スキルのあるエンジニアの作業拘束時間を短くできるので、空いた時間をスキルが要求される作業に割り当てることができます。
価値を創造する作業を増やす
現在のエンジニアの作業は、既にあるシステムのメンテナンスに多くの時間を取られています。既にあるシステムを動かすことは重要ですが、ビジネスの価値を新たに生み出すことはありません。DXにおいて要求されるのは新しい価値の創造ですので、貴重なエンジニアの時間をDXに振り向けるためには、生産性の低い作業を自動化し、限られた時間を有効活用できるようにする必要があります。
何を自動化するのか
それでは、どのような作業を自動化できるのでしょうか。いくつか代表的な自動化の例を挙げてみます。
インフラの自動化(IaC)
まず、システムが動作する基盤であるインフラの自動化が挙げられます。仮想化技術やクラウドによってかなり作業が省力化できましたが、さらに各種ツールやAPIを活用する事で一連の作業を自動化できます。インフラ構築をプログラムのコードで行うことから「Infrastructure as Code」(IaC)とも呼ばれます。
従来のインフラ構築は手作業のため、一度構築した環境を大事に使い続けることが前提でした。アップデートの適用も慎重に行う必要があるなど制約が多く、作業効率の低さが課題でした。IaCを実現することで、開発、テスト、本番といった目的別の環境を同じように作れるので環境の差異による動作の違いなどを無くせますし、アップデートのテストも簡単に行えます。場合によってはアップデートせず、新しいバージョンのソフトウェアの構成で1から作り直すことも容易です。
CI(Continuous Integration・継続的インテグレーション)
CI(Continuous Integration・継続的インテグレーション)は、開発したソースコードから実行可能なバイナリを生成する一連のビルド作業を自動化する手法です。現在ではソースコードをGitで管理することが多いですが、Gitのリポジトリに開発されたソースコードがコミット(修正を確定させる作業)されたことを引き金にしてCIを実行するようにします。開発者は複雑なビルド作業を考える必要がなくなる他、複数人のチームで開発している場合にも全体的な整合性が崩れてビルドできなくなるような問題を素早く検知できるようになるなど、開発プロセスを円滑に廻す上でCIは重要な仕組みといえます。現在ではCIの中に品質を確保するためのテストや、セキュリティのチェックなどを自動的に行うようにすることも増えてきています。
CD(Continuous Delivery・継続的デリバリー)
CD (Continuous Delivery・継続的デリバリー)は、CIと組み合わせて開発したアプリケーションを実行可能な状態にすることを自動化する手法です。たとえばWebアプリケーションの場合、ビルド後にWebアプリケーションサーバーに組み込んで、Webブラウザからアクセス、実行できるようにする必要があります。また最近では、実行環境としてコンテナを活用するケースも増えており、コンテナのイメージなどを用意する必要もあります。 CIとCDは密接に関係していることもあり、合わせてCI/CDと呼ばれます。
DX実現のためのDevOps
IaCやCI/CDのような自動化の手法を実現することで、ソースコードを記述する「開発」から、実際に本番環境にデプロイして動かす「運用」までが連続的に繋がります。このような繋がりを「パイプライン」と呼ぶことがあります。また、開発と運用が連携する取り組みを「DevOps」と呼びます。
従来の手法では安定的な運用のためにはできるだけシステムに変更を加えないと考えますが、自動化のメリットを活かしてシステムへの変更を積極的に行えるのがDevOpsの取り組み方といえます。DevOpsはアジャイル開発との相性もよく、DX実現のためにDevOpsに取り組むことも多いでしょう。DevOpsにはあまり厳密な定義がありませんが、自動化など作業を効率よくできる仕組みを整え、ビジネスの要請に対してシステムが素早く対応できる状態を作るための手法として捉えておくとよいでしょう。
CI/CD、DevOps実現のためのOSSの活用
CI/CDやDevOpsを実現するための様々なツールは、オープンソースソフトウェア(OSS)として提供されているものが沢山あります。たとえば、自動化ツールとして人気のある「Ansible」はOSSとして開発、提供されています。開発しているのは、Linuxディストリビューションで有名なRed Hat社です。
オープンソースというと、以前は誰が開発しているのか分からないので業務システムで使うのは不安だ、ということがありましたが、現在ではLinuxを始めとしてOSSは無くてはならない存在になりつつあります。多くの企業が自社で開発したソフトウェアをOSSとして公開することも当たり前になってきています。このような企業OSSはサポートなどのサービスを有償で提供していることもあり、事前の動作検証や小規模な利用は無償で、本格的な活用を行う場合には有償サポートで安心して使う、というような方法が定着しつつあります。また、クラウドのSaaS形式で提供される場合などもあるので、システムの規模や利用形態などを考慮して、適切な形で活用することが今後は重要となるでしょう。