Google App EngineでHello, World!(PHP)

# Google App EngineでHello, World!（PHP）
[5分でPHPアプリをGoogle App Engineで動かす](http://koni.hateblo.jp/entry/2016/01/06/120643)
こちらのサイトを参考にさせて頂きつつ、アカウントの開設から、PHPが動くところまでの解説です。先人の足跡を辿るだけではなく、適宜解説を加えつつ記載していきます。

## Google Cloud Platform の無料試用に登録する
[Google Cloud Platform](https://console.cloud.google.com/freetrial?hl=ja)
![スクリーンショット 2016-06-11 15.30.23.png](https://qiita-image-store.s3.amazonaws.com/0/129243/d70156a8-bdb8-4088-79ae-058d34f6c140.png)

Google Cloud Platform 無料試用の利用規約には目を通しましょう。
60日間有効な300ドル分のクレジットが付与されることや、無料トライアル中は同時に使えるのが8コアに制限されることなどが記載されています。

また、無料トライアルについては日本語ページが用意されています。
[無料トライアルについて](https://cloud.google.com/free-trial/docs/)
不意な課金を防ぐためにも**課金の無効化**については目を通しておきましょう。

（利用規約に問題がなければ）「はい」にチェックをして「同意して続行」をクリックします。
![スクリーンショット 2016-06-11 16.01.06.png](https://qiita-image-store.s3.amazonaws.com/0/129243/8bde5ccf-7228-e609-b397-8849665e2ad7.png)
口座の種類を「個人」にし、必要事項を入力してページ下部の「無料試用を開始」をクリックします。

## How to run Hello World with PHP
Google App Engineは各種ドキュメントも充実しています。
[Quickstart for PHP App Engine Standard Environment](https://cloud.google.com/appengine/downloads/#Google_App_Engine_SDK_for_PHP)を読みつつ進めます。

### 事前準備

Google App Engine SDKをダウンロードしてインストールします。
OSによってダウンロードするファイルが異なるため詳細は省略しますが、GoogleAppEngineLauncherはPython2.7を必要とします。
Windowsを使っている場合には事前にインストールしておく必要があります。
[Download the Google App Engine SDK](https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_PHP)

#### Hello World appの準備

参考にさせていただいたkoni氏のサイトではindex.phpとapp.yamlを自身で用意するように書かれていますが、Quickstartの手順で進めていきます。

ソースコードを管理しておくのに適切なディレクトリで以下のコマンドを実行し、サンプルをcloneします。

`git clone -b phase0-helloworld https://github.com/GoogleCloudPlatform/appengine-php-guestbook.git helloworld`

サンプルコードのディレクトリに移動
`cd helloworld`

lsコマンドでディレクトリの中身を確認すると、以下のように3つのファイルがあるはずです。
`ls -1
app.yaml
helloworld.php
README.md`

#### アプリケーションのテスト
以下のコマンドを実行し、ローカル開発環境を起動します。
`dev_appserver.py ./`

サーバーが起動したら以下のアドレスにブラウザでアクセスします。
[http://localhost:8080/](http://localhost:8080/)

**Hello, World!**
と表示されれば成功です。

#### Datastore Viewer
[the PHP Development Server reference](https://cloud.google.com/appengine/docs/php/tools/using-local-server)に書かれていますが、以下のアドレスにアクセスすることでDatastoreの状態を確認することができます。
[http://localhost:8000/datastore](http://localhost:8000/datastore)

### アプリケーションのデプロイ
アプリケーションのデプロイをするためにはプロジェクトIDが必要になるため、事前に確認しておきます。

[プロジェクト一覧](https://console.cloud.google.com/iam-admin/projects)

先ほど確認したプロジェクトIDを引数に入れて以下のコマンドを実行します。
`appcfg.py -A <YOUR_PROJECT_ID_> -V v1 update ./`

デプロイが成功すると以下のURLで確認できるようになります。
`http://<YOUR_PROJECT_ID>.appspot.com/`

**Hello, World!**
と表示されれば成功です。

### プロジェクトの削除 または アプリケーションの停止
[Quickstart for PHP App Engine Standard Environment](https://cloud.google.com/appengine/docs/php/quickstart#clean-up)には、検証のために使用したプロジェクトは不意な課金を防ぐために削除しろと書かれています。

[Cloud Platform Console](https://console.cloud.google.com/iam-admin/projects)こちらの画面で不要になったプロジェクトにチェックを入れて「プロジェクトを削除」をクリックすれば検証に作成したプロジェクトを削除できます。

引き続き検証を続けたいのでプロジェクトを削除したくない場合には、アプリケーションを停止させます。

[Google Cloud Platformのダッシュボード](https://console.cloud.google.com/home/dashboard)にアクセスし、画面左上のハンバーガーメニューから**App Engine**をクリック
![スクリーンショット 2016-06-12 17.11.06.png](https://qiita-image-store.s3.amazonaws.com/0/129243/8e575d41-f419-720d-0346-8a461ffa99fe.png)

App Engineのメニューが表示されたら**設定**をクリック
![スクリーンショット 2016-06-12 17.11.22.png](https://qiita-image-store.s3.amazonaws.com/0/129243/4b0fe9dc-4b0b-7f95-de1a-b72493c421ac.png)

「アプリケーションを無効にする」ボタンをクリックする。
これで、アプリケーションを停止させることができました。
この状態で先ほどの「Hello, World!」のURLにアクセスしても「404 Not Found」となります。
![スクリーンショット 2016-06-12 17.18.29.png](https://qiita-image-store.s3.amazonaws.com/0/129243/cd2b1ae0-0801-b88c-3f47-52b58b1d25e8.png)

## helloworld.phpとapp.yamlを編集してみる

git cloneで取得したapp.yamlは以下のようになっています。
>runtime: php55
>api_version: 1
>
>handlers:
>- url: /.*
>  script: helloworld.php

これを以下のように修正します。
>application: \<YOUR_PROJECT_ID\>
>version: alpha-002
>runtime: php55
>api_version: 1
>
>handlers:
>- url: /.*
>  script: helloworld.php

変更が目に見えるようにhelloworld.phpにも修正を加えましょう。

><?php
>
>echo 'Hello, World!\<br />';
>echo 'Current PHP version: ' . phpversion();

念のためローカル環境で確認
`dev_appserver.py .`

問題がなければ再度デプロイします。
`appcfg.py update ./`
app.yamlにプロジェクトIDとバージョンを記述したので、最初にデプロイした時よりもパラメータを減らすことができました。

パラメータについてはappcfg.pyのヘルプに詳しく説明されています。
`appcfg.py -h`

この状態で先ほどのURLにアクセスしても、編集したhelloworld.phpの内容が反映されません。
バージョンを切り替えて（トラフィックを移行して）、alpha-002が画面に表示されるように設定を変更する必要があります。
![スクリーンショット 2016-06-12 19.41.05.png](https://qiita-image-store.s3.amazonaws.com/0/129243/ad4d8e43-8af9-522f-2038-2e100f0d8fb1.png)

ConsoleからApp Engineを選択、メニューの**バージョン**をクリック、alpha-002にチェックを入れて「トラフィックを移行」をクリックします。
これで先ほどの画面をリロードすれば新しいhelloworld.phpが表示されるようになるはずです。

# まとめ

アカウントを作成したり、ドキュメントを読んでいると、ここまでで結構な時間が掛かってしまいましたが、特に難しい箇所などなくGoogle App Engineを使い始める… `Hellow, world!`が表示できて、それをカスタマイズすることができました。