連載
» 2007年04月12日 00時00分 公開

小山博史のJavaを楽しむ(5):【新人研修向け特別企画】JavaでPHPを使ってみた (1/3)

教育界、技術者コミュニティでJava言語の教育と啓蒙に長年携わってきた筆者が、独自の視点からJavaの面白さを掘り下げていく。(編集部)

[小山博史,ガリレオ]

 Webサービスを実装する際によく使われるプログラミング言語として、Java以外には何があるでしょうか?

 RoRRuby on Rails)の出現によりRubyが最近は注目されていますが、普及度を考えるとPHPではないでしょうか。数年前には、LAMPLinuxApache HTTP ServerMySQLPHP)という用語が流行しました。もちろん、LAMPのPはPerlPythonを意味する場合もあるようですが、筆者がよく使用しているWebアプリケーションはJavaかPHPでコーディングされたものが多いので、PHPの方をすぐに想像してしまいます。今回は、Javaで記述されたPHP実行エンジンがあるということで調べてみました。

Quercusとは、いったい何なのか?

 Quercusと聞いてピンとくる人はあまりいないでしょうが、Resinといわれるとポンと手をたたく人は多いと思います。

 Quercusは、Resinで有名なCaucho Technology社が開発しているPHP 5の実行環境で、100% Javaで実装されています。ライセンスはGPLで、つい最近にQuercusのサイトが公開されたばかりです。

 少し前まで、ResinはServlet/JSPコンテナという印象を個人的には持っていたのですが、いつの間にか高性能なJava/PHPアプリケーションサーバとなっていました。Resinのオープンソース版はGPLで公開されていますが、プロフェッショナル版はライセンスを購入する必要がありますから、注意が必要です。

 せっかくPure JavaのPHP実行エンジンがあるので、Java好きなプログラマがPHPのプログラムを作るなら、これを使ってみたくなってしまうのは、当たり前のことでしょう。純粋にPHP実行エンジンとして利用するのであれば、Quercusだけがあればよいので、Quercusのサイトから入手して使います。Webアプリケーションとして動かすのであれば、Resinに同梱されていた方がすぐに使えます。そこで、Resinからオープンソース版をダウンロードして、Webアプリケーションを動かしてみました。

新入社員の研修で試してみては?

 PHPを動作させるためのプラットフォームとしては、真っ先にApache HTTP Server+PHPを思い付くので、なぜこちらを使わないのかと不思議に思う人もいるかもしれません。しかし、ちょっとしたPHPプログラムを勉強したいといった場合に、これらをインストールして動作させるように環境を構築するのは意外と大変です。

 もちろん、プロならLinux+Apache HTTP Server+PHP+JDK+Apache Tomcat+MySQLの環境は普段から使えるように構築していることが多いでしょうから、あまりありがたみを感じないかもしれません。しかし、あまりリソースがないマシンで軽いWebアプリケーションを複数動作させる必要があり、それらがPHPアプリとServlet/JSPアプリであった場合などには、Resinのようなサーバアプリがあるとうれしいはずです。新入社員の研修実習でPHPとServlet/JSPの入門を行う場合などにも、有効でしょう。

 そのほかにも、mod_phpで動作させるよりResinの方が速いとか、モジュールをJavaで実装できるからCC++より速く開発できるとか、Javaの資産を利用できるとか、いろいろあるようですが、詳細はQuercus: PHP in Java当たりを読んでもらえれば、分かると思います。

Resinをインストールしてみよう!

 インストールは非常に簡単です。Caucho Technologyのサイトからダウンロードを選んで使用するプラットフォームに応じてファイルを手に入れます。ここでは、Resin 3.1 BinaryのUNIX版とSource版を入手しました。つまり、resin-3.1.0.tar.gzとresin-3.1.0-src.zipとをダウンロードしました。

 今回はFedora Core 5で動作させてみたので、Binary版のアーカイブファイルを展開してから、JNIライブラリを作成しました。このとき、JDK 6ではコンパイルがうまくできなかったので、ここではJDK 5を使うことにしました。Javaの切り替えはLinuxだと、JAVA_HOMEとPATHを指定し直せばよいだけなので簡単です。

$ export JAVA_HOME=/usr/java/jdk1.5.0
$ export PATH=$JAVA_HOME/bin:$PATH
$ tar xzf resin-3.1.0.tar.gz
$ cd resin-3.1.0
$ ./configure --with-java-home=/usr/java/jdk1.5.0
$ make
$ make install
バージョンの切り替え

Resinを起動するには?

 JNIライブラリのインストールが終わってから、コマンドはbin/httpd.shを使ってサーバの起動をしました。デバッグ情報はほとんど出ないため、結構あっさりしたメッセージが出力されて待機状態になります。なお、サーバを停止するには、パラメータstartの代わりにstopを使います。

$ ~/resin-3.1.0/bin/httpd.sh start
Resinの起動

 サーバの起動ができたら、「http://localhost:8080/」へアクセスすると、Resinのページを見ることができます。

図1 Resin Default Home Pageの表示 図1 Resin Default Home Pageの表示

 設定ファイルはconf/resin.confになるので、ポート番号を変えたい場合などはそちらを編集します。動作確認のためにJSPファイルを追加する場合はwebapps/ROOTにJSPファイルを置きます。例えば、hello.jspを置いたら、「http://localhost:8080/hello.jsp」で閲覧できます。

<% out.println("Hello"); %>
hello.jsp
図2 hello.jspの表示 図2 hello.jspの表示

ResinはServletを自動でコンパイル・実行

 ちなみに、Servletはwebapps/ROOT/WEB-INF/classesにJavaソースコードを置いて、webapps/ROOT/WEB-INF/web.xmlを作成すれば、実行できます。例えば、simpleサーブレットとしてSimpleServlet.javaを作成すると、「http://localhost:8080/simple」でアクセスできます。試しに、次のファイルを置いて、確認をしてみました。

<web-app>
    <servlet servlet-name="simple-servlet" 
            servlet-class="SimpleServlet"/>
    <servlet-mapping url-pattern="/simple" 
                    servlet-name="simple-servlet"/>
</web-app>
webapps/ROOT/WEB-INF/web.xmlを作成
import javax.servlet.*;
import javax.servlet.http.*;
 
public class SimpleServlet extends HttpServlet {
 
    public void doGet(HttpServletRequest request,
                        HttpServletResponse response)
    throws ServletException, java.io.IOException{
 
        response.getWriter().println("Simple");
    }
}
SimpleServlet.java
図3 SimpleServlet.javaの表示 図3 SimpleServlet.javaの表示

 自動でソースコードをコンパイルして実行してくれるので、非常に便利です。ところが、コンパイルエラーが発生するプログラムを置いた場合は、コンパイルが成功しません。当然のことですね。

 IDEで開発している場合はこれでもよいのでしょうが、そうでない場合は、よほど簡単なプログラムでない限り、自分でコンパイルをして確認してから、WEB-INF/classesへ置くようにした方がよさそうです。ということで、Servletプログラムを自分でコンパイルしたいときはどうすればよいかというと、次のように、jsdk-15.jarなど必要なライブラリやクラスへのクラスパスを指定しながらjavacコマンドを使います。

$ cd ~/resin-3.1.0/webapps/ROOT/WEB-INF/classes/
$ javac -cp ~/resin-3.1.0/lib/jsdk-15.jar SimpleServlet.java
クラスパスを指定してjavacコマンドを実行
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。