ハードウェアとソフトウェア
従来のシステムはソフトウェアとハードウェアの両輪によって支えられ、私たちにさまざまな恩恵をもたらしてきました。ここで同じ「システム」という領域に分類されるソフトウェアとハードウェアですが、それぞれがどのようにシステムを構築し維持していくかといったアプローチは大きく異なっていました。
ソフトウェア開発にはトップエスイーが主眼とするソフトウェア工学のアプローチが取られました。ここではソフトウェア開発のためにさまざまな開発方法やプロセスの管理手法が考案され、それが実践され、効果の検証が繰り返し行われて発展してきました。一方で、ハードウェアが属するいわゆるITインフラの分野はソフトウェア工学のアプローチではなく、第二次産業的な装置産業を色濃く受け継ぎ発展してきた経緯があります。すなわち、サーバーやネットワーク機器といった装置や設備があり、それをいかに人が効率的かつ正確にコントロールするかといった考え方です。
ハードウェアとソフトウェアは同じシステムに属しつつも、その対象も設計、構築、テストの手法も全く異なるため、長らく「ハードとソフトは別物」という考え方が支配的でした。しかし、新しい技術や新しいプラットフォームが登場したことで、この状態が大きく変わりつつあります。その代表例として、プログラムのコードとしてITインフラを管理する「Infrastructure as Code」(以下IaC)があります。IaCの登場で、ITインフラに関わるさまざまな作業が「人による機械の操作」ではなく「プログラムのコードを書く」という行為に変わっていきます。
自動化を超えた先に
IaCではITインフラに関わる操作を全てプログラムやソフトウェアのDSL(ドメイン特化言語:特定の世界でのニーズに応じた言語)として定義して管理します。これは一見すると、以前からあったオペレーションの自動化と同じに見えるかもしれません。スクリプトやマクロ、時には専用のツールを使って手順書の一部を自動化していくことで工数の削減や品質の向上、作業スピードのアップを狙うアプローチです。もちろんIaCのアプローチは、こういった実作業の効率化も含まれていますが、それはIaCの一部でしかありません。
ではIaCの本質とは何でしょうか。それは「ソフトウェアで培われ洗練されたノウハウをITインフラへ適用する」ことです。これは言い換えるならば、装置産業的なアプローチであったITインフラをソフトウェア工学のアプローチへと変えていくための考え方になります。
それではITインフラがソフトウェア工学的なアプローチに変わっていくことで、どのようなメリットがあるのでしょうか。システム開発では、「不確実性」に対処することを可能にするために、アジャイルやDevOps等に代表される手法が開発されてきました。これらの手法をITインフラの管理にも応用します。
以前から行われてきた開発手法であるウォーターフォールでは、計画を重視し、入念に検討を行い計画段階で不確実性を排除していくアプローチでした。これは考慮できる不確実性が小さければうまく機能しました。しかしシステムの適用範囲が広がった現代においては、今まで経験したことがない未知の領域でのソフトウェア開発も増えています。さらにシステムの適用範囲の広がりは、取り巻く環境や情勢の変化にシステムが影響を受けやすくなることを意味します。つまり、システムに対して影響を及ぼす不確実性が従来よりも大きくなっていると言えます。
これらの不確実性に対処し、システムをより良いものであるように構築、運用していくための手法がIaCです。これはオペレーションの自動化とは一線を画す部分なので注意が必要です。
では、アジャイルやDevOpsの考え方をITインフラへ持ち込んだことで実現されたIaCとは具体的にどのようなものであるか見ていきましょう。