MTベースのアプリケーションをPSGI化する

Movable Type 5.2はPSGIに対応しますが、既存のMovable Typeベースのアプリケーション(MT::Appを継承したアプリケーション)も比較的簡単にPSGIに対応させることができます。
その方法を紹介します。

なお、アプリケーションに付随するプラグイン(特にconfig.yamlファイル)があることを前提にします。
また、ここで解説する方法は、Movable Type 5.2のベータ3以降で動作します(ベータ2以前では不具合があってエラーが発生します)。

1.MTベースのアプリケーションの作成

まず、これまでと同様の手順で、MTベースのアプリケーションを作成します。
config.yamlでアプリケーションのメソッド等を定義し、Perlで個々のメソッドを記述します。

2.config.yamlにPSGI関係の情報を追加

次に、config.yamlファイルに以下のようにPSGI関係の情報を追加します。

applications:
  アプリケーションのID:
    handler: パッケージ名
    script: script名を返すcoderef
    cgi_path: CGIのパスを返すcoderef

「アプリケーションのID」の行では、アプリケーションに任意のIDを付けて、その名前を指定します。

「handler」の行では、アプリケーション本体のパッケージの名前を指定します。

「script」の行では、アプリケーションのCGIファイルの名前を返すcoderefを指定します。
ハンドラの名前($○○○::パッケージ名::サブルーチン名)の書き方を使うこともできます。

「cgi_path」の行では、アプリケーションのCGIファイルのパスを返すcoderefを指定します。
scriptの行と同様に、ハンドラの名前($○○○::パッケージ名::サブルーチン名)の書き方を使うこともできます。
なお、パスはドキュメントルートからの絶対パスの形で表します。

3.pluginsディレクトリにアップロード

出来上がったアプリケーションを、Movable Typeのpluginsディレクトリにアップロードします。
一般的には、以下のようなディレクトリ構成になるようにします。

MTのディレクトリ
└ pluginsディレクトリ
  └ プラグインのディレクトリ
    ├ config.yamlファイル
    ├ アプリケーションの.cgiファイル
    └ libディレクトリ
      └ プラグインのディレクトリ
        └ プラグイン(アプリケーション)本体の.pmファイル

4.mt.psgiの起動

アップロードが終わったら、mt.psgiを起動します。
これで、MT本体やMT関連の各種CGI(mt-comment.cgi等)と一緒に、自作アプリケーションもPSGI化された状態で起動します。
そして、「http://MTのディレクトリ:ポート番号/plugins/プラグインのディレクトリ/○○○.cgi」のアドレスにアクセスすると、PSGI化したアプリケーションが実行されます。

5.サンプル

PSGI化したアプリケーションのごく簡単なサンプルを公開します。

PSGISample.zip

ダウンロードしたZipファイルを解凍すると、「plugins」フォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。

その後、mt.psgiを起動して、「http://MTのディレクトリ:ポート番号/plugins/PSGISample/mt-psgi-sample.cgi」にアクセスします。
「Hello PSGI.」と表示されれば、正しく動作しています。