2014年6月26日木曜日

LoopBackアプリケーションの作成

Creating LoopBack application

この記事では、独自のループバックアプリケーションを作成する最初のステップのいくつかを説明します。

新しいアプリケーションを作成する

新しい空のLoopBackアプリケーションを作成するためにはじめに中のステップを実行していれば、この節をスキップしてアプリケーションの初期化に進むことができます。

新しいアプリケーションを作成する

新しいブランクテンプレートLoopBackアプリケーションを作成するには、このコマンドを入力してください。

$ slc lb project myapp

“myapp”を自分のアプリケーションの名前に置き換えてください。このコマンドでLoopBackアプリケーションの”足場”のすべてのファイルとディレクトリが含まれるmyapp(または自分で使用するアプリケーション名)ディレクトリが出来る。

空っぽのアプリケーションを実行する

この時点で、”空っぽ”のLoopBackアプリケーションがある。十分なことはできませんが、提供されるLoopBackの足場がなんであるかという感覚が掴める程のものは実行することができます。これらのコマンドを実行してみてください。

$ cd myapp
$ slc run

もちろん、”myapp”の代わりに自分のアプリケーション名を指定してください。
ブラウザで、http://0.0.0.0:3000/というURLをロードしてください。空っぽのアプリによって返される基本的なJSONデータが表示されます。こんな感じです。

{
  "started": "2014-06-25T07:58:38.392Z",
  "uptime": 18.365
}

APIエクスプローラを見るためにはブラウザでhttp://0.0.0.0:3000/explorerというURLをロードしてください。
APIエクスプローラで組み込みユーザーとアクセストークンモデルのREST APIが表示されます。

enter image description here

中身をざっと確認

前述したように、slcはLoopBackアプリケーションのディレクトリとファイルを作成します。具体的に:

  • app.js - メインプログラムファイルのアプリケーション。
  • app.json - アプリケーションがリッスンするTCPポートやIPアドレスを指定する構成ファイル。
  • datasources.json - データソース構成ファイル。
  • /modelsディレクトリ - アプリケーション起動時にこのディレクトリのすべてのJavaScriptファイルをロードする。詳細はinitial the applicationを見てください。
  • models.json - slc lb モデルで作成したモデル定義が含まれています。モデルを追加するために、このファイルを手動で編集することができます。詳しい情報は、Creating modelsを見てください。
  • /node_modules - プロジェクトを識別するアプリケーションメタデータで、プロジェクトの依存リストや説明、バージョンなどのメタデータを提供します。詳しい情報は、package.jsonを見てください。

アプリケーションコードを実行してみる

エディタでapp.jsを開いてみてください。次の拡張ポイントがマークされています。これらは、独自のアプリケーションコードを追加できる場所です。

  • リクエストのプリプロセス
  • リクエスト処理
  • エラー処理

アプリケーション初期化

app.boot()メソッドでアプリケーションのルートディレクトリを設定する。関数は文字列またはオブジェクトの任意の引数を取る。

  • 文字列の場合、アプリケーションルートディレクトリとして引数を使用する。
  • オブジェクトの場合は、オブジェクトからmodel, dataSourcesappRootDirプロパティを探します。appRootDirがないのなら、現在の作業ディレクトリをアプリケーションのルートディレクトリとして設定します。

アプリケーションは/models/bootディレクトリのためのアプリケーションルートディレクトリを探します。app.boot()の引数がオブジェクトの場合は、modelsdataSourceプロパティを使用してモデルとデータソースを定義します。

それは

  1. アプリケーションディレクトリ(または引数で与えられ得散れば、options.dataSroucesオブジェクト)中のdatasources.jsonファイルを使用してデータソースを作成する。
  2. アプリケーションディレクトリ(または引数が与えられていればoptions.modelsオブジェクトにあるmodels.jsonファイルを使用してモデルを作成する。
  3. require()appRootDir/modelsディレクトリ中にあるすべてのJavaScriptファイルをロードする。これらのモデルを参照する方法の情報のために、Getting a reference to a modelを見てください。
  4. require()appRootDir/bootディレクトリ中にあるすべてのJavaScriptファイルをロードする。

slc lb projectコマンドで作成したメインであるapp.jsプログラムファイル中にapp.boot(__dirname)を呼び出す行がある。__dirnameはNodeの現在のスクリプトを含むディレクトリのグローバル変数です。

複数のファイル中にapp.boot()app.model(name, config)を使用して結合しないでください。なぜなら、競合状態になりモデルが未定義になってしまうからです。
app.boot()を使用してこれを回避するためには、すべてのモデルがモデル定義の一部として渡されることを確認して下さい。

2014年6月24日火曜日

LoopBack

LoopBack
StrongLoopの文書が新しくなったので、新たに詳細に見ていくことにする。

LoopBack

LoopBackはクラウドやオンプレミスで稼働させることができるNode.jsのフレームワークです。LoopBackを利用する利点のより詳細な情報は、StrongLoop | LoopBackを見てください。
LoopBackの主要な概念を基本的に理解するために、以下の節を読んでください。それから直ちにCreating a LoopBack applicationにあるアプリケーションの作成に飛び込んでください。
LoopBackは高度な拡張性、オープンソースNode.jsフレームワークで、次のようなことができます。

  • 少量のコーディングまたはコードを書かなくても動的なエンドツーエンドREST APIが生成される。
  • Oracle, MySQL, PostgreSQL, MS SQL Server, MongoDB, SOAPやREST APIからデータを簡単にアクセスできる。
  • 複雑なAPIのモデル関連とアクセス制御を組み合わせることができる。
  • オンプレミスまたはクラウド上でアプリケーションを動作させることができる。
  • モバイルユースケースのための組み込みのプッシュ通知、ゲオロケーション、ファイルサービスが使用できる。
  • Android, iOS, JavaScript SDKを使用して簡単にクライアントアプリケーションを作成できる。

LoopBackの構成は、

  • ウェびゃモバイルアプリがデータベースとREST APIのようなデータソースにアクセスするためのNode.jsモジュールのライブラリ
  • LoopBackアプリケーションを作成したり動作させるためのCommand-line tool (slc)
  • ネイティブやウェブベースモバイルクライアントのためのクライアントSDK

enter image description here

上記の図はLoopBackアプリケーションには3つのコンポーネントがあることを説明しています。

  • ビジネスデータと振る舞いを表現するモデル
  • データソースとコネクタ。データソースはデータベースやREST API, SOAPウェブサービス, ストレージサービスといったその他のバックエンドのサービスです。コネクタはアプリケーションがOracle, MySQL, MongoDBといったエンタープライズデータソースにアクセスを提供する。
  • LoopBackクライアントSDKを使用するモバイルクライアント

アプリケーションは、Node.js内のローカル、REST越しにリモートに、そしてiOS、Android, HTML5といったネイティブクライアントAPIを経由して利用可能なLoopBackモデルAPIを通してデータソースと対話します。APIを使用して、アプリはデータソースによって提供される、データベースを検索し、データを保存し、ファイルをアップロードし、メールを送り、プッシュ通知を生成し、ユーザーを登録したり、その他のアクションを実行することができる。

モバイルクライアントはREST、WebSocketやその他のトランスポート越しにバックエンドAPIが提供できるプラグイン可能なトランスポート層であるStrong Remotingを使用して、直接LoopBackサーバーAPIを呼び出すことができる。

2014年6月12日木曜日

Cloud9 IDEによるLoopBack構築

Cloud9 IDE

クラウド型IDEのCloud9 IDE上で開発をする。

前提

Cloud9およびStrongLoop共にサインアップしていること。
Cloud9はStandardでは無料で、StrongLoopはDeveloperは無料で使用できます。

手順

  1. まずはCloud9にログインすると、ダッシュボード画面になります。
  2. 左上にあるCREATE NEW WORKSPACEと書いてある緑色のボタンをクリックすると、ツールチップが出ます。
  3. ツールチップのCreate a New Workspaceをクリックすると、Create a New Workspaceダイアログボックスが表示されます。
  4. New your workspaceにワークスペース名を入力します。
  5. Workspace PrivacyをOpen and DiscoverableかPrivate to the people I inviteのどちらかを選択します。Cloud9のStandardでは1ワークスペースだけプライベートにできます。
  6. HostingはHostedを選択します。
  7. StrongLoopのボタンをクリックしてCREATEボタンをクリックするとダッシュボード左のMy Projectsに作成したワークスペースが表示されています。
  8. My Projectsの中の先ほど作成したワークスペースをクリックすると、ダッシュボードの右側がそのワークスペースの説明に変わります。
  9. START EDITINGボタンをクリックすると、ワークスペースが開きます。

この時点で動作するREST APIサーバーが出来上がっています。動作を確認してみましょう。

  1. メニューのRun Projectボタンをクリックして、アプリケーションを起動します。しばらくすると、Run ProjectボタンがStopボタンに変更されていることが分かります。
  2. アプリケーションが起動したあと、アプリケーションをWebブラウザで確認しましょう。URLはhttps://-c9-.c9.io。です。
  3. LoopBack Sample Applicationが起動できればたちまちOKです。アプリケーションの右側のペインのSample Requestsにある GET /api/cars/2のGETボタンをクリックしてください。真下にidが2の車情報がJSON形式で表示されます。
  4. ひとまずStopボタンを押してアプリケーションを停止します。

このように足場アプリケーションではありますが、基本的な機能は実装されています。ドキュメントに沿って機能を追加していこうと思っています。

2014年6月10日火曜日

LoopBack概要 モデルの操作

LoopBack modelの構成は

  • アプリケーションデータ
  • バリデーションルール
  • データアクセス
  • ビジネスロジック

アプリはユーザーに情報を表示したり、バックエンドシステムとの対話のためにmodel APIを使用します。
LoopBackは”動的な”スキームレスのモデルと静的なスキーマ駆動のモデルの両方共をサポートしています。

動的モデルでは名前だけが必要です。データフォーマットを規定するのはクライアントアプリケーションです。
クライアント起源のデータがお誂えです。動的モデルはデータをスキーマを含めずにアクセストークン間で、デバイス間で永続化することができます。

静的モデルは動的モデルより多くのコードを必要とする。JSONで完全にデータフォーマットを記述します。
すでに存在していて大量のデータ、難解なデータセットの両方に向いています。
静的モデルは、データベース内の予期しないデータに起因し得るバグを防ぎ、データに構造と一貫性を提供します。

2014年6月7日土曜日

LoopBack

LoopBackはクラウドでもオン・プロミスでも動作することができるNode.jsのモバイル・バックエンドフレームワークです。
まず、LoopBackの主要な概念を理解してからアプリケーションを作っていきましょう。
LoopBackの流れに沿って話を進めていきましょう。

概要

LoopBackは以下のことができます。
  • ほとんどコーディングせずにend-to-end REST APIを作成
  • Oracle, MySQL, PostgreSQL, MS SQL Server, MongoDB, SOAPや他のREST APIから簡単にデータのアクセスが可能
  • 複合APIのモデル関連とアクセス制御を組み合わせる
  • オンプレミスやクラウドでアプリケーションを動作させる
  • モバイルユースケースのビルドインのプッシュ、ゲオロケーション、ファイルサービスが使える
  • Android, iOSやJavaScript SDKを使用して簡単にクライアントアプリの作成が可能
LoopBackの構成
  • WebやモバイルアプリをデータベースやREST APIなどのデータソースに繋げるためのNode.jsモジュールのライブラリ
  • LoopBackアプリケーションを作成、動作するためには、slc lbというCommand-lineツール
  • NativeとWebベースモバイルクライアントのためののClient SDK
    LoopBackアプリケーションには、3つのコンポーネントがある。
  • ビジネスデータと振る舞いを表現するModel
  • Data sourceとconnector。Data sourceはデータベースやその他のREST APIやSOAPサービスなどのバックエンドサービス。ConnectorはアプリがOracle, MySQL, MongoDBのデータへアクセスを提供。
  • LoopBack client SDKを使用したMobile clients
    LoopBack components
    AppはLoopBackモデルAPIを通してデータソースにアクセスする。ローカルでもリモートでもiOS, Android, HTML5のnativeなclientのAPIを通してでも使用できる。
    APIを使って、データベースのクエリやデータを保存したり、ファイルをアップロード(まだ機能はリリースされていないが)したり、メールを送ったり、push通知を作成したり、ユーザー登録やdatasourceで提供されているその他のアクションを実行する。
    Mobile clientはREST, WebSocketやその他のtransportを超えて、backend APIを提供することができるpluggable transport layerのStrong Remotingを使用して直接LoopBack server APIを呼び出すことができる。

2014年6月4日水曜日

LoopbackによるREST API構築

目的

MBaaSのStrongLoopのLoopbackを使用して、REST APIを構築する。

前提

Cloud9StrongLoopにログインしていること。

Workspace作成

Cloud9でWorkspaceを作成する。
  1. Cloud9 Dashboardの左上にあるCREATE NEW WORKSPACEボタンをクリックする。
  2. GithubなどからWorkspaceをCloneするのであればClone from URLをクリックするが、今回はGithubにソースが無いので、Create a New Workspaceをクリックする。
  3. (1)にWorkspace名、Workspace PrivacyはOpen and Discoverable、Cloud9上で開発をするので、Hosted、StrongLoopを選択してCREATEボタンをクリックする。

.gitignore作成

Gitで管理するため、バージョン管理不要なディレクトリ及びファイルを対象外にする。
Node.js用の.gitignoreファイルのテンプレートがGitHub .gitignoreにある。
Node.js用の.gitignoreファイルはNode.gitignoreである。
このファイルをWorkspaceのルートに.gitignoreというファイル名でコピーする。
このあとは適宜コミットする。
commit: 38b77dd4316f5016ee7209ccbe755abf7616a2a3

StrongLoop Command-line更新

StrongLoopとしてWorkspaceを生成したため、予めStrongLoop Command-lineがインストールされている。
StrongLoopは頻繁に開発されているため、StrongLoop Command-lineも頻繁にバージョンアップされている。
StrongLoop Command-lineを最新のパッケージに更新する。
 $ slc -v
strong-cli v2.5.1 (node v0.10.28)
node-inspector v0.7.3
strong-cluster-control v0.4.0
strong-registry v1.0.2
strong-supervisor v0.2.2
StrongLoop Command-lineの書式は以下のとおり。
$ slc   
SLC()                                                                    SLC()
NAME
       slc - Utility for StrongNode development

       Utility for StrongNode development.

SYNOPSIS
       slc [-h|--help|-v|--version] [...]
       slc <command> [--help] [...]

OPTIONS
       -h, --help
              print usage for slc (use slc cmd -h for help on cmd), and exit.

       -v, --version
              print version of slc and node, and exit.

COMMANDS
       example:
              create example applications

       lb:    create LoopBack workspaces, applications, and models

       strongops
              register or login to StrongOps, create strongloop.json

       run:   run a node script using strong-supervisor

       clusterctl
              control clustering at run-time using strong-cluster-control

       debug: debug a node script using node-inspector

       env:   print node environment information

       update:
              bring strong-cli and it's dependencies up-to-date

EXAMPLES
           $ slc example
           $ slc lb project mywebapp
           $ slc run app.js
           $ slc run --cluster=CPUs app.js
           $ slc clusterctl status
           $ slc debug app.js

                                  March 2014                             SLC()
slcコマンド全体のドキュメントは、Command-line reference (slc)に、loopbackのCommand-lineのドキュメントはslc lbに記述してある。
で、早速最新のパッケージに更新する。
$ slc update
strong-cli at 2.5.1; trying self-update...
npm install -g node-inspector; this may take a moment...
npm install -g strong-cluster-control; this may take a moment...
npm install -g strong-registry; this may take a moment...
npm install -g strong-supervisor; this may take a moment...
npm install -g strong-cli; this may take a moment...
strong-cli at strong-cli v2.5.3 (node v0.10.28)
node-inspector v0.7.3
strong-cluster-control v0.4.0
strong-registry v1.1.0
strong-supervisor v0.2.2

プログラムの起動

足場アプリケーションであるが、REST APIを実行する、それなりの機能を備えている。
動きをつかむためにWorkspaceのメニューのRun Projectボタンをクリックして、アプリケーションを起動する。
Run ProjectボタンがStopボタンに変更されている。
アプリケーションが起動したあと、アプリケーションをWebブラウザで確認する。URLはhttps://-c9-.c9.io。
LoopBack Sample Applicationが起動できればたちまちOK。
ひとまずStopボタンを押してアプリケーションを停止する。

StrongOps実行

StrongLoop運用監視としてStrongOpsを利用する。
StrongOpsのDashboardでアプリケーションを識別するためにWorkspaceのルートにあるpackage.jsonのnameプロパティを識別できる文字列に変更する。
commit 9cb442a69dccf1b546501600238cfd2dea3cfb8a
Written with StackEdit.

2013年10月1日火曜日

StrongLoopをCloud9で試そうとしました

InfoQでStrongLoopがオープンソースmBaaSをローンチしたというトピックがあった。StrongLoopという名前は聞いたことがなかったのだが、ParseなどのBaaSはデータはサービス側のデータセンタに保存するが、StrongLoopは、ユーザー自身のインフラをホストとして使用することができるそうだ。
現時点では、Amazon、Heroku、Cloud Foundry、OpenShift、Rackspace Cloud、Cloud9 IDEをホストとして使用することができるそうだ。
自分自身のインフラをホストとして使用できるということと、Heroku、Cloud9 IDEをホストとして使用できるということで、食いついた。
Cloud9 IDEで開発をして、Herokuでステージングと本番としてホストするとよさそう。
早速サインアップ。サインアップでは、自分のメールアドレスを入力すると、登録用リンクが送られてくるパターンである。
そのリンクをクリックして、登録画面を表示させ、ユーザー名とパスワードを登録する。
StrongLoop Suiteのドキュメンテーションを開いてみた。
StrongLoop Suiteには、以下の3つが入っている。

  • LoopBack Node.jsのプライベートmBaaS
  • StrongNode エンタープライズ用のNode.jsが入っている。
  • StrongOps 運用コンソール
StrongLoop Suiteを自分のシステムにインストールしても良いが、せっかくサポートされているようなので、Cloud9 IDEで手っ取り早く始めよう。
Cloud Workspaceというタイトルで直ちに始めたければ、StrongLoop Suite | Get Startedを見ろと書いてある。
ここで、Free Cloud Workspaceの説明文の最後のGet Startedをクリックすると、Cloud9 IDEにStrongLoopのユーザ名とメールでサインアップされる。
ユーザ名がかぶった場合には、ユーザー名+_数字というユニークな名前でサインアップするのだが、メールもかぶった場合は新しいメールアドレスを聞かれる。
すでにCloud9 IDEは使い倒しているので、そのアカウントでワークスペースを作って欲しいが、そのやり方が書いていない。
そうすればいいか不明。
しばらく色々試してみよう。