Node.js から 高速な Btrieve 2 API を利用する方法
Actian Zen をもっとも高速に活用するために、Zen のネイティブ API である Btrieve 2 API を Node.js から呼び出す方法について解説します。
はじめに
Node.js を使用すればサーバーサイドでも Javascript を使用してプログラムを作成する事ができます。
Actian Zen をNode.js から使用する最も簡単な方法は、こちらの FAQ のように ODBC 経由で SQL を使用してアクセスする事です。
しかしながら、Actian Zen の大きな特徴である高速性をフル活用するためには、標準 SQL を利用するよりも Zen のネイティブ API である Btrieve 2 API を呼び出した方が有利です。Btrieve 2 API を使用することで、Node.js でも より高速なデータアクセス性能を得ることが出来ます。
Btrieve 2 API は C/C++ 向けのライブラリで構成されていますが、Actian 社は SWIG (Simplified Wrapper and Interface Generator) の定義ファイルを提供しているので、他のスクリプト言語や、プログラミング言語からも Btrieve 2 API を利用する事が可能になっています。
Node.js から Btrieve 2 API を利用するためには、まず Node.js 用の Btrieve 2 API ライブラリを用意する必要があります。
各モジュールの関連図
当記事では、Node.js のネイティブアドオンの作成方法と、簡単な Btrieve 2 API 呼び出しサンプルをご紹介します。
なお今回は、x64版 CentOS 7.4 及び Ubuntu 18.04.4 LTS を使用して作業の説明を行っています。 それぞれでコマンド操作が異なる場合には明示していますが、特に区別がない場合は、両者共通のコマンド入力となっています。
以下の作業では、手持ちの PC にデモ環境を構築し、Btrieve の呼び出しを行う簡単なサンプル Javascript プログラム “bcreate_insert_read_sample2.js” を動かします。
※bcreate_insert_read_sample2.js は、ここからダウンロードできます。
このプログラムは、次の処理を行います。
|
サンプルデータベースの構造
1. node-gyp について
Node.js は様々なプラットフォームで動作するため、Btrieve 2 API のようなプラットフォーム固有の機能も、それぞれの環境に合わせた「ネイティブアドオン」を用意してアクセスします。
node-gyp は、Node.js 用のネイティブアドオンをビルドするためのツールです。
公式ページ
https://github.com/nodejs/node-gyp
導入方法に関しては、後ほど説明します。
※ node-gyp を動かすためには その他に Python3、C++、および make が必要となります。
2. Node.jsアドオン作成手順
Node.jsアドオン作成の基本的な手順としては、
- node-gyp(その他必要となるツール類)をシステムにインストールする
- node-gyp configure を実行する
→ アドオンプロジェクトの ビルド用ファイル(makefile等)が生成される - node-gyp build を実行しアドオンをビルドする
- Node.js で Btrieve 2 API を利用したプログラムを作成する
という流れになります。
それでは、実際に環境を構築していきましょう。
3. 環境構築
最初にOSの環境を最新にします。
(これをしておかないと各種パッケージが正常にインストールできない場合があります)
CentOS:
$ sudo yum update |
Ubuntu:
$ sudo apt update $ sudo apt upgrade |
次に、Zen をインストールします。
ここではユーザー “test” を使用して説明します。また、インストール用ファイルは /home/test/ にあると仮定しています。
(ファイル名は、ご入手いただいた実際のファイル名に置き換えて読み進んでください)
$ sudo su # cd /usr/local # tar -zxf /home/test/Zen-EnterpriseServer-jajp-linux-x86_64-14.11.014.000.tar.gz # cd actianzen/etc # ./preinstall.sh # ./postinstall.sh |
念のため次のコマンドで動作を確認してください。
Zen エンジンのバージョン情報が表示されれば エンジンは動作しています。
# su zen-svc $ isql demodata SQL> select @@version SQL> quit $ exit |
4. Node.js インストール
続いて Node.js をインストールします。
CentOS:
# curl -sL https://rpm.nodesource.com/setup_10.x | bash – # yum remove -y nodejs npm # yum install -y nodejs # node -v |
インストールされた node.js がバージョンを返せばインストールできています。
(こちらの環境では v10.21.0 がインストールされました)
Ubuntuの場合は、次の通りです。
Ubuntu:
# apt install nodejs # node -v |
(こちらの環境では v8.10.0 がインストールされました)
5. サンプル用フォルダの作成
サンプルの作業用として ActianZen ディレクトリを用意し、その中に Swig4、Demo の2つのディレクトリを作成します。
# exit $ cd /home/test $ mkdir ActianZen $ cd ActianZen $ mkdir Swig4 $ mkdir Demo |
それぞれのディレクトリにファイルを配置していきます。
6. SWIG の導入
C/C++ のライブラリである Btrieve 2 API のライブラリを Javascript から呼び出せるよう、ラッパーライブラリを swig を使って生成します。
swig 本体は、 http://www.swig.org/ から最新の ソースファイルをダウンロードしてください。
(Download -> Download Area -> The Latest Release の swig-4.0.2 から入手できます)
ダウンロードしたswig-4.0.2.tar.gz は、Swig4 ディレクトリにコピーしておきます。
次に、swig のソースファイルを展開します。
$ cd /home/test/ActianZen/Swig4 $ tar -zxf swig-4.0.2.tar.gz $ cd swig-4.0.2 |
既に環境に古いバージョンの swig が導入されている場合があるので、念のため次のコマンドで削除してください。
CentOS:
$ sudo yum erase swig |
Ubuntu:
$ sudo apt remove swig |
swig の動作に必要となる php、python3 をインストールします。
CentOS:
$ sudo yum install -y php $ sudo yum install -y python3 |
Ubuntu:
$ sudo apt install php-dev $ sudo apt install python3-dev |
環境に合わせた設定を行い、make を実行後、インストールします。
$ ./configure –without-python –without-perl5 –with-php $ make -j4 $ sudo make install $ swig -version |
バージョン情報が表示されれば成功です。
7. ネイティブアドオンのコンパイル
swig の準備ができたので、Node.js 用のネイティブアドオンのコンパイルします。
まずは、Btrieve 2 API の SDK ファイルを展開します。
ここでは Zen-SDK-Btrieve2API-linux-noarch-14.11.014.000.tar.gz は ActianZen/Demo ディレクトリに置かれているものとします。
$ cd /home/test/ActianZen/Demo $ tar -zxf Zen-SDK-Btrieve2API-linux-noarch-14.11.014.000.tar.gz $ cd Zen-SDK-Btrieve2API-000-linux-noarch-14.11.014/swig/btrieveJavascript |
Btrieve 2 API のラッパーファイルをswigで生成します。
(btrieveJavascript_wrap.cxxファイルが作成されます)
$ swig -javascript -node -I../../include -c++ btrieveJavascript.swig |
最後に Node.js のネイティブアドオンを作成します。
アドオン作成のツールである node-gyp をインストールします。
CentOS:
$ sudo npm install -g node-gyp |
Ubuntu:
$ sudo apt install aptitude $ sudo aptitude install node-gyp |
これで node-gyp が準備できたので Node.js のネイティブアドオンの作成準備が整いました。
$ node-gyp configure $ node-gyp build |
8. サンプルプログラムの実行
フォルダにアクセスを与えます。
また、Zenのライブラリにもパスを指定しておきます。
$ chmod a+rwx . $ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/actianzen/lib64 |
サンプル bcreate_insert_read_sample2.js を現在のディレクトリ
/home/test/ActianZen/BtrieveJavascript/Zen-SDK-Btrieve2API-000-linux-noarch-14.11.014/swig/btrieveJavascript
にコピーします。
サンプルを実行します。
$ node bcreate_insert_read_sample2.js |
データファイルが作成される場所は、スクリプトの先頭で次のように定義されています。
btrieveFileName = “/usr/local/actianzen/data/test_cr_ins_read.btr” |
ファイルは Zen エンジンが読み書きできる場所に作成される必要があります。
※ Zen エンジンの動作アカウントは、ユーザー名 zen-svc、グループ名 zen-data です。
また、このサンプルでは最後の処理で作成したデータファイルを削除する処理が含まれていますが、作成されたデータを確認するために、削除処理はコメントアウトしています。
作成されたBtrieveファイルをWindows 環境にコピーして Function Executor 等の Zen 付属ツールで書き込まれた内容をご確認下さい。