Hikiプラグインの作り方 第一回 テキスト表示プラグイン

テキストを表示する簡単なプラグインを、まず作ってみましょう。表示するテキストは「NEW!」にします。
新しく記事を書いた時に、目次ページで「NEW!」と表示するのに使います。
テキストと言いながら四文字かよ、って思うかも知れませんが、「テキストファイル」とか言う時のテキストです。長さは関係無いのです。


プラグインの名前もnewプラグインとしてしまいましょう。
では、マイ ドキュメントでもどこでもいいので、new.rbというファイルを作って、テキストエディターで開いてください(プラグインの名前とファイル名は、揃える必要はありませんが、単機能の場合、同じにすることが多いようです)。
んで、こう書きます。

def new
  'NEW!'
end

Rubyのメソッド定義です。
意味は分かると思います。Stringオブジェクトを返しているだけです。
何クラスのメソッドなの? とかいった疑問が浮かぶかも知れませんが取り敢えず置いておきましょう。

  • メソッド名がそのままプラグイン名(ウィキの方で{{ }}で囲む文字)になる
  • メソッドの戻り値が、プラグインを呼び出した時に表示される文字になる

ということだけ押さえておけば大丈夫です、今は。


一つのファイルに複数のメソッドを定義したら?
そのファイルを有効化すると、全てのメソッドが、プラグインとして使えるようになります。
amazon.rbとか、ファイルは一つだけど、たくさんのメソッドが定義されています。みんな使えます*1。使えるメソッドと使えないメソッドを指定する方法は、おいおい。


問題は戻り値なので、例えばこんなプラグインもアリです。

def homearea
  areas = ['ダナーン', 'イスカリア', 'フォレースル', 'ワイアーナ', 'フィンガル', 'ラブラドル', 'ベルディア']
  home = areas[rand(areas.length)]
  "あなたは#{home}地方の出身です。"
end

※ 必ず(少なくともバージョン0.8.8.1の場合は)EUC-JPで保存してください。
本当はここで日本語文字みたいに、ASCII(所謂半角英数字)以外を書くのはよくありません。実際にどうするべきか、というのはまた今度。


単純なので

def homearea
  "あなたは#{['ダナーン', 'イスカリア', 'フォレースル', 'ワイアーナ', 'フィンガル', 'ラブラドル', 'ベルディア'][rand(6)]}地方の出身です。"
end

ってやってもよかったんですが、数え間違えたら恥ずかしいのと、後で南クリスタニア分を付け足したりダナーンを切り離した時に数字を書き直さなくていいので、Arrayオブジェクトのlengthメソッドを使っています*2
どうでもいいですか、どうでもいいですよね、作った本人も使わないようなサンプルプラグインですしね。


表示されるのはあくまで戻り値です。printメソッドやputsメソッドで文字……テキストを表示しようとしてはいけません。

参考資料

tDiaryプラグインの作り方: オリジナルプラグインの実装
tDiaryという、Rubyで作られた日記システムの、プラグインの作り方。中の仕組みはよく分かりませんが、プラグインを作るという観点では、Hikiと極めて近いので大変参考になります。Hikiの公式サイトにはプラグインの作り方が書かれていないので尚更。
スタジオ・フィラデルフィア: 神々の住まう地
ダナーンを始めたとしたクリスタニア各地方の住人と神獣(神)の紹介。意外とこういう普通にまとめたの、無いんですよね。

*1:amazon_fetchとか、隠さなくていいんだろうか……。

*2:あと、地方の一覧はクラス定数とかインスタンス変数(何の?)で管理したい、っていう重大な問題もあるのですが、気付いた人もここではいいことにしてください。