PaaSとは何か・Herokuとは何か
PaaSを一言で表現すると「アプリケーションを実行するためのプラットフォーム」と言えます。 プラットフォームと一言でいっても範囲が広すぎてやや漠然とした印象がありますが、「アプリケーションを実行するための」プラットフォームを考えた場合、そこには次のものが含まれます。
- ハードウェア
- ネットワーク
- 仮想化環境
- OS
- データベース
- アプリケーションフレームワーク
これまではインターネット上でアプリケーションを公開しようと思った場合、次のような手順を踏まないと、そもそもアプリケーションを作り始めることすらできませんでした。
- サーバPCやルータなどのハードウェアを購入
- インターネットに接続し、かつプライベート空間を分離するためのファイアウォールを含むネットワークを構築
- 必要であれば、サーバの仮想化環境を整備
- LinuxやWindowsサーバなどのOSをインストール
- Oracle、MySQL、PostgreSQLなどのデータベースをセットアップ
- Java、Ruby、PHPなどのアプリケーション実行環境をセットアップ
ここまでやって、ようやくアプリケーションを公開するための環境が整ったことになります。 実際には、アプリケーションサーバやデータベースの冗長化やバックアップも必要になるので、環境構築にかかる初期費用はかなり大きなものになります。
企業であれば、こうした環境の大半はすでに構築済みでそれが再利用可能かもしれません。 しかし、新たなアプリケーションを作成するのであれば、最低限アプリケーション用のサーバとDBサーバは追加する必要があり、機器がふえて構成が複雑化すればそれだけ環境を維持管理するための保守運用費用がかさむことになります。
しかも、ここまでの作業に肝心のアプリケーションを作成するという作業は全く含まれていないのです。
PaaSは、このようなプラットフォーム構築にかかる種々の作業を代行してくれるサービスです。 PaaSを利用することで、スタートアップ企業は最初の環境構築をスキップすることができ、既存企業は保守運用にかかる費用を大幅に削減できます。
また、費用以上に重要なポイントは、これまで保守運用作業に割り当てられていた技術者がアプリケーション開発に専念できるようになる点です。 限られた優秀な技術者を全員アプリケーション開発に投入できれば、その生産性は大きく高まるはずです。
PaaSとIaaS、SaaSの違い
ちなみに、PaaS以外にもクラウドの形態には、IaaS(Infrastructure as a Service)、SaaS(Software as a Service)があります。 次の図は、オンプレミス(手持ちシステム)、IaaS、PaaS、SaaSの各形態で自社管理しなければならないレイヤを比較できるように、色分けして表したものです。 青くなっているレイヤが自社管理するレイヤ、グリーンのレイヤはサービス事業者に管理を任せるレイヤです。
SaaSでは、ハードウェアからアプリケーションまで、すべての管理をサービス事業者に任せてしまうことができます。 IaaSでは、事業者の用意した物理的なハードウェアの上で、OSをセットアップするところから自社の管理範囲になります。 PaaSはその中間で、ランタイム(アプリケーションの実行環境。Java VMなど)まではサービス業者が管理してくれるので、データとアプリケーションの管理だけ自社で行うことになります。
基本的には自社管理する範囲が多ければ構成の自由度が上がり、サービスを利用すればコストが下がります(サービスの利用料を支払ったとしても、ほとんどの場合はそれを賄うための人件費の方が高いからです)。
ただし、すべてにおいて自社管理の方が自由度が高いとは言い切れません。 例えば、自社でアプリケーション用の物理サーバを購入した場合、それはそうそう買い替えることはできません。 そのため、購入前にサイジング(システム規模の見積もり)を十分に行い、必要なハードウェアスペックを検討する必要があります。 一方、クラウドサービスの場合はボタン1つで簡単に廃棄&新規導入が行えます。 そのため、まずはミニマムスペックでアプリケーションの開発・運用を開始し、必要に応じてスペックを増強していくことが簡単に行えます。
IaaSとSaaSの中間に位置するPaaSは、先ほどの図でも示したとおりデータをアプリケーションだけを開発・運用すればよく、アプリケーション構築に特化したサービス形態といえます。 本連載で使用する「Heroku」はPaaSを提供する事業者(および提供サービスであるPaaS)の1つです。
Herokuは自社の目的として次の2点を掲げています。
- 技術者をビジネスの本質的な価値提供(アプリケーション開発)に集中させること
- 開発者の生産性を最大化すること
Herokuではかなりの頻度で機能追加が行われていますが、それらはすべてこの目的を達成するためのものです。