サーバーサイド JavaScript サーバーである StrongLoop をローカル環境に作成(&実行)する手順を以前に紹介しました:
CentOS に StrongLoop をインストールする
上記記事では、データストア先として標準のメモリ DB を使う前提で手順を紹介していますが、実際には外部のリレーショナル DB を使いたいケースも多いと思っています。というわけで、データストアに MySQL を使う場合の手順を紹介します。
まずは上記リンク先を参照して、StrongLoop のインストールと、StrongLoop アプリケーションの作成(上記リンク先ページだと slc loopback コマンドで myapp アプリを作るところ)までを実行しておいてください。以下、アプリケーションの名前は myapp として、myapp ディレクトリが出来ている前提で以下を紹介します。違うアプリケーション名で作成した場合は適宜読み替えてください:
また、このアプリケーションのデータストア先となる MySQL データベース、および接続情報は以下のようになっているものと仮定します:
ではこのアプリケーションのデータストア先が上記の MySQL データベースになるようカスタマイズを開始します。まずは LoopBack MySQL コネクタをインストールします:
LoopBack MySQL コネクタのインストールができたら、LoopBack としてのデータソースを作成します。ここでは "mydb" という名前でデータソースを作成しています。データソース名の指定ではデフォルトの mydb のまま、コネクタタイプの指定ではカーソルを MySQL に合わせて選択します:
今の手順でデータソースファイル(server/datasource.json)が生成されています。このファイルを編集して、目的のリモート MySQL データベースに接続するよう上記の接続情報を指定します(青字部分を追加します):
ここまでくれば後は前回と同様です。API で CRUD を行うモデルとして、以下の様な item モデルを定義しましょう:
モデルの名称は item、データソースは先程定義した(MySQL 上の)mydb、PersistedModel で REST API の公開対象とします。また Common model を指定します:
続けて3つのフィールドの名前、型、必須条件をそれぞれ指定していきます。最後に名前指定の所でそのまま Enter を押すとモデルの定義も終了です:
最後にこのモデルを DB スキーマとして登録しましょう。MySQL にコマンドラインでログインし、以下のような create table コマンドを実行して item テーブルを作ります:
これで動く状態ができました。実際に動かしてみましょう:
で、ウェブブラウザを起動して、この開発環境の 3000 番ポートの /explorer パスにアクセスしてみます:
作成した myapp アプリケーションの中で、定義した item モデルの CRUD API が公開されています!
実際にデータを作成してみましょう。item モデルを展開後の /items の POST メソッドを開き、data フィールドに以下の内容を入力して "Try it out!" ボタンをクリックしてみます:
実行結果が以下のようになっていれば POST コマンドは成功して、テーブルに1レコードが追加されたことになります:
ちなみにこの段階で /items の GET コマンドを実行すると、今作成したデータが返されるはずです。
念のため、MySQL サーバーにログインして item テーブルの中身を確認すると、このコマンドで POST したレコードが作られているはずです。リモートの MySQL と連携する StrongLoop 環境が作れたことになります:
なお、この状態を cf コマンドで IBM Bluemix 上の Node.js ランタイムにプッシュすると、そっくりそのまま Bluemix 環境で動かすことも可能です:
以上、StrongLoop と MySQL との連携方法の説明、および Bluemix 環境への移行方法の紹介でした。
CentOS に StrongLoop をインストールする
上記記事では、データストア先として標準のメモリ DB を使う前提で手順を紹介していますが、実際には外部のリレーショナル DB を使いたいケースも多いと思っています。というわけで、データストアに MySQL を使う場合の手順を紹介します。
まずは上記リンク先を参照して、StrongLoop のインストールと、StrongLoop アプリケーションの作成(上記リンク先ページだと slc loopback コマンドで myapp アプリを作るところ)までを実行しておいてください。以下、アプリケーションの名前は myapp として、myapp ディレクトリが出来ている前提で以下を紹介します。違うアプリケーション名で作成した場合は適宜読み替えてください:
また、このアプリケーションのデータストア先となる MySQL データベース、および接続情報は以下のようになっているものと仮定します:
属性 | 値 |
---|---|
MySQL サーバー名 | (HOSTNAME) |
MySQL ポート番号 | 3306 |
データベース名 | (DBNAME) |
ユーザー名 | (USERNAME) |
パスワード | (PASSWORD) |
ではこのアプリケーションのデータストア先が上記の MySQL データベースになるようカスタマイズを開始します。まずは LoopBack MySQL コネクタをインストールします:
# cd myapp # npm install --save loopback-connector-mysql
LoopBack MySQL コネクタのインストールができたら、LoopBack としてのデータソースを作成します。ここでは "mydb" という名前でデータソースを作成しています。データソース名の指定ではデフォルトの mydb のまま、コネクタタイプの指定ではカーソルを MySQL に合わせて選択します:
# slc loopback:datasource mydb : : ? Enter the data-source name: mydb ? Select the connector for mydb: MySQL (supported by StrongLoop)
今の手順でデータソースファイル(server/datasource.json)が生成されています。このファイルを編集して、目的のリモート MySQL データベースに接続するよう上記の接続情報を指定します(青字部分を追加します):
# vi server/datasource.json
{
"db": {
"name": "db",
"connector": "memory"
},
"mydb": {
"host": "(HOSTNAME)",
"port": 3306,
"database": "(DBNAME)",
"user": "(USERNAME)",
"password": "(PASSWORD)",
"name": "mydb",
"connector": "mysql"
}
}
ここまでくれば後は前回と同様です。API で CRUD を行うモデルとして、以下の様な item モデルを定義しましょう:
列名 | 列型 | 必須条件 |
---|---|---|
name | string | YES |
code | string | YES |
price | number |
モデルの名称は item、データソースは先程定義した(MySQL 上の)mydb、PersistedModel で REST API の公開対象とします。また Common model を指定します:
# slc loopback:model item : : ? Enter the model name: item ? Select the data-source to attach item to: mydb (mysql) ? Select model's base class PersistedModel ? Expose item via the REST API? Yes ? Custom plural form (used to build REST URL): ? Common model or server only? common Let's add some item properties now.
続けて3つのフィールドの名前、型、必須条件をそれぞれ指定していきます。最後に名前指定の所でそのまま Enter を押すとモデルの定義も終了です:
: : Enter an empty property name when done. ? Property name: name (!) generator#invoke() is deprecated. Use generator#composeWith() - see http://yeoman.io/authoring/composability.html invoke loopback:property ? Property type: string ? Required? Yes Let's add another item property. Enter an empty property name when done. ? Property name: code (!) generator#invoke() is deprecated. Use generator#composeWith() - see http://yeoman.io/authoring/composability.html invoke loopback:property ? Property type: string ? Required? Yes Let's add another item property. Enter an empty property name when done. ? Property name: price (!) generator#invoke() is deprecated. Use generator#composeWith() - see http://yeoman.io/authoring/composability.html invoke loopback:property ? Property type: number ? Required? No Let's add another item property. Enter an empty property name when done. ? Property name: (ここでそのまま Enter で終了)
最後にこのモデルを DB スキーマとして登録しましょう。MySQL にコマンドラインでログインし、以下のような create table コマンドを実行して item テーブルを作ります:
> create table item( id int primary key auto_increment, name text, code text, price integer );
これで動く状態ができました。実際に動かしてみましょう:
# node .
で、ウェブブラウザを起動して、この開発環境の 3000 番ポートの /explorer パスにアクセスしてみます:
作成した myapp アプリケーションの中で、定義した item モデルの CRUD API が公開されています!
実際にデータを作成してみましょう。item モデルを展開後の /items の POST メソッドを開き、data フィールドに以下の内容を入力して "Try it out!" ボタンをクリックしてみます:
{ "name": "コーラ", "code": "AA001", "price": 1000 }
実行結果が以下のようになっていれば POST コマンドは成功して、テーブルに1レコードが追加されたことになります:
ちなみにこの段階で /items の GET コマンドを実行すると、今作成したデータが返されるはずです。
念のため、MySQL サーバーにログインして item テーブルの中身を確認すると、このコマンドで POST したレコードが作られているはずです。リモートの MySQL と連携する StrongLoop 環境が作れたことになります:
> select * from item; +----+-----------+-------+-------+ | id | name | code | price | +----+-----------+-------+-------+ | 2 | コーラ | AA001 | 1000 | +----+-----------+-------+-------+ 1 row in set (0.18 sec)
なお、この状態を cf コマンドで IBM Bluemix 上の Node.js ランタイムにプッシュすると、そっくりそのまま Bluemix 環境で動かすことも可能です:
以上、StrongLoop と MySQL との連携方法の説明、および Bluemix 環境への移行方法の紹介でした。