Bluemix PaaSでWatson Question Answer Service API (QAAPI)を動かしてみた

# **【注意】Watson QAサービスは2015年12月16日をもって提供終了となりました。**

2014年10月、IBMのPaaSであるBluemixでWatsonサービスのAPIがBeta公開されました。そこで、WatsonサービスのひとつであるQuestion Answer ServiceのAPI(QAAPI)を使ったサンプルを動かしてみました。
このサンプルは、Watsonが用意しているヘルスケアに関するコーパス(自然言語処理のために大量の文書を構造化したデータベース)を利用して質問に対する回答を生成する、というものです。

##Bluemixへのユーザ登録

Watson APIはBluemixというIBMのPaaSで動きますので、まず最初にBluemixへのユーザ登録が必要です。実際には、IBM IDを登録し、このIDを使ってBluemixにサインインします。

[Bluemix.net](https://bluemix.net/)の右上にある[Sign up]ボタンを押して必要事項を記入すると、メールが来ますので本文中のURLをクリックすればユーザ登録は終了です。実際には、ユーザには組織(org)と個別ユーザの違いがありますが、ここではそこまでの設定はしていませんので、以下本記事に記載されている"<ユーザ名>"はすべて、このときに登録したメールアドレスとなります。

なお、WatsonはBetaバージョンであるため現在のところ無償利用できますが、実際にサービスを動かすとSoftLayerインスタンスの費用がかかりますので注意が必要です。(サインアップ後30日間は無償)

##Cloud Foundry CLIの導入

Bluemixの基本的な使い方は、ポータル上のさまざまなアプリケーションテンプレートから適当なものを選択し、Java、Ruby、node.jsなどでアプリケーションを記述してアップロードします。しかし、ポータルの操作は面倒ですので、コマンドラインインタフェース(CLI)を利用したほうがいいでしょう。BluemixはOSSのPaaSソフトウェアであるCloud Foundryそのものですので、アプリケーションおよびサービスの管理操作はCloud FoundryのCLIであるcfを使うことができます。
そこで、cfをダウンロードしてインストールします。ダウンロードしたファイルはtgz形式ですが中身はcfコマンド1個のみですので、ここでは/usr/local/binに直接置いています。

```bash
$ wget -O cf-linux-amd64.tgz 'https://cli.run.pivotal.io/stable?release=linux64-binary&version=6.6.1&source=github-rel'
$ sudo tar xvf  cf-linux-amd64.tgz -C /usr/local/bin
$ cf -v # test
```

最後の`cf -v`でcfのバージョンが表示されればCloud Foundry CLIの導入はOKです。

##QAAPIサンプルサービスの作成と公開

それでは、QAAPIのサンプルサービスを動かしてみましょう。このサンプルはnode.jsのアプリケーションですが、ローカルで動かすのでなければnode.jsがインストールされている必要はありません。

###サンプルプログラムの取得と展開

IBMのサイトよりQAAPIサンプルサービスのソースを取得し、展開します。ディレクトリ名はなんでもいいですが、ここではアプリケーション(ルート)の名前をwatson-sample-applicationとしましょう。(本当は、独自ドメインを利用せずにこのような一般的な名称にするべきではありませんが・・・)

```bash
$ wget http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/doc/qaapi/download/qa-nodejs-sample.zip
$ unzip qa-nodejs-sample.zip
$ mv qa-nodejs.git watson-sample-application
$ cd watson-sample-application
```

##manifest.ymlの修正

./manifest.ymlを修正します。ここでは以下の点を修正しました。

* アプリケーション名→前述の通り、watson-sample-application
* サービス名→ここでは、watson-sample-service
* 起動するインスタンスのメモリを128Mから64Mに縮小

修正内容のdiffは以下の通りです。

```diff
*** manifest.yml	2014-10-20 09:34:15.108873562 +0900
--- manifest.yml.orig	2014-10-18 16:27:38.010228617 +0900
***************
*** 1,7 ****
  applications:
  - services:
!   - watson-sample-service
!   name: watson-sample-application
    command: node app.js
    path: .
!   memory: 64M
--- 1,7 ----
  applications:
  - services:
!   - qa-service
!   name: qa-nodejs
    command: node app.js
    path: .
!   memory: 128M
```

サンプルの修正は以上で終了です。

###Bluemixへの登録と起動

それでは、このアプリケーションをBluemixへ登録し起動しましょう。
手順は以下のとおりになります。(詳細はCloud Foundryの文献を参照してください)

```bash
# Cloud Foundryの対象APIに`bluemix.net`を設定
$ cf api https://api.ng.bluemix.net

# Bluemixにログイン
$ cf login -u <ユーザ名>

# サービスを作成
$ cf create-service question_and_answer question_and_answer_free_plan watson-sample-service

# アプリケーションをプッシュ
# ※デフォルトでは./manufest.ymlを見に行くため作業ディレクトリに要注意
# (1)アプリケーションの作成
# (2)ルートの作成とバインド
# (3)サービスを構成するファイルのアップロード
# (4)サービスのバインド
# (5)アプリケーションの起動
$ cf push watson-sample-application
```

最後の`cf push`の結果、以下のようにstatusがOKとなっていれば、アプリケーションは正しく起動されました。

```bash
$ cf push watson-sample-application

...長々とログ...

App started

Showing health and status for app watson-sample-application in org <ユーザ名> / space dev as <ユーザ名>...
OK

requested state: started
instances: 1/1
usage: 64M x 1 instances
urls: watson-sample-application.mybluemix.net

     state     since                    cpu    memory         disk   
#0   running   2014-10-20 09:25:45 AM   0.0%   12.3M of 64M   33.7M of 1G   
```

###起動の確認

`cf push`のログの最後のほうにURLが出力されていますので、このURLに接続して以下のような画面が出ればOKです。(URLは`cf apps`コマンドでも確認することができます)

![watson-sample-application-start.png](https://qiita-image-store.s3.amazonaws.com/0/21963/ba958075-405e-b7c9-5a03-84363e7473c9.png)

##QAAPIサンプルサービスの削除

以下のコマンドを利用すればアプリケーションとサービスを削除することができます。(詳細はCloud Foundryのドキュメントを参照してください)

* `cf delete`: アプリケーションを削除する
* `cf delete-service`: サービスを削除する
* `cf delete-route`: ルートを削除する