Watson SpeechToTextでBoxにある音声ファイルをテキスト化してみる(Ⅱ. 環境構築)

#概要
この記事は、会議などの音声ファイルをWatson Speech To Textを使って自動でテキスト化するチュートリアルです。
この記事は　Ⅱ.環境構築編です。

>I.概要編はこちら
>[Watson SpeechToTextでBoxにある音声ファイルをテキスト化してみる(Ⅰ.概要)](http://qiita.com/tokotan/items/7fabf99361f8d8baa667)

#環境構築
##Box
###Box Developer Account作成
1.　<https://developer.box.com/>へアクセスし、右上のメニューからSignUpする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/41e5a82d-d421-f75e-f273-f411d2147a6a.png)
2.　確認メールが送られます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/db99d737-d2bf-f831-76d8-12cc641796e1.png)
3.　メールの確認をします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/646048bd-d328-5fda-a728-0ad11763430a.png)
4.　Boxのログイン画面が表示されるので、ログインします。
5.　[アカウント設定]>[セキュリティ]>[認証]にて２段階認証を有効化しておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/880591d2-e894-4a69-c76f-0ad175f005d5.png)
6.　設定が完了したら、Developerコンソールへアクセスします。
https://app.box.com/developers/console

###新規アプリケーションの作成
「Web App Integration用」と「ファイルアップロード用」を2つを作成します。
なぜ、二つ作成するかと、「Web App Integration用」は認証方法は「標準OAuth2.0」を使いますが、「ファイルアップロード用」は「JWTを使用したOAuth2.0」を使うためです。

####Web App Integration用
1.　[アプリの新規作成]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/664f64b5-c51f-37e7-c97b-140f03e9c7d2.png)
2.[パートナーの統合]をクリックして、[次へ]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/966320d9-ad2c-b9a2-d4a1-510fba40e9ca.png)
3.アプリケーションに適当な名前をつけて[アプリの作成]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/01f6e9cc-50d7-9da4-def1-d6154671a0f4.png)
4.DeveloperTokenが発行されますが、ここでは使わないので、[アプリの表示]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/eab9c19b-48ae-4a1a-eec0-81d0adc2999b.png)

####ファイルアップロード用
1.　左メニューの[My Apps]から[アプリの新規作成]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/14c47fde-1952-f272-2521-87935af2d3f0.png)
2.[企業統合]をクリックして、[次へ]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/4c22e554-3d6c-490f-4611-9a82194b247e.png)
3.「認証方法」にて[JWTを使用したOAuth2.0(サーバー認証)]をクリックして、[次へ]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/98da9137-689b-5cc0-ca94-e156cf04d57c.png)
4.アプリケーションに適当な名前をつけて[アプリの作成]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/903876d3-8dad-b0d7-7354-be624b3abf12.png)
5.DeveloperTokenが発行されますが、ここでは使わないので、[アプリの表示]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/eab9c19b-48ae-4a1a-eec0-81d0adc2999b.png)

###Web App Integrationの作成
1.Web App Integration用のアプリケーション「SpeechToText」を開きます。
2.左のメニュー[Integrations]をクリックし、[ウェブアプリ統合を作成]をクリックします。
必要な情報を入力していきます。
詳細な情報はBoxのドキュメントを参照してください。
> Box Developers > Docs > Web Application Integrations
>　https://developer.box.com/docs/box-web-application-integrations

- アプリ情報
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/f8b67be8-333e-eddc-ded5-e7c25fa865b4.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/cec87010-dad9-3343-6f03-53baeeff485f.png)

- コールバック設定
[クライアントコールバックのURL]は後に作成するHerokuのURLを入れるため、ここではダミーで<https://localhost>などとダミーの値を入れておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/c788d187-b52c-784e-ccf6-c878f5c7f0b5.png)

- コールバックパラメータ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/9a9334d4-fbf1-212b-b919-857ef38df83f.png)

- 認証
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/d966e531-7107-6be2-680c-bf7bd0bd9cc1.png)

- 統合ステータス
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/10022d57-eeb4-54b8-3730-14f78fc4f8f7.png)

全て設定が終わったら右上の[変更を保存]をクリックし保存します。

###JWTを使用したOAuth2.0の設定
1.Web App Integration用のアプリケーション「UploadFileJWT」を開きます。
2.左のメニューの[Configuration]をクリックします。
設定について詳細な情報が知りたい場合はBoxのドキュメントを参照してください。
> Box Developers > Docs > Configuring Your Application
>　https://developer.box.com/docs/configuring-box-platform

- OAuth 2.0資格情報

後ほど、Herokuの環境変数に設定するので、記録しておいてください。

- アプリケーションアクセス
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/6adb6a35-d348-d4f7-18a8-225ca16d5eb1.png)

- アプリケーションの範囲
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/8ac222f0-2d1e-25cf-bd0b-8af29424fd37.png)

- 高度な機能
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/ce945b56-723d-d6ca-96dc-dede99b1c301.png)

- 公開キーの追加と管理
1.[公開/秘密キーペアを作成]をクリックします。
※２段階認証が有効になっていないとエラーになります。
2.JSONファイルをダウンロードし保存します。このファイルは後ではダウンロードできないので大事に保管しておきましょう！

###Box App Userの作成
アプリケーションユーザーを作成します。
アプリケーションユーザーとは？　Boxのエンドユーザーではなく、アプリケーションに属するフル機能を持つエンタープライズアカウントです。ライセンス数には加算されません。
詳細はこちらを参考にしてください。
> https://developer.box.com/docs/app-users

１時間有効なDeveloperトークンを使い、下記のようにCurlを使うかPOSTMANなどを利用してAppUserを作成します。

```
curl https://api.box.com/2.0/users \
-H "Authorization: Bearer ACCESS_TOKEN" \
-d '{"name": "App User Test", "is_platform_access_only": true}' \
-X POST
```

レスポンスは下記のようになります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/e7647407-0cfe-2c21-b87a-62ee3a364233.png)
id属性、login属性を記録してください。
また、作成したApp UserはBoxの管理コンソール[ユーザー]タブにて確認することができます。
Boxへのファイルアップロード、ダウンロードはこのApp User権限で行いますので、該当フォルダに権限(ビューアー・アップローダー以上)を付与しておいてください。（App Userのメールアドレス（上記レスポンスのlogin属性）で招待します。)


##Watson Speech To Text
###IBM BlueMix 環境作成
BlueMix環境を持っていない場合は、１ヶ月の無料トライアル環境を利用してください。
１ヶ月以上経過した場合でも、無料範囲以内での利用であれば課金されることはないので、自分で色々試す分には十分かと思います。

>無料トライアル
>https://console.ng.bluemix.net/registration/

私が最初にBluemixの環境を用意するときに結構つまづいたので、手順をまとめておこうと思います。
1.　アカウントを登録すると、メールが届きますので確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/89a2bd31-82f3-3762-833f-81cee7430551.png)

2.　メール本文の[Confirm Account]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/83905867-1b43-69fa-0c86-c8501220126c.png)

3.　メールの確認が完了したので、[ログイン]をクリックします。　
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/775965a2-fab3-839b-8898-6a8e7d2682f2.png)

4.　Bluemix Consoleにアクセスしログインします。
https://console.bluemix.net/home/

5.　[組織の作成]にて、組織名を入力します。ここで入力する値はBlumixの中で一意である必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/fd76d2e9-11ea-b331-2401-6e151e0cb71b.png)

6.　[スペースの作成]にて、スペースの名前を入力します。ここでは、開発用スペースを作成するため、「dev」と入力し[作成]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/64bb34f8-57ed-e625-7043-82f58a3c173c.png)

7.　完了したら、[準備ができました]をクリックします。
8.　右上の[三]をクリックし、[サービス]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/2843cf91-f94a-ba5a-6ac0-1e0611a15b60.png)

9.　[サービス]の中の[Watson]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/ca2b8940-0193-cdf1-3119-28ee9213e1fc.png)

10.　[Watsonサービスの作成]をクリックします。
11.　[Speech To Text]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/2b9c42ff-82b9-2ef3-1a07-0b1f684ab145.png)

12.　[作成]をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/9632194b-a753-0478-e179-462d468d0654.png)

13.　左メニューの[サービス資格情報]をクリックし、画面下部の[資格情報の表示]をクリックすると、サービスに接続するための資格情報が表示されますので、コピーしておきます。のちにプログラミングで利用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/135983/f49d82e8-1a51-1a7e-b45a-55bdaa63c024.png)

##Heroku
###Heroku環境構築
Herokuは日本語の資料がありましたので、こちらのサイトを参考にして環境構築をしてください。
> https://github.com/herokaijp/devcenter/wiki/quickstart

この時点では、「ステップ 3: ログイン」まで実施すれば大丈夫です。

###Herokuアプリケーション作成
1.HerokuCLIを使ってHerokuにログインします。

```
$ heroku login
Enter your Heroku credentials.
Email: <your email address>
Password (typing will be hidden): 
Logged in as <your email address>
```

2.Herokuでアプリケーションを作成します。
アプリケーション名は、Herokuの中で一意である必要があります。

```
$ heroku apps:create <アプリケーション名>
Creating ⬢ personalhelpdesk... done
https://<アプリケーション名>.herokuapp.com/ | https://git.heroku.com/<アプリケーション名>.git　
```

3.Gitリポジトリを初期化します。

```
$ git init
```
4.リモートリポジトリとしてHerokuを追加します。

```
$ git remote add heroku https://git.heroku.com/<アプリケーション名>.git
```

5.Git管理対象外ファイル(.gitignore)を作成します。

```.gitignore
.DS_Store
.gitignore
npm-debug.log
node_modules
```
6.Herokuがプログラム起動する際に実行するファイル(Procfile)を作成します。

```Procfile
web: node server.js
```

ここまで実施したら、次は、server.jsへコードを書き、デプロイします。
詳しくは、[Watson SpeechToTextでBoxにある音声ファイルをテキスト化してみる(Ⅲ.プログラミング)](http://qiita.com/tokotan/items/636030b09d89becd0b70)にて説明します。

###Herokuアプリケーションへ環境変数をセット
プログラムを書く前に、利用する資格情報などを全て環境変数としてセットしておきます。
セットする資格情報は下記の通りです。

| KEY              |補足  |
|:-----------------|:-------------------------------------|
| BOX_CLIENT_ID    |ファイルアップロード用アプリのClient ID        |
| BOX_CLIENT_SECRET|ファイルアップロード用アプリのClient Secret    |
| BOX_PRIVATE_KEY  |「公開キーの追加と管理」でダウンロードしたJSONファイルの中のprivateKey属性|
| BOX_KEY_ID       |「公開キーの追加と管理」でダウンロードしたJSONファイルの中のpublicKeyID属性|
| BOX_KEY_PHRASE   |「公開キーの追加と管理」でダウンロードしたJSONファイルの中のpassphrase属性|
| APP_ENTERPRISE_ID   |「公開キーの追加と管理」でダウンロードしたJSONファイルの中のenterpriseID属性|
| WATSON_USERNAME  |WatsonSpeechToTextサービスに接続する資格情報のusername属性|
| WATSON_PASSWORD  |WatsonSpeechToTextサービスに接続する資格情報のpassword属性|

Herokuへ環境変数を登録するコマンドは下記です。

```
$ heroku config:set　<KEY>="<VALUE>"
```

#続き
次の記事でいよいよプログラムを作っていきたいと思います。
>[Watson SpeechToTextでBoxにある音声ファイルをテキスト化してみる(Ⅲ.プログラミング)](http://qiita.com/tokotan/items/636030b09d89becd0b70)