RINEARN
- RINPn ユーザーガイド -

この文書は、小型プログラマブル関数電卓ソフト「 RINPn (りんぷん) 」の公式な取扱説明書です。

- 目次 -

- はじめに
- ステップ 1 - GUIモードで使ってみる（電卓画面での使用）
- ステップ 2 - CUIモードで使ってみる（コマンドでの使用）
- ステップ 3 - スクリプトを実行する
- ステップ 4 - スクリプトで関数/変数を追加する (ライブラリスクリプトの使用)
- ステップ 5 - Java®言語で関数/変数を実装する (プラグイン開発)
- ステップ 6 - 別のソフトウェア内に組み込んで使う
- 付録 - 主な組み込み関数/変数
- 開発元について
- 本文書内の商標などについて

# はじめに

## RINPn ってどんな電卓？

RINPn（りんぷん）は、単純で扱いやすい画面デザインの関数電卓ソフトです。以下が実際の画面です：

どこにでもありふれた、普通の関数電卓といった印象ですよね。なので、初見でも簡単に扱えます。

でも、単純そうな画面デザインの割に、中身は意外とパワフルなんです。 まず、かっこ ( ) や数学関数などを用いた計算式を、そのままの形で書いて計算できます。 加えて、スクリプト（簡易プログラム）機能によって、電卓の計算式で使える関数を自作したり、複雑な計算を自動化して処理する事もできます。 処理速度面では、最大で数億(数百メガ)～数十億(数ギガ)回/秒クラスの数値演算が可能※で、 一般的なスクリプト言語環境と比べてもそこそこ速い部類のスペックがあります。 なので、それなりの計算量の数値計算プログラミングにも耐えられます。 さらに、計算式やスクリプトから、Java® 言語で記述した処理を呼ぶ事までできます。

※ 最大処理速度を発揮させるには、設定ファイル「 Settings.txt 」内で、最適化レベルの値を最大に設定する必要があります。

また、RINPn のキーパネル部は、邪魔な時は折り畳めます：

この通り、とても小さくなりました。ここまで小さいと、正直とても高機能には見えないですよね！ でも、既に説明した通り、中身はパワフルなんです。

RINPn は、クルマで例えるなら、小型軽量で取り回しがいいのにパワフルでキビキビ走る、ライトウェイト・スポーツカーのようなものを目指した電卓ソフトです。

## 商用・非商用問わず無償で利用可能な、
オープンソースでMITライセンス採用のフリーソフト

RINPn は、必要に応じて、ユーザーがソースコード（ソフトの「元」のようなものです）を入手して改造・改良・流用する事なども可能な、 オープンソースのフリーソフトです。実際に、ソースコードリポジトリ https://github.com/RINEARN/rinpn からソースコードを取得/参照できます。

もちろん、そんな面倒な事は考えずに、入手したまま普通のソフトとして使う事もできますし、それも開発側としては大歓迎です !

RINPn のライセンスは、いくつかの有名なライセンスの一つである「 MITライセンス 」を採用しています。 これにより、RINPn は商用・非商用問わず無償で利用できる上に、ソースコード流用時などの諸条件も緩いものとなっています。 詳細については、必要に応じて「 MITライセンス 」などでWeb検索すると、 日本語で解説したページがたくさん出てくると思います。

なお、ライセンス文書そのものは、RINPn の通常版では「 License 」フォルダ内に「 MIT_License.txt 」として同梱されています（内容は英語です）。 ソースコードリポジトリでは直下に「 LICENSE 」というファイル名で同梱されています。

- 免責事項 -

RINPn はどなたでも無償で利用できるソフトウェアですが、動作は完全に無保証です。

RINPn の開発元は、RINPn の利用の結果（不具合や損害などを含む）に関して、 一切の責任および補償等を負担いたしかねます。何卒ご了承ください。

ご使用の前に、上記の点およびMITライセンスの条件に、あらかじめご同意ください。

## 早速ダウンロードして、使う準備をしてみよう！

### RINPn の公式サイトにアクセスし、最新版を入手

このガイドは RINPn の配布パッケージ内にも同梱されているため、この文をお読みの方は既に RINPn を入手済みかもしれません。 一方、RINPn を未入手の場合や、入手したものが少し古い場合などは、公式サイトからいつでも最新版を入手できます：

RINPn 公式サイト（日本語版）
  https://www.rinearn.com/ja-jp/rinpn/
RINPn 公式サイト（英語版）
  https://www.rinearn.com/en-us/rinpn/

上記ページのすぐ先頭付近にある、「 いますぐダウンロード 」と書かれたボタンのリンク先ページから、 RINPn の配布パッケージ「 rinpn_?_?_?_ja.zip (種類はZIP形式圧縮ファイル、?_?_? の箇所はバージョンの数字) 」をダウンロードできます。

上記でダウンロードされるのは、すぐに使える状態で配布されている「 ビルド済み版 」です。 ソースコードから自力でビルドしたいという場合は、下記リポジトリからご入手ください：

RINPn ソースコード リポジトリ
  https://github.com/RINEARN/rinpn

リポジトリを clone 後、READMEの記述の通りにビルドしてください。

### 配布パッケージは圧縮されているため、まず展開しよう

上でも触れた通り、RINPn の配布パッケージ「 rinpn_?_?_?_ja.zip 」はZIP形式で圧縮されて 1 つのファイルになっているため、 まずは展開しましょう。

Microsoft® Windows® をご使用の方は、 最初にZIPファイルを右クリックして「プロパティ」を選択し、 プロパティ画面の下にあるセキュリティ項目の「許可する」にチェックを入れて「OK」します。 （ これを行わないと、展開の途中や RINPn の起動時に、警告メッセージが表示されて失敗する場合があります。） その後、ZIPファイルを右クリックして、メニューから「 すべて展開 」や「 ここに展開 」や「 解凍 」などの項目を選択すると展開できます。

Linux® などをご使用の方も、大抵の環境では右クリックメニューから展開できます。

Linux® などで、展開後のファイル名が文字化けしてしまう場合は、コマンドラインで下記のように、文字コードを指定して展開してみてください：

cd 配布パッケージのある場所(パス)
unzip -O cp932 rinpn_?_?_?_ja.zip (?_?_? はバージョンの数字)

展開が完了すると、同じ場所に、同じ名前の「 rinpn_?_?_?_ja 」というフォルダが作成され、 その中に RINPn のプログラム本体やその他色々なファイル（このガイドも）が入っています。 なお、ZIPファイルを展開しないままダブルクリックしても、一応は中を見る事ができますが、 その状態で RINPn を使おうとすると正しく動作しない可能性があるため、 展開して普通のフォルダになった状態でご使用ください。

### 展開してできたフォルダを、デスクトップやUSBメモリーなど、使いやすい場所に置いておくだけでOK (インストール不要)

あとは、展開してできたフォルダを、デスクトップ等のどこか使いやすい場所に置いておくと、そのままインストール不要で使えます。 USB メモリー等に入れて、持ち運んで使う事もできます。

具体的な起動方法や使用方法は、次の ステップ 1 (GUIモード) や ステップ 2 (CUIモード) で詳しく説明します。

# ステップ 1 - GUIモードで使ってみる
(電卓画面での使用)

RINPn には2つのモードがあり、ここで扱うGUIモードでは、グラフィカルな電卓画面上で計算を行う事ができます。 このGUIモードは、恐らくどなたでも簡単に扱う事ができるはずです。 という事で、まずはGUIモードで起動してみましょう！

## 起動方法

起動方法はご使用の環境によって異なりますので、下記の二通りのうち、適した方をお試しください。

### Microsoft® Windows® をご使用の場合

ダウンロード・展開したフォルダ内にある、 「 RINPn_?.?.?.bat (種類はバッチファイル、?の箇所はバージョンの数字) 」 をダブルクリックして起動してください。 なお、ステップ 2 で説明するように「 cmd 」フォルダのパスを環境変数 Path に登録しておくと、 コマンドライン端末上で「 rinpn 」と打って起動する事も可能になります。

初回起動時には、必要に応じて色々な準備処理などが始まりますが、 一手一手メッセージで案内されますので、その通りに進めればOKです。 完了すると、RINPn のウィンドウが立ち上がります。

### Linux® やその他の環境をご使用の場合

この場合には、以下のようにコマンドライン端末から入力して起動してください：

cd ここにRINPnのフォルダの場所(パス)を記述
java -jar RINPn.jar

なお、ステップ 2 で説明するように「 cmd 」フォルダのパスを環境変数 PATH に登録しておくと、 より単純に「 rinpn 」と打って起動する事も可能になります。

上記コマンドを実行した際に、java コマンドが使えない等のエラーが表示される場合は、別途 Java® 言語の実行環境(JRE)の導入が必要です。 その方法は、下記のようにいくつかあります。

色々なOSで共通して行える方法としては、 OpenJDK という開発環境（実行環境も含まれています）を導入する事が挙げられます。 詳しい導入手順については、「 OpenJDK インストール (ここにOSの名前) 」などでWeb検索してみてください。 実行環境目当てで入れるには少し大げさなのですが、RINPn では Java® 言語で自作した処理を呼ぶ事も可能で、 その際には開発環境も必要になるため、入れておくと後々で便利かもしれません。

なお、一部のLinux®ディストリビューションなどでは、apt コマンドなどで、簡単に実行環境のみを導入できる場合もあります。 詳しい手順は 「 JRE インストール (ここにOSの名前) 」などでWeb検索してみてください。 ただし、apt コマンド等でJREを導入する場合、名前の末尾に -headless が付いたバージョンを選ぶと RINPn が動作しないので、ご注意ください。

## 起動した電卓画面の様子

上で述べた通りに RINPn を起動すると、以下のような電卓画面が起動します:

電卓画面のキーパネル部は、「▲KEY-PANEL」スイッチをクリックすると収納可能で、もう一度クリックすると再び開けます。 画面の色や透明度、文字の大きさ、その他色々は「 Settings.txt 」内の設定値を変更してカスタマイズできます（普通にテキストエディタで開き、内容を編集して保存してください）。

## 計算方法

計算を行うには、「 INPUT 」欄に計算式を入力し、そのままPCのキーボードの Enter キーを押すか、電卓画面の「 = 」ボタンを押してください。 すると、計算された値が「 OUTPUT 」欄に表示されます。 例えば：

INPUT:
( 1 + 2 ) / 3 - 4 + 5
OUTPUT:
2

この通り、かっこ「 ( ) 」や四則演算の順序（かけ算と割り算は、足し算と引き算よりも先に計算されます）などを踏まえた、正しい計算結果が表示されます。

※ 入力した計算式をクリアするには、PCのキーボードの「Esc」キーを押すか、電卓画面の「C」ボタンを押してください。

なお、各種の関数/変数を使った式も計算できます：

INPUT:
sqrt ( sin( PI / 2 ) + 1 )
OUTPUT:
1.414213562

RINPn で標準で使える主な関数/変数については、 本文書の「 主な組み込み関数/変数 」のページでリストアップして解説しています。 また、ステップ-4 や ステップ-5 の通り、関数/変数を自作する事もできます。

- 演算精度と丸めについて -

RINPn の内部では、数値は2進数の倍精度浮動小数点数として扱われます。 この事により、表示される計算結果の精度は、多くの場合に有効数字で十数桁程度が目安で、それ以降の桁には各種の誤差が含まれます。 そのため標準では、RINPn は結果を10桁以内に丸めて表示するようになっています（丸め設定は「 Settings.txt 」内で変更できます）。 RINPn をご使用の際は、このような点にご留意ください。 用途や必要な精度によっては、RINPn の使用が適さない場合もあります。

# ステップ 2 - CUIモードで使ってみる
(コマンドでの使用)

RINPn には、ステップ 1 で扱ったGUIモードの他にも、CUIモードというモードがあります。 CUIモードでは、コマンドライン端末上で、電卓画面を起動せずにその場で計算を行う事ができます。

## CUIモードでの計算方法（パス登録なしの場合）

とりあえず何の追加作業も無しにCUIモードを使用するには、コマンドラインで以下のように、計算式を引数として「 RINPn.jar 」を実行してください：

cd RINPnのフォルダの場所
java -jar RINPn.jar "(1 + 2 ) / 3 - 4 + 5"
(結果) 2
java -jar RINPn.jar "sqrt ( sin( PI / 2 ) + 1 )"
(結果) 1.414213562

このように、GUIモードで行ったのと同じ計算を、電卓画面を起動せずに行う事ができました。

## CUIモードでの計算方法（パス登録ありの場合）

ただ、毎回上のように RINPn のフォルダに cd しつつ長いコマンドを打つのは、少し面倒ですね。 そこでOSの環境変数 PATH (または Path) に、RINPn の「 cmd 」フォルダのパスを登録 (すぐ下で説明) すると、 カレントディレクトリがどこであっても「 rinpn 」コマンドで手短に計算できるようになります：

rinpn "(1 + 2 ) / 3 - 4 + 5"
(結果) 2
rinpn "sqrt ( sin( PI / 2 ) + 1 )"
(結果) 1.414213562

パスの登録方法は、ご使用の環境に応じて異なりますので、下記の二通りのうち、適した方を行ってみてください。 なお、パスの登録作業は、誤って既存の登録内容を消してしまうと、 PCがこれまで通りに使用できなくなるなどの危険がありますので、 慎重に行ってください。 パス登録が初めての方で、熟練者の方に作業のガイドやご助力などを頼める場合には、ご依頼される事をお勧めします。

### Microsoft® Windows® 10 でのパス登録方法

RINPn のフォルダを、PC内のどこか定位置に配置した上で、以下の手順でパスを登録します：

スタートボタンを押す » 歯車アイコン(設定)を選択 » 「環境変数を編集」と検索して移動 » 開かれた画面で「ユーザー環境変数」の一覧から「Path」(無ければ作成)を選び「編集」ボタンを押す » 開いた画面の「新規」ボタンを押し、 RINPn の「 cmd 」フォルダのパス※を入力してください。 その後、開いている画面を「OK」で閉じれば完了です。
※ Shiftキーを押しながら cmd フォルダを右クリックすると、メニューからパスのコピーを行えます。

なお、RINPn のフォルダの配置場所を移動した際には、登録したパスも修正する必要があります。

### Linux® やその他の環境でのパス登録方法

まず、RINPn のフォルダを、PC内のどこか定位置に配置してください。ここでは例として、以下の場所に配置したものとします：

/usr/local/bin/rinpn/rinpn_?_?_?/
(?_?_?の箇所はバージョンの数字)

次に、cd コマンドで上記ディレクトリ内の「 cmd 」ディレクトリに移動して、 その中にある「 rinpn 」というファイル（拡張子無し）に、以下のように実行権限を付加します：

chmod +x rinpn
(権限エラーが出る場合は「 sudo chmod +x rinpn 」とします)

最後に、ユーザーのホームディレクトリにある、「 .bashrc(隠しファイル)」または「 .bash_profile 」もしくは「 .profile 」 （どのファイルが有効かはOSやディストリビューションによって異なります）をテキストエディタで開き、最終行に下記の一行を追記します：

export PATH=$PATH:/usr/local/bin/rinpn/rinpn_?_?_?/cmd/
(?_?_?の箇所はバージョン番号で置き換えてください)

上記はシェルが bash の場合です。Ubuntu® などを標準状態で使用している場合は、シェルが dash なので、右辺をダブルクォーテーションで囲います：

export PATH="$PATH:/usr/local/bin/rinpn/rinpn_?_?_?/cmd/"
(?_?_?の箇所はバージョン番号で置き換えてください)

他にも、シェルによって微妙に記法が違います。詳細は各自の環境について検索してください。

以上で完了です。

# ステップ 3 - スクリプトを実行する

RINPn では、手続き的な自動計算やアルゴリズム的な計算、またはその他の複雑な処理を行いたい場合のために、 「 Vnano 」 という言語で記述したスクリプト（簡易プログラム）を実行する事もできます。

## Vnano とは？

Vnano は、C言語系の文法を持つ、ソフトウェア内組み込み用のスクリプト言語＆エンジンです。 具体的な書き方については、Vnano 公式サイト内の 「 言語としてのVnano 」 のページをご参照ください。 Vnano のスクリプトを作成するには、好きなエディタで拡張子「 .vnano 」で終わる名前のテキストファイルを作成し、その中にコードを書くだけでOKです。 文字コードは標準では UTF-8 で読まれます。

## サンプルスクリプト

記述例として、RINPn のフォルダ直下に以下のスクリプトファイル「 Example.vnano 」が同梱されています。 このスクリプトは、cos(x) の 0 から 1 までの数値積分値を計算する内容になっています：

(Example.vnano をテキストエディタで開いた内容)
// 積分パラメータ
double A = 0.0;
double B = 1.0;
int N = 100000;
// 被積分関数
double f(double x) {
return cos(x);
}
// 積分を実行
double delta = (B - A) / N;
double value = 0.0;
for(int i=0; i<N; ++i) {
double x = A + i * delta;
value += ( f(x) + f(x+delta) + 4.0 * f(x+delta/2.0) ) * delta / 6.0;
}
// 結果を出力
output(value);

上記コード内容の詳しい解説については、こちらをご参照ください： https://www.vcssl.org/ja-jp/code/archive/0001/7800-vnano-integral-output/

## GUIモードでのスクリプト実行方法

GUIモードでスクリプトを実行するには、次の2通りの方法があります：

- 方法 1: 電卓画面の「 Script 」ボタンを押し、画面上でスクリプトファイルを選んで実行します。
- 方法 2: スクリプトファイルの名前（またはパス）を、電卓画面の「 INPUT 」欄に直接入力して、「 = 」ボタンか Enter キーを押して実行します。

どちらでも好みの方法で実行してください。

例として、上で見たサンプルスクリプト「 Example.vnano 」を実行してみましょう：

INPUT:
Example.vnano
OUTPUT:
0.8414709848

このように、「 OUTPUT 」欄にスクリプトの出力値が表示されます。 この出力値「 0.8414709848 」は、cos(x) の 0 から 1 までの積分の理論値である sin(1) とよく一致しており、 サンプルスクリプトの内容が正しく解釈・実行された事がわかります。

なお、Microsoft® Windows® をご使用の場合は、 Shiftキーを押しながらスクリプトファイルを右クリックすると、メニューからパスをコピーできるので、 RINPn の INPUT 欄にスクリプトのパスを入力する際に便利です。

## CUIモードでのスクリプト実行方法

CUIモードでも、計算式の代わりにスクリプトファイルを指定する事で、そのスクリプトを実行できます。

この使い方では、RINPn の「 cmd 」フォルダのパスをOSに登録せずに使う事は現実的に考え辛いため（ パス登録の利点と方法についてはこちら ）、以下ではあらかじめパスは登録されていて、rinpn コマンドが使用可能である事を前提に説明します。

コマンドライン入力端末のカレントディレクトリ内にあるスクリプトファイルは、 以下のように、rinpn コマンドの引数にファイル名のみを指定して実行可能です：

cd 実行したいスクリプトファイル(Example.vnano)のある場所
rinpn Example.vnano
(結果) 0.8414709848

また、カレントディレクトリを基準とする相対パス でスクリプトファイルを指定する事もできます。 これは、カレントディレクトリ内には無いものの、 近い場所（すぐ上や下の階層など）にあるスクリプトファイルを実行したい場合に便利です：

rinpn ../Example.vnano (上の階層にあるスクリプトを実行)
rinpn ./example/Example.vnano (exampleフォルダ内のスクリプトを実行)

加えて、以下のように絶対パスでスクリプトファイルを指定する事も可能です：

rinpn "C:\...\Example.vnano" (Microsoft® Windows® をご使用の場合など)
rinpn "/home/.../Example.vnano" (Linux® をご使用の場合など)

以上の通り、CUIモードでは3通りの方法でスクリプトファイルの指定が可能です。 場面に応じて、便利に思える指定方法を使い分けてください。

## 最適化レベルについて:
スクリプトの実行が重い時は…

ところで、スクリプトの実行処理が重い場合は、 「 Settings.txt 」内で「 acceleratorOptimizationLevel 」として設定されている最適化レベルの値を上げると、処理が速くなります。

最適化レベルを最低の 0 に設定しても、恐らく一般的な電卓の用途としては十分な性能が得られるため、標準では安定性を優先し、最適化レベルは 0 に設定されています。 ただ、RINPN で数値計算プログラムを頻繁に実行される方には、標準の最適化レベルではややパフォーマンスが不足気味かもしれません。

## コードアーカイブからスクリプトを入手しよう！

スクリプトは、もちろん自分で書くこともできますが、VCSSL/Vnano公式サイト内の、下記コードアーカイブでも配信しています：

コードアーカイブ » Vnano版のコード
  https://www.vcssl.org/ja-jp/code/#vnano

コード内容の解説記事も掲載していますので、別のスクリプトを書く際の参考や、改造/流用のベースとしても使えます。ぜひご活用ください！

- 配信プログラム例 -

ローレンツ方程式を数値的に解くスクリプト
| ローレンツ方程式を4次ルンゲ=クッタ法によって解き、グラフ描画用のデータを出力するスクリプトです。
積分値のグラフ描画用データを出力するスクリプト
| 数値的に積分を行い、結果の関数をグラフに描くためのデータを出力するスクリプトです。
積分値を求めるスクリプト (数値積分)
| 矩形法/台形法/シンプソン法を用いて、積分の値を数値的に求めるスクリプトです。

# ステップ 4 - スクリプトで関数/変数を追加する
(ライブラリ スクリプト の使用)

スクリプトは、単体で実行するためだけでなく、 計算式や別スクリプト内で使用するための関数や変数を、定義して提供するためにも役立ちます。 そのような目的のスクリプトの事を、 RINPn および Vnano では「 ライブラリ スクリプト 」と呼びます。

## ライブラリ スクリプトの使用方法

例えば、RINPn の「 lib 」フォルダ内にある「 ExampleLibrary.vnano 」は、 ライブラリスクリプトのサンプルで、標準で読み込まれるようになっています。 その記述内容は以下の通りです：

(lib フォルダ内の ExampleLibrary.vnano をテキストエディタで開いた内容)
float libvar = 2.0;
float libfun(float x) {
float result = libvar * x + 1;
return result;
}
なお、Vnano における float 型の精度は、double 型と同様の 64 bit なため、どちらを使っても同じです。 一応は float が標準の型名で、double は他言語との間の移植性や可読性に配慮して使える別名、という扱いとなっています。

上記の「 ExampleLibrary.vnano 」内で定義されている変数「 libvar 」や関数「 libfun(x) 」は、 例えば ステップ 1 で扱った、電卓に入力する計算式の中で、 以下の例のように使用できます：

INPUT:
1 + libvar
OUTPUT:
3
INPUT:
libfun(1.23)
OUTPUT:
3.46

同様に、ステップ 2 でコマンドライン引数に指定している計算式の中や、 ステップ 3 でのスクリプト内でも使用できます。

## 新しいライブラリスクリプトの追加方法（読み込み登録）

必要に応じて、別の新しいライブラリ スクリプトのファイルを作成し、その中で変数や関数を定義する事もできます。

新しいライブラリ スクリプト ファイルを作成した際は、 そのファイルを RINPn の「 lib 」フォルダ内（またはその子孫階層のフォルダ内）に置き、 そのファイルパスを、「 lib 」フォルダ直下にあるテキストファイル「 VnanoLibraryList.txt 」内に記載（追記）してください。 そうすると、そのライブラリ スクリプトが読み込まれるようになります。

# ステップ 5 - Java®言語で関数/変数を実装する
(プラグイン開発)

ライブラリ スクリプトによる方法以外にも、Java®言語を用いて、新しい組み込み関数/変数を実装する事もできます。 RINPn および Vnano では、組み込み関数/変数を提供する事を目的とした、 Java® 言語で記述されたプログラムの事を「 プラグイン 」と呼びます。

プラグインによる関数/変数定義は、 ステップ 4 のようにライブラリ スクリプトで関数や変数を定義する方法と比べて、 Java® 言語の高い機能性を利用できる事が大きなメリットになるかもしれません。

半面、実装したコードをコンパイルする際には、 別途 Java® 言語の開発環境 (JDK) が必要です。 ここでは、ご使用のPCに既に何らかのJDKが導入されていて、javac コマンドが使用可能になっている事を前提として解説します。 JDK の導入方法については、例えば「 OpenJDK インストール (ここにOSの名前) 」などでWeb検索してみてください。

## プラグインの使用方法

RINPn では、プラグインは「 plugin 」フォルダ内に置きます。 このフォルダ内には、標準で、以下のようなプラグインのサンプル「 ExamplePlugin.java 」が同梱されています：

(plugin フォルダ内の ExamplePlugin.java をテキストエディタで開いた内容)
public class ExamplePlugin {
public double pivar = 1.0;
public double pifun(double arg) {
return arg * 2.0;
}
}

このプラグインは標準でコンパイルされており、読み込まれるよう設定されています（それぞれの方法はすぐ後で説明します）。

上のプラグインで定義しているフィールド「 pivar 」やメソッド「 pifun(arg) 」は、 例えば ステップ 1 で扱った、電卓に入力する計算式の中で、 以下のように関数/変数として使用できます：

INPUT:
1 + pivar
OUTPUT:
2
INPUT:
pifun(2)
OUTPUT:
4

同様に、ステップ 2 でコマンドライン引数に指定している計算式の中や、 ステップ 3 でのスクリプト内でも使用できます。

## プラグインのコンパイル方法

プラグインのコード内容を編集した場合には、コンパイルする必要があります。 以下のように、普通の Java® 言語のプログラムと同様にコンパイルできます：

cd RINPnのpluginフォルダの場所(パス)
javac ExamplePlugin.vnano

なお、「 plugin 」フォルダ内のさらに org/vcssl/connect フォルダ内には、 Vnano のプラグイン開発に有用なインターフェース類 ( XFCI1 や XNCI1 など ) が、 標準で配置されています。 そのため、必要に応じて、それらのインターフェース類をプラグインから import して使用できます （詳細は Vnanoのドキュメント内の「 プラグインの開発 」をご参照ください）。 その場合でも、特に何かを用意したり、コンパイラにオプション等を指定したりする必要はありません。

## 新しいプラグインの追加方法（読み込み登録）

新しいプラグインを作成した際は、まず、そのファイルを RINPn の「 plugin 」フォルダ内に置いてコンパイルしてください。 子孫階層のフォルダに置きたい場合は、それに整合する階層のパッケージをプラグインのコード先頭で宣言して、 普通のパッケージ所属クラスと同様の方法でコンパイルしてください。

続いて、そのプラグインのクラスファイルのパスを、「 plugin 」フォルダ直下にあるテキストファイル「 VnanoPluginList.txt 」内に記載（追記）してください。 そうすると、そのプラグインが読み込まれるようになります。

## Vnano 標準プラグイン

「 plugin 」フォルダ内のさらに org/vcssl/nano/plugin フォルダ内には、 基本的な機能群（数学関数やユーティリティ関数など）を提供する「 Vnano 標準プラグイン 」が配置されており、 標準で読み込まれるよう設定されています。

標準プラグインによって提供される機能の一覧や詳細仕様については、 Vnano 公式サイト内の、標準プラグインの仕様書ページ をご参照ください。 なお、RINPn において特によく使いそうな関数や変数については、 本文書の「 主な組み込み関数/変数 」のページでもリストアップし、簡略化した機能説明文を掲載しています。

# ステップ 6 - 別のソフトウェア内に組み込んで使う

RINPn が使用している計算＆スクリプト処理エンジンである「 Vnanoエンジン 」は、Java® 言語で記述した別のソフトウェア内に組み込んで使う事ができます。 開発元は RINPn と同じで、組み込み方や使い方も意外と簡単なので、ここで実際に試してみましょう！

## サンプルコード

以下は、Vnanoエンジンを用いて、 RINPn と同じようなエンジン設定で式「 1.2 + 3.4 」の値を計算する単純なサンプルコードです：

import org.vcssl.nano.VnanoEngine;
import org.vcssl.nano.VnanoException;
import org.vcssl.nano.interconnect.ScriptLoader;
import org.vcssl.nano.interconnect.PluginLoader;
import java.util.Map;
import java.util.HashMap;
public class EmbedUseExample {
public static void main(String[] args) throws VnanoException {
////////// Vnano エンジンの準備 ここから //////////
// RINPn で計算に用いているスクリプトエンジン（Vnanoエンジン）を生成
VnanoEngine engine = new VnanoEngine();
// Vnano エンジンのオプション設定（詳細は Settings.txt 内の説明参照）
Map<String, Object> optionMap = new HashMap<String, Object>();
optionMap.put("EVAL_INT_LITERAL_AS_FLOAT", true);
optionMap.put("EVAL_ONLY_FLOAT", true);
optionMap.put("EVAL_ONLY_EXPRESSION", true);
optionMap.put("UI_MODE", "CUI"); // CUIベースソフト用
// optionMap.put("UI_MODE", "GUI"); // GUIベースのソフト用
optionMap.put("ACCELERATOR_ENABLED", true);
optionMap.put("ACCELERATOR_OPTIMIZATION_LEVEL", 0);
engine.setOptionMap(optionMap); // エンジンに登録
// パーミッション機能に対応したプラグインに通知するパーミッション設定
Map<String, String> permissionMap = new HashMap<String, String>();
permissionMap.put("DEFAULT", "ASK"); // ユーザーに尋ねる挙動をデフォルト化
// permissionMap.put("DEFAULT", "DENY"); // デフォルトを拒否挙動にしたい場合
// (ここで個別に設定したい許可項目を追加設定 / 例は以下)
// permissionMap.put("FILE_READ", "ALLOW");
engine.setPermissionMap(permissionMap); // エンジンに登録
// プラグインの読み込み
PluginLoader pluginLoader = new PluginLoader("UTF-8");
pluginLoader.setPluginListPath("./plugin/VnanoPluginList.txt");
pluginLoader.load();
for (Object plugin: pluginLoader.getPluginInstances()) {
engine.connectPlugin("___VNANO_AUTO_KEY", plugin);
}
// ライブラリの読み込み
ScriptLoader scriptLoader = new ScriptLoader("UTF-8");
scriptLoader.setLibraryScriptListPath("./lib/VnanoLibraryList.txt");
scriptLoader.load();
String[] libPaths = scriptLoader.getLibraryScriptPaths(true);
String[] libScripts = scriptLoader.getLibraryScriptContents();
int libCount = libScripts.length;
for (int ilib=0; ilib<libCount; ilib++) {
engine.registerLibraryScript(libPaths[ilib], libScripts[ilib]);
}
////////// Vnano エンジンの準備 ここまで //////////
// Vnano エンジンで「 1.2 + 3.4 」の値を計算して表示
String input = "1.2 + 3.4";
double x = (double) engine.executeScript(input + ";");
System.out.println("Vnano エンジンの出力値: " + x);
// ライブラリ/プラグインの解放/接続解除（ソフトウェアの終了前などに行います）
engine.unregisterAllLibraryScripts();
engine.disconnectAllPlugins();
}
}

## コンパイル・実行方法

上記のコードは、Vnano エンジンのJarファイル「 Vnano.jar (RINPnのフォルダ内に既に存在) 」をクラスパスに指定しつつ、下記のようにコンパイルします：

(Microsoft® Windows® をご使用の場合)
javac -cp ".;Vnano.jar" -encoding UTF-8 EmbedUseExample.java
(Linux® やその他の環境をご使用の場合)
javac -cp ".:Vnano.jar" -encoding UTF-8 EmbedUseExample.java
※ 最初の2行は、-cp 直後の "～" 内の区切り文字が、「 ; 」か「 : 」かという点が異なります。

コンパイルに成功すると、「 EmbedUseExample.class 」が生成されます。 同様に、Vnano.jar をクラスパスに指定しつつ実行します：

(Microsoft® Windows® をご使用の場合)
java -cp ".;Vnano.jar" EmbedUseExample
(Linux® やその他の環境をご使用の場合)
java -cp ".:Vnano.jar" EmbedUseExample

実行結果は：

スクリプトエンジンの出力値: 4.6

この通り、計算式「 1.2 + 3.4 」の値「 4.6 」を Vnano エンジンで求める事ができました。 式の中でライブラリ/プラグインの関数を呼んだり、式の代わりに Vnano で記述したスクリプトのコードを渡す事もできます。

## Vnanoエンジンのライセンス、その他詳しい情報など

RINPn 同様に、VnanoエンジンもMITライセンスのオープンソースソフトウェアで、商用・非商用問わず無償で利用できます。

その他、より詳しい情報や、ガイド・仕様書などのドキュメント類などについては、 下記 Vnano エンジンの公式サイトで整備されていますので、ご参照ください。

Vnano 公式サイト（日本語版）
  https://www.vcssl.org/ja-jp/vnano/
Vnano 公式サイト（英語版）
  https://www.vcssl.org/en-us/vnano/

# 付録 - 主な組み込み関数/変数

ここでは、RINPn で標準で利用できる関数および変数の中から、特によく使うものをリストアップして紹介します。

以下に挙げる関数/変数の大半は、「 プラグイン 」の項目でも触れた、 Vnano 標準プラグインが提供しています。 従って、全ての関数/変数のリスト、およびより詳細な仕様については、Vnano 標準プラグインの仕様書をご参照ください。 ここでは、説明内容を簡略化して掲載しています。

## 組み込み関数

rad( degree )

  度からラジアンへの変換関数です。

  例： rad( 180.0 )

deg( radian )

  ラジアンから度への変換関数です。

  例： deg( 2.0 * PI )

sin( x )

  正弦（サイン）関数です。引数 x の単位はラジアンです。

  例： sin( PI / 2.0 )

cos( x )

  余弦（コサイン）関数です。引数 x の単位はラジアンです。

  例： cos( 2.0 * PI )

tan( x )

  正接（タンジェント）関数です。引数 x の単位はラジアンです。

  例： tan( PI / 4.0 )

asin( x )

  正弦関数の逆関数（アークサイン）です。結果の単位はラジアンです。

  例： asin( 1.0 )

acos( x )

  余弦関数の逆関数（アークコサイン）です。結果の単位はラジアンです。

  例： acos( 1.0 )

atan( x )

  正接関数の逆関数（アークタンジェント）です。結果の単位はラジアンです。

  例： atan( 1.0 )

sqrt( x )

  平方根を求める関数です。

  例： sqrt( 4.0 )

ln( x )

  自然数 e を底とする対数関数です。

  例： ln( 10.0 )

log10( x )

  10 を底とする対数関数です。

  例： log10( 1000.0 )

pow( x, exponent )

  x の exponent 乗を求める関数です。

  例： pow( 2.0, 3.0 )

exp( exponent )

  自然数 e の exponent 乗を求める関数です。

  例： exp( 1.2 )

abs( x )

  絶対値関数です。

  例： abs( -1.23 )

sum( ... )

  和を求める関数です。

  例： sum( 1.23 , 4.56 , 7.89 )

mean( ... )

  平均値（算術平均）を求める関数です。

  例： mean( 1.23 , 4.56 , 7.89 )

van( ... )

  分散（ 分母： n ）を求める関数です。

  例： van( 1.23 , 4.56 , 7.89 )

van1( ... )

  分散（ 分母： n-1 ）を求める関数です。

  例： van1( 1.23 , 4.56 , 7.89 )

sdn( ... )

  標準偏差（ 分母： n ）を求める関数です。

  例： sdn( 1.23 , 4.56 , 7.89 )

sdn1( ... )

  標準偏差（ 分母： n-1 ）を求める関数です。

  例： sdn1( 1.23 , 4.56 , 7.89 )

length( array, dim )

  配列 array における、dim 番目の次元の要素数を返す関数です。

  例： length( array, 0 )

output( value )

  スクリプトの計算結果の値を表示するための関数です。 GUIモードでは、値は「 OUTPUT」 テキストフィールドに表示されます（複数回呼ぶと、表示内容は単純に上書きされます）。 CUIモードでは、値は標準出力に 1 行で出力されます。

  例： output( 1.23 )

print( value )

  スクリプト内で、長い内容や複数行の内容を表示するために、汎用的に用いる関数です。 任意個数・任意次元・任意型の値を表示可能で、値は 1 個ずつ（ 1 要素ずつ）タブ空白区切りで表示されます。 GUIモードでは、値は独立なウィンドウ上に、自動改行なしで追記されていきます。 CUIモードでは、値は標準出力に自動改行なしで追記されていきます。

  例： print( 1.2 , 3.4 , 5.6 )

println( value )

  上記の print 関数とほぼ同様ですが、この関数は内容を自動改行付きで表示/出力します。

  例： println( 1.2 , 3.4 , 5.6 )

## 組み込み変数

PI

  円周率 π の値を保持する変数（定数）です。

  値： 3.141592653589793

# 開発元について

RINPn および Vnano は、日本の開発スタジオである RINEARN が開発しています（両ソフトウェアの著者は松井文宏です）。 RINEARNでは、データ解析や可視化・計算向けのものをはじめ、各種のソフトウェアを開発しています。 このソフトウェアに関するご質問やご意見・ご感想、その他お気づきの点などがございましたら、どうぞご気軽にお問い合せください。

RINEARN 公式サイト
  https://www.rinearn.com/
お問い合せページ
  https://www.rinearn.com/ja-jp/contact/

# 本文書内の商標などについて

- OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
- Windows は、米国 Microsoft Corporation の米国およびその他の国における登録商標です。
- Linux は、Linus Torvalds 氏の米国およびその他の国における商標または登録商標です。
- Ubuntu は、Canonical Ltd. の米国およびその他の国における商標または登録商標です。
- その他、文中に使用されている商標は、その商標を保持する各社の各国における商標または登録商標です。

RINPn ユーザーガイド
文章・イラスト: 松井文宏