IBM BluemixでPHPアプリケーションを公開しMySQLを操作する


# 初めに

今回はIBM Bluemixを使ってPHPからMySQLを操作してみました。
簡単にアプリケーションを公開できるので新入社員でプログラミングの勉強をしたいが、開発環境を整えるのがめんどくさかったり、苦労した方におすすめだと思います。

開発環境はOS X EI Capitanです。

# IBM Bluemix

## IBM Bluemixとは

[IBM Bluemix](http://www.ibm.com/developerworks/jp/bluemix/)はアプリケーションを作成するためのプラットフォームを提供するPaaS（Platform as a Service)の一つで同じPaaSとしては[heroku](https://www.heroku.com/)が挙げられると思います。
簡単に開発環境、実行環境をクラウド上に構築ができるため新入社員のプログラミングの勉強などに最適だと思います。

現在30日間のフリートライアルを実施しており、フリートライアルが終わっても無料プラン内であれば料金がかかることはないです。料金に関しては下記のQiitaの記事に詳しく書かれています。

[クラウドサービスIBM Bluemixを無料で使うノウハウまとめ](http://qiita.com/zuhito/items/86e7ad47d14937d3e9b6#_reference-a3c8d97a4441b514a91d)


## 登録

登録に関しては下記のQiitaの記事に詳しく書かれています。

[IBM Bluemixフリートライアルアカウント作成手順](http://qiita.com/KenichiSekine/items/6ad49b25167b3f4cdb63)

特に詰まることなく登録できると思います。

# PHPアプリケーションの構築

登録が完了したらログインをし、PHPアプリケーションを構築していきます。

ダッシュボードからCloud Foundry アプリの「アプリの作成」を選択します。

<img width="934" alt="スクリーンショット 2016-05-08 13.13.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/e409010a-11ee-108a-121b-dca5eb439014.png">

今回はwebアプリを構築します。

<img width="785" alt="スクリーンショット 2016-05-08 13.14.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/0b862675-3417-651b-7f98-83dcf5238ca6.png">

今回はPHPアプリケーションを構築するのでPHPを選択し、続行を選択します。

<img width="977" alt="スクリーンショット 2016-05-08 13.18.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/ea086333-33f0-960d-eeef-0e0279db405a.png">

次にアプリケーション名を入力します。アプリケーション名でエラーが出る場合、名前がその他ユーザーのアプリケーションと重複している可能性があるため違う名前を入力してください。

<img width="604" alt="スクリーンショット 2016-05-08 13.20.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/d826a61b-6816-3de7-435f-123fbd03522d.png">

最後にコーディングの設定ですが、一旦ここはCF コマンドラインインターフェースを選択し、画面下の「アプリの概要の表示」を選択してください。

<img width="724" alt="スクリーンショット 2016-05-08 13.24.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/83c83fed-d187-4045-33cd-bad68be305ed.png">

<img width="511" alt="スクリーンショット 2016-05-08 13.25.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/1262190c-aa31-8610-bfdc-e4b644706a24.png">

下記のようにアプリケーションの概要が表示されます。


<img width="969" alt="スクリーンショット 2016-05-08 13.29.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/2fc891b6-c11d-82c2-dfe3-a6d166269f1b.png">

経路に表示されているURLが今回作成したアプリケーションのURLです。アクセスするとHello wolrd!とお決まりの単語が表示されていると思います。

<img width="905" alt="スクリーンショット 2016-05-08 13.39.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/52ab5452-1990-d0cd-695a-6f73d0adf8b3.png">

つぎに、今回のアプリケーションのコードを編集していきます。
ダッシュボードの右上に表示されている「GITの追加」を選択します。

すると、GITリポジトリーの作成画面になるので、そのまま続行を選択します。

<img width="832" alt="スクリーンショット 2016-05-08 13.41.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/fa9ee249-90ff-53c1-caa8-6fa0d0523424.png">

作成が完了したら、閉じるを選択し、ダッシュボードの右上に追加された「コードの編集」ボタンを選択します。

<img width="836" alt="スクリーンショット 2016-05-08 13.45.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/07f31965-eca2-bbae-79a3-c800a6b43d8e.png">

<img width="932" alt="スクリーンショット 2016-05-08 13.48.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/676c682b-3afa-d253-099f-b6f64b169432.png">

すると、別窓でエディタ画面が開きます。

<img width="1273" alt="スクリーンショット 2016-05-08 13.52.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/fd582f7e-8812-f7ea-5887-582fa91c3aad.png">

では、先ほど表示されたHello world!を編集してみたいと思います。
index.phpを選択し、14行目のHello world!をHello PHP!に修正します。

<img width="922" alt="スクリーンショット 2016-05-08 13.56.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/7fd7dae1-a093-132f-6d70-945eba2e2315.png">

修正したら保存をし、画面上部の三角のボタンを押下することでアプリケーションにデプロイされます。

<img width="417" alt="スクリーンショット 2016-05-08 14.02.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/a0bfdc59-5619-d982-f061-932dcb9aab6a.png">

デプロイが完了し、再びアプリケーションのURLにアクセスするとHello PHP!になっていると思います。



# mysqlの構築

## mysqlの構築

次にPHPアプリケーションにmysqlを紐付けたいと思います。ダッシュボードから「サービスまたはAPIの追加」を選択します。

<img width="671" alt="スクリーンショット 2016-05-08 14.13.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/7a0dad16-c289-59de-af93-ce82297b0f8a.png">

画面上部の検索からmysqlと入力し検索します。

<img width="1040" alt="スクリーンショット 2016-05-08 14.14.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/3d955479-612e-4c62-847d-019843483924.png">

検索すると、ClearDB MySQL Databaseが表示されるのでこれを選択します。

<img width="472" alt="スクリーンショット 2016-05-08 14.20.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/f9099276-971c-c75a-adc7-1ab279fb9d3e.png">

選択すると、プラン選択画面になります。
選択するプランは無料の「Spark DB」を選択し作成ボタンを押下します。

<img width="959" alt="スクリーンショット 2016-05-08 14.29.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/2ec532e1-cb81-de24-0c25-6819e0cf9270.png">

作成が完了するとダッシュボードにmysqlが追加されていると思います。


<img width="659" alt="スクリーンショット 2016-05-08 14.40.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/81308/c574365e-4880-7bf0-8381-288108c528a5.png">



## mysqlへのアクセス
次にmysqlにターミナルからアクセスしてデータを挿入していきます。
ダッシュボードに表示されているmysqlの「資格情報の表示」を押下し、表示されるjson形式の情報を元にmysqlにアクセスをします。

```json

{
  "cleardb": [
    {
      "name": "ClearDB MySQL Database-vp",
      "label": "cleardb",
      "plan": "spark",
      "credentials": {
        "jdbcUrl": "",
        "uri": "",
        "name": "",
        "hostname": "",
        "port": "",
        "username": "",
        "password": ""
      }
    }
  ]
}

```

hostnameとusernameとpasswordを利用してターミナルからmysqlにアクセスします。


`mysql -h $hostname -u $username -p`

\$hostnameには資格情報の表示で表示されたhostnameを\$usernameにはusernameを入力します。
するとパスワードを求められるので資格情報の表示で表示されたpasswordを入力してmysqlにアクセスします。

アクセスしてshow databasesコマンドでdatabaseを確認すると資格情報の表示で表示された
nameのdatabaseが表示されると思います。

`show databases;`

表示されたdatabaseにテーブルを作成したいと思います。
まずは、databaseを選択します(\$nameは表示されたdatabase名)

`use $name;`

次にテーブルを作成します。

`create table test(id int,name varchar(255));`

次にテーブルにデータを挿入します。

`insert into test values(1,'hoge');`


では、この挿入したデータを作成したPHPアプリケーションで表示したいと思います。



# PHPからmysqlの操作

まずはindex.phpに下記コードを追加します。mysqliの引数は資格情報の表示で表示された情報を元に入力してください。

```php
<?php
    // mysqlへのアクセス
    $mysqli = new mysqli("$hostname:$port","$username","$password", "$name");
    // sql文の発行
    $result = $mysqli->query("select * from test");
    // 取得した行分繰り返し
    while ($row = $result->fetch_row()) {
        //　テーブルの列分繰り返し 
　　　　　　　　　　　　　　　　for($i = 0; $i < mysqli_num_fields ( $result ); $i ++) {
            // 要素の表示
            echo "$row[$i]";
        }
    }
    // 結果を開放
    result->close();
    // 接続を閉じる
    $mysqli->close();
?>

```

次に、composer.jsonを下記のとおりに編集してください。初期状態では何も書かれていないと思います。
初期状態ではmysqli()などが利用できないためcomposer.jsonに下記記述をすることで利用可能にします。

```json
{
  "require": {
    "ext-mysqli": "*"
  }
}
```

これらを保存してデプロイしてアクセスをしてみてください。
挿入した1,hogeが表示されていると思います。

# 最後に

今回はIBM BluemixでPHPアプリケーションを構築しMySQLとの連携をしました。
プログラミングの勉強をしようとした際に最初のHello wolrd!を表示するのが一番大変とよく聞きます。
IBM Bluemixは開発環境、実行環境、DB連携までとても簡単に構築できるので、プログラミングの勉強したいけど環境構築が・・・と敬遠していた方はこれを機に始めてみてはいかがでしょうか。