GAE+PHP/Rubyで拓く新世界

第6回 GAE上でWordPressを動かす

萩原 巧
リトルソフト株式会社

中越 智哉
株式会社ナレッジエックス

2010/6/3

- PR -

GAEでのWordPressの動作確認

 今までの連載で、アプリケーションをGAE環境にアップロードすることは何度も行っているのですが、今回はWordPressという今までのアプリケーションとは比較にならないほどの大きさのものですので、GAE環境に上げるだけでも時間がかかります。アップロードの時間は環境やGAEの状態によっても異なるのですが、筆者の環境ではアップロード完了まで2分ほどかかります。

インストールの画面と初期設定

 WordPressのインストール画面がGAE上に表示されました。なお、初期設定で必要となるwp-config.phpの編集やデータベースの作成はGAE環境にアップロードする前に、すべて行う必要があります。wp-config.phpは本来インストールのプロセスで自動的に作成することも可能なのですが、繰り返しになりますがGAEの環境ではファイル作成ができないため、対象となるファイルを、あらかじめ作成しておく必要があるためです。

GAE環境でインストール画面が表示されました(クリックで拡大)

インストール

 先に述べた30秒ルールの対策として、プロセスを分離してインストールを行いました。

インストールのプロセスを分離して、インストール中にレスポンスを返すことにより、30秒ルールを回避

インストールが終了し、デフォルトのブログが無事表示された

 ログイン画面が表示され、デフォルトの投稿画面が無事表示されることを確認しました。

 動作速度に関してですが、今回動作検証の対象としたWordPressでは、例えば1回の投稿の表示につき、数十回程度データベースサーバにクエリを発行しています。これはSQL4Gとしては、少々荷が重い処理になります。そのため、現状のところ一般的なサーバより、動作が少し緩慢なのはやや残念なところです(なお、この問題に関しては将来解決する見込みです、詳しくはPHP4GとGAEの今後についてをご覧ください)。

 PHP4G + SQL4Gアプリケーションを作成する上での注意点について注意点は以下のとおりです。

・SQL4Gを利用してデータを取得するときは、クエリを大量に発行するような実装をしない

 これは、WordPressの動作を検証しているときに判明したことです。具体的には、ユーザーの設定情報がDBに格納されている場合、その設定情報を1つ1つ取得するためにSQLを複数回発行するのではなく、1回のSQLで設定情報をすべて取得し、アプリケーション側でその設定情報を特定するようにするなどです。

 これは、WordPressの場合、設定情報1つ1つを取得する前者の方式を採用していたため、速度が低下してことによる問題点に対する解決策の1つです。

・GAE、SDK 1.2.8の新機能「precompilation」機能を使用する

 precompilationは、App Engineに配置する前にクラスローディングの一部の作業を実行することで最適化し、アプリケーション実行速度を高める機能です。

 この機能は執筆時点ではオプションのため、有効にするにはappengine-web.xmlに、

<precompilation-enabled>true</precompilation-enabled>

と記述します。

 この機能を有効にすると、GAEへのアップロード時間は従来よりかかるようになりますが、アプリケーションの起動時間や実行速度が向上します。筆者もこのオプションを試したみたところ、体感できるほどに実行速度が速くなりました。具体的な速度の差は計測していないのですが、実際に速度を測ったサイトによるとおおむね30%向上したという報告があります。

 そのほかの注意点としては、20秒ルールやスピンアップ待ち(GAEでアプリケーションを起動(インスタンス生成時)の待ち時間)を意識した開発など挙げられますが、こちらについては、すでにWebを通じて様々な情報を入手できますので、ここでは割愛させていただきます。

PHP4GとGAEの今後について

 今回の対応を行った結果、浮かび上がった問題点とその解決策について簡単ですが以下に述べます。

・GAE環境におけるファイルI/O系動作について

 こちらは技術的な課題と対応方法については、すでに構想は練りあがっていますので、今後予定しているPHP4Gのバージョンアップ時にはファイル書き込みなどのI/O系動作に対応したいと考えております。

・アプリケーションやSQL4Gの実行速度や30秒ルールについて

 前回、5回目の連載でも取り上げましたが、グーグルが公表しているGAEのロードマップを見ると、半年以内に30秒制限やスピンアップ待ちがなくなるという記述があります。これが実現すると、SQL4Gの動作速度の大幅な向上が見込まれるとともに、先のI/O系の問題が解決され、GAEの特徴を良い意味で意識しないプログラミングが可能になることも考えられます。

 最後に実際に広く使われているアプリケーションをGAE+PHP4G +SQL4Gという組み合わせで動作させることができました。WordPressのような大きなアプリケーションを動かすことができるGAE+PHP4G+SQL4Gならば、一般企業の通常業務やパブリック向けのサービスを展開していくことも決して難しくないと思います。

 なお、今回の連載で作成したWordPressは、

http://wordpressphp4g.appspot.com/wordpress/

にあります。また、連載第4回目で作成したアプリケーションについては、

http://employeephp4g.appspot.com/empmaint.php

にございますので、興味のある方はぜひご覧ください。

 次回はいよいよ最終回です。お楽しみに!!

prev
3/3
Index
GAE上でWordPressを動かす
  Page1
GAEにインストールするアプリケーションについて
WordPressとは?
なぜWordPressをGAEで検証しようとしたか?
著名なアプリケーションをGAE上で動作させるということは……
  Page2
GAE環境で動作されるために想定される問題について
WordPressを動かしてみよう!
データベースの互換性問題とその解決
文字化けの問題とその回避策
GAEの30秒ルールの問題
ファイル書き込みの問題
  Page3
GAEでのWordPressの動作確認
インストールの画面と初期設定
インストール
PHP4GとGAEの今後について

 Coding Edgeお勧め記事
いまさらアルゴリズムを学ぶ意味
コーディングに役立つ! アルゴリズムの基本(1)
 コンピュータに「3の倍数と3の付く数字」を判断させるにはどうしたらいいか。発想力を鍛えよう
Zope 3の魅力に迫る
Zope 3とは何ぞや?(1)
 Pythonで書かれたWebアプリケーションフレームワーク「Zope 3」。ほかのソフトウェアとは一体何が違っているのか?
貧弱環境プログラミングのススメ
柴田 淳のコーディング天国
 高性能なIT機器に囲まれた環境でコンピュータの動作原理に触れることは可能だろうか。貧弱なPC上にビットマップの直線をどうやって引く?
Haskellプログラミングの楽しみ方
のんびりHaskell(1)
 関数型言語に分類されるHaskell。C言語などの手続き型言語とまったく異なるプログラミングの世界に踏み出してみよう
ちょっと変わったLisp入門
Gaucheでメタプログラミング(1)
 Lispの一種であるScheme。いくつかある処理系の中でも気軽にスクリプトを書けるGaucheでLispの世界を体験してみよう
  Coding Edgeフォーラムフィード  2.01.00.91


Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Coding Edge 記事ランキング

本日 月間