クラウドコンピューティングでソフトウェア開発の主導権は再び開発者へ
初期のコンピュータシステムにおいて、ソフトウェアの開発の主導権は、ソフトウェアエンジニアであった。そのころソフトウェア開発エンジニアという職種が明確だったかどうかはわからないが、少なくともソフトウェアを作っていた人が主導権を持っていた。ハードウェアのバリエーションもそれほど多くない時代では、ソフトウェアを作って自分の環境で動作をきちんと確認すれば、それは多くの場合、利用者の環境でも問題なく動作した。
パーソナルコンピュータが普及することで、利用者の環境のバリエーションが大きく広がってきたが、それでも CPU やメモリーが貧弱だと動作が遅いということで、理解できるものであった。古い馬力の弱い車を買ったら、スピードが遅いということで文句は出ないということと同様かもしれない。
しかし、クライアント・サーバー型のシステムが普及してきたころから、開発者の環境では問題ないソフトウェアが、利用者の環境で問題を起こすということが多くなってきた。さまざまなシステムが複雑に絡み合い、環境のバリエーションが爆発的に増えたことで、利用者の環境と近い環境を開発者のもとで持つことが不可能になってきたのである。開発者は、様々な状況を想定してソフトウェアを開発することが求められるようになってきたが、それでも個々の利用者の環境をすべて想定することは不可能であった。そのため、ソフトウェア製品を開発している会社は、そのための専門部署を作ってできるだけ多くの環境を準備して、リリース前に大規模なテストを実施しはじめた。しかし、そのようなテストを通しても、実際の利用者の環境で起きる問題をカバーすることは不可能であるため、多くのソフトウェア導入プロジェクトでは、本番で使われる環境と同様の環境を構築して、その上で大規模なインテグレーションテストを行うことが必要になったのである。そして、ソフトウェア開発者はインテグレーションテストで出た問題のうち、ソフトウェアそのものの問題だけを解決する人になってしまったのである。
クラウドコンピューティングがこの流れを変えることになる。最終的な導入には、その道の専門家が必要になるのは変わらないであろうが、すくなくとも開発者は実際の利用者の環境と同じ環境を短期間で構築して低コストで利用することが可能になる。コンピュータ環境が、利用しただけ課金されるというしくみによって、ハードウェアのコストが削減されることはもちろんであるが、全く同じ環境を簡単に構築できることのメリットは計り知れない。実際の作業では、ハードウェアやテスト実施のコストに加えて、環境構築に非常に大きなコストがかかっていた。クラウドコンピューティングでは、この構築コストが大幅に削減できるのである。プライベートクラウドでは、どのくらい標準化されるかはわからないが、パブリッククラウド上のソフトウェアは、そこで動いているものがすべてであり、利用者環境である。問題が起きても、環境依存の問題の比率は非常に小さくなり(ネットワークスピードや、ブラウザが違うなどの問題は残されるため100% ではないが)、開発者の環境でも再現可能となるので、開発者が推測や伝聞ではなく問題を正確に確認し、迅速に問題に対処することが可能になるのである。さらに、問題が解決すればそれを即座に同じ環境でテストして、本番の環境に適用することができる。
開発者が、ソフトウェア自体の機能や品質向上にかける時間を増やすことができて、プロダクトとしての勝負ができるようになれば、様々なプロダクトやサービスが提供されるようになり、わざわざ要件を定義して作らなくても、既存のサービスの中から選んで組み合わせれば、事足りるという方向に向かっていくように思う。