なでしこ3には、JavaScriptで開発する「JSプラグイン]」となでしこ自身で開発する「NAKO3プラグイン」の二種類があります。
簡単に言うと、なでしこ3で関数を定義してください。すると、その関数やグローバル変数をメインプログラムで利用できます。
最初に、NAKO3プラグインを使う方法から確認しておきましょう。
なでしこ貯蔵庫に、「nako3hello」というサンプルプラグインがあります。このプラグインには「挨拶テスト」という関数が定義されています。
このプラグインを使うには、以下のように「取り込む文」を書きます。取り込む文を書くことで、プラグイン内の関数が利用できます。
プラグインを作るには、拡張子が「.nako3」のファイルを作成し、そのファイルの中で、なでしこの関数やグローバル変数を定義するだけです。
例えば上記の「nako3hello.nako3」では以下のように「挨拶テスト」という関数が定義されています。
# file: nako3hello.nako3 ●挨拶テストとは 「こんにちは」を言う。 ここまで。
以下はNAKO3プラグインの作成例です。プラグインファイル「sub.nako3」と、メインファイル「main.nako3」を作成しましょう。
# file: sub.nako3 ●AAAとは 1を戻す ここまで。
以下は、メイン「main.nako3」から「sub.nako3」にある関数AAAを使うプログラムです。
# file: main.nako3 !「sub.nako3」を取り込む AAAを表示。# 結果: 「1」が表示される
自作のなでしこプラグインを作る時、役立つのが「プラグイン名」です。この変数を参照すると、そのコードがメインプログラムから呼ばれたのか、あるいは、プラグインとして取り込まれて呼ばれたのかが判定できます。
普通にメインプログラムとして実行した時、変数「プラグイン名」は「メイン」を示します。
そして、外部のプログラムから取り込まれた時には、変数「プラグイン名」がプラグインの名前となります。(以下のプラグインスコープの名前が設定されます。)
「プラグイン名」を使えば、プラグインのテストをする時に動作テストが便利です。
以下のようなプログラムを作ったとき、関数「挨拶テスト」は、メインプログラムとして実行された時のみ実行されます。取り込む文で、取り込まれた場合には実行されません。
なでしこ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」ですが、グローバル変数「挨拶メッセージ」を定義しています。このメッセージを書き換えれば、挨拶メッセージを変更できます。
なお、敢えてスコープを明示しなくても、自動的に適当なスコープが選択されます。