GAE+PHP/Rubyで拓く新世界

第4回 PHPでGAE上に社員検索アプリを作る

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

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

2010/3/18

Web アプリケーション開発者にとって、魅力的な環境に映るGoogle App Engineだが、データの永続化などで落とし穴が存在する。これまでの開発手法を変えずに使えないだろうか(編集部)
- PR -

 第1回から第3回まで、Google App Engine(GAE)上で動作するリレーショナルデータベース「SQL4G」の紹介と、GAE上でPHP/Rails開発を行うために必要な環境設定を説明しました。

 今回は、GAE上でPHPを実行するために必要なライブラリの説明をします。

 また、それらを活用したアプリケーションを作成しながら、PHP+リレーショナルデータベースとGAEの連携という新しい世界へ皆さんを招待したいと思います。

ライブラリの説明

 PHP4Gでは、GAE上でPHPアプリケーションを動作させるために、以下のライブラリを使用します。

  • Quercus
  • Pear::DB with SQL4G
  • Smarty

●Quercus

 Quercusは、Caucho Technologyが提供する、PHPの実行環境(PHPプロセッサ)です。一般的なPHPプロセッサはCで実装されているのですが、QuercusはJavaで実装されているため、GAEとの親和性に秀でています。PHP4Gは、このプロセッサを介して、PHPアプリケーションをGAE上で動作させています。

 Quercusを使用したPHPとJavaとの連携については、「JavaでPHPを使ってみた」を参考にしてください。

●Pear::DB with SQL4G

 PHPで利用できるライブラリを提供しているサービスにPearがあります。PHP4Gでは、DBと呼ばれるライブラリ(表記はPear::DB)を使用しています。

 Pear::DBは、PEARの基本パッケージに含まれているデータベースアクセス用のモジュールです。MySQLやPostgresqlをはじめとする主要なリレーショナルデータベースに対応し、データベースごとの差異を意識せずに、コネクションの確立からデータの取得、更新などを統一的な手段で実現します。

 PHP4GではSQL4Gとのアクセスを、Pear::DBが用意するインターフェイスを使用して行います。

●Smarty

 Smartyは、PHP上で動作するテンプレートエンジンです。さまざまなテンプレートエンジンが存在しますが、日本でもっとも使用されているとテンプレートエンジンかもしれません。

 Smartyの特徴として、デザインと処理の分離が挙げられます。CSSやJavaScriptを多用する昨今のモダンなページでは、デザインソース(HTML)の保守性や可読性が強く要求されます。また、PHPの場合、その言語特性と相まって、Webアプリケーション構築はデザイナーとプログラマーの分業が一般的です。このような環境では、Smartyなどのテンプレートエンジンの活用により、さまざまなメリットが得られます。

 PHP4Gは、これらのライブラリを使用しただけと思われる読者もいらっしゃるかもしれません。確かに、PHP4Gはライブラリを活用してPHPアプリケーションを動作させるためのパッケージですが、そこにはさまざまなテクノロジや創意工夫があふれています。

 ここからは、GAE上のPHPからPear::DBやSmartyの連携をいかにして実現したかについて、その技術的な背景を説明します。

GAE上でファイル保存方法とSmartyのミスマッチ

 GAE環境では、ストレージ上にアプリケーションからファイルを直接保管できません。これは、第1回でも取り上げたので重複する部分もありますが、とても重要なことなのでおさらいの意味も兼ねて再度説明します。

 一般的なサーバ環境の場合、ディレクトリに対して書き込みの権限を与えることで、アプリケーション上からファイルを自由に生成することが可能です。しかし、GAEが提供するBigTableと呼ばれるキー・バリュー型データ分散ストレージ環境では、これができません。

 そのため、JavaやPHPの世界で一般的に行われていたJavaの場合Fileオブジェクトを直接生成したり、パイプを使用してファイルを生成したりという手法は一切使用できません。

 この問題を解決するためには、BigTableの構造体に対して、各種APIを通してファイルのオブジェクトを格納する必要があります。

 また、ストレージ上にアプリケーションからファイルを直接保管できないGAEの特徴は、Smartyの使用において致命的な問題をもたらします。もっともこれは、Smartyだけでなく、一般的なテンプレートエンジンのほぼすべてに当てはまります。

 テンプレートエンジンは、テンプレート(HTML)とソース(PHP)をマージ(コンパイル)した後に、一定のディレクトリにコンパイル後のファイル(PHP)を保存します。この動作がGAE環境の特性によりできず、テンプレートエンジンが使えなかったのです。

 
1/3
next

Index
PHPでGAE上に社員検索アプリを作る
  Page1
ライブラリの説明
GAE上でファイル保存方法とSmartyのミスマッチ
  Page2
GAE on PHPにおけるSmartyの連携方法
Pear::DBを活用したデータアクセス
  Page3
GAE WebApplication Projectの作成と各種設定
ソースコードの説明
PHP4Gのよくある質問

index GAE+PHP/Rubyで拓く新世界

 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 記事ランキング

本日 月間
ソリューションFLASH