More Related Content Similar to appengine ja night #25 Google App Engine for PHP (20) appengine ja night #25 Google App Engine for PHP1. Google App Engine for PHP
appengine ja night #25
Ryo Yamasaki @vierjp
1
http://goo.gl/mTyMK
2. • Blog
• http://blog.vier.jp/
• Twitter
• @vierjp
• 仕事
• Javaでサーバーサイドの開発がメイン
• 前職はスマホ向けサービス事業者の技術リーダー
• Google App Engineを中心にCloud StorageやBigQuery等、
Google Cloud Platformのプロダクトを利用していました。
• 個人でAndroidアプリを公開しています
• WiFi Tunes Sync
Ryo Yamasaki
自己紹介
2
http://goo.gl/mTyMK
3. Google App Engine for PHP
3
アジェンダ
1. GAE/PHPの概要
2. Google I/O後のアップデート
3. GAE/PHPで使えるIDE
4. 既存アプリを動かしてみた
5. 既存アプリを動かす際の注意点
6. GAE/PHPで使えるフレームワーク
http://goo.gl/mTyMK
5. Google App Engine for PHP
• Python、Java、Goに続きPHPが追加
• Google I/O 初日の2013/5/15 に発表
• 現在 Limited Previewで申し込み受付中
• PHP Version 5.4.8
• Cloud SQLを利用可能
• Cloud Datastore APIを利用可能
概要
5
http://goo.gl/mTyMK
6. Google App Engine
• 制限
• ローカルファイルシステムへのアクセス不可
• 代わりにCloud Storageに対して読み書きする
• PHPの標準的な方法でファイルのダイレクト
アップロードが不可
• そのままでは「$_FILES」が使えない
• Cloud Storageに対してアップロードする
• ProcessやSystemを操作する関数は使用不可
• PHPの拡張モジュールを追加できない
• まだ使えないApp Engineのサービスがある
概要
6
http://goo.gl/mTyMK
7. Google App Engine for PHP
• App Engine Ver.1.8.1
• mbstring (マルチバイト関連) の追加
• mcrypt (暗号化関連) の追加
• iconv (文字エンコード変換・多言語等) の追加
• Cloud Storageに配置したPHPスクリプトを
include可能になった。
Google I/O後のアップデート (1)
7
http://goo.gl/mTyMK
8. Google App Engine for PHP
• PHPスクリプトのinclude例
Google I/O後のアップデート (2)
8
<?php
require_once "gs://my_bucket/file.php";
http://goo.gl/mTyMK
10. Google App Engine for PHP
• PHP開発者に人気のPHP用IDE
• GAE/PHPに対応
• IDE上でデバッグ・デプロイが可能
• 1ヶ月は無料で利用可能
PhpStorm
10
http://goo.gl/mTyMK
15. Google App Engine
Word Press Ver.3.5.1 日本語版
15
http://vier-test.appspot.com/
• 日本語の投稿・表示は問題なし
• 専用プラグインが公開されてい
る
16. Google App Engine for PHP
• ファイルのアップロードが可能になる
• メールの送信が可能になる
• 問題のあった一部のUIが修正される
Google公式の GAE/PHP向けWordPressプラグイン
16
http://goo.gl/mTyMK
17. Google App Engine for PHP
1. WP Multibyte Patch
2. Memcached Object Cache
3. Batcache
4. Wptouch
5. FancyBox
6. WP Social Bookmarking Light
7. Secure WordPress
8. Crazy Bone
WordPressのプラグインもいくつか試してみました
17
http://goo.gl/mTyMK
19. Google App Engine for PHP
• WordPress
• 記事一覧
• 記事詳細
• 記事の投稿
• プラグイン
• スマートフォンからのアクセス
デモ
19
http://goo.gl/mTyMK
21. Google App Engine
• GAE/PHPの制限
• ローカルファイルシステムへの書き込み不可
• 代わりにCloud Storageに対して読み書きする
• PHPの標準的な方法でファイルのアップロード
が不可
• そのままでは「$_FILES」が使えない
• Cloud Storageに対してアップロードする
• ProcessやSystemを操作する関数は使用不可
• PHPの拡張モジュールを追加できない
既存アプリを動かす際の注意点
21
http://goo.gl/mTyMK
22. Google App Engine for PHP
1. ファイルシステムに対するI/O
2. ファイルアップロード機能
3. ログ出力
4. セッション管理
5. メール送信
6. 必要な拡張モジュール
既存アプリを動かす際の注意点
22
http://goo.gl/mTyMK
23. Google App Engine for PHP
• 基本的にはPathをCloud StorageのPathに変更すれば
PHP標準の関数でファイルを読み書きできる
• Cloud StorageのPathに対する操作はPHPのStream
Wrapperを使って処理している
• ディレクトリに対する操作の挙動が怪しい (Issue 9368)
• ディレクトリの存在チェック
• ディレクトリ作成
• 既存コードが特定の関数を使っていると問題になる
• realpath (Stream Wrapperがサポートしていない関数)
ファイルシステムに対するI/Oの補足
23
http://goo.gl/mTyMK
24. Google App Engine for PHP
• 標準のmail関数を使えない模様
• The function ‘mail’ is not implemented. というエラーになる
• WordPressプラグインでは以下の方法
メール送信についての補足
24
require_once 'google/appengine/api/mail/Message.php';
use googleappengineapimailMessage;
// App EngineのMailService用クラスを使用する
$mail = new Message();
// 現状Fromの表示名をサポートしていないらしい。(WordPress Pluginのコメントより)
//$mail->setSender(' Ryo Yamasaki <eins@vier.jp>');
$mail->setSender( 'eins@vier.jp’ );
$mail->addTo( ’test@vier.jp’ );
$mail->setSubject( 'Test Subject' );
$mail->setTextBody( 'Test Message' );
// 送信
$mail->send();
http://goo.gl/mTyMK
26. Google App Engine for PHP
1. 一時ファイルをGAEのファイルシステム
に書き込まない
2. ログ出力はsyslog関数を使う
GAE/PHP上で動かすフレームワークの条件
26
http://goo.gl/mTyMK
27. Google App Engine for PHP
• デフォルトはアプリ内のtmpディレクトリにいろいろ書き込む
Cake/PHPを試してみた
27
• それが原因でエラーになる
• tmpディレクトリを
CloudStorageにしてもダメ
http://goo.gl/mTyMK
28. Google App Engine for PHP
• CakePHPにはI/Oの対象を切り替える仕組みがある
1. 一時データの格納先をAPCかMemcacheに変更
2. ログ出力をsyslog関数に変更 (CakePHP 2.4に含まれている)
3. Sessionの格納先をCloud SQLに変更
Cake/PHPの設定を変更する
28
※詳細は長くなるのでブログで
http://goo.gl/mTyMK
29. Google App Engine for PHP
• CakeEmail標準のコードでは送信不可
• 送信部分の処理だけMailServiceを使うクラス
(Transport)を作成してそれに切り替えることで一応送
信可能
• アプリ内に含まれる静的なファイルは添付可能
• Cloud Storage上のファイルを添付するにはCakeEmail
本体の修正が必要になりそう (前述のrealpath関数が原因)
Cake/Emailも試してみた
29
http://goo.gl/mTyMK
30. Google App Engine for PHP
1. 「一覧・登録・編集・削除」を行うシンプルなCRUD処理
2. GAEのUserServiceを使った認証処理
3. 投稿者と管理ユーザーのみが編集・削除可能
Cake/PHP の動作デモ
30
http://cake2.vier-test.appspot.com/
31. Google App Engine for PHP
• ポータビリティ
• 既存アプリがそこそこ動く
• フレームワークも物によっては動くっぽい
• 一部機能が透過的に動くようになればさらに良い
• ファイルのダイレクトアップロード
• Cloud Storageに対するファイル・ディレクトリ操作
• メール送信
• スケーラビリティ
• 他の言語同様にDatastoreを使えるとさらに良い
まとめ
31
http://goo.gl/mTyMK
32. Google App Engine
• Google App Engine for PHP Limited Preview申し込みサイト
• https://gaeforphp.appspot.com/
• Google App Engine for PHP 公式ドキュメント
• https://developers.google.com/appengine/docs/php/
• PHP IDE :: JetBrains PhpStorm
• http://www.jetbrains.com/phpstorm/
• Getting Started with PhpStorm as Google App Engine PHP IDE
• http://goo.gl/1pOS6
• WordPress › 日本語
• http://ja.wordpress.org/
• WordPress › Google App Engine for WordPress « WordPress Plugins
• http://wordpress.org/plugins/google-app-engine/
• Google Cloud Datastore 公式ドキュメント
• https://developers.google.com/datastore/docs/overview
32
関連URL
33. Google App Engine
• 27.Google I/Oで発表されたCloud Platformの新機能
• http://blog.vier.jp/2013/05/google-iogoogle-cloud-platform.html
• 28.Google App Engine for PHP (GAE/PHP) を早速試してみた
• http://blog.vier.jp/2013/05/google-app-engine-for-php-gaephp.html
• 29.Google App Engine for PHPで WordPress を動かしてみた
• http://blog.vier.jp/2013/05/29google-app-engine-for-phpwordpress.html
• 30.Google App Engine for PHPにおけるポータビリティを考える
• http://blog.vier.jp/2013/05/30google-app-engine-for-php.html
• 36.Google App Engine for PHPで WordPress を運用するためのプラグイン
• http://blog.vier.jp/2013/06/37google-app-engine-for-phpwordpress.html
• 39.Google App Engine for PHP で CakePHP を動かしてみた
• http://blog.vier.jp/2013/07/39google-app-engine-for-phpcakephp.html
• 33.Google Cloud Datastoreを試してみた 概要編 (1/3)
• http://blog.vier.jp/2013/06/33google-cloud-datastore-13.html
33
関連ブログURL