Java 2 Enterprise Edition™の登場によって、Java™アプリケーションを書き、展開する作業を大幅に簡素化する統合されたミドルウェア・スタックが提供されたことにより、ソフトウェアを取り巻く状況が劇的に変化しました、オープン・ソースのコミュニティーにはそれに似た統合アーキテクチャーが無かったため、しばらくの間、取り残された状態になっていました。
最近、Apache Friendsが提供するXAMPPのような、統合されたオープン・ソース・スタックが導入されたことよって、この状況が変わり始めています。このスタックはJ2EEに比べればまだ非常に単純で基本的なものですが、それでも、より完全なシステム統合に向けての重要なステップと言えます。PHP 5.0(PHPを完全にオブジェクト指向にします)は、この傾向が加速することを示す良い指標と言えるでしょう。
この記事では、統合されたオープン・ソース・スタックの一つであり、Apache Friendsが提供する、XAMPPを取り上げます。
XAMPPは完全機能のAMPP (Apache、MySQL、PHP、Perl)パッケージであり、Linuxで利用できる、数少ない非商用AMPPミドルウェア・スタックの一つです。堅固に統合されているため、XAMPPを使用すると、個人用のホーム・ページから完全機能の実稼働サイトまで、何でも実行することができるようになります(ただし開発目的に限ります。XAMPPはセキュリティーの問題から、実稼働のサーバーで使われることは意図していません)。
XAMPPの強みは下記のような点です。
- インストールや設定が容易
- トラフック・レポートを生成したりPHPコンテンツを加速したりすることが容易になるような、便利なパッケージを幾つか含んでいる
- SUSEやRed Hat、MandrakeそれにDebianなどのLinuxディストリビューション上で、またWindows®やSolaris上でも完全にテストされている
この記事では、XAMPP をMandrake Linux 10.0にインストールします。まず、XAMPPに含まれてくるデフォルトのパッケージを見るところから始めましょう。
基本パッケージには次のような、システムやプログラミング・ソフトウェア、それにサーバー・ソフトウェアが入っています。
- Apache(有名なWebサーバー)
- MySQL(素晴らしい、無料のオープン・ソース・データベース)
- PHP(プログラミング言語:この記事の執筆時点では4.3.8と5.0.1)
- Perl(プログラミング言語)
- ProFTPD (FTPサーバー)
- OpenSSL(セキュア・ソケット・レイヤーのサポート用)
XAMPPにはグラフィックス関係として、次のパッケージが含まれています。
- GD(「Graphics Draw」ライブラリー)
- libpng(正式なPNG参照ライブラリー)
- libjpeg(正式なJPEG参照ライブラリー)
- ncurses(キャラクター・グラフィックス・ライブラリー)
そして、統合スタックと言うからには、下記のようなデータベース・パッケージが含まれています。
- gdbm(標準UNIX® dbmライブラリーのGNU実装)
- SQLite(超小型で設定不要のSQLデータベース・エンジン)
- FreeTDS(UNIXやLinuxプログラムをMicrosoft® SQLやSybaseデータベースにアクセスできるようにするデータベース・ライブラリー)
XAMPPにはXML開発用に下記が含まれています。
- expat(XMLパーサー・ライブラリー)
- Salbotron(XMLツールキット)
- libxml(GNOME 用のXML Cパーサーとツールキット)
XAMPPにはPHP開発用に下記が含まれています。
- PEAR(PHPライブラリー)
- PHPで動的PDF文書を生成するpdfクラス
- TURCK MMCache(PHPパフォーマンス・エンハンサー)
そして最後に、次のようなパッケージが含まれていることでXAMPPの多様性が分かります。
- zlib(圧縮ライブラリー)
- mod_perl(実行可能形式のPerlインタプリターをApacheに埋め込む)
- gettext(GNUパッケージで複数言語のメッセージ生成を補助するツールセット)
- mcrypt(暗号化プログラム)
- Ming(Flash (SWF) 出力ライブラリー)
- Freetype2(ソフトウェア・フォント・エンジン)
- IMAP C-Client(メール・プログラムのAPI)
今度はXAMPPのインストールについて説明しましょう。
XAMPPをインストールするには、Apache FriendsのWebサイト(参考文献にリンクがあります)から最新のバイナリーをダウンロードします。これを、次のコマンドを使って /opt に展開します。
tar xvfz xampp-linux-1.4.7.tar.gz -C /opt
それだけで終わりです! これでXAMPPが /opt/lampp にインストールされました。それまで /optにインストールされていたものは、全て上書きされます。もし皆さんが古いバージョンのXAMPPを実行していて、再度全パッケージをインストールしたくない場合には、Apache Friendsからアップグレード用のパッケージをダウンロードすることができます。
これで全てがインストールできたので、新しいデーモンを開始しましょう。カレントのワーキング・ディレクトリーを /opt/lampp (cd /opt/lamp) に変更し、次を入力します。
./lampp start
そうすると下記が見えるはずです。
Starting XAMPP for Linux 1.4.7...
XAMPP: Starting Apache with SSL (and PHP5)...
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.
これでXAMPPが動作するようになりました。これを検証するのに一番良い方法は、ブラウザーを開き、アドレス・バーにlocalhostと入力してEnterキーを押します。そうすると、XAMPPの先頭ページが開きます。
図1. XAMPPの先頭ページ
必要なサービスが正しく起動しているかを見るために、左側のナビゲーション領域にあるStatusリンクをクリックします。全てが正常であれば、次のようなページが見えるはずです。
図2. サービス・ステータス・ページ
おめでとうございます! これで完全動作するAMPP開発環境のインストールと設定が終わりました。では簡単なアプリケーションをインストールして、この環境をどのように使うかをお見せしましょう。
XAMPPの基本機能を利用するためには、簡単なアプリケーションが必要です。一番良いのはデータベースのバック・エンドを利用するアプリケーションです。比較的単純なデータベースで、一つだけテーブルを含むようなもので充分です。
テスト用のデータベースには、一つだけカラムのあるテーブルが一つだけあります。(コンピューター時代の)テスト・プログラムの伝統に従い、このテーブルが一つのレコード「Hello World!」を保持するようにしましょう。このデータベースに、PerlスクリプトとPHPスクリプトの両方を使ってアクセスします。どちらのスクリプトもデータベースをアクセスして一つの行を取得し、それを画面に出力します。
このデータベースを、PHPで書かれたWebベースのMySQL管理ツールであるphpMyAdminを使って生成、管理することにします。phpMyAdminには素晴らしいユーザー・インターフェースがあり、簡単なことから複雑なことまで、例えばデータベースやテーブルの生成/削除/変更からデータのエクスポートやキー管理、SQLファイルの処理まで、様々なことに使用することができます。phpMyAdminの素晴らしさは下記のように表現することができます。
- 尻込みしたくなるようなコマンドライン・インターフェースによらなくても、初心者がMySQLに馴染めるようになる
- 上級ユーザーであれば、単純な繰り返し作業を容易に素早くできるようになる
- 何でもできてしまうシェル・アクセスを許すことなく、データベースの管理権限を誰かに与える必要のある場合に便利
phpMyAdminでテスト用のデータベースを作るには、次のようにします。
- XAMPPのスタート・ページ(localhost)に行く
- Toolsの下にある左側のナビゲーターにあるphpMyAdminを選択する
- phpMyAdminホーム・ページのCreate New Databaseフィールドで
hello_worldを入力し、Createをクリックする
今度はこのデータベースの中にテーブルを作り、そのテーブルがいくつのフィールド(フィールドとカラムは同じです)を持つのかを規定する必要があります。このテーブルを「hello_table」と呼ぶことにし、「Hello World!」というレコードを保持する一つのフィールドを持つようにします。Nameテキスト・フィールドにhello_tableと入力し、Fieldsテキスト・フィールドに1と入力します。終わったらGoをクリックします。
今度はデータベース生成の最後のステップです。このカラムに対して、名前とデータ・タイプ定義を選択します。「hello」というテーマに固執することにし、カラムの名前を「hello_column」とします。Fieldテキスト・フィールドにhello_columnと入力します。
このカラムには「Hello World!」という文字列を保存するので、そのタイプは長さ12(文字列「Hello World!」の長さ)のcharである必要があります。デフォルトのタイプvarcharで充分です。Typeの隣にあるLength/Valuesテキスト・フィールドに、最大長さ12文字として12を入力します。このページの他のフィールドに関しては気にする必要はありません。Saveをクリックして先に進みます。
全てが正しく行われれば、次のようなものが見えるはずです。
図3. Hello Worldデータベースのサマリー
では、レコード「Hello World!」を挿入しましょう。Insertタブをクリックし、Valueテキスト・フィールドで「Hello World!」を入力します。この場合はFunctionドロップダウン・リストはそのままにしておきます。Goをクリックして、データベースに「Hello World!」レコードを挿入します。
レコードが正しく挿入されたかどうかを確認するには、Browseタブをクリックします。リストされている「hello world」が表示されるはずです。
これでバック・エンドが動作するようになったので、今度はスクリプト部分を処理します。ここでは、一つはPerl、一つはPHPという、2つのスクリプトを使います。それぞれのスクリプトに対する要求は、一つのデータベース接続、一つのデータベース・アクセス、そして取得した行を画面に表示する一つの出力です。
リスト1. PHPでPEAR::DBを使った、単純なデータベース接続とデータ取得
require_once 'DB.php'; // must be included in any script that uses PEAR::DB
// it is a huge security risk to store your database connection information
// in the same file as your code. We have done it here solely for the purpose
// of this example. Please store your database connection information in another
// file that is not in your document root directory and adequately protected.
// database connection information
$db_host = "localhost"; // hostname of the database server
$db_user = "root"; // database user's username
$db_pass = ""; // database user's password, nothing by default
$db_name = "hello_world"; // the name of the database to connect to
$db_type = "mysql"; // the type of database server.
// your data source name string. This contains the connection
// information for your database.
$dsn = "$db_type://$db_user:$db_pass@$db_host/$db_name";
// creates a database connection object or a database error
// object based on the success of the database connection.
$db = DB::connect($dsn, TRUE);
// if an error was encountered, the script exits with an error message
if (DB::isError($db)) {
die($db->getMessage());
}
// SQL query that you wish to use to query the database
$sql = "SELECT * FROM hello_table";
// query the database, store result in $result
$result = $db->query($sql);
// exits with an error message if the query was unsuccessful
if(DB::isError($result)){
die($result->getMessage());
}
// fetch rows from the database until no more rows exist.
// output the "hello_column" field of each row to the screen.
// once no more rows exist, exit with an error message.
while($row = $result->fetchRow(DB_FETCHMODE_OBJECT)){
if(DB::isError($row)){
die($row->getMessage());
}
print("<H1>$row->hello_column</H1>");
$result->free();
}
$db->disconnect(); //disconnect from the database
|
それぞれのスクリプトがデータベースに接続し、一行のデータを取得し、その行を画面に出力します。PHPのデータベース・アクセスはPEAR::DBを使って行われます。PEAR::DBは手軽なデータベース抽象化レイヤーであり、どのようなデータベースが実装されているかによらず、同じデータベース・アクセス・コードを使用できます。残念ながらXAMPPにはまだ、Perl用のデータベース抽象化レイヤーはありません。
さて、これで必要なものが全て揃いました。データベースは動作するようになり、テスト用に2種類のスクリプトがあります。あとはこのスクリプトを適切な場所に置くことだけです。ハード・ドライブ上でXAMPPがどのように配置されているかをリスト2でちょっと見てみましょう。
ここで私達に関心のあるディレクトリーは、Apache Documentsディレクトリーである /opt/lampp/htdocs/です。誰かがそのWebサイトのルート・アドレスにアクセスした時に表示したいWebページや関連ファイルは全て、ここに置かれます。XAMPPの先頭ページを見ることはできたので、このディレクトリーには既に幾つかのファイルがあります。それを確認するために、ディレクトリー・リストをちょっと覗いてみましょう(ls /opt/lampp/htdocsとタイプします)。
drwxr-xr-x 2 root root 4096 Jan 24 2003 apache
-rwxr-xr-x 1 nobody root 163 Oct 31 2003 index.html
drwxr-xr-x 2 nobody root 4096 Sep 12 21:54 webalizer
drwxr-xr-x 5 root root 4096 Jun 15 06:24 xampp
ご覧の通り、ここには既に中身があります。私達のスクリプトを保存するために、hello_worldという新しいディレクトリーを作りましょう(mkdir hello_world)。これから後は、localhost/hello_worldをタイプすることで、hello_worldディレクトリーにある全てのものにアクセスできるようになります。さて、2つのスクリプトをこのディレクトリーに保存しましょう。それで全部終了です!
アプリケーションをテストするために、好みのブラウザーからlocalhost/hello_worldと入力します。そうすると、次のようなものが見えるはずです。
図4. Hello World!
おめでとうございます! XAMPP上にアプリケーションが設定できています。
XAMPPは開発環境であることが目的です。ですからXAMPPは、プログラマーが何ら制限無くツールセットを自由に使用できるように構成されています。その自由さの結果として、デフォルトのXAMPPインストールは非常にセキュリティーが低くなっています。例えば、何をするにもログインがほとんど必要ありません。
XAMPP 0.9.5とそれ以降では、次のコマンドを実行することでセキュリティーを強化することができます。
/opt/lampp/lampp security
そうすると、そこに存在している、セキュアでない様々な部分に対する警告が表示され、それを修正するかどうかを選択するように促されます。これによってXAMPPのインストールはよりセキュアになりますが、XAMPPを実稼働のサーバー上で実行するのはやはり避けるべきです。リスト3はセキュリティー・プロンプトを示しています。
リスト3. XAMPPで表示されるセキュリティーの問題
XAMPP: Quick security check...
XAMPP: Your XAMPP pages are NOT secured by a password.
XAMPP: Do you want to set a password? [yes] yes
XAMPP: Password:
XAMPP: Password (again):
XAMPP: Password protection active. Please use 'lampp' as user name!
XAMPP: MySQL is accessable via network.
XAMPP: Normaly that's not recommended. Do you want me to turn it off? [yes] yes
XAMPP: Turned off.
XAMPP: Stopping MySQL...
XAMPP: Starting MySQL...
XAMPP: The MySQL/phpMyAdmin user pma has no password set!!!
XAMPP: Do you want to set a password? [yes] yes
XAMPP: Password:
XAMPP: Password (again):
XAMPP: Setting new MySQL pma password.
XAMPP: Setting phpMyAdmin's pma password to the new one.
XAMPP: MySQL has no root passwort set!!!
XAMPP: Do you want to set a password? [yes] yes
XAMPP: Write the password somewhere down to make sure you won't forget it!!!
XAMPP: Password:
XAMPP: Password (again):
XAMPP: Setting new MySQL root password.
XAMPP: Setting phpMyAdmin's root password to the new one.
XAMPP: The FTP password is still set to 'lampp'.
XAMPP: Do you want to change the password? [yes] yes
XAMPP: Password:
XAMPP: Password (again):
XAMPP: Reload ProFTPD...
XAMPP: Done.
|
さてこれでXAMPPのインストールは何週間か動作を続け、かなり大きなサイズのデータ・セットを蓄積しました。これをハード・ディスクのクラッシュで失うリスクは避けたいものです。バックアップはどうすれば良いでしょう?
XAMPPでは非常に簡単です。カレント・ディレクトリーを /opt/lampp (cd /opt/lamp) に変更し、次のコマンドをタイプします
./lampp backup
ルート・パスワードをそのコマンドの最後にするように設定してある場合は、ルート・パスワードをMySQLに追加します。そうすると下記が表示されるはずです。
Backing up databases...
Backing up configuration, log and htdocs files...
Calculating checksums...
Building final backup file...
Backup finished.
Take care of /opt/lampp/backup/xampp-backup-15-09-04.sh
バックアップをリストアするには、ルートとして次のコマンドを実行します。
sh backupfilename
全てがうまく行けば、下記のような表示が出るはずです。
Checking integrity of files...
Restoring configuration, log and htdocs files...
Checking versions...
Installed: XAMPP 1.4.7
Backup from: XAMPP 1.4.7
Restoring MySQL databases...
Restoring MySQL user databases...
Backup complete. Have fun!
You may need to restart XAMPP to complete the restore.
XAMPPを再起動 (cd /opt/lampp, ./lampp restart) すると、リストアされたデータが使えるようになっているはずです。
統合ソリューション・スタックがJ2EEによるソリューションと全面的に競合するかどうかは何とも言えません。ただ、最近のPHP 5.0のリリース(主な追加として、完全にオブジェクト指向になったことが含まれています)とMySQLデータベースの急速な成長とを合わせて考えると、開発者の間で統合AMPPソリューション・スタックがより一般的になりつつあるようです。これはXAMPPのようなオープン・ソースのミドルウェア・スタックが、ローエンドのソフトウェア・マーケットでは充分な存在価値があることを示していると思います。
-
Apache FriendsからXAMPPをダウンロードしてください。Apache FriendsはApache Webサーバーを普及させるための非営利組織で、ここにはXAMPPの最新情報と最新リリースがあります。
-
Road to better programming
シリーズ(developerWorks)は皆さんのPerlの技能向上に役立つ実践的なシリーズです。developerWorks のサイトを探せば、他にもPerlに関する豊富な資料が見つかります。
- 2つの記事Connecting PHP Applications to Apache Derby (developerWorks, 2004年9月)とDevelop Perl applications with Apache Derby (developerWorks, 2004年10月) は、PHPやPerlのアプリケーション開発を行う人には必読です。
-
phpMyAdmin projectには、この恐ろしいほど強力なMySQL管理ツールに関して、豊富な情報やダウンロードがあります。
-
Practical Unix & Internet Security (1996年O'Reilly & Associates刊)は、ユーザー管理からセキュリティー・ポリシーの立案まで、システム・セキュリティーのあらゆる側面に関して非常に参考になります。
-
PHP.netではオンラインで検索できるファンクション・ライブラリーを提供しており、PHPメソッドに関する詳細情報を探したり、PHP言語のビルドを見つけたりする上で非常に役に立ちます。
-
The PHP Extension and Application Repository (PEAR)では、永遠に人気のあるPEAR::DBを含めて、PHPのプログラミングが簡単になるコンポーネントを提供しています。
- MySQLに関するヘルプとしては、MySQL reference manualがMySQLのあらゆる側面に関して詳細な情報を提供しています。
-
Apache HTTP Server Projectを見ると、Webで最も一般的なこのhttpサーバーの最新のビルドと情報を得ることができます。
- developerWorksのLinuxゾーンにはLinux開発者のための資料が他にも豊富に用意されています。
- Linux上で実行する、IBMミドルウェア製品の無料試用版をダウンロードしてください。developerWorksのSpeed-start your Linux appセクションからWebSphere® Studio Application DeveloperやWebSphere Application Server、DB2® Universal Database、Tivoli® Access ManagerそしてTivoli Directory Serverが入手できます。また、ハウ・ツー記事や技術サポートもご覧ください。
-
developerWorks blogsに参加して、developerWorksコミュニティーに加わってください。
- Developer BookstoreのLinuxセクションではLinux関係の技術書が値引きして購入できますので、ご利用下さい。
Nils-Erik Frantzellは現在、カリフォルニア大学サンタ・クルズ校でコンピューター・サイエンスを学んでいます。彼の関心対象はWebプログラミング(特にPHP)やネットワーク、オープン・ソース技術、そしてコンピューターのハードウェアをいじり回すことです。コンピューターから離れている時には、電子音楽を聴きながら肉食魚の世話をしています。連絡先はnfrantze@ucsc.eduです。