最近少しMovable Typeのプラグインを書いています。例えば、
- 定型の記事タイトルをセットするプラグイン
- 出力するパスにスマートフォンサイトのディレクトリ名を追加するプラグイン
- 任意のCSSやJavaScriptを記事編集画面に追加するプラグイン(例えばカスタムフィールドで選択した日付をタイトルにセットしたい時などに)
などを書きました。MTのプラグインが書けるようになると、管理画面をより使いやすくできたり、オリジナルのモディファイアが追加できたりするなど、MTの世界が少し広がったような気分です。
プラグインを書いていて少し困ったのが、変数の内容を確認したい時です。JavaScriptだとconsole.log()
を利用して気軽に確認できますが、MTのプラグインで同じようなことができないかと考えました。
色々探った結果、次の2点に行き着きました。
- MTプラグインのデバッグ。 - Junnama Online
- 書籍「Movable Typeプラグイン開発入門」 10-1 ログ書き出し
上記を参考にdoLog関数を作成すると次のようになりました。
sub doLog {
use Data::Dumper;
local $Data::Dumper::Sortkeys = 1;
local $Data::Dumper::Indent = 1;
local $Data::Dumper::Terse = 1;
my ($msg, $use_dumper) = @_;
return unless defined($msg);
my ($sec, $min, $hour, $day, $month, $year, $wday, $yday, $isdst) = localtime(time);
my $date = sprintf("%04d/%02d/%02d %02d:%02d:%02d",
$year + 1900, $month + 1, $day, $hour, $min, $sec);
open FH, ">>mt_debug.log";
print FH "$date\n";
if ($use_dumper) {
my $dump_msg = Dumper $msg;
print FH "$dump_msg\n";
} else {
print FH "$msg\n";
}
close FH;
}
doLog($str)
で$str
の内容が確認できます。また、doLog($app, 1)
のように指定すると、配列やハッシュの中身も確認できます。リアルタイムにコンソールに流れるのでとても捗ります。
ただ、このままだと毎回doLog関数をコピペしなければならないのが手間です。何か方法がないかと考えたのですが、時々MTのエラーメッセージでCan't locate xxx in @INC
のようなメッセージが表示され、インクルードパスに各プラグインのパスが含まれることを思い出しました。
そこで、MyDebuggerプラグイン化して開発環境のplugins
ディレクトリにインストールしました。そして次のようにコードを記述したところ、doLog関数をコピペすることなくいつでも利用できるようになりました。
use MyDebugger;
MyDebugger::doLog($blog, 1);
もっと良い方法があるのかもしれませんが、ひとまずこれでプラグイン開発が容易になりました。MTを使ったよりよいCMSの構築に役立てていきたいと思います。