オープンソースフレームワークMobaSiF
前回説明したように、ケータイ向けWebアプリケーション開発を行う際には考慮すべき点がいろいろとあります。この後に説明するMobaSiFフレームワークを使うと、こういった点を簡単に処理できます。
MobaSiFの作られた背景
DeNAでは、ケータイに特化した技術要素を共通的に処理するフレームワークを2003年から開発してきており、2004年開始のオークションサービス「モバオク」、同年開始のアフィリエイトASPサービス「ポケットアフィリエイト」、2006年開始の「モバゲータウン」など実サービスに利用してきました。どれもケータイの世界でNo.1の規模を持つサービスですが、もっとも規模の大きいモバゲータウンは2008年4月時点で登録ユーザ数が1000万人を超え、月間のページビューも150億以上あります。
このフレームワークをMobaSiF(Moba Simple Framework)と名づけて、我々は2008年5月にオープンソースとして公開しました。
MobaSiFの特徴と機能
このフレームワークはPerlと一部C言語で実装されており、
- ケータイ向けWebアプリケーションで共通的に必要な処理が行える
- シンプルで「薄く」、全体のソースを読んで把握しやすい
- 高速処理が必要な部分をC言語で実装しており性能が良い
という特徴を持ちます。また、ケータイ向け特化機能としては
- キャリア・端末機種の判定
- 端末の認証
- 絵文字変換
- 3キャリア対応テンプレートエンジン
を持っています。さらにMVCコントローラ(URLと処理を関連づけるディスパッチャ)やDBアクセス、daemon(常駐プロセス)ユーティリティやログ出力などの機能なども用意されているので、一般のWebアプリケーション向けのフレームワークとしても利用できます。
動作環境
動作実績のあるサーバOSはCentOS 4.xです。動作確認はしていませんが、他のLinux系OSでも動作する可能性があります。Perlはバージョン5を前提としており、モバゲータウンでは5.8.0以上のバージョンを利用しています。WebサーバはApacheを前提としており、DeNAのMobaSiFを使ったサービスではバージョン1.3.xが利用されています。ApacheとPerlの連携にはFastCGIとmod_perlが選択できますが、どちらかの機能が利用できるApacheの用意が必要です。DeNAではFastCGIのほうを利用しており、本記事もFastCGIを前提として説明を進めます。DBについてはMySQLを前提としています。
対象とするケータイ端末
現時点(2008年5月)での対象端末を表4で示します。この判断は後述のMobileEnvモジュールで行っていますので、このモジュールを書き換えればある程度の変更が可能ですが、動作しない機能も発生し得ます。
表4 MobaSiFの対象端末
キャリア | 端末 | 備考 |
NTTドコモ | FOMA 90x、70x | 当初のリリースではiモードIDでの端末認証のみをサポートするという簡略化を行っているため、SSLを利用した状態での端末認証はサポートされない(追って対応する予定) |
au | WIN端末 | |
ソフトバンクモバイル | 3GC型端末 | |
ディレクトリ構成とインストール、事前設定
ディレクトリ構成
MobaSiFは
からダウンロードできます。tar.gzファイル形式で提供されるので、ダウンロード後に任意のディレクトリで展開します。本稿執筆時点(2008年5月末)のバージョンは0.9.0なので、これを前提に説明を進めます。ここでは/homeディレクトリにダウンロードしたmoba-0.9.0.tar.gzファイルを置き、そのまま/homeディレクトリ以下に展開してみましょう(図1)。
この展開後renameした/home/mobaにあたるディレクトリを、以降はMOBA_DIRと呼びます。同名の環境変数にセットして(図2)から(.bashrcや.cshrcなどにも書いておきます)、配下のディレクトリを確認してみましょう。また、これらディレクトリ、サブディレクトリについては図3を確認してください。
本記事では、MOBA_DIR以下のサブディレクトリについては断りなく相対パスで記述することがあります。たとえばMOBA_DIRが/home/mobaである場合、conf/pages.confは/home/moba/conf/pages.confを示すこととします。また、コマンドラインで実行するスクリプトを呼び出せるよう、script/toolscript/daemonはPATHに含めておきます。
.bashrcや.cshrcなどにもこの設定を含めておきましょう。
XSモジュールのインストール
XSとは、PerlからC言語で実装したライブラリを呼び出すしくみです。src/xs以下に収められているのでインストールします。手順は図4のとおりです。このうちMobaConfはXS実装ではなく、任意のPerlスクリプトで「use MobaConf;」できるようにするためのモジュールで、実際はconf/main.confをrequireしているだけです。
また、conf/main.confには
という行が含まれるため、環境変数MOBA_DIRがセットされていれば、任意のPerlスクリプトでuse MobaConf;することでpmディレクトリ以下のモジュールもuseできるようになります。
conf/main.confにはこの行以外に、各種の設定値を含められるようになっています。
設定値の置換と絵文字変換マップファイル作成
confディレクトリ以下のファイルを、利用するプロジェクトやドメインに合わせて図5の手順で置換します。{DB基本名}はDBで共通で使われる文字列で、たとえば「xxxx」と設定した場合、MySQLにxxxx_w(write用)、xxxx_r(read用)ユーザと、xxxx_user、xxxx_seqなどのDBが作成されます。$USERと{実行GROUP}はApacheの実行ユーザ、グループを指定します。
{Webサーバドメイン}はケータイ向けサービスを稼働させるドメイン文字列(例:example.com)で、PCからの接続を検知すると、そのドメイン文字列の左にwww.を付与したURLにリダイレクトされます(例:http://www.example.com/)。
また、初回のみ絵文字変換マップファイルを図6の手順で生成する必要があります。
Apacheの設定
Apacheはmod_fastcgiが使えるようなものを用意する必要があります。またPerlのFCGIモジュールのインストールも事前に必要です。詳細はdocs/2.install.txtを参考にしてください。
利用するApacheのhttpd.confに、
というような行を追加します(/home/mobaの部分は各環境のMOBA_DIRに応じて書き換える必要があります)。これにより、conf/httpd.confに含まれるFastCGI(またはmod_perl)の設定とconf/rewrite.confの設定が有効になります。Apacheから直接呼び出されるhttpd.confの参考ファイルとして、conf/sample/httpd.confも用意されています。
MySQLの設定
初期設定用SQLがconf/createdb.sqlにあるので、利用するDBサーバにmysqlコマンドで接続し、rootユーザで実行してください。conf/main.confファイル中の%DA::CONFに接続先DBの設定がありますが、初期値ではlocalhostが接続先となっていますので、必要に応じて変更してください。このconf/createdb.sqlにより、必要なユーザ、DB、基本テーブルが作成されます。
また、PerlからMySQLを利用するためのCPANモジュール「DBI」と「DBD::mysql」も必要ですので、これもインストールしておく必要があります。詳細な手順はdocs/2.install.txtファイルを参考にしてください。
以上でMobaSiFのインストールと設定は完了です。次回は、MobaSiFで簡単なWebアプリケーションを実装する流れを説明します。