前回までのプログラミング学習コラムに続き4回目の勉強内容です。
第4回 「Webサーバ定番のApacheとPHP言語」
前回はWebアプリを開発するための環境として、Ruby on RailフレームワークとMySQLデータベースをインストールしました。今回はWebアプリ業界の先輩(?)、ApacheとPHPを使用した開発環境を構築してみましょう。
少し前までWebアプリ検証用の自前のWebサーバと言えば、LinuxOSの上に「Apache」、「MySQL」、「PHP」または「Perl」をインストールするのが定番でした。それぞれの頭文字をとって「LAMP」などと言っていました。
Linux ・・・ OS
Apaceh ・・・ HTTPサーバ
MySQL ・・・ DBMS
PHP ・・・ プログラミング言語
(or Perl or Python)
今回はこれと同様の環境をOS X上に構築しようというお話です。でもOSが違うとだいぶ違う感じがしますよね。大丈夫でしょうか。ご安心ください。OS Xの上にLAMPと同様の環境を構築するのは比較的容易です。
今までの連載の中で触れたようにOS XはもともとUNIX由来ですし、ApacheとPHPは実はOS Xにプリインストールされています。しかもこの連載を読んできた方は、前回既にMySQLをインストール済みですね。既にかなり近くまで来ています。
ただし今回ApacheとPHPはHomebrewでインストールし直します。何と言ってもパッケージ管理においてbrewコマンドが使えるのは非常に楽です。MySQLも既にHomebrew管理下ですし、今後は全てのサーバソフトウェアで楽にアップデートができるはずです。
■ Webサーバの定番中の定番「Apache」
ではまずApacheをHomebrewでインストールしてみましょう。
ApacheはHTTPサーバです。インターネット上ではメールやDNSなど様々なプロトコルを駆使してネットワーク接続が行われいますが、Webサーバの場合はHTTPプロトコルを用いてWebブラウザに接続し、サービスを提供しています。
Apacheのパッケージ名は「httpd」です。が、このhttpdパッケージは標準状態ではHomebrewでインストールすることができません。外部フォーミュラというものを設定する必要があります。今までのパッケージはたまたま全て標準フォーミュラの設定でインストールできていたわけです。httpdパッケージはどのフォーミュラにあるのでしょうか。brew searchコマンドで調べてみます。
$ brew search httpd
すると「homebrew/dupes/httpd」と出力されます。「homebrew/dupes」という外部フォーミュラを設定すればよいことがわかります。brew tapコマンドで設定します。
$ brew tap homebrew/dupes
もう一度brew searchしてみましょう。
$ brew search httpd
すると今度は「httpd」とそのまま出力されました。ではhttpdをインストールしましょう。
$ brew install httpd
いろいろメッセージが出て、おなじみのジョッキアイコン(!)が出てインストール完了です。この時のメッセージを見てみると、「httpd-2.2.26」というバージョン(2013年12月12日現在)のapacheがインストールされたことがわかります。ところがインストールされているバージョンを確認するためのapachectlコマンドを実行すると、
$ apachectl -v Server version: Apache/2.2.24 (Unix)
と、2.2.24がインストールされたことになっています。すぐ下の日付もなんか変ですね。これは、先述の通りあらかじめOS XにはApacheがインストールされていて、そちらのバージョンが表示されているためです。
今後はHomebrewからインストールされたApacheを使いたいので、「パスを通す」作業をここで行います。パスを通す作業は以前にもGitインストールとrbenvインストールの時に出てきました。今回は「/usr/local/sbin/」ディレクトリへのパスを通します。
$ echo export PATH='/usr/local/sbin:$PATH' >> ~/.bash_profile
この設定を有効にするために、.bash_profileを再読み込みします。
$ source .bash_profile
ここでもう一度Apacheのバージョンを確認してみましょう。
$ apachectl -v Server version: Apache/2.2.26 (Unix)
今度はHomebrewでインストールした最新のバージョンが表示されましたね。では、Apacheを起動してみましょう。
$ sudo apachectl start
パスワードを聞かれたらOS Xユーザのログインパスワードを入力します。
Password:(ログイン時のパスワード)
起動時にちょっとだけ警告メッセージが出てしまいます。
httpd: Could not reliably determine the server’s fully qualified domain name,
が、構わずSafariなどのWebブラウザを起動してURL欄に http://localhost と入力して、画面に「It works!」などと出ればApache起動完了です。
Webサーバの出番が終了したらApacheを停止します。
$ sudo apachectl stop
なお、Apacheを自動起動させる設定もありますが、MySQLの時と同じように、初めのうちは必要な時に手動でsudo apachectl startで起動し、開発作業が一段落してサーバが不要になったら速やかにsudo apachectl stopでサービスを停止させましょう。今自分が何のサービスを起動させているか、いつも把握しておくことが大事です。当面は手動で確認しながら開発していく、指差し確認の精神で行きましょう。
■ 設定作業はSublime Textの出番だ!
これでApacheを起動できたのですが、MySQLの時にもありましたがサーバを起動するということは外部にサービスを提供するということです。意識して最低限の設定はするよう心がけましょう。
さて設定作業ですが、あらかじめ用意された設定ファイルを修正することによって行います。Apacheの場合は/usr/local/etc/apache2/httpd.confというファイル名です。これをテキストエディタで修正するのですが、もちろんここは以前にインストールしたSublime Textの出番です。ただし、ターミナル画面からSublime Textを簡単に起動できた方がずっと楽になるので、まずはその設定をしましょう。
$ sudo ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/bin/subl
このコマンドで、Sublime Textを「subl」という名前で起動できるようになります。これでターミナル上でいつでも
$ subl .
と打ち込めばすぐにSublime Textが起動し、画面左側にカレントディレクトリ(今いるディレクトリ)上のファイル一覧が表示されるので、とても便利です。特に設定ファイルを扱う時には、Sublime TextのFileメニューから開きに行くとかなり面倒なので、この設定は非常に有効です。
ではまずApacheの設定ファイルを編集するために、設定ファイルがある場所に移動します。
$ cd /usr/local/etc/apache2/
そしてSublime Textを起動します。
$ subl .
Sublime Textの画面左側にファイル一覧が表示されます。そこに目的の設定ファイル、「httpd.conf」があります。
図. Sublime Text起動画面。画面左側にカレントディレクトリのファイル一覧が表示される。
その「httpd.conf」を選択します。
図. Apacehの設定ファイル、httpd.confの画面。
これでApacheの設定ファイルを編集する準備が整いました。結構テキスト量の大きいファイルですね。
なお、httpd.confファイルを開くために、ターミナルから直接
$ subl /usr/local/etc/apache2/httpd.conf
とファイル名を指定してももちろん正解です。必要に応じて使い分けましょう。
さて、httpd.confファイルの編集ですが、ここでは一箇所だけ、先ほどApache起動時に警告メッセージが出てしまった部分に関して修正しましょう。以下のキーワードを「command」+「 F」キーで探しましょう。
#ServerName www.example.com:80
図. 「Command」+「 F」キーで検索窓が開く。「ServerName」を検索する。
今回の場合、159行目で設定しているようです。この行の先頭の「#」を削除します。
ServerName www.example.com:80
となればO.K.です。なお、検索窓の右側に「Find」「Find Prev」「Find All」といったボタンがあります。これらを使って次の候補や、全ての候補を表示することもできます。
今回は1文字削除だけです。編集が終わったらSublime Textで保存を行い(「command」+「 S」キー)、Apacheを起動します。
$ sudo apachectl start
これで先ほどのエラーメッセージは消えたはずです。
なお、上記のServerName(www.exapmle.com)は実在しないホスト名なので、正しいホスト名を以下のコマンドで調べてそれを設定しておくと良いでしょう。
$ hostname
このコマンドの出力結果の後に「:80」を設定しておきます。
この他にもhttpd.confを修正する箇所はあるのですが、それは次のPHPのための設定なので、PHPをインストールしてからもう一度httpd.confを編集することにしましょう。
■ Webプログラミングの敷居を下げてくれた「PHP」
次はPHP言語のインストールです。PHP言語は言わずと知れたWebプログラミング界の超メジャー言語です。ここまで広まった背景には、その言語の親しみやすさがあるでしょう。プログラミング初心者にとっても何とかなりそうな気にさせてくれるその取っ付きの良さのおかげで、Webクリエイターのプログラミングデビュー言語としても大いに名を上げました。
ではHomebrewでPHPをインストールしていきましょう。PHPでもApacheと同じように外部フォーミュラの設定が必要です。brew tapコマンドを使って以下の設定をします。
$ brew tap josegonzalez/homebrew-php
これでインストール可能かどうかを調べてみます。brew searchコマンドでしたね。
$ brew search php
すると「php53〜」「php54〜」「php55〜」というファイルがズラズラと出てきます。これはPHPのバージョンが5.3から5.5のものがインストールできる、ということです。今回もバージョンの選択は悩みどころですが、言語に関しては最新の一つ前にしよう、という前回のRubyの時の方針をここでも採用することにしましょう。今回の場合だとPHP 5.4ですね。MySQLと連携させることも考慮しつつインストールします。
$ brew install php54 --with-mysql
さて、ここでApacheの設定でPHPが動くようにしていきます。httpd.confを編集していきます。Sublime Textでhttpd.confを開いて、「LoadModule」と書いてある部分に以下の一行を追加します。
LoadModule php5_module /usr/local/Cellar/php54/5.4.23/libexec/apache2/libphp5.so
この「/usr/local/Cellar/〜」以下のディレクトリパスはバージョンによって違ってくるので、実際にそのパスのファイルの存在を確認してから入力してください。
図. LoadModule行を一行追加する。実在するファイルのパスを確認して入力。
今回の例では116行目に追加しましたが、行数は環境によって微妙に違う可能性もあるので、その近辺で挿入すべき行を探してください。
次に「AddType」と書いてある部分に以下の一行を追加します。
AddType application/x-httpd-php .php
最低限これでPHPが起動するはずです。httpd.confを保存してApacheをリスタートします。
$ sudo apachectl restart
次に一番簡単なPHPプログラムを書いてみましょう。プログラムの保存場所は「/usr/local/Cellar/httpd/2.2.26/share/apache2/htdocs/」です。ファイル名は「index.php」としましょう。Sublime Textを起動してプログラムを入力します。
$ subl /usr/local/Cellar/httpd/2.2.26/share/apache2/htdocs/index.php
プログラムは以下の3行だけです。
<?php phpinfo(); ?>
ソースプログラムを保存してWebブラウザのURL欄に http://localhost/index.php と入力してみてください。画面にPHPの設定一覧がズラッと出てくるはずです。
今度はMySQLとの連携がうまく言っているかどうかチェックします。まずMySQLサーバを起動します。
$ mysql.server start
次に新しくPHPプログラムを作成します。
$ subl /usr/local/Cellar/httpd/2.2.26/share/apache2/htdocs/db_test.php
ソースプログラムは以下の通りです。
<?php $link = mysql_connect('localhost', 'root', ''); if (!$link) { die('接続失敗!<br>'.mysql_error()); } else { echo '接続成功!'; } ?>
図. db_test.phpの内容。
ソースプログラムを保存したら、Webブラウザから今度は http://localhost/db_test.php と入力します。画面に「接続成功!」と出ればO.K.です。
もし文字化けしたら、Webブラウザの文字コード設定を確認してみてください。Safariの場合は、「Safari」メニュー→「環境設定」→「詳細」タブ→「デフォルトのエンコーディング」です。とりあえず今回はその設定をいったん「Unicode (UTF-8)」にしてからブラウザをリロードしてください。
うまく行きましたか? もしうまく行ったらあとはRuby on Railsの時と同じように、Web上の豊富な資料と書籍を参考にしてPHPプログラミングに励んでください。取っ付きの良いPHPなら楽しく学べると思います。たくさんコードを書きましょう!
次回はGitHubの利用方法を説明する予定です。お楽しみに。