何とか無事に折り返せました。連載4回目です。
今回は
プラグインの本機能ではないものの、プログラム上重要なエラー処理について説明します。
ソフトウェアプログラムの 80% はエラー処理だ、と言われるほど重要なものですが、
私の書くプログラムの 80% は遊び心で出来ています(
謎)
…それと今回は、
プラグインの永続化データについても説明します。
これを使うことで
プラグイン毎に変数の値や設定内容を記憶しておくことができます。
揮発してしまう普通の変数とは異なり、データファイルのようにその値を永続的に保持できるという特徴があります。
目次
一度では全て書き切れないので、幾つかの連載記事とする予定です。
MovableType のヘルプドキュメント
にある内容を網羅し、これに沿った形で書いていくつもりですので、併せて読み進めていただけるとモア・ベターかと思います。
よろしくお付き合いくださいませm(_ _)m
エラー処理
MT の
プラグインにおいて、エラー処理は頻繁にお世話になるものの一つでしょう。
具体的な例を挙げれば、
<$MTCalendarDay$> 変数タグが
<MTCalendar> コンテナタグの外で使われた場合や、
タグの動作に必須のパラメータが指定されていなかったり、
パラメータに指定された値が範囲外であった場合など、
異常の発生をユーザに知らせるために重要な役割を果たします。
エラー処理は、ユーザにミスを気付かせ、システムを正しく動作させるためには必須です。
しかし何でもエラーとするのではなく、
プラグインのデフォルトの動作を上手く組み合わせたり、
パラメータを上限下限の範囲内に適切に修正して動作を行うようにするなど、
ここは
プラグイン開発者の腕の見せ所かも知れません。
あまりお節介過ぎるのも考え物ですが…(^^;
次のコードは無条件でエラーを発生させる変数タグです(sample_4_1.pl)。
エラーの発生方法が異なるので、エラーメッセージの表示のされ方が異なります。
これらの変数タグで発生させたエラーは、それぞれ下のように表示されます。
$ctx->error を使うことで、
発生したエラーの詳細や対処方法などをユーザに知らせることができるので、
通常はこちらを使うのが賢明です。
一方、
die によるエラーは、
一般のユーザにしてみれば不親切極まりないですが(笑)、
エラーが発生したファイル名と行番号をプリントしてくれるので、
プラグインの開発中は有用でしょうか。
プラグイン特有のデータを保持する
データを保持するのが変数の役割ですが、今までプログラムコード中で使用してきた変数は全て、
プラグインの動作が完了してしまうと、その内容が揮発してしまいます。
アクセスカウンタのように次々の加算されていく数字のような動作を
プラグインで実現したい場合には、
MT::PluginData を使用して、データを永続化しておく必要があります。
次のプログラムコードは、構築された回数をカウントする機能を持つ
<MTBuildCount> 変数タグのサンプルです(
sample_4_2.pl)。
現在までの構築回数を
MT::PluginData を使用して永続化しています。
コードの詳細
- my $build_count = load_plugindata ('BuildCount');
-
現在のプラグインの永続化データから、BuildCount と云う名前のデータを読み出し、
$build_count に代入します。
- $build_count = 0 if (!defined $build_count);
-
指定された名前の永続化データが無い場合、$build_count を 0 で初期化します。
- $build_count++;
- save_plugindata ('BuildCount', $build_count);
-
$build_count を 1 だけ増し、
その値を BuildCount と云う名前で永続化データとして保存します。
- use MT::PluginData;
-
MT::PluginData クラスの使用を宣言します。
- sub load_plugindata
-
MT::PluginData を使用して、現在のプラグインの永続化データのうち、
第一引数($key) で指定された名前のデータを取得します。
指定されたデータが無い場合は undef を返します。
このサブルーチンは他にもそのまま流用できそうですね(^^)b
- sub save_plugindata
-
MT::PluginData を使用して、
第二引数($data) で指定されたデータを、
第一引数($key) で指定された名前で永続化データとして保存します。
同じ名前の永続化データがある場合は、新しいデータで上書きされます。
このサブルーチンは他にもそのまま流用できそうですね(^^)b
- my $plugindata = MT::PluginData->load ({ plugin => __PACKAGE__, key => $key })
-
このプラグイン(plugin)に割り当てられた、
key と云う名前のデータを読み込みます。
plugin を適当に設定することで、
自分以外の他のプラグインで使用されている永続化データを読み込むことも可能です。
プラグインの永続化データは、プラグイン毎に設定画面のあるものが、その設定内容を記憶しておき、
プラグインの動作時にその設定データを使用する場合などに使用されます。
この記事で使用した
プラグインのプログラムコードを
ダウンロードできます。
寄せられたコメント (全 2 件中、最新 5 件まで表示しています)
ここで紹介している save_plugindata のコードについて、
MT3.2では正しく動作しますが、MT3.1xでは参照の問題で正しく動作しません。
どうやら変数を参照で渡さないとダメみたいです…
参照渡しにしておけば、何れのバージョンでも動作します。
調査不足です。すみません。
いままで見たどのプラグインの書き方コーナーよりもわかりやすいです。
次回はBigPAPIのようなので期待大!
もう待ちきれません。w