目次


多忙な Java 開発者のための LoopBack ガイド, 第 1 回

Hello, World!

LoopBack と API Connect を導入する

Comments

コンテンツシリーズ

このコンテンツは全6シリーズのパート#です: 多忙な Java 開発者のための LoopBack ガイド, 第 1 回

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:多忙な Java 開発者のための LoopBack ガイド, 第 1 回

このシリーズの続きに乞うご期待。

JavaScript は 90 年代半ばから開発者の意識する要素になっていますが、サーバー・サイドのプラットフォームとして認識されるようになったのは、つい 2、3 年前からのことです。サーバー・サイドの JavaScript を初めて試みたのは Netscape であったかもしれませんが、Google が V8 をスタンドアロンの実行可能プログラム (現在、Node.js と呼ばれているもの) に組み込んだことで、JavaScript を Web ブラウザーだけでなく、どこででも実行できる可能性が見えてきました。

サーバー・サイド JavaScript への関心の高まりが火付け役となって、最近では新しいサーバー・サイドの JavaScript フレームワークが続々と登場しています。そのようなフレームワークとしてすぐに思い付くのは Meteor、Backbone.js、KeystoneJS、Sails.js ですが、探究心旺盛な人には他にも興味深いものがたくさん見つかるはずです。これらのフレームワークのそれぞれが一定のコア・プリミティブをベースに作成されていて、ターゲットとしているデータ・ストレージ機能もおおよそ同じですが、その使い方にはそれぞれに異なる趣があります。つまり、そのフレームワークに情報を提供するスタイルにすでに慣れている開発者にとって、より明白で、直感的で、快適だと思える特定の方法によってアプリケーションを作成するのです。

LoopBack の新参者にとって最初の難関の 1 つは、自分が使用しているテクノロジーの名称を把握することです

概念的にも意味的にも Rails とよく似た JavaScript フレームワークで、Ruby 言語の Web フレームワークとしてよく使われている Sails.js については、最近全 4 回からなる入門ガイドを完成させました。今回のシリーズでは、LoopBack について紹介します。LoopBack は、HTTP API の作成に重点を置いているサーバー・サイドの JavaScript フレームワークです。

LoopBack、StrongLoop、API Connect

LoopBack の新参者にとって最初の難関の 1 つは、自分が使用しているテクノロジーの名称を把握することです。LoopBack はかつて、StrongLoop という会社が所有する独立した存在でした (その有料サービス・オファリングも StrongLoop という名前が付けられていました)。同社が 2015 年に IBM に買収された後、LoopBack チームがリリースしたバージョン 3.0 で、IBM の旗印の下に用語と名前が IBM API Connect に統一されました。

けれども、インターネット上で出回っている LoopBack に関するさまざまなサード・パーティーの記事やディスカッションについては言うまでもなく、このフレームワークのドキュメントのほとんどは、今でも変動期にあります。そのため、LoopBack に果敢に挑む開発者はほぼ間違いなく、名前の 3 つのバリエーションに遭遇するはずです。そこで、これらの名前について少々説明しておきます。

このプロジェクトは以下の 3 つの名前で知られています。明確にするために、それぞれの概要を説明します。

  • LoopBack は、オープンソースの Node.js フレームワークです。LoopBack には、このシリーズで詳しく取り上げるコア機能が用意されています。LoopBack は http://loopback.io でホストされており、ここで LoopBack 関連のあらゆるもの (つまり、このオープンソース・フレームワーク自体に関連するもの) が一元管理されています。
  • StrongLoop は、LoopBack に第一に貢献した会社の名前です。2015 年 9 月に IBM によって買収されるまで、StrongLoop は商品化されたサービスと製品をリリースしていました。その 1 つが、StrongLoop Arc という名前のブラウザー・ベースの GUI 設計・管理ツールです。グラフィカル・インターフェースに加え、Arc にはプロセス・モニタリング機能が組み込まれ、パフォーマンス分析やその他の運用サポートも備わっていました。Arc はまだ存在しますが、現在進められているこのプロジェクトの明白な目的は、Arc の機能を API Connect という同製品の IBM バージョンに移行することです。
    編集者による注記: 2017 年 4 月の時点で、Arc はサポート終了となって API Connect で置き換えられています。現在登録ユーザーとなっている場合は、引き続き Arc を使用できます。
  • IBM API Connect は、StrongLoop Arc の後を引き継ぐ新しい IBM 製品です。IBM API Connect では、IBM Bluemix を API ライフサイクル管理プラットフォームおよびセキュアでスケーラブルなホスティング・サービスとして利用しています。API Connect はブラウザー・ベースの GUI ツールの名前にも、有償サービスの名前にもなっているだけでなく、ローカル・コマンド・ライン・ユーティリティーにも同じ名前 (apic) が付けられていますが、通常は、使用するコンテキストからツール、サービス、ユーティリティーのどれであるかを明らかに区別できます。

この 1 年にわたり、LoopBack チームは StrongLoop Web サイトのドキュメントを LoopBack の Web プロパティーへと移行していますが、この記事を書いている時点では移行は完了しておらず、一部のドキュメントは今でも StrongLoop に存在しています (LoopBack チームはそのホーム・ページに、予定されているタスクのリストへのリンクを掲載しています。ドキュメント自体は LoopBack GitHub ドキュメント・リポジトリー内でホストされています。ドキュメントの移行を待ちきれないとしたら、遠慮なくプル・リクエストを送信してください)。

IBM と StrongLoop は製品ラインをオープンソース LoopBack フレームワークと API Connect の商用プラットフォームという 2 つの製品に階層化することを最終目標に、この先しばらくは製品の統合を進めていくことになるでしょう。しばらくの間はドキュメントとリファレンス実装との間で多少の混乱はあるとしても、この充実した機能を備えたフレームワークを使用することはできます。

説明しておかなければならない名前に関する問題は片付いたので、早速手順を開始しましょう。

LoopBack のインストールとセットアップ

ほとんどの JavaScript ベースのフレームワークと同じく、npm を使用してアクセスできる LoopBack は、グローバルにインストールされるコマンド・ライン・ツールを利用します。したがって、LoopBack を導入する際の最初のステップとなるのは、Node.js が PATH 上に設定されているコマンド・ライン・ターミナルを開き、npm を使用して LoopBack をインストールすることです。それには、npm install -g apiconnect を実行します。

LoopBack が必要なすべてのビットをダウンロードして、ローカル・マシン上のグローバル Node.js リポジトリーにインストールし終わると、PATH 上に新しいコマンド・ライン・ツール (apic) が設定されているはずです。このツールがインストールされて使用可能になっていることを確認するには、コマンド apic--help を使用します。このコマンドを入力すると、かなり詳細なオプションのリストが表示されます。

現在のところ、LoopBack を操作するために使用する主要なインターフェースはこのコマンド・ライン・ツールなので、新しいアプリケーションを作成するには、このツールを使用する必要があります。新しい環境内で誰もが最初に作成するアプリケーションと言えば、全世界に敬意を表す、あのお馴染みの Hello, World! です。私たちも最初は Hello, World! を作成します。

こんにちは、よい 1 日を!

まず、新しいアプリケーションを作成するために、コマンド apic loopback を入力します。これによって、一連の対話形式の質問が表示されます (Yeoman という JavaScript の scaffol 生成ツールを使ったことがあれば、イングランドの独立自営農民を示す名を持つこのツールの親しみやすさと、そのわかりやすい対話スタイルに気付くはずです)。LoopBack は最初に、ユーザーが scaffold を生成しようとしているアプリケーションの名前とそれを生成するディレクトリーを尋ねます。まだ LoopBack に取り掛かったばかりなので、このアプリに hello という名前を付けて、hello サブディレクトリーにその scaffold を生成することにしましょう。

次に、LoopBack はどのようなタイプのアプリケーションを生成したいのか尋ね、次の選択肢を提示します。

  • empty-server: LoopBack のデフォルト設定を使用したくない場合は、これを選択します。
  • hello-world: お馴染みのスターター・アプリ。今回は、これを使用します。
  • notes: 本格的なサンプル・サーバー。

hello-world を選択した後、LoopBack によってコードが生成され、npm install が実行されます。これにより、このプロジェクトを実行するために必要なすべての依存関係が取り込まれます。

次に、LoopBack からプロジェクトを実行するよう促されますが、その前に、LoopBack によって生成された一連のファイルをざっと見てみましょう (ここでは、いくつかの構成ファイル (.gitignore など) を省略しています)。

  Created common
  Created common/models
  Created common/models/message.js
  Created common/models/message.json
  Created package.json
  Created server
  Created server/boot
  Created server/boot/root.js
  Created server/config.json
  Created server/datasources.json
  Created server/middleware.json
  Created server/middleware.production.json
  Created server/model-config.json
  Created server/server.js

server ディレクトリーと common ディレクトリーには多数のファイルが詰め込まれている一方、client サブディレクトリーはまだありません。その理由は、LoopBack は「フルスタック」のソリューションではないからです。LoopBack はサーバー専用のソリューションとして、HTTP を使用してアクセス可能な API エンドポイントを作成するように設計されています。フロントエンド開発者はこれらのエンドポイントを使用することで、さまざまなアプリケーション要件に応じてリッチな Web クライアントやモバイル・クライアントを作成できるようになっています。したがって、LoopBack 内のすべてのものはサーバー上で実行されるため、クライアントはほとんど存在しません。

LoopBack でクライアント・サイドの SDK を使用できるようにすることもできますが、LoopBack ではサーバー・サイドの成果物を非常に重視しており、作成されるすべてのコードはサーバー上で実行されることを前提としています。この点は、クライアント・サイドの開発とサーバーとの間の摩擦を最小限にすることを目指す Meteor などのフルスタック環境とは正反対です。

次は、LoopBack の動作を見てみましょう。

初めての LoopBack API

サーバー・プロセスは、apic を使用して開始することも、npm に起動させることもできます。package.json ファイルが置かれている hello ディレクトリー (client、common、および server サブディレクトリーの親) にカレント・ディレクトリーを変更します。このディレクトリーから、apic start または npm start コマンドを実行します。どちらのコマンドでも、サーバーが起動されて着信リクエストの listen を開始します。

ほとんど瞬時に、初めて作成した LoopBack アプリケーションが稼働中になったことを通知するコンソール・メッセージが表示されます。ただし、コードをどのように起動したかによってアプリケーションがバインドされるポートが異なるため、アプリケーションがどのポートにバインドされているかをコンソールで確認する必要があります。

リスト 1. LoopBack 'Hello'
    $ npm start

    > hello@1.0.0 start /Users/tedneward/Projects/hello
    > node .

    Web server listening at: http://0.0.0.0:3000
    Browse your REST API at http://0.0.0.0:3000/explorer

上記のコンソール・メッセージを前提とすると、Web ブラウザーを開いて http://localhost:3000 を表示するだけで、この演習は完了です。何かしらのものが表示されるはずです。

ルート URL

ウェルカム・メッセージを見るとわかるように、LoopBack が表示するメッセージはあいさつと言えるようなものではありません。実のところ、実際に「hello」メッセージが表示されるのではなく、表示されるのはアプリのアップタイムです。このルート URL のアップタイム・レポートは、LoopBack を使用して生成されるすべてのアプリケーションの標準的な機能であり、ルート URL を対象エンドポイントとして ping を実行することで、サーバーに到達可能であるかを判別できるようになっています。最後に誰かが思い付いてサーバーが到達可能であることを確認してから、サーバーがダウンしていないかどうかを調べる目的で、このエンドポイントを単純な診断ツールとして使用することもできます。

一方、実際のあいさつの言葉を表示したいとしたら、別の URL にアクセスする必要があります。どの URL にアクセスすればよいのかを知るには、その URL を見つけることができなければなりません。そのための 1 つの方法は、ソース・コードをナビゲートしてアプリケーション用に構成されているルートを特定し、それらのルートをパラメーター (渡されない場合もあります) に基づいて 1 つにつなげることです。あるいは、よりグラフィカルな形でアプリケーションをブラウズするという方法もあります。

LoopBack と API Connect

登録済みのアカウントを使用して Bluemix にログインしていることが前提となりますが、API Connect にアクセスするには資格情報が必要です。サーバーを起動した方法に応じて、npm stop または apic stop を使用して、ここでサーバーをシャットダウンしてください。次に、apic edit を実行します。数秒後に、Express サーバーがローカル・ホスト上で listen していることを通知するメッセージが表示され、指定された URL を指すブラウザー・ウィンドウが開きます (この記事を書いている時点で、私の URL は http://localhost:9000 となっています)。

ログインすると、API Connect ダッシュボードに hello プロジェクトが表示されます (現時点では、プロジェクトにバージョン 1.0.0 のタグが付いています)。画面の一番下に表示されるサーバーのステータスは、現在「Stopped (停止)」となっています。ステータスの横に、「Play (再生)」を表す三角形が表示されています。その三角形をクリックして、サーバーを再起動します。

ダッシュボード中央の領域に表示されている hello リンクをクリックすると、ダッシュボードの API セクションが表示されます。ここには、アプリケーション (または製品) によって公開されている各種の API エンドポイントが表示されます。これが、API オファリングの「Design (設計)」ビューです。このビューに、アプリ/製品の Swagger API 宣言がユーザー・フレンドリーに表示されます。実際の Swagger ドキュメントを表示するには、ツールバーの「Source (ソース)」をクリックします。左側に一覧表示されている選択項目を使用することで、Swagger ドキュメントのさまざまな部分にナビゲートできます (図 1 を参照)。

図 1. hello アプリケーションの Swagger ドキュメント
hello アプリケーションの Swagger ドキュメントを表示する画面のスクリーンショット
hello アプリケーションの Swagger ドキュメントを表示する画面のスクリーンショット

Swagger ではさまざまな記述方法を使用して API をドキュメント化できますが、そのほとんどは、ここで目的としている範囲には含まれていません。とりあえずは、左側の選択項目リストの下部にある「Paths (パス)」をクリックしてください。Swagger 仕様では、パスはサービスから公開されるエンドポイントを記述する部分となっています。ご覧のように、/Messages/greet として記述されたパスが定義されています。ただし、このパスは絶対パスというわけではありません。Swagger 仕様では、/api という「Base Path (基本パス)」(選択項目リストの上のほうに表示されています) も設定するため、完全な形の URL は /api/Messages/greet となります。

他のあらゆる作業に取り掛かる前に、まず念頭に置いておかなければならないのは、多くの REST 指向のフレームワークと同じく、LoopBack はリソースの概念を中心に設計されているという点です。LoopBack では、リソースをモデルとして記述します。モデルに関しては第 2 回で詳しく説明しますが、ここでいったん、アプリケーションのモデル・アーキテクチャーを確認しておいてください。それには、API Connect GUI の「All APIs (すべての API)」をクリックします。これによってメイン・ダッシュボードが表示されるので、そこで「Models (モデル)」を選択します。この単純な hello アプリケーションには、API Connect によって「Message (メッセージ)」という 1 つのモデル・タイプだけが定義されています。現時点では、このモデルは空です。今のところはまだ、モデルを処理する必要はないので、空のままで問題ありません。

GUI の詳細

アプリケーションの URL がわかったので、早速 cURL や Postman、あるいは他の単純な HTTP クライアント・ツールから HTTP リクエストをエンドポイントに送信し、何が戻ってくるのかを確かめることができます。しかし、それでも、あるパラメーターのことを忘れているかもしれません。API を (ユーザー認証を使用して) ある程度のセキュリティーで保護する必要があるとしたら、リクエストを実行するたびに忘れずに所定の場所に資格情報を入力しなければなりません。幸い、API Connect にはそれよりも簡単なメカニズムが用意されています。このメカニズムは少なくとも、当面のシナリオには役立つメカニズムです。

GUI の右上隅に、「Explore (探索)」というラベルが付いたボタンがあります。そのボタンをクリックすると、API Connect ダッシュボードの対話式画面が表示されます。左側には多数の呼び出しが一覧表示されています。右側のサンプル・コード・セクションの下には、API へのパラメーターを受け入れる一連の編集フィールドがあります。「GET /Message/greet」を選択すると、右側のセクションに「msg」パラメーターが表示されるので、ここにあいさつの言葉「Hello」を追加できます。その下にある「Call operation (処理を呼び出す)」ボタンをクリックすると、HTTP リクエストが送信されて、その結果が表示されます (図 2 を参照)。

図 2. API Connect GUI 内での呼び出しとパラメーター
呼び出しとパラメーターを表示する API Connect GUI 画面のスクリーンショット
呼び出しとパラメーターを表示する API Connect GUI 画面のスクリーンショット

もちろん、GUI からでなければ実際のエンドポイントにアクセスできないというわけではありません。curl リクエストを実行するには、curl コマンド・ラインを CLI にコピー・アンド・ペーストするという方法もあります。あるいは、お望みであれば URL リクエストをブラウザーのアドレス・バーにコピー・アンド・ペーストしてください。この場合、以下のメッセージがブラウザーに表示されます。

    {"greeting":"Sender says Hello to receiver"}

このほうが遥かにフレンドリーなメッセージです。

まとめ

LoopBack では、Hello, World のような小さいアプリケーションには贅沢すぎるほどの機能とツールを操作できます。それぞれの機能をどのように利用するかはユーザー次第です。API Connect のような GUI ベースの環境で作業したいというユーザーもいれば、私のようにコマンド・ライン信奉者であり、マウスやスワイプを使用して動かされる世界を受け入れることなど考えられないというユーザーもいることでしょう。幸い、機能の面ではどちらの方法をとっても違いはありません。StrongLoop (現在は IBM) の開発者たちは、コマンド・ラインと GUI のどちらの方法をとるかに関わらず LoopBack を快適に使用できるようにするという素晴らしい仕事を成し遂げました。

お気付きかもしれませんが、LoopBack 導入の第一段階を終える今になってもまだ、JavaScript コードを 1 行も作成していません。LoopBack を知るにつれ、このようなサプライズがいくつも見つかるでしょう。次回の記事では、モデル (REST 用語ではリソース) を定義する方法を説明し、LoopBack でサポートされる任意のデータ・ソースに対して一般的な CRUD 処理を行います。(ネタバレ注意) LoopBack を使用すると既存のデータ・ソースに対するモデルを驚くほど簡単に定義できることがわかるはずです。その例として、20 年来使用されているリレーショナル・データベース・スキーマを用います。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Web development, Open source
ArticleID=1045859
ArticleTitle=多忙な Java 開発者のための LoopBack ガイド, 第 1 回: Hello, World!
publish-date=05182017