Loopbackフレームワーク入門

Node.js Advent Calendar 2014の9日目の記事です。 ブログ記事を上げるのが遅くなってすみません。

今回は、Node.jsのWAFであるLoopBackの使い方について簡単に紹介しようと思います。使ってみた感触としては、ORMがすごく優秀で、RestAPIを自動で生成してくれたりと非常に強力なフレームワークだと感じました!では紹介していきます。

loopback とは

loopback とは StrongLoop という mBaaS (Mobile Backend as a Service) を事業としている会社がOSSとして公開しているNode.js の isomorphic な Webフレームワークのことです。

公式ページに書かれている特徴は以下のとおりです。

インストール

まずは generator-loopback をインストールします。 プロジェクトのディレクトリを作成後に、yo で loopback の雛形を生成します。

loopback のディレクトリ構成、ファイル説明

yo で雛形を生成すると、以下のようなディレクトリ構成になっています。

server/server.js の中身を見てみれば、app.use(loopback.favicon());といったコードがあります。expressと似てますが、実はloopbackはexpressを内部で利用しているフレームワークなのです。

モデル

loopbackにおいてモデルは非常に重要で、モデルはデータベースに対するORMです。loopbackのモデルは、MongoBD, MySQL, Oracleといったデータベース製品を抽象化できます(後述)。

loopbackのすごい点は、モデルを作るだけでRest APIも生成されるという点です。経験的にWebAPIの開発において、DBモデルを作ったあとはそれを操作するためのAPI(GET, POST, PUT, DELETE)などを作成しますよね。こういったルーチンワークが自動化されるというのは本当に素晴らしいことだと思います。

では、以下では実際にモデルを作ってみます。ちなみに、Usersというモデルは事前に定義されています。

まず、Bookmark という名前のモデルを作成します。 yo loopback:model を実行するとインタラクティブなシェル上が立ち上がり、モデルの情報の入力が促されます。 以下の例では、titleプロパティとurlプロパティを追加しています。

1つ選択に迷うポイントとしては、Select model's base class: のところで ModelPersistedModel のどちらを選ぶべきかというところです。

違いとしては、Modelはモデルデータの変更や削除があった場合にコールバックを実行することができたり、モデルデータにスキーマ定義に反するデータ型を代入しようとした時に、エラーを発生してくれるvalidation機能であったりを提供しています。 一方で、PersistedModel は Model を継承したモデルクラスで、Modelで定義されたメソッドに加えて、データベース操作のためのCRUD機能をサポートします。どういったメソッドがあるかはここで確認できます。 なので、モデルをデータベースと対応させるなら、PersistedModel を選択すればOK。

モデルの説明は以上にして、モデルを生成すると、トップディレクトリに common というディレクトリが作成されて、ここにモデルの定義ファイルが2つ配置されます。loopback は isomorphic なフレームワークであるので、LoopbackとAngular.jsと組み合わせ使うときはこのモデルファイルはブラウザJSとサーバサイドJS(node.js)とで共有されます。

新しく生成されたファイルの中身を見てみましょう。 bookmark.json はモデルのスキーマ定義です。入力したカラムの情報が定義されてますね。

次に、bookmark.js はモデルの実装ファイルです。この時点では実装がないように見えますが、先ほど紹介したModelであったり、PersistedModelのメソッドを呼び出すことができます。もちろんここに独自のロジックメソッドを追加することも可能です 参考

Relation

モデルの Relation も yo コマンドで生成することができます。 1対1、1対多、多対多の関係を作ることができます。

先ほど作った Bookmark モデルに加えて、Page モデルがあるとします。 Page は複数の Bookmark を持つことができるとします。 すると、Relation は以下のように作れます。

relationを作ると、PageモデルのJSONスキーマにその関係が追記されます。 また、relationを作ると、GET /Pages/{id}/bookmarksといった具合にモデルに紐づくリレーションも考慮して、RestAPIを生成してくれます。すごく気が利いてますね。

Explorer

Explorer について紹介します。モデルを作ると自動でRestAPIが生成されることについて先ほど触れましたが、 explorerは生成されたAPIを一覧化してくれて、ドキュメントとして使えますし、APIの動作確認にも使うことができます。

それではまず Explorer を起動して、ブラウザで http://0.0.0.0:3000/explorer を開いてみましょう。

explorerをブラウザで開くと以下の様な画面です。

上のスクリーンショット見てもらえればわかるように、Bookmarkデータの登録API(POST /Bookmarks)であったり、Bookmarkデータの一覧取得(GET /Bookmarks)といったAPIが自動で生成されます。

リストアップされた個々のAPIをクリックすると、以下のように画面が展開されてここでAPIの動作確認ができます。

データベース接続

今までモデルのデータストアとしてメモリを選択していましたが、もちろんMongoDBやMySQLといったデータベース製品を選択することができます。 MongoDBをloopbackと一緒に使う場合は、loopback-connector-mongodbをインストールします。 MySQLだと、loopback-connector-mysqlです。 こちらにどのデータベース製品が使えるかがリストアップされています。

実際の使い方はこちら がわかりやすいです!丸投げすみません。

Loopback with AngularJS

Loopback を AngularJS と一緒に使う場合についてです。端折り気味ですみませんが、こちらのworkshopが取っ付きとしてはわかりやすいです。

より詳しい解説としては AngularJS JavaScript SDK がわかりやすいです。

もっと学びたい人

まず最初に呼んでほしいのが LoopBack core conceptsですね。あと Loopback には豊富なドキュメントがあるので、是非眺めてみてください!

http://docs.strongloop.com/display/SL/StrongLoop

最後に

Loopbackの使い方について解説していきました。本当はLoopbackを使ってWebアプリケーションを作りたかったのですが、時間がなく間に合いませんでした。。のちほど作ったアプリケーションの紹介を行いたいと思います!

One thought on “Loopbackフレームワーク入門

  1. Pingback: 2014年を振り返る | Now or Never

Leave a Reply

Your email address will not be published. Required fields are marked *