連載のはじめに
こんにちは、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で以下のようにインストールできます。
またphpenv
やphpbrew
など、複数のバージョンのPHPをインストールして好きなタイミングで切り替えることができるツールもあります。PHPのアップデートをしてアプリケーションの動作を確認したり、古いバージョンでサポートしているスクリプトを動かしてみるのに非常に便利です。
MacでははじめからPHPがインストールされていてphp
コマンドが動作しますが、バージョンが固定されていたりと開発には何かと不便です。改めて上記の方法のいずれかでインストールすることをおすすめします。
PHPのインストールが完了したら、そのバージョンを確認しましょう。以下のように正しく出力されたら成功です。
もちろんパッケージマネージャを使わずにソースからビルドすることもできます。ただwebサーバ(Apache、Nginxなど)やデータベース(MySQL、PostgreSQL)との連携のため等のビルドオプションが細かく、要件が変化したりミスがあった場合にコンパイルのしなおしが必要になりとても手間がかかります。このためソースからのビルドは要件を確定させてからじっくりと行うことをオススメします。
インストールできたら、簡単なスクリプトを書いて動作を確認しましょう。
PHPはコンパイルの必要がない言語なので、これだけで動作が確認できます。
webサーバで動作させる
次はPHPをwebサーバで動作させる場合です。webアプリケーションを開発する場合は必須になります。
最も簡単な方法がPHPのビルトインサーバを利用する方法です。以下のようなコマンドで、カレントディレクトリをドキュメントルートとしたwebサーバを起動することができます。
モダンなwebアプリケーションフレームワークではこの機能を利用して開発を行えるものもあります。Laravelのartisan serve
コマンドなどがその例です。
デフォルトの設定では、これらはindex.php
というファイル名でファイルと作っておくと、http://localhost:8888/
にブラウザからアクセスした際に自動的にこのファイルが実行されます。つまりhttp://localhost:8888/index.php
というURLを指定した場合と同様の動作になります。
以下のようにphpinfo()
を実行するファイルを作成してそこでビルトインサーバを立ち上げ、http://localhost:8888/
で確認してみましょう。phpinfo()
はPHPの設定項目などをHTMLで見やすく表示するための確認用の関数です。
また簡単にApacheやnginxなどで動作させる際は、MAMPやXAMPPなどの全部入りパッケージを利用するのが簡単です。これらはwebアプリケーションを動作させるために必要なもの(Apache、PHP、MySQLなど)がまとまって入っており、簡単にアプリケーションを作り始めるには最適なものになっています。バージョンの指定がしづらかったり、細かい設定がきかないという融通の効かなさはありますが、入門の際はこちらを触ってみるのもよい手かと思います。
実際にサーバにセットアップする際はApache上でPHPを動かすのが最もシンプルに行えます。パッケージマネージャでApache(httpd)とphpをインストールすれば自動的にwebサーバがPHPを実行可能になることが多いです。
動作を試してみて、そもそもアクセスが不可能な場合は、動作環境が仮想サーバであればそのファイアーウォールの設定や、webサーバが起動しているかどうかを改めて確認しましょう。
webサーバが動作していてもそのままコードが見えてしまう場合は、PHPが正しく動作せずHTMLと同様に出力されている状態です。PHPがインストールされているかどうか、Apacheであればモジュールがきちんと読み込めているかなど、ログなども見ながら原因を切り分けて探していきましょう。
PHPの基本的な設定
PHPの設定は php.ini
というファイルに記述します。いま動作しているPHPのphp.ini
の場所は、php -i
コマンドの出力から確認することができます。
PHPのスクリプト内でini_set()
という関数を利用することでも設定値を変更することができます。アプリケーションフレームワークなどでは、フレームワークの設定ファイルにこの方法でPHPの設定値が変更されている場合もあります。
まず設定すべきはdate.timezone
です。これはPHPで利用するタイムゾーンの設定で、date()
関数などの動作に関わります。日付を日本に設定したい場合はAsia/Tokyo
に設定します。
PHP5.6ではこの設定を行わないと以下のような警告が出ます。
次に知っておくべきはmemory_limit
です。デフォルトでは128MBになっており、基本的にこの値で十分です。稀に大きなメモリを消費するプログラムを実行する際はメモリの限界に達して以下の様なエラーが出ることがあります。
こういった場合はプログラムのメモリ使用量を減らすと同時にmemory_limit
の値を大きくすることを検討します。
他にもさまざまな設定項目があります。エラーの表示レベルを操作するerror_reporting
や、文字コードを設定するdefault_charset
やmbstring.language
などです。詳細はPHPのドキュメントを読んでみてください。
webサーバでPHPを動作させている場合、php.iniに記述した設定はwebサーバを再起動することで反映されるので、忘れずに再起動を行いましょう。
おわりに
今回はPHPの動作環境を構築するために必要な部分をまとめました。PHPは動作環境の構築は比較的簡単ではありますが、インストールの方法などが多数あるので、混乱しないようにしたいものです。
次回は実際にPHPのアプリケーションを作る際のポイントやデプロイの方法などについてみていきます。
- teratail【テラテイル】|思考するエンジニアのためのQAプラットフォーム
- https://teratail.com/