IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  SOA and Web services | WebSphere | Web development | XML  >

Project Zero を導入して日本語 PHP アプリケーションを作る

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません


レベル: 初級

木村 桂 (kimuc@jp.ibm.com), ソフトウェア事業, IBM 

2008年 04月 15日

この記事では Project Zero を実際に導入して、簡単な日本語 PHP アプリケーションを作って動作確認するまでの手順を紹介します。

Project Zero とは?

"Project Zero" とは、もともと IBM が「アジャイルで Web 2.0 を取り入れたウェブアプリケーション開発プラットフォーム」を目指して実験的に進められてきたプロジェクトです。具体的な開発言語としては Java をベースとした Groovy と、日本でも数多くの開発者を抱える PHP をサポートしており、誰でも無料でダウンロードして利用することができます。簡単に言ってしまうと「IBM が提供する Groovy/PHP アプリケーションサーバー」といえます。

また他のアプリケーションサーバーと異なり、Project Zero のインストールをするだけで、Groovy/PHP のアプリケーションサーバーとして動作します。Groovy や PHP を別途導入する必要はありません。また以下でとりあげますが、ウェブブラウザを使った開発者向けの環境を合わせて提供しています。更には Groovy や PHP の中で扱うデータを簡単に JSON フォーマットにしたり、REST(XML) フォーマットにする関数が用意されているため、この Project Zero で作成したアプリケーションの結果を他のサービスやアプリケーションで容易に利用することができるようになっています。

以上のことから、Project Zero を簡単にまとめると以下のような特徴を持っているものといえます:

  1. IBM が提供する Groovy/PHP アプリケーションサーバー
  2. Apache + PHP のような 2 段階の導入の必要はなく、1 度のインストールでアプリケーションサーバーとなる
  3. 統合開発環境も同梱
  4. JSON や REST(XML) フォーマットを容易に扱えうことができ、他サーバーのアプリケーションとのマッシュアップなどの連携が容易
  5. 無料でダウンロード可能。ただしオープンソースではない




上に戻る


Project Zero と WebSphere sMash との違い

先日、米国 Las Vegas で行われたイベント: IBM IMPACT 2008 において、"IBM WebSphere sMash(発音は「ウェブスフィア・スマッシュ」)" というアプリケーションサーバー製品がリリースされることが正式に発表されました。この製品はこれまで "Project Zero" としてコミュニティ主導で育てられてきた同名のアプリケーションサーバーを、改めて IBM 製品としていくつかのラインナップで提供してゆくものです。

では "Project Zero" と "WebSphere sMash" の違いはなんでしょうか? この違いという点では明確に区別されており、

  • 今後、「正式バージョンとしてリリースされるもの」は全て WebSphere sMash
  • 次期バージョンのベータ版やマイルストーンビルドと呼ばれる、開発途中のモジュールは Project Zero
  • ウェブサイトなど、コミュニティとしての名称は(これまで通りの) Project Zero

という区別になる模様です。大まかには "Project Zero" としてベータ版が公開され、それが正式リリースされると "WebSphere sMash" になります。またバージョンアップ時もまずは "Project Zero" として新バージョンのベータ版が公開され、正式なバージョンアップリリースとなった時に "WebSphere sMash" になる、という感じでしょうか。

なお、WebSphere sMash 1.0 のリリースは現段階では 2008年5月末の予定です。なので、現時点で入手できるモジュールは全て(正式リリースバージョンである WebSphere sMash ではなく)Project Zero のモジュールということになります。以下で Project Zero を実際に導入し、使ってみるまでの手順を紹介しますが、以上のような背景がある関係上、全て 2008/04/11 時点での開発途中のモジュールを利用していること、そして今後のバージョンアップによって画面構成を含めて一部変更が加わる可能性があることをご了承ください。




上に戻る


Project Zero の導入

では、早速 Project Zero を導入してみましょう。以下では Microsoft Windows プラットフォームを前提に説明しますが、実際には Linux 版も用意されていますので、いずれかの OS が必要です。Project Zero の導入は大きく以下の 3 ステップになります:

  1. JDK(Java Development Kit) の導入
  2. Project Zero CLI(Command Line Interface) のダウンロード
  3. Project Zero CLI のインストール

まず Project Zero の導入に必要な前提条件として JDK が必要です(公式には JDK 5 が必要です)。Project Zero は PHP や Groovy のアプリケーションサーバーですが、Project Zero 自身は Java で記述されたアプリケーションです。したがってその動作には Java が必要になります。既に導入済みの方であればここは飛ばしていただいて構いませんが、まだの方は以下のサイトからダウンロードして導入しておいてください。

Java SE Downloads

JDK が用意できたら、次は Project Zero インストーラーをダウンロードします。以下のサイトを参照し、"zero.zip" と書かれた箇所をクリックしてください:

Project Zero Downloads



ライセンスに同意すると、ダウンロードモジュールの選択画面になります。モジュールは zero_(バージョン番号).zip というファイル名になっています。ここでは最新版(画面では zero_1.0.15826.M7.zip)をダウンロードするようにしてください。この zip ファイル自体は Project Zero CLI 本体ではなく、本体のインストールに必要なファイルです。したがってそのサイズも 700KB そこそことなっており、非常に小さなファイルです。



ダウンロードした zip ファイルを適当なフォルダに展開します。展開した中には zero というファルダがあり、この中に必要なファイルが一式含まれています。以下の例では C:\IBM というフォルダに展開結果の zero フォルダをコピーしています。



これらのファイルを使って Project Zero CLI 本体をインストールします。そのために環境変数 Path にこの展開したフォルダ(zero.bat が含まれるフォルダ)を追加する必要があります。Windows 環境であればコントロールパネルのシステムを実行し、詳細設定タブの環境変数ボタンをクリックします。そして、システム環境変数の Path をダブルクリックして、変数値の最後に ";(Project Zero をコピーしたフォルダ)" を追加して OK をクリックします。



これで Project Zero CLI をインストールするための準備ができました。以下の作業はインターネットに接続している環境下で行ってください。展開したフォルダから zero.bat をダブルクリックするか、あるいはコマンドプロンプトで展開したフォルダに移動して zero.bat を実行します。 するとインターネット経由で必要なファイルのダウンロードが開始されます。



しばらく待つとダウンロードが完了します(zero.bat をダブルクリックで実行した場合はウィンドウが消えます)。これで Project Zero (CLI) 本体のインストールが完了です!



ちなみにこの時点で最初のファイルを展開したフォルダは以下のようになっています。zero や logs など、いくつかのサブフォルダが追加されたことが分かります。






上に戻る


Project Zero Application Builder(ブラウザベースの統合開発環境)の導入

この段階で Project Zero サーバーが導入されました。Project Zero ではアプリケーション開発言語として Java に近い文法を持つ Groovy と、日本でも非常に多くの開発者がいると思われる PHP の 2 つをサポートしています。今回はより開発者数が多いと予想される PHP を用いたアプリケーション開発方法を簡単に紹介していきます。

Apache HTTP サーバー等を使って PHP プログラミングをする場合であれば Apache HTTP サーバーをインストールして、PHP をインストールして、Apache 上で PHP が動作するための設定をして、・・といくつかの手順を経て環境設定する必要がありますが、そこまでに相当する作業がこれだけでできてしまったことになります。

実はこの段階でも Project Zero のいくつかのコマンドを実行することができます。が、実際にサーバー上で動かすためのプログラム (PHP スクリプトや Groovy スクリプト)はまだ作っていません。動作確認のためにもまずは簡単なスクリプトを作ってみましょう。 で、Apache + PHP の環境であれば、ここでメモ帳や Eclipse といったテキストエディタを開いてプログラムファイルを編集し、FTP などでサーバー上に転送する、という手順になります。もちろん Project Zero でも同様の作業でプログラミングできるのですが、せっかくなので Project Zero の特徴の 1 つである統合開発環境: Project Zero Application Buider を使ってみましょう。Project Zero Application Buider とはウェブブラウザベースのプログラミングエディタです。PHP や Groovy といったプログラミングスクリプト本体だけでなく、動作環境設定ファイルなどもまとめて管理・編集できます。残念ながら現時点ではまだ英語環境しか用意されていませんが、日本語アプリケーションの作成には問題ありませんので是非使ってみましょう。なお Project Zero Application Builder は現在では FireFox ブラウザで動作しますので、事前に FireFox を導入しておきましょう。

Project Zero Application Buider も Project Zero 本体と同様に、最初に利用する直前の 1 回だけはインストールを行う必要があります。Project Zero Application Buider の起動は zero をインストールしたフォルダ内にある startIDE.bat を(ダブルクリック等で)実行します。最初にこのコマンドを実行する時だけはファイルをダウンロードする関係上、インターネット接続されている必要があります。ファイルのダウンロードが完了し、Project Zero Application Buider が実行されると以下のような画面になり(ダブルクリックで実行した場合はすぐに消えちゃいますが)、自動的に FireFox が起動して、Project Zero Application Buider の起動 URL である http://localhost:8070/ にアクセスします。



FireFox 起動後の、Project Zero Application Buider が実行されている画面がこちらです。



拡大図

また、この時点で Project Zero の導入フォルダは以下のようになります。新たに "zero.ide" というフォルダが追加されていることが分かります。このフォルダの中に Project Zero Application Buider 本体がインストールされています。ちなみにこのフォルダ内にある stopIDE.bat を実行することで Project Zero Application Buider が終了します。






上に戻る


Project Zero Application Buider を使って PHP でプログラミング

ここまでくれば、いよいよプログラミングの段階です。上記手順で導入した Project Zero Application Buider を使って PHP アプリケーションを作成してみましょう。画面は全て英語ですが、さほど難しくはないと思いますので是非挑戦してみてください。

まずは PHP アプリケーション全体を管理するアプリケーションを定義します。Project Zero Application Buider 画面内の "New Application" と書かれた箇所をクリックします。



拡大図

すると以下のようなダイアログボックスが表示されます。このあたりから画面がウェブであることを忘れそうになりますね。ここではアプリケーションの名前(以下の例では "MyFirstZero")と、このアプリケーションを作成するフォルダ名(以下の例では "C:\IBM\zerodata\")、およびアプリケーションの概要を指定して、"Create" ボタンをクリックします。



拡大図

すると "Creating Application" と、しばらく表示された後に画面が切り替わって、この "MyFirstZero" アプリケーションの管理モードになります。画面左にはアプリケーションに含まれるファイルが並び、右側で編集を行います。この段階で既にアプリケーション内に "ivy.xml" や "php.ini" などの設定ファイルが含まれていることがわかります。今はこれらには手をつけず、新しい PHP ファイルを 1 つ追加します。画面内の "New file" と書かれた箇所をクリックしてください。



拡大図

新規に追加するファイルの名前を求められますので、適当に(以下の例では "/public/test.php")入力します。PHP ファイルは public フォルダ内に作成する必要があるので、必ず頭に "/public/" を付けて、public フォルダ内に作成してください。



拡大図

すると以下のようなダイアログが表示されます。これはこのアプリケーションに PHP 用の定義を追加するか、と聞かれています。Project Zero では PHP だけでなく Groovy によるプログラミングも可能であることもあり、無条件に PHP 開発用の設定がなされるわけでありません。いま PHP のファイルを追加しようとした際に、「ならば PHP 用の定義を自動追加するか?」と聞かれているわけです。ここでは "Add" ボタンをクリックして追加します。



拡大図

するとこの MyFirstZero アプリケーションに public/test.php ファイルが新規に追加され、そのファイルをテキストエディタで編集できるようになります。本当にブラウザの画面であることを忘れそうになりますね。



拡大図

ここでは普通に PHP のプログラムを記述していけばいいのですが、とりあえず以下の内容を記述してみます。この内容は PHP 環境を HTML で出力する関数 phpinfo() をPHP で実行しているだけです。ちなみにこのエディタには「保存する」というアクションは不要で、記述すればそのまま有効になります:

<?php
  phpinfo();
?>

ではこのアプリケーションを実際にブラウザから参照してみましょう。まずは MyFirstZero アプリケーションを起動してみます。Project Zero Application Buider の画面右上に以下のような箇所があり、"Run" か "Stop" のいずれかが強調されているはずです(以下の場合であれば "Run" のほうが強調されています)。これはアプリケーションが実行中かどうかを示していて、強調されていない方の状態になっています。この例の場合であれば "Stop" が強調されていない方なので、このアプリケーションは現在停止中であることになります。停止中のアプリケーションは実行しないと動きませんので、強調されている "Run"の方をクリックして MyFirstZero アプリケーションを実行します。



このようになると MyFirstZero アプリケーションは無事起動に成功しています:



Project Zero のアプリケーションはデフォルトでは 8080 ポートで動作します(zero.config ファイルを編集することでカスタマイズ可能です)。
実行しているアプリケーションをブラウザで開くには URL に http://localhost:8080/ にアクセスします。正常にアプリケーションが動作していれば、以下のような画面になるはずです。英語で分かりにくいかもしれませんが、MyFirstZero アプリケーションは動作している! というメッセージになっています。



作成した test.php ファイルにアクセスするには URL として http://localhost:8080/test.php を指定します。test.php が正しく動作すると、以下のような PHP 環境情報の画面になるはずです。なるほど、少なくともこのバージョンでは PHP 5.2.3-p8 を使っているのだな、ふむふむ・・・ ということが分かりますね。



ともあれ、これと同じ結果を出すことができれば、ウェブ上のエディタを使ってサーバー上に直接 PHP を記述し、実際に Project Zero PHP アプリケーションの動作確認までができたことになります。これまで一般的な PHP アプリケーションを開発したことのある方にとってはどのような印象になっているでしょうか。少し特殊な開発環境が提供されていることもあって少し戸惑っているか、あるいは全てがウェブ上で統合されていて便利に感じられているか、いずれかだと想像しています。ただ最終的にユーザーが皆さんの作った PHP アプリケーションを利用する段階になると、その違いに気づくことはないと思っています。




上に戻る


より実用的なプログラミング 3 例

実際に PHP アプリケーションを作る手順はなんとなく理解できたと思います。ここからはより実用的な PHP アプリケーションを作る上で必要となる Project Zero 向けの Tips をいくつか紹介しながら、いくつかのアプリケーションを作ってみます。

(1) グローバルコンテキストを利用したパラメータの受け渡し

ウェブのアプリケーションではユーザーに何かを入力させて、アプリケーション側でその入力内容を読み取る、ということは珍しくありません。この入力された内容を Project Zero 側で受け取る、という処理を実装する場合において、Project Zero ではグローバルコンテキストという概念を使ってパラメータ情報の受け渡しを行います。

実例を紹介しましょう。上記 Project Zero Application Buider を使って新たに form.php というファイルをアプリケーションの public フォルダに追加し、その中身を以下のように記述します。事実上、PHP ファイルというよりは HTML ファイルですが、PHP スクリプトが含まれていないだけで特に動作上の問題はありません:

  <html>
  <head>
  <title>Project Zero Form</title>
  </head>
  <body>
  Send text data. <br/>
  <form name="input" action="/action.php" method="POST">
  <input type="text" name="item"/>
  <input type="submit" name="action" value="Submit"/>
  </form>
  </body>
  </html>

また、同様にして新たに action.php というファイルをアプリケーションの public フォルダに追加して、その中身を以下のようにします:

<html>
<body>
<b>Result: </b>
<?php

$method = get( '/request/method' );
echo "<p>Method: $method</p>";

$keys = list_keys( '/request/params', true );

echo "<table cellspacing='0' cellpadding='0' border='1'>";
echo "<tr><td>Key</td><td>Value</td></tr>";

for( $i=0; $i < count( $keys ); $i++ ){
  echo "<tr><td>$keys[$i]</td>";
  echo "<td>";
  $value = get( $keys[$i] );
  if( is_array( $value ) ){
      for( $j=0; $j < count( $value ); $j++ ){
      echo "$value[$j] ";
      }
  }else{
      echo "$value";
  }
  echo "</td>";
  echo "</tr>";
}

echo "</table>";
?>
</body>
</html>

この action.php では form.php から送られてきたテキストデータを受け取って、その内容を表示します。特に上記プログラムで '/request/method' という値を指定してデータを取り出している部分がありますが、これがグローバルコンテキストの例です。HTTP リクエストが発行された場合、その種類(GET か、POST か)は '/request/method' というグローバルコンテキストに格納されます。そのためこの値を get() 関数を使って取り出すことで HTTP リクエストの種類を知ることができるというわけです。

また同様に別の赤字部分で '/request/params' という値を指定してデータを取り出している部分がありますが、これもグローバルコンテキストの例です。HTML のフォームを通じて送信されたデータは GET, POST に関係なく、この '/request/params' というグローバルコンテキストに格納されます。その値を上記のようなプログラミングでリスト形式で取り出して、その中身を全て表示するようにしています。

このアプリケーションを実行すると以下のようになるはずです。まず http://localhost:8080/form.php を表示すると以下のような画面になります:



このテキストフィールドに適当な文字列を(とりあえずは英語で "Hello, World!" と)入力して "Submit" ボタンをクリックすると以下のような結果になります。action パラメータの内容は "Submit"、item パラメータの内容は "Hello, World!" と正しく取得できています。このようにフォーム間のデータ送受信においてグローバルコンテキストという考え方を利用する必要があります。



(2) 日本語を使ったアプリケーションの作成

では上記 (1) で作ったアプリケーションを日本語で記述してみましょう。試しに form.php を以下のように変更します(変更箇所は太字部分だけです):

  <html>
  <head>
  <title>Project Zero Form</title>
  </head>
  <body>
  テキストデータを送信します。<br/>
  <form name="input" action="/action.php" method="POST">
  <input type="text" name="item"/>
  <input type="submit" name="action" value="Submit"/>
  </form>
  </body>
  </html>

この変更後にブラウザで form.php にアクセスすると、日本語部分が文字化けを起こしてしまっています。



ではどのようにしてこの文字化けを回避できるのでしょうか? まず注意が必要になる点として、Project Zero でサポートされているエンコードは UTF-8 のみであることがあります。Project Zero Application Builder のエディタで編集したファイルも UTF-8 エンコードになっています。

そしてこの UTF-8 文字を使って記述された PHP アプリケーションを正しく表示するには、PHP ファイルの先頭に以下の一行を追加して、本文が UTF-8 エンコードであることをヘッダ情報として明確にする必要があります:

<?php header( 'Content-Type: text/html;charset=UTF-8' ); ?>



この変更後に再度ブラウザで同ファイルにアクセスすると、文字化けが解消されて、正しく表示されるようになります。



(3) XML/JSON フォーマット

最後に、Project Zero の特徴の 1 つであるデータの XML フィードを簡単に作ってみます。まずはプロジェクトの public フォルダ内に PHP ファイルを 1 つ(以下の例では json.php)を新規に作成します。



そして、Project Zero Application Builder を使って、以下のような内容を記述します(以下の例も含めて厳密にはヘッダのコンテントタイプも変更すべきですが、ブラウザで出力結果を簡単に確認できるよう、ここでは特に変更せずこのまま使います):

  <?php header( 'Content-Type:text/html;charset=UTF-8' ); ?>

  <?php
  $arr = array(
    "Apple"=>"りんご",
    "Banana"=>"バナナ",
    "Citrus"=>array(
      "Orange"=>"みかん",
      "Lemon"=>"レモン"
    )
  );

  echo xml_encode( $arr, false, "fruits" );
  ?>

この例では連想配列変数 arr を定義していますが、実際にはこの内容をデータベースなどから取得していると考えてください。そして作成した配列変数を xml_encode という関数で XML 変換して出力しています。それだけです。

この結果は以下のようになります。これだけの記述で簡単に配列データを XML 化することができました。

  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <fruits>
   <Apple>りんご</Apple>
   <Banana>バナナ</Banana>
   <Citrus>
    <Orange>みかん</Orange>
    <Lemon>レモン</Lemon>
   </Citrus>
  </fruits>

また、上記 PHP スクリプトを以下のように変更すると出力結果は JSON フォーマットになります(変更箇所は太字にしています):

  <?php header( 'Content-Type:text/html;charset=UTF-8' ); ?>

  <?php
  $arr = array(
    "Apple"=>"りんご",
    "Banana"=>"バナナ",
    "Citrus"=>array(
      "Orange"=>"みかん",
      "Lemon"=>"レモン"
    )
  );

  echo json_encode( $arr );
  ?>

このページを参照すると結果は以下のような JSON フォーマットなります(日本語文字は UTF-8 でエンコードされています):

  {
   "Apple":"\u308a\u3093\u3054",
   "Banana":"\u30d0\u30ca\u30ca",
   "Citrus":{
    "Orange":"\u307f\u304b\u3093",
    "Lemon":"\u30ec\u30e2\u30f3"
   }
  }

このようにして、プログラム内で扱う変数データを簡単に XML や JSON に変換したり、あるいはこれらのデータを簡単に解析することができます。




上に戻る


まとめ

ごく導入部分のみの簡単な紹介になりましたが、これが Project Zero/WebSphere sMash です。Groovy/PHP アプリケーションサーバーであり、Groovy/PHP の開発環境でもあります。 是非 Groovy や PHP の開発経験のある方に使っていただいて、どのような印象をもたれるか、試していただきたいと思っています。

そして、特にこれまで IBM とは接点の少なかった PHP アプリケーション開発者の皆様や PHP アプリケーションベンダーの方々との接点として WebSphere sMash を活用していただければ、と考えています。



参考文献



著者について

木村 桂: 日本IBM ソフトウェア事業




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


    日本IBMについて プライバシー お問い合わせ