IBM Cloud の旧 Bluemix に代表される、いわゆる PaaS 環境ではアプリケーション・サーバーなどのミドルウェアまでをベンダー側が提供し、利用者はサーバーやその管理を意識せずにアプリケーションのみ提供して動かすことができます。
これはこれで便利な環境なのですが、一方で実際に動かしている環境の詳細(ミドルウェアや言語ランタイムのバージョンなど)を知りたくなることもあります。知らなくても使えるんだけど知りたい、という要望です。そういった情報が公開されていればいいのですが、多くのケースで常に最新バージョンが使われるようにメンテナンスされており、公開情報が最新版の内容を反映していないケースもあります。というわけで IBM Cloud の SDK for Node.js ランタイムを対象に実際に動いている環境からバージョンを調べる、という方法で調べてみました。
SDK for Node.js ランタイムで以下のコードをデプロイして動かします:
↑プログラムコード内から process.version を参照して、現在動いている node のバージョンを取り出しています。
ちなみに package.json は以下のように Node.js v6.x の最新版が使われるように指定しています:
このコードを cf push でデプロイし、(2018/10/27 時点で)GET / を実行した結果がこちらです:

v6.x の最新版、が使われた結果がこのようになりました。
また、package.json の同部分を "node": "8.x" に変えて再デプロイして実行するとこうなりました:

動的に Node.js の実行バージョンを取得することができました。
これはこれで便利な環境なのですが、一方で実際に動かしている環境の詳細(ミドルウェアや言語ランタイムのバージョンなど)を知りたくなることもあります。知らなくても使えるんだけど知りたい、という要望です。そういった情報が公開されていればいいのですが、多くのケースで常に最新バージョンが使われるようにメンテナンスされており、公開情報が最新版の内容を反映していないケースもあります。というわけで IBM Cloud の SDK for Node.js ランタイムを対象に実際に動いている環境からバージョンを調べる、という方法で調べてみました。
SDK for Node.js ランタイムで以下のコードをデプロイして動かします:
// app.js
var cfenv = require( 'cfenv' );
var express = require( 'express' );
var app = express();
var appEnv = cfenv.getAppEnv();
app.get( '/', function( req, res ){
var process_version = process.version;
res.write( JSON.stringify( { version: process_version }, 2, null ) );
res.end();
});
var port = appEnv.port;
app.listen( port );
console.log( 'server started on ' + port );
↑プログラムコード内から process.version を参照して、現在動いている node のバージョンを取り出しています。
ちなみに package.json は以下のように Node.js v6.x の最新版が使われるように指定しています:
{
"name": "node-v",
"version": "0.0.1",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"cfenv": "~1.0.0",
"express": "4.1.x"
},
"repository": {},
"engines": {
"node": "6.x"
}
}
このコードを cf push でデプロイし、(2018/10/27 時点で)GET / を実行した結果がこちらです:

v6.x の最新版、が使われた結果がこのようになりました。
また、package.json の同部分を "node": "8.x" に変えて再デプロイして実行するとこうなりました:

動的に Node.js の実行バージョンを取得することができました。