第4回 PHPでGAE上に社員検索アプリを作る
萩原 巧
リトルソフト株式会社
中越 智哉
株式会社ナレッジエックス
2010/3/18
Web アプリケーション開発者にとって、魅力的な環境に映るGoogle App Engineだが、データの永続化などで落とし穴が存在する。これまでの開発手法を変えずに使えないだろうか(編集部)
第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 |
Index | |
PHPでGAE上に社員検索アプリを作る | |
Page1 ライブラリの説明 GAE上でファイル保存方法とSmartyのミスマッチ |
|
Page2 GAE on PHPにおけるSmartyの連携方法 Pear::DBを活用したデータアクセス |
|
Page3 GAE WebApplication Projectの作成と各種設定 ソースコードの説明 PHP4Gのよくある質問 |
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の世界を体験してみよう |
|
- プログラムの実行はどのようにして行われるのか、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を紹介する。※ショートカットキー、アクセスキーの解説あり
|
|