こんにちは。teratail開発チームの出川幾夫(@ikuwow)です。
前回はPHPをコマンドラインとWebサーバで実行できる環境の構築手順をまとめました。今回はその後編です。実際にアプリケーションを開発していくためのリポジトリの構成や、デプロイの手順を整える環境構築について説明します。
Composerによるリポジトリ構成
PHPでライブラリを管理するパッケージマネージャとしてComposerがあります。これはRubyにおけるBundlerやiOSアプリケーションにおけるCocoaPodsのように、アプリケーションに依存しているライブラリとその依存関係、バージョン等を管理することができるツールです。
以前はPEARやPECLでサーバにライブラリをインストールするのが主流でした。しかし、アプリケーションの動作がサーバに依存してしまうのと、環境構築に手間がかかり開発者がライブラリの更新を追いづらいという欠点があり、今ではComposerがその役目を代替しています。また、かつてPEARでインストールできた多くのライブラリはComposerでもインストールが可能になっています。
Composerを利用すると、依存関係を1つのファイルにまとめて管理できるのに加え、autoload.php
という1つのファイルをrequireするだけで全てのライブラリをロードすることができます。
Composerを使ってみる
Composerは公式ページで.phar形式の実行ファイルとして提供されています。リンク内のインストラクションに従ってcomposer.phar
をダウンロードします。
これで./composer.phar
でComposerが実行可能ですが、単にcomposer
コマンドを有効にするには/usr/local/bin
などのパスの通っているディレクトリに配置する必要があります。
それでは、まず空プロジェクトcomposertest
を作ってその中にcomposer.json
ファイルを作成してみましょう。composer.json
は依存するパッケージ(ライブラリやフレームワークなど)やそのバージョンを記述するファイルです。composer init
でインタラクティブに初期設定を行うことができます。ここでは依存パッケージを指定せずに、いったん空のcomposer.json
ファイルを作ります。
composer.jsonファイルができたら、早速依存パッケージをインストールしてみます。インストールにはcomposer require
を使います。ここではPHPMailerをインストールしてみます。
この後composer.json
は以下のように変わります。
また、composer.json
を上記のように直接変更したあとcomposer install
コマンドを使うことでもインストールが実行できます。
Composerによってインストールしたパッケージはvendor
ディレクトリに入ります。ここにあるautoload.php
を読み込むことで、Composerでインストールしたライブラリ全てを参照できるようになります。
以下のコードで動作確認をしてみましょう。
ここまでComposerの使い方をまとめると、使いたいライブラリをcomposer require
し、作成されたcomposer.json
ファイルとcomposer.lock
ファイルをコミットする、という手順になります。
composer.lock
は、composer.json
でパッケージが指定された結果、依存関係やマイナーバージョンも含め実際にインストールがされたライブラリの情報が書かれるファイルです。git clone
の直後にcomposer install
を使うことで、ここに書かれたのと同じバージョンの同じライブラリがインストールされます。
/vendorディレクトリはバージョン管理の必要が無いので.gitignore
に記述しておきます。composer.json
に加えてcomposer.lock
も忘れずにバージョン管理の対象とします。
また、アプリケーションフレームワークを使って開発をする場合は、そのフレームワークに適したファイルやディレクトリを同時に作成してリポジトリを初期化する方法もあります。
ここまでセットアップしておけば、サーバの設定等をほとんど気にすることなく、ファイルの変更といくつかのコマンドだけでライブラリの依存関係の管理が可能になります。
Webアプリケーションのデプロイ
PHPはビルドが必要ないスクリプト言語なので、PHPでかかれたWebアプリケーションはWebサーバのドキュメントルートに設置するだけで動作します。このためデプロイが非常に簡単です。
ただしgit pull
で稼働中のコードを更新したり、その直後のcomposer install
が完了するまでには時間がかかるため、それまではアプリケーションが正しく動作しないダウンタイムが生まれてしまいます。
このため、以下のようにgit clone
するディレクトリを複数用意し、composer install
等が完了した後にドキュメントルートに指定しているcurrent
のシンボリックリンクを新しいものに張り替えるというデプロイがよく行われます。
これはDeployerというPHP製のシンプルなデプロイツールを使うと簡単に実現できます。またCapistranoなどでも同様のことが可能です。
- 参考: [Laravel] /vendor配下のjsファイルの読み込みについて|teratail
- https://teratail.com/questions/4964
終わりに
2回にわたって、PHPの動作と開発の環境の構築方法を見ていきました。PHPは実際に動かしてみるまでの難易度が低く、リポジトリの管理やデプロイもツールが多く存在するのでそこまで気を煩わされることがありません。
はじめにきちっと環境を整えておくと、あとの開発がスムーズに進められます。本格的に開発を行う際にこの記事のセットアップ手順が参考になれば幸いです。
- teratail【テラテイル】|思考するエンジニアのためのQAプラットフォーム
- https://teratail.com/