はじめまして。面白法人カヤックの村瀬と申します。ArkというWebアプリケーション作成用のフレームワークを開発しました。今回から4回にわたって,このリリースしたばかりの「Ark」について紹介させていただきます。
Ark(アーク)とは
Arkは,Perlで作られたWebアプリケーションフレームワーク(WAF)です。
Arkの特徴としては
- Catalystに似たインターフェース
- CGI/FCGI/mod_perlなどさまざまな環境で実用的に動作する
- CGI用モードの存在
- 日本製であり,日本語ドキュメントが充実している
などが挙げられます。
Catalystに似たインターフェース
Catalystは,Arkと同様にPerl製のWebアプリケーションフレームワークで,現在,Perlのフレームワークでは標準となりつつあるものです。
Arkは開発動機の1つが「CGIでも実用的に動作するCatalyst」を作ることだった(後述)こともあり,Catalystの影響を強く受けて開発されています。
そのため,Catalystの仕様をそのまま引き継いでいる部分も多く,Catalystでの開発経験のある方であれば,すぐに使いこなすことができるようになっています。
カヤックでも現在いくつかのサービスをArkを使用して開発していますが,Catalystの使用経験のあるプログラマはすんなりと移行できているようです。
CGI/FCGI/mod_perlなどさまざまな環境で実用的に動作する
Arkは,HTTP::Engineというライブラリの上に実装されています。
HTTP::Engineは,RubyのRack,PythonのWSGIなどと同じように,CGI/mod_perlといったバックエンドの違いによるアプリケーションの実装の違いを吸収してくれるライブラリで,これを使用すると開発者はバックエンドの違いを意識することなくWebアプリケーションを開発することができます。
つまり,Arkアプリケーションは,同じコードでさまざまな環境で動作させることが可能です。
CGIモード
どの環境でも同じコードで動作するといっても,実際には環境によって大きな違いがあります。CGIという環境は,リクエストがあるたびにアプリケーションを起動し,処理します。
一方,FCGIやmod_perlという環境ではあらかじめ立ち上がっているアプリケーションがそのまま複数のリクエストを処理できます。
このような環境の違いは,アプリケーションの実装に大きく影響を及ぼします。
たとえば,アプリケーションの初期化処理を考えてみたときに,CGIでは毎回プロセスが立ち上がるので毎回初期化処理がされます。しかし,FCGIなどの永続プロセスではリクエストの処理は立ち上がっているプロセスが使い回されるため,初期化処理は起動時のみに行えばいいということになります。
そのため,FCGI/mod_perlに最適化した場合,起動時に必要なすべてのモジュールをロードしすべての設定をすませてしまう,というのが効率的ですし,逆にCGIの場合にはそのリクエストに必要なファイルだけをロードし,初期化のコストを最小限に抑えるのが効率的です。
このような最適化処理の違いに対応するため,Arkでは2種類の動作モードを用意しています。
通常のモードは,起動時にすべてのコンポーネントをロードします。もう1つのminimal_setupモード(CGIモード)ではリクエストに対し必要なファイルを必要になったときにロードします。
このCGIモードがあることで,CGIのような環境でも実用的に使用することを可能にしています。このモードがあることが,Catalystとの大きな違いと言えるでしょう。
日本製である
Arkは日本製のアプリケーションなので,ドキュメントももちろん日本語で書かれています。また,こちらも後述しますが,ドキュメントを充実させることにも力を入れています。
Catalystが普及してきたといってもまだまだ日本語のドキュメントが充実しているとは言い難い状況ですので,今から新しくフレームワークを学ぼうという人は,Arkも選択肢のひとつとして見ていただけたら幸いです。
Arkを作るきっかけ
社内専用フレームワーク
カヤックでは,BM11(ぶっこみイレブン)というラボチームが毎年たくさんのサービスをリリースしています。2007年は77個,2008年は88個のサービスをリリースし,そして今年は99個のサービスをリリースする予定です。
BM11のPerlチームは,BM11設立当初より,開発フレームワークにCatalystを採用してきました。ですが,BM11のサービスの多くは1機能のシンプルなWebサービスであり,Catalystよりもう少し軽いフレームワークが欲しいなという声がありました。
実際に,昨年ぐらいから軽量フレームワークが相次いでリリースされました。
それらも評価したのですが,やはりCatalystに慣れてしまっているため,なかなか移行するところまでは至りませんでした。
- 「Catalyst と同じように使えるもっと軽量フレームワークが欲しい…」
そのようなBM11メンバーの心の叫びが開発の動機の1つとなっています。
フレームワークから言語を覚える
最近フレームワークを使うために言語を覚える,もしくはフレームワークを使うことで言語を覚える,というような人が増えています。
たとえば,RailsでRubyを覚えるとか,DjangoをやるためにPythonを勉強すると言う話をよく聞きます。
しかし,Perlはどうでしょうか。
CatalystでPerlを覚える,というような話はなかなか聞いたことがありません。
- 「Perl でもそういうフレームワークがでてくるといいなぁ。」
このようなことを常々考えていたので,どうせフレームワークを作るならそのフレームワークで Perl をはじめる人を増やしたいと考えています。そのため,Perlを勉強しはじめた人でも理解しやすいように,Arkではドキュメントにも力を入れています。

