Google App Engine上のPHPアプリケーションでComposerを使う方法
前回のGoogle App EngineでHello, World!(PHP)では、Google App EngineでPHPが動作するところまでを試しました。今回は、より複雑なアプリケーション作成の準備としてComposerでライブラリを使えるようにしてみたいと思います。
準備
今回はComposerでインストールしたライブラリがGoogle App Engineで動作する事を確認するのが目的なので、確認が簡単なFakerを使うことにしました。Fakerは氏名や住所など個人情報のダミーデータを作成するためのライブラリです。
まずは、ソースコードを管理しておくのに適切なディレクトリにcomposer.json
を用意します。
{
"require": {
"fzaninotto/faker": "1.6.*"
}
}
composerでライブラリをインストールする
composer install
コマンド実行後、ディレクトリは以下のようになります
- composer.json
- composer.lock
- vendor/
+- autoload.php
+- composer/..
+- fzaninotto/...
index.htmlの作成
前回のサンプルではapp.yaml
やindex.php
がすべて同じディレクトリに保存されていました。複雑なアプリケーションを作成していくのには少々心許無い気がします。今後はユーザーからアクセスされるファイル類はwebsite
ディレクトリに保存することにします。
今回のindex.php
は以下のように作りました。
Fakerの使い方は公式のreadme.mdを参照して下さい。
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<?php
require '../vendor/autoload.php';
$faker = Faker\Factory::create('ja_JP');
for ($i=0; $i < 10; $i++) {
echo $faker->name, '<br />', "\n";
}
app.yamlの作成
前回のapp.yamlを元にしつつ、今回のapp.yamlは以下のようにしました。大きな違いはskip_files
を指定していることです。skip_filesで指定したファイルはApp Engine
にアップロードされなくなります。
セキュリティ上の懸念になりうるファイル、アプリケーションの動作に無関係なファイルはアップロードしないように設定しておくといいでしょう。
handlersではwebsiteディレクトリ以下のindex.php
を参照するように指定してあります。
application: <YOUR_PROJECT_ID>
version: alpha-003
runtime: php55
api_version: 1
threadsafe: true
skip_files:
- ^(.*/)?app\.yaml
- ^README\..*
- ^(.*/)?composer\.(phar|lock|json)$
- \.gitignore
- ^\.git/.*
- ^(.*/)?(.*\.swp)
handlers:
- url: /.*
script: website/index.php
App Engineにデプロイ
準備が整ったので本番環境へデプロイを行います。
appcfg.py update ./
以下のURLで動作確認します。
http://<YOUR_PROJECT_ID>.appspot.com/
Fakeが生成したダミーの氏名が表示されることが確認できました。
ポイント
Google App Engineだからという事で特筆することもなく、composerでインストールしたライブラリを利用することができましたが、あえてポイントを書くのであれば…
- composerが生成したディレクトリも含めてアップロードする
- PHPから
vendor/autoload.php
へのpathを通す
この2点です。今回の最終的なファイル構成は以下のようになっています。
- composer.json
- composer.lock
- vendor/
+- autoload.php
+- composer/..
+- fzaninotto/...
- website/
+- index.php
ここまで読んでいただき、ありがとうございました。