スタッフブログ Staff Blog

Movable Typeのプラグイン開発時に変数の内容を確認する方法

最近少しMovable Typeのプラグインを書いています。例えば、

  • 定型の記事タイトルをセットするプラグイン
  • 出力するパスにスマートフォンサイトのディレクトリ名を追加するプラグイン
  • 任意のCSSやJavaScriptを記事編集画面に追加するプラグイン(例えばカスタムフィールドで選択した日付をタイトルにセットしたい時などに)

などを書きました。MTのプラグインが書けるようになると、管理画面をより使いやすくできたり、オリジナルのモディファイアが追加できたりするなど、MTの世界が少し広がったような気分です。

プラグインを書いていて少し困ったのが、変数の内容を確認したい時です。JavaScriptだとconsole.log()を利用して気軽に確認できますが、MTのプラグインで同じようなことができないかと考えました。

色々探った結果、次の2点に行き着きました。

上記を参考に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)のように指定すると、配列やハッシュの中身も確認できます。リアルタイムにコンソールに流れるのでとても捗ります。
変数の内容をmt_debug.logファイルに出力し、Macのコンソールに表示させた様子

ただ、このままだと毎回doLog関数をコピペしなければならないのが手間です。何か方法がないかと考えたのですが、時々MTのエラーメッセージでCan't locate xxx in @INCのようなメッセージが表示され、インクルードパスに各プラグインのパスが含まれることを思い出しました。

そこで、MyDebuggerプラグイン化して開発環境のpluginsディレクトリにインストールしました。そして次のようにコードを記述したところ、doLog関数をコピペすることなくいつでも利用できるようになりました。

use MyDebugger;
MyDebugger::doLog($blog, 1);

もっと良い方法があるのかもしれませんが、ひとまずこれでプラグイン開発が容易になりました。MTを使ったよりよいCMSの構築に役立てていきたいと思います。

お問い合わせ Contact

制作のご依頼、ご相談などは下記のフォームからご連絡ください。