あとはコードを書くだけ、はじめに作る開発環境構築ベストプラクティス

第1回PHP開発環境の構築[1]―PHPが実行できるまで

連載のはじめに

こんにちは、teratail開発チームの出川幾夫@ikuwowです。

プログラミング言語などの動作環境の構築というのは面倒で、ときには精神をすり減らす作業となることがあります。単に動作させるまでの手順や、ライブラリなども含めたソースコードの扱い、デプロイの方法や環境によって動作などを分ける方法など、考えたらきりがありません。

また触れる範囲がインフラの深いところにも伸びる場合があり、プログラミングを中心にする人は不慣れなことに非常に時間がかかり辛い思いをすることが多いかもしれません。楽しくコードを書いて自分のやりたいことを実現したいのに、その前の段階で詰まってやる気をなくしてしまうこともあります。

近年ではJSFiddleなどのオンライン実行環境など、環境構築をしなくても動作を試せる環境は多く用意されています。しかしはじめからwebサーバにホストしたりアプリストアにあげたりしてリリースすることも視野に入れて開発したい場合もあり、こういった場合は自分で構築の手順を追う必要があります。

そのような人たちに向けて、この連載では「あとは楽しくコードを書くだけ」の状態になるまでに必要な実行環境の構築や、開発をスムーズに進めるために必要なことのベストプラクティスを言語別にまとめて紹介していきます。

なお、この連載での動作環境はMacまたはLinuxのいずれかのディストリビューションを前提としていますので、Windowsの場合などは適宜読み替えていただければと思います。

今回は、多くのwebアプリケーションで利用されているPHPの環境の構築について見ていきましょう。

PHPのバージョン

PHPは大きく分けて5.6系と7.0系の現行バージョンがあります。歴史的な経緯で6というバージョンはありません。

現在広く利用されているのが5.6系で、こちらはオブジェクト指向が導入されるなどPHPがモダンなプログラミング言語の一員となった5系の最新バージョンです。2016年6月現在では5.6.22がリリースされています。

PHP7は2015年の12月にリリースされた新しいバージョンで、全体の処理速度が向上したり、スカラー型のタイプヒンティングが可能になるなど大きな改善がなされました。2016年6月現在では7.0.7がリリースされています。

いまから新しくPHPを始める場合はPHP7をおすすめします。世の中にある古いライブラリやフレームワークはPHP7に対応していない場合がありますが、PHP7はメジャーバージョンアップとしては比較的後方互換性があり、移行するハードルは低くデメリットもあまりないため、順次対応が進んでいくでしょう。

参考:PHP: Supported Versions
http://php.net/supported-versions.php

PHPの動作環境の構築

それではPHPが動作する環境を作っていきましょう。

phpコマンドを動作させる

まずphpコマンドを実行できるまでの手順を簡単にまとめます。

PHPは基本的に、各種パッケージマネージャで簡単にインストールすることができます。MacではHomebrewで以下のようにインストールできます。

$ brew tap homebrew/php
$ brew install php70 # もしくは brew install php56

またphpenvphpbrewなど、複数のバージョンのPHPをインストールして好きなタイミングで切り替えることができるツールもあります。PHPのアップデートをしてアプリケーションの動作を確認したり、古いバージョンでサポートしているスクリプトを動かしてみるのに非常に便利です。

MacでははじめからPHPがインストールされていてphpコマンドが動作しますが、バージョンが固定されていたりと開発には何かと不便です。改めて上記の方法のいずれかでインストールすることをおすすめします。

PHPのインストールが完了したら、そのバージョンを確認しましょう。以下のように正しく出力されたら成功です。

$ php -v
PHP 7.0.7 (cli) (built: Jun 17 2016 10:02:49) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

もちろんパッケージマネージャを使わずにソースからビルドすることもできます。ただwebサーバ(Apache、Nginxなど)やデータベース(MySQL、PostgreSQL)との連携のため等のビルドオプションが細かく、要件が変化したりミスがあった場合にコンパイルのしなおしが必要になりとても手間がかかります。このためソースからのビルドは要件を確定させてからじっくりと行うことをオススメします。

インストールできたら、簡単なスクリプトを書いて動作を確認しましょう。

hello-world.php
<?php
echo 'Hello world.' . "\n";
$ php hello-world.php
Hello world.

PHPはコンパイルの必要がない言語なので、これだけで動作が確認できます。

webサーバで動作させる

次はPHPをwebサーバで動作させる場合です。webアプリケーションを開発する場合は必須になります。

最も簡単な方法がPHPのビルトインサーバを利用する方法です。以下のようなコマンドで、カレントディレクトリをドキュメントルートとしたwebサーバを起動することができます。

$ php -S localhost:8888

モダンなwebアプリケーションフレームワークではこの機能を利用して開発を行えるものもあります。Laravelのartisan serveコマンドなどがその例です。

デフォルトの設定では、これらはindex.phpというファイル名でファイルと作っておくと、http://localhost:8888/にブラウザからアクセスした際に自動的にこのファイルが実行されます。つまりhttp://localhost:8888/index.phpというURLを指定した場合と同様の動作になります。

以下のようにphpinfo()を実行するファイルを作成してそこでビルトインサーバを立ち上げ、http://localhost:8888/で確認してみましょう。phpinfo()はPHPの設定項目などをHTMLで見やすく表示するための確認用の関数です。

index.php
<?php
phpinfo();

また簡単にApacheやnginxなどで動作させる際は、MAMPやXAMPPなどの全部入りパッケージを利用するのが簡単です。これらはwebアプリケーションを動作させるために必要なもの(Apache、PHP、MySQLなど)がまとまって入っており、簡単にアプリケーションを作り始めるには最適なものになっています。バージョンの指定がしづらかったり、細かい設定がきかないという融通の効かなさはありますが、入門の際はこちらを触ってみるのもよい手かと思います。

実際にサーバにセットアップする際はApache上でPHPを動かすのが最もシンプルに行えます。パッケージマネージャでApache(httpd)とphpをインストールすれば自動的にwebサーバがPHPを実行可能になることが多いです。

CentOSでの例
$ yum install httpd php

動作を試してみて、そもそもアクセスが不可能な場合は、動作環境が仮想サーバであればそのファイアーウォールの設定や、webサーバが起動しているかどうかを改めて確認しましょう。

webサーバが動作していてもそのままコードが見えてしまう場合は、PHPが正しく動作せずHTMLと同様に出力されている状態です。PHPがインストールされているかどうか、Apacheであればモジュールがきちんと読み込めているかなど、ログなども見ながら原因を切り分けて探していきましょう。

PHPの基本的な設定

PHPの設定は php.iniというファイルに記述します。いま動作しているPHPのphp.iniの場所は、php -iコマンドの出力から確認することができます。

$ php -i | grep php.ini
Configuration File (php.ini) Path => /etc

PHPのスクリプト内でini_set()という関数を利用することでも設定値を変更することができます。アプリケーションフレームワークなどでは、フレームワークの設定ファイルにこの方法でPHPの設定値が変更されている場合もあります。

まず設定すべきはdate.timezoneです。これはPHPで利用するタイムゾーンの設定で、date()関数などの動作に関わります。日付を日本に設定したい場合はAsia/Tokyoに設定します。

php.ini
date.timezone = Asia/Tokyo

PHP5.6ではこの設定を行わないと以下のような警告が出ます。

PHP Warning:  Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0

次に知っておくべきはmemory_limitです。デフォルトでは128MBになっており、基本的にこの値で十分です。稀に大きなメモリを消費するプログラムを実行する際はメモリの限界に達して以下の様なエラーが出ることがあります。

Fatal error: Allowed memory size of *** bytes exhausted (tried to allocate *** bytes) in ...

こういった場合はプログラムのメモリ使用量を減らすと同時にmemory_limitの値を大きくすることを検討します。

他にもさまざまな設定項目があります。エラーの表示レベルを操作するerror_reportingや、文字コードを設定するdefault_charsetmbstring.languageなどです。詳細はPHPのドキュメントを読んでみてください。

webサーバでPHPを動作させている場合、php.iniに記述した設定はwebサーバを再起動することで反映されるので、忘れずに再起動を行いましょう。

おわりに

今回はPHPの動作環境を構築するために必要な部分をまとめました。PHPは動作環境の構築は比較的簡単ではありますが、インストールの方法などが多数あるので、混乱しないようにしたいものです。

次回は実際にPHPのアプリケーションを作る際のポイントやデプロイの方法などについてみていきます。

teratail【テラテイル】|思考するエンジニアのためのQAプラットフォーム
https://teratail.com/

おすすめ記事

記事・ニュース一覧