appengine ja night #25 google app engine for php

34
Google App Engine for PHP appengine ja night #25 Ryo Yamasaki @vierjp 1 http:// goo.gl / mTyMK

Upload: ryo-yamasaki

Post on 16-Jul-2015

14.485 views

Category:

Technology


2 download

TRANSCRIPT

Google App Engine for PHP

appengine ja night #25 Ryo Yamasaki @vierjp

1

http://goo.gl/mTyMK

•  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

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

Google App Engine for PHP

4

概要

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

Google App Engine

•  制限 •  ローカルファイルシステムへのアクセス不可

•  代わりにCloud Storageに対して読み書きする •  PHPの標準的な方法でファイルのダイレクト

アップロードが不可 •  そのままでは「$_FILES」が使えない •  Cloud Storageに対してアップロードする

•  ProcessやSystemを操作する関数は使用不可 •  PHPの拡張モジュールを追加できない •  まだ使えないApp Engineのサービスがある

概要

6

http://goo.gl/mTyMK

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

Google App Engine for PHP

•  PHPスクリプトのinclude例 Google I/O後のアップデート (2)

8

<?php require_once "gs://my_bucket/file.php";

http://goo.gl/mTyMK

Google App Engine for PHP

9

GAE/PHPで使えるIDE

http://goo.gl/mTyMK

Google App Engine for PHP

•  PHP開発者に人気のPHP用IDE •  GAE/PHPに対応 •  IDE上でデバッグ・デプロイが可能 •  1ヶ月は無料で利用可能

PhpStorm

10

http://goo.gl/mTyMK

Google App Engine for PHP PhpStorm デバッグ

11

http://goo.gl/mTyMK

Google App Engine for PHP PhpStorm デプロイ

12

http://goo.gl/mTyMK

Google App Engine for PHP

13

既存アプリを動かしてみた

Google App Engine phpinfo

14

•  PHPの環境情報を表示 •  サーバー設定 •  拡張モジュール

http://phpinfo.vier-test.appspot.com/

Google App Engine Word Press Ver.3.5.1 日本語版

15

http://vier-test.appspot.com/

•  日本語の投稿・表示は問題なし •  専用プラグインが公開されてい

Google App Engine for PHP

•  ファイルのアップロードが可能になる

•  メールの送信が可能になる

•  問題のあった一部のUIが修正される

Google公式の GAE/PHP向けWordPressプラグイン

16

http://goo.gl/mTyMK

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

Google App Engine phpMyAdmin Ver.4.0.3

18

•  MySQLの管理ツール

http://goo.gl/mTyMK

Google App Engine for PHP

•  WordPress •  記事一覧 •  記事詳細 •  記事の投稿 •  プラグイン •  スマートフォンからのアクセス

デモ

19

http://goo.gl/mTyMK

Google App Engine for PHP

20

既存アプリを動かす際の注意点

Google App Engine

•  GAE/PHPの制限

•  ローカルファイルシステムへの書き込み不可 •  代わりにCloud Storageに対して読み書きする

•  PHPの標準的な方法でファイルのアップロードが不可 •  そのままでは「$_FILES」が使えない •  Cloud Storageに対してアップロードする

•  ProcessやSystemを操作する関数は使用不可 •  PHPの拡張モジュールを追加できない

既存アプリを動かす際の注意点

21

http://goo.gl/mTyMK

Google App Engine for PHP

1.  ファイルシステムに対するI/O 2.  ファイルアップロード機能 3.  ログ出力 4.  セッション管理 5.  メール送信 6.  必要な拡張モジュール

既存アプリを動かす際の注意点

22

http://goo.gl/mTyMK

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

Google App Engine for PHP

•  標準のmail関数を使えない模様 •  The function ‘mail’ is not implemented. というエラーになる

•  WordPressプラグインでは以下の方法

メール送信についての補足

24

require_once 'google/appengine/api/mail/Message.php'; use google\appengine\api\mail\Message; // App EngineのMailService用クラスを使用する $mail = new Message();

// 現状Fromの表示名をサポートしていないらしい。(WordPress Pluginのコメントより) //$mail->setSender(' Ryo Yamasaki <[email protected]>'); $mail->setSender( '[email protected]’ ); $mail->addTo( ’[email protected]’ ); $mail->setSubject( 'Test Subject' ); $mail->setTextBody( 'Test Message' ); // 送信 $mail->send();

http://goo.gl/mTyMK

Google App Engine for PHP

25

GAE/PHPで使えるフレームワーク

Google App Engine for PHP

1.  一時ファイルをGAEのファイルシステムに書き込まない

2.  ログ出力はsyslog関数を使う

GAE/PHP上で動かすフレームワークの条件

26

http://goo.gl/mTyMK

Google App Engine for PHP

•  デフォルトはアプリ内のtmpディレクトリにいろいろ書き込む Cake/PHPを試してみた

27

•  それが原因でエラーになる •  tmpディレクトリを

CloudStorageにしてもダメ

http://goo.gl/mTyMK

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

Google App Engine for PHP

•  CakeEmail標準のコードでは送信不可 •  送信部分の処理だけMailServiceを使うクラス

(Transport)を作成してそれに切り替えることで一応送信可能

•  アプリ内に含まれる静的なファイルは添付可能 •  Cloud Storage上のファイルを添付するにはCakeEmail

本体の修正が必要になりそう (前述のrealpath関数が原因)  

Cake/Emailも試してみた

29

http://goo.gl/mTyMK

Google App Engine for PHP

1.  「一覧・登録・編集・削除」を行うシンプルなCRUD処理  2.  GAEのUserServiceを使った認証処理 3.  投稿者と管理ユーザーのみが編集・削除可能

Cake/PHP の動作デモ

30

http://cake2.vier-test.appspot.com/

Google App Engine for PHP

•  ポータビリティ •  既存アプリがそこそこ動く •  フレームワークも物によっては動くっぽい •  一部機能が透過的に動くようになればさらに良い

•  ファイルのダイレクトアップロード •  Cloud Storageに対するファイル・ディレクトリ操作 •  メール送信

•  スケーラビリティ •  他の言語同様にDatastoreを使えるとさらに良い

まとめ

31

http://goo.gl/mTyMK

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

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

ご清聴ありがとうございました

@vierjp http://blog.vier.jp/

Google App Engine for PHP