【IBM Watson】AIが性格を推定してくれるPersonality Insigthtsデモサイトの構築方法 (Node.js編)

皆さん、こんにちは。戸倉彩です。

今回は今すぐ使えるIBM Watson Personality Insights APIのサービスを使用した、テキストやTwitterのツイートを分析するWebアプリケーションを開発する方法を紹介します。パブリッククラウドのサービスを使用しますが、無料の範囲で作成することができるので、自己学習やコミュニティのハンズオン等の題材に迷った時には役立てていただければと思います。
**★重要なお知らせ★ 2021年12月1日に「IBM Watson Personality Insights」サービス提供は終了します。** 詳細につきましては公式IBM Watson Blog **[「IBM Watson Personality Insights の非推奨化/サービス提供終了のお知らせ」](https://www.ibm.com/blogs/solutions/jp-ja/ibm-watson-personality-insights-sunset/)** をご確認ください。

# IBM Watson Personality Insights (性格分析)とは
**Personality Insights**は、IBMが提供しているIBM Watsonサービスの一つで、テキストから筆者のパーソナリティ（ビッグ・ファイブ、価値、ニーズ）の3つの特徴をAIから推測します。詳細については**[IBM Watson Personality Insights 公式サイト](https://www.ibm.com/watson/jp-ja/developercloud/personality-insights.html)**をご覧ください。

# Personality Insightsデモサイトとは
IBM Watson Personality Insightsが使われているデモサイトが[こちら](https://personality-insights-demo.ng.bluemix.net/)に公開されています。リアルタイムに**「サンプルのTwitterアカウント」**、**「テキスト入力」**、**「ご自身のTwitterからツイートされたテキスト」**による分析を体験できます。
[<img src="https://g3ow9q.by.files.1drv.com/y4mciiEQKTZ1y0EDfIrcAA7jqE4ddJoXsOmExxqE6otdj3Pd0x_kFcRl_SoIiS4N1jjRmhagmdri-KjfglSIsQGXenb2Lr9KRSuHWsUdXKsNAbyUDo7aKZngYuIJNTDIkQZf0veQrXwidbS3J2wH3StLMP8Bhtrce4VZbt6Y21PEtZLRkNUv9D9aZBwvczxsHJX8OvIMp_RBZRATogOlPj9Gg?width=1035&height=891&cropmode=none" width="600">](https://personality-insights-demo.ng.bluemix.net/)

デモのために設置されているサイトのため、アクセスが集中した場合やメンテナンス時には正常に動作しない可能性もあるようです。
GitHubにソースコードが公開されていますので、macOSやWindowsのパソコンをお持ちの方であればいつでも誰でも入手して、自分でデモサイトを手元の環境に構築して動かすことができます。また、Apache 2.0ライセンスで配布しているため、商用利用も可能です。
万が一、ソースコードに問題があることを発見した場合には、直接GitHubのリポジトリにIssueをあげて報告をしてください。

# 始める前に
### 1. Node.jsのインストール
[Node.js](https://nodejs.org/ja/)公式サイトから入手できます。2019年12月27日現在、12.14.0 LTSが推奨版となっています。
### 2. IBM Cloudのアカウントの取得
IBM Cloud上で提供されているIBM Watson Personality Insightsのサービスを使用するため、ライトアカウント/従量課金(PayG)アカウント/サブスクリプションアカウントのいづれかのアカウントが必要です。これからIBM Cloudを始める場合は、過去に投稿した**[「無料ではじめられるライト・アカウント登録方法」](https://qiita.com/ayatokura/items/42d4bc728112c733c80d)**をご覧いただき、アカウントの登録を行なってください。
### 3. IBM Cloud CLIのインストール (IBM CloudにWebサイトを公開する場合)
下記のコマンドを実行して、IBM Cloud CLIのインストールを行います。

- MacおよびLinuxの場合、次のコマンドを実行します。

```
curl -sL https://ibm.biz/idt-installer | bash
```
- Windowsの場合、　管理者としてPowerShellで次のコマンドを実行します。

```
[Net.ServicePointManager]::SecurityProtocol = "Tls12"; iex(New-Object Net.WebClient).DownloadString('https://ibm.biz/idt-win-installer')
```
### 4. Twitterアカウントのログイン情報の取得
特定のTwitterアカウントでツイートされた内容を分析させたい場合は、対象となるアカウントのログイン情報を入手する。
もし、これからTwitterアカウントを取得したい場合には、下記サイトよりTwitterアカウントを作成し、ツイートをはじめる。※100程度の単語からの分析が可能ですが、より正確な分析のためには、より多くのテキストが存在していることが望ましいです。
https://twitter.com/i/flow/signup 

# 操作の手順
大まかな操作の流れは下記の4つになります。
1. Personality Insightsのサービス作成
2. GitHub上のリソースのクローン
3. 環境ファイルの設定 (.env)
4. Twitterアプリケーションの設定
5. ローカル実行

## 1. Personality Insightsのサービス作成
1. Webブラウザから**[IBM Cloud](https://ibm.biz/BdzceS)**にアクセスしてログインする。
2. **IBM Cloudダッシュボード**から右上の**[カタログ]**メニューをクリックする。
<img src="https://hnox9q.by.files.1drv.com/y4mP6HZC4kmPd4fyQlzcD_H-EcatH1-TGZWqApfIJDdOA02m4ccBKXcZcKw4Bj7aGXktkmBZtV6_xyVkR_9RyuxxxZNJKfn2cxbG8kW2nOI-Nv6tT-C3-LYclvAm9SQkgRuTE7ycBmcAdSyp9nfTu5svbiiFKi0IlsWpGth7L1YtAnLwMSxLQ021k7A83UFjeVRsahF91JXr3FARvjMa8Nm6w?width=1658&height=1000&cropmode=none" width="600">
3. 左側メニューの**[AI]**をクリックする。  
<img src="https://hnow9q.by.files.1drv.com/y4mtEHM3bZe2dgTIDmfNfCM7ti9_sWYgtOJ0CmBX6LbJTcY02ETEwuJUl2RVzFQ0s0c-B0Uhx76R5Nuw7W-jwTnqCAyBgJr4kJI_01z1OI83otm56IbTJstK4XZ-qLzzxJr12lP2ttIHpRIJjNVZ9W1sqCclQkwsUVtIRYDgw3xJSFboEW7FTq1BTreucg-mITyfrcpmqkIKu8lZCmbvP0JZA?width=1820&height=937&cropmode=none" width="600">
4. 右側に表示されたAIカテゴリとして提供しているサービス一覧から**[Personality Insights]**を見つけてクリックする。
<img src="https://hnov9q.by.files.1drv.com/y4mUsGkBkLBIG9X9A4A7Cj4t_phIGGjIdpNzTNjYdxocZsepBaHPIRxxlPFm5fxk9n7HG4IPuZus1Yox0WUq3iM42BNH6q0l7Zwm-jcwAhMApjR06yf9BW4mIFTgiJJyhQ3SqPngo22wnXBDUqzRYA1ZmJLsyD6pt258ECsFIe-QdjheNWvspYSoonmKzzoAPabl0VAtGoBLfmcPx8yIDZReg?width=1183&height=954&cropmode=none" width="600">
5. 下記の項目を確認した後、右側の**[サマリー]**で設定した内容を確認して正しければ**[作成]**ボタンをクリックしてサービスを作成する。

- **地域の選択**
    - デフォルト[ダラス]のままでもOKです
    - ドロップダウンメニューから[東京]も選択できます
- **料金プランの選択**
    - 今回は、**[ライト(無料)]**にチェックが入って選択されていることを確認してください
    - 検証や実案件などで1ヶ月あたりに1,000件を超えるAPI呼び出しを行う場合には[ティア]または[プレミアム]を選択してください
- **サービス名**
    - デフォルトのままでもOKですが、任意のサービス名をアルファベット、記号、数字の組み合わせで指定することが可能です。
    - 今回の例では[PersonalityInsights-Japan]を指定してます。
<img src="https://hnot9q.by.files.1drv.com/y4mM2qkGHp_8P9uYQtq12K7lLyx9i5XDPCGBhXhlVoEusRuk3isjHiNZV3i52QLDHGbHcDujMyaZSjY3uEf2bjRkTZPdQ8PR5DwiUbKfeMdkAwPYh-BAH9lxxlzNGnwXNiz3N6FWrwF6XKzAqWURJbcSW1ilJ1u-j2aITRYCox_1m8I09RfvXEyA-pRjQsTs7uYqyLYqw9zy97S8n2huhSirg?width=1245&height=1037&cropmode=none" width="600">  

6.しばらくして**[リリース・リスト]**ページが表示されたら、左側の**[サービス資格情報]**メニューをクリックする。
<img src="https://g3oc9q.by.files.1drv.com/y4mCjS9ebbTfBNc8tRpqGK2nknCz_yh-2V-mgFlGe1QMjSNKK6f2Qf81sQo-twV-uS2pGfi3GXtFS-p7cXjAD-W9d7I8dM_iYl8MgpgYCicvagvOLXsZOcjxOssVu-helnDxx2GDDqzbFro9Yqw0C1bLx5d0cwlV7cpdpgOgjpDQZUYfMmAvIaWbxVnAS6oQqlGPE_wFFtq87S8SD7-n0qbrw?width=1835&height=883&cropmode=none" width="600">
7. **[サービス資格情報]**に自動生成された**[Auto-generated service credentials]**の**[資格情報の表示]**リンクをクリックする。
8. 表示された資格情報の**[apiey]**および**[url]**は後ほど使うため、メモ帳などにコピーしておく。
<img src="https://g3ob9q.by.files.1drv.com/y4mK4-dw9RhZHMcfFFQAv5oPXIcWC_hZrOYFqtGGx7FnxQGhAOKp13lDJRubEvdhKOqNBmmSHxSoODUQoRCoya5xVvbijM0Q7HxwO6OxLPA-pn7sBnZVZjkY4l1sWnNWAMBtRyv4WYU-MHYn2CFGeiQeQu1il1DekXb82atZWEHqXtVr4F10VvuwNfV9Vjd50LghBB01e-uthiB-RAzznLxlA?width=1666&height=1037&cropmode=none" width="600">

## 2. GitHub上のリソースのクローン
ターミナルから下記コマンドを実行してGitHubからソースコードを入手する。

```
git clone https://github.com/watson-developer-cloud/personality-insights-nodejs.git
```

## 3. 環境ファイルの設定 (.env)
1.**[personality-insights-nodejs]**ディレクトリを移動する。

```
cd personality-insights-nodejs/
```
2.エディタでフォルダの中身を開いて **.env.example** ファイルを **.env** というファイル名でコピーを作成する。
3. **.env** ファイルを開き、前の手順で取得したサービス資格情報を追加し、ファイルを保存する。

```
PERSONALITY_INSIGHTS_IAM_APIKEY= ここにapikeyをコピペする
PERSONALITY_INSIGHTS_URL= ここにurlをコピペする
```

## 4. Twitterアプリケーションの設定
1. **[Twitter Developer](https://developer.twitter.com/en/apps)**サイトからアプリケーションを作成する。
2. コールバックURLを追加する。

- ローカル環境の場合: `http://localhost:3000/auth/twitter/callback`
- クラウド環境の場合: 各クラウドサービスの仕様を確認してURLを指定してください。
- IBM Cloud環境の場合: `<application-name>.mybluemix.net/auth/twitter/callback`

3.**.env** ファイルにTwitterアプリケーションの資格情報を追加し、ファイルを保存する。

```
TWITTER_CONSUMER_KEY=<consumer-key>
TWITTER_CONSUMER_SECRET=<consumer-secret>
```

## 5. ローカル実行
1. 下記のコマンドを実行して依存関係をインストールする。

```
npm install
```
2.アプリケーションを実行する

```
npm start
```
3.Webブラウザで `localhost:3000`にアクセスする。
4. Personality Insightsデモサイトが表示されれば成功です！！！ 
<img src="https://g3ox9q.by.files.1drv.com/y4mFjSpBEHyRj_piO2WlKGLgz3rXch1RhTCckrnIQsXSuegl_eOrQ3rUALoiPoqWc7g-SNeBeg1eTsSk8I_wCgeDvpl1X54X_c5Cvd2V_cYLeP5idQWDlI3yFvfsgZ4xj7frEk0wSepcpPkmJXpBtkThz_RQYKUKa2RWI7npuVC7oc6WNEfkcRz0jpl-uoZZan45KZbL_BWJ3UVPQvUZ30VvA?width=975&height=908&cropmode=none" width="600">

指定したTwitterアカウントのツイートによるテキストから性格を分析したい場合には**「あなたのTiwtterによる分析」**ボタンをクリックして操作を行なってみてください。

# このアプリケーションについて
このアプリケーションは、Node.jsで動くWebアプリケーションです。後は、お好みのクラウドサービス上にデプロイしたり、自由にカスタマイズしてご活用ください。
### ディレクトリ構成

```none
.
├── app.js                       // express entry point
├── config                       // express configuration
│   ├── error-handler.js
│   ├── express.js
│   ├── i18n.js
│   ├── passport.js
│   └── security.js
├── helpers                      // utility modules
│   ├── personality-insights.js
│   └── twitter-helper.js
├── i18n                         // internationalization
│   ├── en.json
│   ├── es.json
│   └── ja.json
├── manifest.yml
├── package.json
├── public
│   ├── css
│   ├── data                     // sample text and tweets
│   ├── fonts
│   ├── images
│   └── js
├── router.js                   // express routes
├── server.js                   // application entry point
├── test
└── views                       // ejs views
```

# IBM Cloudを活用してWebサイトを公開する方法
1. [IBM Cloud CLI](https://cloud.ibm.com/docs/cli?topic=cloud-cli-getting-started#overview) を用いてターミナルまたはコマンドラインからIBM Cloudにログインする。  
※ログインの際に、APIエンドポイントや地域がus-southに指定されていても問題ありません。

```
ibmcloud login
```
2.下記のコマンドを実行してCloud Foundry (IBM CloudでWebサイトを手軽にホスティングすることができるサービス) をターゲットにします。

```
ibmcloud target --cf
```

3.**manifest.yml**ファイルの3行目のアプリケーション名の部分を編集し、ファイルを保存する。
例えば `- name:　my-app-name` など、ユニークな文字列を指定してください。Webサイトを公開する際にURLの一部になるため、ご注意ください。

4.アプリケーションをIBM Cloudにデプロイします。
ネットワーク環境により必要な時間は異なりますが、安定している環境の場合には数分〜で完了します。

```
ibmcloud app push
```
5.アプリケーションをデプロイしたURL (https://アプリ名.mybluemix.net) にアクセスして、公開されたことを確認します。

例えば `https://personality-insights-qiitademo.mybluemix.net`
<img src="https://g3ou9q.by.files.1drv.com/y4mZbgqQJM1kcCL15WwuUMO7g2G2UGeoDbPh_XwUdAqhCENpF8OUy566KV0oBEmk1RgzkJYPjDIAhuioT_oVEGvqxn29Uk0cZnWOtNM1Hha8PFm0jM2Xx_2AWg4Umfj_QGO9zHUM-c3kFGPeQTSJy0zbrufezrzFEOw186vLCiPJP7TVZ1DsMaYRSo3rzA1amUtnEUdSAZAISS9kUj2A15smQ?width=1110&height=1031&cropmode=none" width="600">


今回はここまでです。お疲れ様でした！
Have a nice Geek Life♪

※Twitterで最新情報配信中 [@ayatokura](https://twitter.com/ayatokura)