IBM i で node.js を使ってみよう!!(1)- REPL から Hello World まで -

IBM i 上の Node.js については、こちらの「Node.js」というサイトに情報が集まっています。

バージョン

↑ のサイトで確認した最新のPTF(2015年8月7日時点では SI57347)を適用した状態での、node.js のバージョンは ↓のようになっています。

基本的な情報

↓ のページで node.js を利用するにあたって基本的な情報が得られると思います。

どうやって起動する??

node.js のユーティリティやプログラムの実行は Qshell もしくは PASE Shell (CALL QP2TERM で起動)上で実行します。↑ の例は PASE Shell 上での実行例です。CCSID が 1399 のジョブで実行しました。
今回からの一連の記事でテストしてみたりデバッグしてみたりした結果、Qshell よりは PASE Shell での実行の方が安定しているような印象を持ちました。ただ、あくまで私の印象に過ぎません。いろんな環境や要件があるでしょうから、テストしてみてどちらを選ぶか決めるといいでしょう。

実は、IBM System i NODEJS: Common questions & basic factsの「All about node command:」のところに↓のようにあります。

Currently, the only method to execute the node command is through PASE session. It is not recommended to use a standard QShell session.

IBM i NODEJS: Troubleshooting Recommendationsにも「Error: Process ended by signal 5」 の原因として

This is typically due to the attempting to run Nodejs in QShell (STRQSH) rather than PASE.

とあり、解決策として

Use PASE (call qp2term) rather than QShell for Nodejs scripts.

と載っています。

やはり、PASE Shell を使うのが無難でしょうね。

PTF

PTF はできるだけ最新にしましょう。少なくとも、この最新の PTF については、適用前と適用後で安定性が全然違いました。5733-OPS を導入しただけの状態ではもっと不安定だったので、PTF を適用するごとに安定性が向上していった印象です。

特にこうした新しい製品について、PTF もロクに当たっていない状態でちょこちょこっとテストしただけで、「バグがある」とか「安定性に欠ける」などという人がいますが、技術力の底の浅さが見えてしまいます。

IBM i の製品や機能についてもしそんなことを言っている人がいたら、適用されている PTF のレベルなどを聞いてみましょう。きちんと番号をこたえられなかったら、あまり信用しない方がいいかもしれませんよ!?

いずれにせよ、まずはきちんと最新の状況を調べ、注意点などないかを確認し、最新の PTFなどを適用したうえでテストをしましょう。


REPL

REPL も実行できます。

REPL を実行する場合は、先だって ↓ のコマンドを実行しておきましょう。

上記 ADDENVVAR コマンドを実行しないと、↓ のような不要な文字がプロンプトされることがあります。

まぁ、このままでも使えるんですけどね。

ちょっとしたアプリケーションを実行してみよう

ここからは、「Native JavaScript applications on IBM i with Node.js」を参考にしてテストしてみた結果の紹介です。
↓ はサーバ側の実行画面ですが、メッセージから想像されるとおり、ブラウザなどから SQL や CL コマンドの実行ができるようになります。

Hello World

まず最初に、ごくシンプルにブラウザがリクエストすると文字列(K&R 以来の ”Hello World” ですね)を返してくるプログラムを見てみましょう。

Node.js 自体は IBM i でも変わらないということで、こちらの例をほぼそのまま使ってみました。IBM i のサイトに載っている例だと何か特殊なものなのでは? と思われるかもしれないので一般的なサイトからサンプルを入手してそのまま実行してみた、ということです。特別なコーディングは必要ない、ということですね。

こちらがブラウザからの実行結果です。サーバ側では ↑ の node.js のプログラムを実行しているだけです。HTTP サーバなどは起動されていない状態です。

実行に使用したソースはこちらになります。「Native JavaScript applications on IBM i with Node.js」の Overview of the example に ↓ のように書いてありますが、「node.js では UTF-8 で書かれたソースファイルしかサポートしない」ということです。ソースファイルの保管時に、文字コードは UTF-8 を指定するようにしてください。

Note: Node.js does not support source file encoded with EBCDIC. Use a UTF-8 encoding or UTF-8 compatible CCSID, such as 819 (ISO 8859-1 ASCII).
var http = require("http");

http.createServer(function(request, response) {
   response.writeHead(200, {
      "Content-Type": "text/plain"
    });
   response.write("Hello World");
   response.end();
}).listen(8888);
console.log('Server runnning'); 

PC でファイルを作成し、UTF-8 で保管し、FTP で IFS 上のディレクトリ(↑ の例では home/nodejs)に転送して使用しました。

IBM i での例として、↑ とほとんど同じ内容のものが「Running 'Hello World' in Node.js on IBM i」に載っています。参考までにどうぞ。


次回は、node.js のプログラムでのシンプルなアプリケーションとして、HTMLファイルを表示するやり方を紹介したいと思います。

[Top Pageに戻る]

Ads by TOK2