オープンソースフレームワーク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 ) 。
図1 /homeディレクトリ以下で展開
% cd /home
% tar xvzf moba-0.9.0.tar.gz
% mv moba-0.9.0 moba
% cd moba
この展開後renameした/home/mobaにあたるディレクトリを、以降はMOBA_DIRと呼びます。同名の環境変数にセットして(図2 )から(.bashrcや.cshrcなどにも書いておきます) 、配下のディレクトリを確認してみましょう。また、これらディレクトリ、サブディレクトリについては図3 を確認してください。
図2 MOBA_DIRを環境変数にセット、ディレクトリの確認
% export MOBA_DIR=/home/moba
% pwd
/home/moba
% ls -F
README data/ fcgi/ pm/ script2/ template/
conf/ docs/ htdocs/ script/ src/
図3 MOBA_DIRのディレクトリ
本記事では、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には
use lib "$ENV{MOBA_DIR}/pm";
という行が含まれるため、環境変数MOBA_DIRがセットされていれば、任意のPerlスクリプトでuse MobaConf;することでpmディレクトリ以下のモジュールもuseできるようになります。
conf/main.confにはこの行以外に、各種の設定値を含められるようになっています。
図4 xsモジュールのインストール
% cd $MOBA_DIR/src/xs
% su
# ./makexs MobaConf
# ./makexs MTemplate
# ./makexs Mcode
# ./makexs Kcode
# ./makexs SoftbankEncode
# ./makexs HTMLFast
# exit
設定値の置換と絵文字変換マップファイル作成
confディレクトリ以下のファイルを、利用するプロジェクトやドメインに合わせて図5 の手順で置換します。{DB基本名}はDBで共通で使われる文字列で、たとえば「xxxx」と設定した場合、MySQLにxxxx_w(write用) 、xxxx_r(read用)ユーザと、xxxx_user、xxxx_seqなどのDBが作成されます。$USERと{実行GROUP}はApacheの実行ユーザ、グループを指定します。
図5 設定値の置換
% cd $MOBA_DIR/conf
% find . -type f | xargs sed -i s:###MOBA_DIR###:$MOBA_DIR:g;
% find . -type f | xargs sed -i s/###PROJ_NAME###/{DB基本名}/g;
% find . -type f | xargs sed -i s/###USER###/$USER/g;
% find . -type f | xargs sed -i s/###GROUP###/{実行GROUP}/g;
% find . -type f | xargs sed -i s/###DOMAIN###/{Webサーバドメイン}/g;
{Webサーバドメイン}はケータイ向けサービスを稼働させるドメイン文字列(例:example.com)で、PCからの接続を検知すると、そのドメイン文字列の左にwww.を付与したURLにリダイレクトされます(例:http://www.example.com/) 。
また、初回のみ絵文字変換マップファイルを図6 の手順で生成する必要があります。
図6 絵文字変換マップファイル生成
% cd $MOBA_DIR/conf
% find . -type f | xargs sed -i s:###MOBA_DIR###:$MOBA_DIR:g;
% find . -type f | xargs sed -i s/###PROJ_NAME###/{DB基本名}/g;
% find . -type f | xargs sed -i s/###USER###/$USER/g;
% find . -type f | xargs sed -i s/###GROUP###/{実行GROUP}/g;
% find . -type f | xargs sed -i s/###DOMAIN###/{Webサーバドメイン}/g;
Apacheの設定
Apacheはmod_fastcgiが使えるようなものを用意する必要があります。またPerlのFCGIモジュールのインストールも事前に必要です。詳細はdocs/2.install.txtを参考にしてください。
利用するApacheのhttpd.confに、
Include /home/moba/conf/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アプリケーションを実装する流れを説明します。