Mojoliciousスタートアップ - Perlによる新規Web開発

  1. Mojoliciousスタートアップ
  2. here

さくらVPSで「Perl + Mojolicious」Webアプリ開発 第2回 VPSって何?

 VPSって何だろう。開発にある程度詳しい人じゃなければ、初めて聞くという人も多いんじゃないでしょうか。

  VPSというのは、バーチャルプライベートサーバー(Virtual Private Server)の略です。これだとイメージをつかむのが難しいですね。

 ユーザーの観点から誤解を恐れずにずばっといってしまうと、VPSは格安で利用できる専用サーバーに見えます。

 専用サーバーというのは、借りるのに価格が高い。1台まるまるマシンを占有してしまう。一方VPSというのは、専用サーバーを仮想的に作っている。つまり、1台のマシンの上に、仮想的に複数の専用サーバーが構築されているイメージを持つとイメージしやすいと思う。

<h3> 専用サーバー</h3>
+-------------+
|専用サーバー |  マシン1台
+-------------+

<h3> VPSの仕組み</h3>
+------------------+-------------------+-----------------+ 
|専用サーバー(VPS)  |専用サーバー(VPS)  |専用サーバー(VPS) | 
+------------------+-------------------+-----------------+ 
1台のマシンの上に複数の専用サーバー
があるように見える

 ユーザーの観点から見れば、専用サーバーを借りているものだと思ってぜんぜんかまわない。root権限もあるし、何でもできる。完全にOSのすべての機能を自由に利用できるし、どんなアプリケーションもインストールできる。

共用サーバーを利用するのとVPSは何が違うの?

 一昔前までは、PerlはCGIを記述する言語という認識が強くもたれていました。CGIスクリプトを作成して、FTPを使って、共用サーバーにアップロードして、Webアプリケーションを配置するというやり方が一般的でした。

 でも、この方法は現在では、僕はまったくおすすめしません。PerlのCGI.pmを使って作成したスクリプトは、CGIスクリプトは、制限が多く、パフォーマンスはでないし、保守コストは高く、生産性は低く、デプロイも手作業で、パーミッションの設定をファイルごとに行う必要があるというように、良い面がほとんどないからです。

 書籍や古いWebサイトは、100%といっていいくらい、この方法でPerl/CGIを作成して、共用サーバーに配置する方法を説明していますが、まったくおすすめしません。

 共用サーバーというのは、ひとつのサーバーをみんなで使おうというものです。「/home/ユーザー名」以下を、各ユーザーに振り分けてそのディレクトリ内にCGIスクリプトを配置してもらおうという感じのサービスです。環境構築は自分で行う必要はありませんが、制限がとても多いというのが特徴です。

 一方VPSでは、環境構築を自分で行う必要がありますが、どんなことでも自由に行えます。価格は少しVPSのほうが高いですが、個人で十分利用できる価格です。一番安いプランだとさくらVPSで1ヶ月1000円くらいなので、十分手が届く範囲です。

 専用に利用できる環境を、月1000円くらいで借りれるようになったので、便利な時代になりました。

専用サーバーとVPSは何が違うの

 専用サーバーと異なるのはまず価格です。専用サーバーのほうがコスト面でかなり高いです。もうひとつの違いは、ハードウェアの部分をVPSでは自由に追加したりできないことが多いということです。

 ソフトウェアの面では、専用サーバーと同じですが、ハード面は自由にできません。そこで、VPSを使う不安としてはトラフィックやディスク容量が増えてきたときにどうやって対処すればよいかというものでしょう。

 それは、簡単でアプリケーションの移植性をきわめて高いように設計しておいて、CPUやハードウェアの増設が必要ならば、クラウドサービスに移行するというものです。スタートアップはVPSで安く済ませて、必要ならば、すぐに移動できる設計をアプリケーションに行っておけば、1時間もあれば移行できるでしょう。

 新しい環境でWebアプリケーションをデプロイ、データベースをコピーして、ドメインに対応するIPアドレスを変更するという作業だけですね。そんなに難しくありません。でも実際はどの現場でもきっと四苦八苦していることでしょう。ですからアプリケーションの設計は大事です。

 一度書けばどのドメインでも動くWebアプリにすることは大切です。

クラウドって何?

 最近はクラウド、クラウドってよく聞きますね。クラウドってなんでしょうか。定義はあんまりはっきりしたものではないですが、イメージとしては、ハードウェア性能が伸張可能な専用サーバーだと思えばよいでしょう。

 たとえば、CPUが追加で必要になったときに、設定するだけで、CPUをひとつ追加できたりですとか、ディスク容量を増やしたくなったときに、設定するだけで、追加できたりします。価格は、VPSと比べて高めで、企業向けのものが多く、価格は見積もりますというのが多い感じに見えます。

 クラウドには、今大きく分けて2種類のサービスが存在します。一つ目は、専用サーバーのように利用できるサービスです。「さくらのクラウド」「Amazon EC2」なんかがこれにあたり、IaaS型のクラウドと呼ばれます。

 もうひとつは、環境構築をすでに終えてくれて、アプリケーションを配置するだけで、Webアプリケーションを実行できるクラウドがあります。「heroku」「dotCloud」「Meteorのサーバー側」なんかがこれにあたり、PaaS型のクラウドと呼ばれます。

 僕的にはIaas型のクラウドをおすすめして、PaaS型のクラウドはおすすめしない。なんでなら、デプロイがサービスごとに独特なので、サービスごとにデプロイ方法を把握しなくちゃいけないし、サービスにロックインされちゃうから。

 アプリケーションと実行環境は密結合させないほうがよいというのが、僕がよいと思う考え方。

 とりあえずVPSの解説は終了。サーバーの環境構築が難しいと思っている人がたくさんいると思うけれど、実はそんなに時間がかからないものなので、安心してください。