GAE環境で動作されるために想定される問題について
ここからは、実際にWordPressという既存のアプリケーションをGAE上で動作されるために行った事を記載するとともに、進めていく上で分かってきた問題点について言及していきます。
ただ、簡単にGAE上で動かしてみようとしても、実際に作業を始める前から様々な懸念すべき点がありました。
- データベースの互換性問題
- 文字コードの問題
- 30秒ルールの問題
- ファイル書き込みの問題
上記問題について詳しくは過去の連載をご覧下さい。
これらの問題について筆者がどのように解決していったのか、その様子を紹介します。
WordPressを動かしてみよう!
具体的にどのような手順を踏んでWordPressを動作させることができたかを先に挙げた問題点ごとに1つずつ記載していきます。
データベースの互換性問題とその解決
筆者がまず懸念したのは、MySQLとSQL4Gとのデータベース仕様の差異でした。SQL4GはH2DataBaseをエンハンスしたものと連載第1回目で説明しましたが、RDBが異なるということは、使用できる関数やデータの型に差異がある可能性があることを示唆しています。
しかしながら、第1回目の連載での説明したとおり、SQL4GのコアであるH2には主要なDBMS(Oracle/PostgreSQL/MySQLなど)とSQL互換モードが用意されているため、この点については容易に解決しました。ただ、完全な互換性ではありませんでした。具体的には、以下の点について少々の修正を加えました。
- indexの書き方
- datetimeのデフォルト値
また、MySQL独自の関数を使用している部分があったのですが、こちらに関しては、その機能を代替する関数を作成してその問題を回避しました。
さらに、WordPressでは、MySQLとの接続に「wpdb」と呼ばれるデータベースと対話するために作成されたクラスを使用しているのですが、そのwpdbクラスをSQL4Gで動作するように修正を行いました。
具体的には筆者はPear::DBのSQL4Gラッパーをすでに作成していたので、「wpdb - Pear::DB(SQL4G) - SQL4G」の形として、Pear:DBからデータベースにアクセスするように修正しました。
文字化けの問題とその回避策
続いては、文字化けの問題についてです、ご存知かと思いますがGAE環境は文字コードUTF-8で動作します。WordPressの基本文字コードはUTF-8だったので、これは簡単に解決できると考えていました。しかし、WordPressにおける日本語を含む多言語リソース管理の方法は、リソースファイルとして別ファイルに持つ形式になっているため、PHPエンジン(Quecus)側で文字列解釈時にエラーが発生してしまいました。この問題点については十分な時間があれば、WordPressのリソースファイルの形式に合わせてPHPエンジン側の処理を修正することができる(またはその逆)のですが、今回は残念ながら十分な時間がなく、筆者1人の作業ではこの部分のみに時間を割くことができないので、残念ですが、多言語(日本語)表示の対応は断念しました。
ただし、この問題は先にも述べましたが、時間さえあれば解決できる問題であるとともに、必要な部分に関しては、リソースファイルを使用せずに直接スクリプト上に日本語メッセージを記載することもできるので、あまり問題はないと思います。
GAEの30秒ルールの問題
GAEにはリクエストからレスポンスを30秒以内に行わなければならない、通称「30秒ルール」と呼ばれるルールが存在します。これは、WordPressの通常利用の場合であれば意識する必要はありませんが、唯一、WordPressのインストール時には場合によってはこのルールに抵触することもあり得ると考え、WordPressのインストールプロセスを細分化しました。具体的には、インストール用スクリプト(wp-admin/install.php)内を最適化して、30秒以内でレスポンスを返し、再度リクエストを投げるというサイクルを数回繰り返すようにしました。
この方法にて、通常のインストールでは30秒ルールに引っかかってしまっていたのを回避することができました。
ファイル書き込みの問題
この問題は、当初から一番重大な問題だと筆者は考えていました。なぜなら、ほとんどのアプリケーションは何らかしらの場面でローカルの資源(ファイル、ディレクトリ)に対して書き込みや削除、果ては権限の確認、修正を行っていると考えていたからです。
これらの問題は、GAE上でWordPressが動作するか否かをも左右する重大な問題です。
まず、筆者はWordPressのソースコードの調査を行い、ブログ表示、ブログ投稿などの基本的な機能について、先のファイル書き込みが使えないことによる弊害を調べました。
その結果、plugin機能や独自の定義をする部分ではファイル書き込みが多用されていましたが、それ以外の部分では、ファイル書き込みは使用していないか、もしくは代替策を講じれば動作することを確認しました。これは、ブログの内容を含むhtmlを一時ファイルとして保存するような形式ではなく、SQLを使ってデータベースからその内容を都度取得するアーキテクチャであったのが大きかったです。
ただし、ファイル書き込みができないとそのままでは動作しないアプリケーションはWordPressばかりではありません。筆者としては今後、PHPのfwriteに代表されるファイル、ディレクトリ操作系の関数をGAE上で動作できるように対応を行う予定です。
なお、テンプレートエンジンSmartyは、すでにGAE上で動作するように修正しましたが、それは、テンプレートファイルのインスタンスをBigTableに格納することにより実現しています。PHPのファイル、ディレクトリ操作系の各関数がGAE上でそのまま動作できれば、さらなる可能性が広がると思います。
2/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の世界を体験してみよう |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|