処理結果をページに埋め込む

処理結果をページに埋め込む

サンプルプログラムの作成

プログラムの任意の場所に今日の日付を表示するプラグインを例に、プラグインの作成方法を紹介します。

まず、lib/webliberty/Plugin/ 内に Sample1.pm を作成し、ファイル内に以下の内容を記述します。ファイルの文字コードは UTF-8N にしておきます。

package webliberty::Plugin::Sample1;

use strict;

sub new {
  my $class = shift;

  my $self = {
    init   => shift,
    config => shift,
    query  => shift
  };
  bless $self, $class;

  return $self;
}

sub run {
  my $self = shift;

  my($sec, $min, $hour, $day, $mon, $year, $week) = localtime(time);
  my $date = sprintf("%02d月%02d日", $mon + 1, $day);

  return $date;
}

1;

ファイルが作成できたら、日付を表示したい場所のスキンに ${Sample1} と記述します。ここでは、./skin/header.html

<h1><a href="${INFO_PATH}">${INFO_TITLE}</a></h1>

この直後に以下のコードを追加します。

<p>今日の日付は${Sample1}です。</p>

これで作業は完了です。CGIプログラムにアクセスすると、タイトル文字の下に 今日の日付は10月31日です。 のように表示されます。(アクセスした日付が表示されます。)
HTML書き出し機能を使用している場合は、そのHTMLファイルが更新されるまで反映されないので注意してください。

以下では、このプラグインを例に処理内容を解説します。

プラグインの名前

まずは作成するプラグインの名前を決めます。これはプラグインのファイル名やプラグインの呼び出し方法に影響します。

上のプラグインの場合、プラグインの名前は Sample1 です。この名前は半角英数字のみで任意の名前を付ける事ができます。具体例を挙げると、「abc」や「AAA」などはプラグインの名前として有効ですが、「テスト」や「Sample Plugin」のような名前は無効です。
この名前は、プラグインの動作に沿った、解りやすい名前を付けると良いでしょう。

プラグインのファイルは「プラグイン名.pm」という名前で作成します。プラグインを呼び出す際は ${プラグイン名} と記述します。また、プラグインファイルの一番初めの処理は

package webliberty::Plugin::プラグイン名;

の形式でパッケージ宣言を記述します。Perlではパッケージ名の先頭を大文字にすることが多いのでプラグイン名の先頭を大文字にしていますが、小文字でも特に問題はありません。

また、プラグインからファイルを参照する必要がある場合、プラグイン名のフォルダ内に格納するようにしています。例えば Sample1 プラグイン専用のスキンやログファイルを使用する場合、lib/webliberty/Plugin/Sample1/ にすべて格納するようにしています。
他のプラグインが利用するファイルと混ざってしまわないようにするためですが、プログラム側では特に制限していないため、実質的にはどこに格納しても大丈夫です。

コンストラクタの実装

プラグインが実行される際、初めに new メソッド(コンストラクタ)が自動的に呼び出されます。コンストラクタに最低限実装するべき内容は以下のとおりです。

sub new {
  my $class = shift;

  my $self = {
    init   => shift,
    config => shift,
    query  => shift
  };
  bless $self, $class;

  return $self;
}

コンストラクタが呼ばれる際に3つの引数が渡されるのでこれを受け取ります。受け取る引数は以下のとおりです。

上のプログラムでは、それぞれ initconfigquery という値で受け取っています。今回は使用していませんが、これらの値から環境設定内容などをプラグイン内で参照する事が可能です。詳しくは引数から受け取る内容の詳細を参照してください。

必要ならば、コンストラクタに処理を追加する事も可能です。

実行したい処理の実装

プラグイン内に run メソッドがあれば、本体の処理開始前にこのメソッドが自動的に呼び出されます。実際にプラグインで処理したい内容をこの中に記述します。今回、run メソッドの内容は以下のとおりです。

sub run {
  my $self = shift;

  my($sec, $min, $hour, $day, $mon, $year, $week) = localtime(time);
  my $date = sprintf("%02d月%02d日", $mon + 1, $day);

  return $date;
}

処理の最後に $data を返していますが、run メソッド内から return で返した値が、ページに埋め込まれる文字列になります。

今回返している文字列は今日の日付です。time 関数を利用して普通に日付を取得しています。

まとめ

以上が、処理結果をページに埋め込む場合の最小限のプラグインサンプルです。まとめると

となります。