NAKO3プラグインの作り方の詳細 *

なでしこ3には、JavaScriptで開発する「JSプラグイン]」となでしこ自身で開発する「NAKO3プラグイン」の二種類があります。

簡単に言うと、なでしこ3で関数を定義してください。すると、その関数やグローバル変数をメインプログラムで利用できます。

NAKO3プラグインを使う方法 *

最初に、NAKO3プラグインを使う方法から確認しておきましょう。

なでしこ貯蔵庫に、「nako3hello」というサンプルプラグインがあります。このプラグインには「挨拶テスト」という関数が定義されています。

このプラグインを使うには、以下のように「取り込む文」を書きます。取り込む文を書くことで、プラグイン内の関数が利用できます。

   v3.3.61

プラグインを作るには? *

プラグインを作るには、拡張子が「.nako3」のファイルを作成し、そのファイルの中で、なでしこの関数やグローバル変数を定義するだけです。

例えば上記の「nako3hello.nako3」では以下のように「挨拶テスト」という関数が定義されています。

# file: nako3hello.nako3
●挨拶テストとは
  「こんにちは」を言う。
ここまで。

作成の例 - その2 *

以下はNAKO3プラグインの作成例です。プラグインファイル「sub.nako3」と、メインファイル「main.nako3」を作成しましょう。

# file: sub.nako3
●AAAとは
  1を戻す
ここまで。

以下は、メイン「main.nako3」から「sub.nako3」にある関数AAAを使うプログラムです。

# file: main.nako3
!「sub.nako3」を取り込む
AAAを表示。# 結果: 「1」が表示される

プラグインかメインプログラムかを判定する「プラグイン名」 *

自作のなでしこプラグインを作る時、役立つのが「プラグイン名」です。この変数を参照すると、そのコードがメインプログラムから呼ばれたのか、あるいは、プラグインとして取り込まれて呼ばれたのかが判定できます。

普通にメインプログラムとして実行した時、変数「プラグイン名」は「メイン」を示します。

そして、外部のプログラムから取り込まれた時には、変数「プラグイン名」がプラグインの名前となります。(以下のプラグインスコープの名前が設定されます。)

「プラグイン名」を使えば、プラグインのテストをする時に動作テストが便利です。

変数「プラグイン名」の利用例 *

以下のようなプログラムを作ったとき、関数「挨拶テスト」は、メインプログラムとして実行された時のみ実行されます。取り込む文で、取り込まれた場合には実行されません。

   v3.3.61
  • (参考) nako3hello.nako3 --- 実際に変数「プラグイン名」を参照しています。

プラグインスコープについて *

なでしこv3.3.6より、プラグインにスコープが利用可能になりました。これは、なでしこのファイルごとに個別のスコープが割り当てられる機能です。

プラグインスコープでは「{ファイル名}__{変数名}」のように記述してして、プラグインスコープの変数にアクセスできます。ファイル名と変数名の区切りは、アンダーバー「_」を2つ記述します。

例えば、次のように「CAFE1.nako3」「CAFE2.nako3」という二つのファイルを配置します。ポイントは、以下のファイルで両方「朝食値段」というグローバル変数を定義しているというところです。

# file: CAFE1.nako3
朝食値段=900
# file: CAFE2.nako3
朝食値段=700

そして、メインプログラムから上記のファイルを取り込みます。この時、「CAFE2.nako3」の変数「朝食値段」にアクセスしたい時には、「CAFE2__朝食値段」と記述します。

# file: main.nako3
!「CAFE1.nako3」を取り込む
!「CAFE2.nako3」を取り込む
CAFE1__朝食値段を表示。# 900
CAFE2__朝食値段を表示。# 700

なお、「{ファイル名}__{関数名}」のように指定するのですが、ここの「ファイル名」とはパスや拡張子を削ったものが採用されます。例えば「a/b/c/ddd.nako3」であれば「ddd」となります。

スコープの利用例 *

nako3hello」ですが、グローバル変数「挨拶メッセージ」を定義しています。このメッセージを書き換えれば、挨拶メッセージを変更できます。

   v3.3.61

スコープの自動解決 *

なお、敢えてスコープを明示しなくても、自動的に適当なスコープが選択されます。

   v3.3.61

参考 *

Konawiki3 v.3.2.3