IBM Blumixを使って、myThings Developersのチュートリアルを実施する（PHP）

myThings Developersの[チュートリアル](https://mythings-developers.yahoo.co.jp/document/tutorial_index)をIBM BluemixのCloudFoundryを使いながら進めてみよう。という記事です。

## myThings Developersとは
[myThings Developers](https://mythings-developers.yahoo.co.jp/)は、さまざまなサービス、デバイスのAPIを共通のI/Fで束ねるサービス連携プラットフォームです。

myThings Developersを活用することで、TwitterやFacebookなどのWebサービスを始め、FitbitやJawboneUPなどのウェアラブルデバイス、BOCCOのようなロボット、異なるメーカーが提供しているサービスやデバイスのAPIを共通のI/Fで利用することができ、開発負担・API学習コストを下げることことができます。

[myThingsアプリ](https://mythings.yahoo.co.jp/)という同名のスマホアプリもありますが、それとの違いはこちらを参照してください。
http://qiita.com/yamamotomanabu/items/c10e0f05d477a25ff80e

## 必要なもの
- Yahoo! JAPAN ID
- IBM Bluemixのアカウント

公式チュートリアルには、「プログラムの実行環境（サーバー）」が必要とあるのですが、これにIBM Bluemixを利用します。

## チュートリアルの内容
### ゴール
![e786da5c6147baa777e7.png](https://qiita-image-store.s3.amazonaws.com/0/51093/4327d999-00b1-6d22-7c9f-3b9d8d008b4f.png)
公式チュートリアルでは、myThings Developersのカスタムトリガーという機能を使って、Twitterと連携させる手順が記載されています。

それではここからは実際にmyThings Developersに触ってみます。

### ステップ1
ステップ1ではサーバは利用しないので[公式チュートリアル](https://mythings-developers.yahoo.co.jp/document/tutorial_section1)をそのまま実施しましょう。

### ステップ2
ステップ2以降はサーバが必要になってくるので、公式チュートリアルを進める前にこちらの手順を済ませてサーバの準備を行います。

####アプリ作成
PHPのテンプレートからアプリを作成
![b4361b0ae9e1feaf4739.png](https://qiita-image-store.s3.amazonaws.com/0/51093/b547ea84-8156-49b1-93e2-b740a7ca74c9.png)

![fec32d032a88f169c882.png](https://qiita-image-store.s3.amazonaws.com/0/51093/15f4aa96-4544-7c08-72fe-23aafd483a5c.png)

#### コマンドラインインターフェースのインストール
手順に従いダウンロード＆インストール
![c61258f05254a3858af5.png](https://qiita-image-store.s3.amazonaws.com/0/51093/33c8bc10-40f6-da9d-81a5-3eef7edd2945.png)

④の実行時に

```bash
exec: "cf": executable file not found in $PATH
```
と出力された場合は、以下のようにcfにパスを通してください

```bash
export PATH=$PATH:(cf-cliを解凍したパス)
```

#### サンプルコードをデプロイ
あとは[公式チュートリアル](https://mythings-developers.yahoo.co.jp/document/tutorial_section2)に戻って、setting_sample.phpとtrigger_sample.phpを作成し、Bluemixにデプロイしましょう。

デプロイする際には以下のようにチュートリアル用のディレクトリ（ここでは"myThings-tutorial"）を作成して、CloudFoundryにおくとファイル管理しやすいです。

```bash
$ ls -al ./myThings-tutorial
total **
**********  * **  **   204 10 22 10:25 .
**********  * **  **   238 10 22 10:25 ..
**********  * **  **  5301 10 20 02:42 setting_sample.php
**********  * **  **  5570 10 20 02:42 trigger_sample.php

$ cd ./myThings-tutorial
$ cf push <Bluemixのアプリケーション名>
```

以降はそのまま公式チュートリアルに従ってください。また、Twitterだけでなく色々なサービスとの連携を試してみて頂ければと思います。

### ステップ3
ステップ2のサンプルコードは、「myThings Developersにユーザー登録した人（Yahoo! JAPAN ID）」と「Bluemixで作成したホストにアクセスした人（アクセスしたブラウザでログインされているYahoo! JAPAN ID）」が同じする人であることが前提の内容になっています。

※違う人がアクセスすると↓こうなります。
![ca254922582d2b48337f.png](https://qiita-image-store.s3.amazonaws.com/0/51093/fda17b67-825f-a950-8cf7-1de477141708.png)

#### Composerの利用
今のままでは不特定多数の方にアクセスしてもらえないので、ステップ3ではoAuthの実装を行います。チュートリアルにある通り「Yahoo! ID連携 SDK for PHP」というSDKを導入してみます。
IBM Bluemix（CloudFoundry）でもComposerを利用することができます。アプリケーションのrootにcomposer.jsonを置くことでcf push時に各種ライブラリをインストールしてくれます。

```bash
$ ls -al ./myThings-tutorial
total **
**********  * **  **   204 10 22 10:25 .
**********  * **  **   238 10 22 10:25 ..
**********  * **  **   223 10 22 17:49 composer.json
**********  * **  **  5301 10 20 02:42 setting_sample.php←STEP2の名残り。もう消して良いです
**********  * **  **  5570 10 20 02:42 trigger_sample.php←←STEP2の名残り。もう消して良いです

$ cd ./myThings-tutorial
$ cf push <Bluemixのアプリケーション名>

-こんな感じの実行ログが流れます-
（省略）
Loading composer repositories with package information
Updating dependencies                                           
  - Installing yahoojapan/yconnect-php-sdk (dev-master 251ade9)
    Cloning 251ade9e2ee0d61ba539e13d85f3a9ab5911e25c
Writing lock file
（省略）
```

この「Yahoo! ID連携 SDK for PHP」の導入さえIBM Bluemix（CloudFoundry）に合わせたやり方に読み替えれば、あとは公式チュートリアルの内容通り、index.php、callback.php、geturl.php、setting_callback.php、customtrigger.phpといったファイルをサンプルコードそのままに作成して、動作確認を進めてください。

一点注意としては、以下のような設定例がたびたび出てくるのですが、http://www.example.com は必ずご自身の環境向けに書き換えてください。Bluemixであれば、http://（人それぞれ）.mybluemix.net のようになるはずです。
![dde15fc3d7135144dec2.png](https://qiita-image-store.s3.amazonaws.com/0/51093/61495346-e044-4984-66c3-8dc75c8682a9.png)