【現場からの声】Watson Anywhere - パブリック・クラウド版Watsonを利用するプログラムはそのまま使えるの❗️❓

# Watson Anywhereのコンセプトを実現する製品群
「Watson Anywhereが意味する『場所を選ばずにWatsonが使える』というコンセプトは、どれぐらい実現されているの？」という質問を受けることが多くなりました。
パブリック・クラウド版のWatsonは、すぐに使えるという点では便利ですが、パブリック・クラウドにデータを送信できないお客様から『オン・プレミスで動くWatson』を要望する声が多く聞かれます。

現時点(2019/12/14現在)で、
- IBM Cloud Pak for Data Ver.2.5
- IBM Watson Assistant for IBM Cloud Pak for Data
- IBM Watson Discovery for IBM Cloud Pak for Data
- IBM Watson API Kit for IBM Cloud Pak for Data
- IBM Watson Assistant Voice Interaction for IBM Cloud Pak for Data
の5つの製品が提供され、Watson APIsとしては、
・Watson Assistant
・Watson Discovery
・Watson Speech-To-Text
・Watson Text-To-Speech
・Watson Natural Language Understanding
・Watson Language Translator
・Watson Knowledge Studio
・Watson Studio
・Watson Machine Learning
・Watson Knowledge Catalog
・Watson OpenScale
・Voice Agent with Watson(厳密にはWatson APIsではありません...)
と主要なものはほぼ揃いました。

オン・プレミス版には、『データをパブリック・クラウドに送信しなくても済む』以外にも、パブリック・クラウド版にはないメリットがあります。それは、動かす場所(Anywhere)はもちろんのこと、**非機能要件をお客様自身でコントロールできる**ことです。
例えば、
- アクセス量に応じてリソース(CPU,メモリ)をお客様で変更できる
- 障害対策のレベルをお客様で設計できる
- アップグレードといったメンテナンス作業のタイミングをお客様の都合で決定できる
といった事が考えられますね。

# パブリック・クラウド版Watsonを使うプログラムはそのまま使えるの❗️❓
これを機に、パブリック・クラウド版からオン・プレミス版のWatsonに引っ越す計画でしょうか？
提供される機能については若干の差異がありますが、APIの仕様自体は共通です。
「それじゃぁ、プログラムはそのまま動くのね？」という質問が返ってきました。いくつか考慮点がありますので、こちらでしっかりとご確認ください。

### Authentication
Public版と同様に、Basic認証とトークンを使った認証がサポートされますが、利用方法が異なるのでコードの書き換えが必要になります。
Basic認証: authenticatorと呼ばれる方法で、CloudPakforDataAuthenticatorを使用して、usernameとpasswordを指定しますので、若干の書き換えが必要になります。
トークンを使用した認証: トークン発行の仕組みがPublicの場合と異なりますので、トークンの使用する場合は、書き換えが必要です。

(Watson Assistantをnode.jsから利用する例)

```
const AssistantV1 = require('ibm-watson/assistant/v1');
const { CloudPakForDataAuthenticator } = require('ibm-watson/auth');

const assistant = new AssistantV1({
  version: '{version}',
  authenticator: new CloudPakForDataAuthenticator({
    username: '{username}',
    password: '{password}',
    url: 'https://{cpd_cluster_host}{:port}',
  }),
  url: 'https://{cpd_cluster_host}{:port}/assistant/{release}/instances/{instance_id}/api',
  disableSslVerification: true,
});
```
### Service endpoint
構築したクラスタ毎にエンドポイントが異なります。(これは想像つきますね)
APIコールは、Public版と同様にhttps接続が必須です。クラスタを自己署名証明書を使用して構築(default)した場合、SSL  Verificationを無効化する必要があります。SDKを使用する場合は、無効化のオプションが提供されているので簡単に対応できます。

(サンプルコードは、***上記Authentication***を参照)

### Versioning
Public版と考え方は同じですが、Public版で使用可能なバージョンがオン・プレミス版でも使えるとは限りませんので、オン・プレミス版の場合は、API Referenceを参照してバージョンを確認して、変更が必要かどうか、ご確認ください。
なお、一部のAPI(STT, TTS)ではPublic版でもバージョンが提供されていませんし、オン・プレミス版でもバージョンは提供されません。

(Watson Speech-To-Textをnode.jsから利用する例) - ***versionパラメータ***を指定しません -

```
const SpeechToTextV1 = require('ibm-watson/speech-to-text/v1');
const { CloudPakForDataAuthenticator } = require('ibm-watson/auth');

const speechToText = new SpeechToTextV1({
  authenticator: new CloudPakForDataAuthenticator({
    username: '{username}',
    password: '{password}',
    url: 'https://{cpd_cluster_host}{:port}',
  }),
  url: 'https://{cpd_cluster_host}{:port}/speech-to-text/{release}/instances/{instance_id}/api',
});
```

### SDK
SDKのパッケージ名が、watson-developer-cloudからibm-watsonに変更になっています。watson-developer-cloudはまだ利用可能ですが、更新は既に停止されています。オン・プレミス版の場合は、必ず、ibm-watsonを使用してください。

(node.jsの例)

```
npm install ibm-watson
```


# 提供される機能の差異や詳細な仕様/使い方はどうやって調べればいいの？
Public版と同様に、API ReferenceとDOCS(オンラインマニュアル)で調べることができます。
Public版とはURLが異なりますので、こちらからアクセスください。

### API Reference
こちらの『API reference』からアクセスできます。
https://www.ibm.com/support/knowledgecenter/SSQNUZ_current/dev/avail-apis.html
また、IBM Cloud Private版(旧版)のAPI仕様が必要な場合は、こちらを参照ください。
https://cloud.ibm.com/apidocs?category=ai
### DOCS (オンラインマニュアル)
上記API Referenceの中央のメニュー(縦丸3つ)をクリックすると表示される『View docs』からアクセスできます。

(Natural Language Understandingの例)
<img width="516" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/420fd2f4-cf2c-063a-14c9-db000f7f52bf.png">

# 誰かの疑問が多くの人の役に立ちますように...

【現場からの声】シリーズ第三弾、いかがでしたでしょうか？

第一弾:[あなたのそのアイディアがWatsonをもっとよくする💙](https://qiita.com/WalkingDev/items/4ca691dd8d65d58a54cd)
第二弾:[スマートフォーマッティングできっと幸せになれる💙]
(https://qiita.com/yanagih/items/64a19e288afc51afb6b6)