こんにちは。teratail開発チームの出川幾夫
前回はPHPをコマンドラインとWebサーバで実行できる環境の構築手順をまとめました。今回はその後編です。実際にアプリケーションを開発していくためのリポジトリの構成や、
Composerによるリポジトリ構成
PHPでライブラリを管理するパッケージマネージャとしてComposerがあります。これはRubyにおけるBundlerやiOSアプリケーションにおけるCocoaPodsのように、
以前はPEARやPECLでサーバにライブラリをインストールするのが主流でした。しかし、
Composerを利用すると、autoload.という1つのファイルをrequireするだけで全てのライブラリをロードすることができます。
<?php
require_once 'vendor/autoload.php';Composerを使ってみる
Composerは公式ページで.phar形式の実行ファイルとして提供されています。リンク内のインストラクションに従ってcomposer.をダウンロードします。
これで./でComposerが実行可能ですが、composerコマンドを有効にするには/usr/などのパスの通っているディレクトリに配置する必要があります。
$ mv composer.phar /usr/local/bin/composer
それでは、composertestを作ってその中にcomposer.ファイルを作成してみましょう。composer.は依存するパッケージcomposer initでインタラクティブに初期設定を行うことができます。ここでは依存パッケージを指定せずに、composer.ファイルを作ります。
$ mkdir composertest
$ cd composertest
$ composer init
  Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [ikuwow/composertest]:
Description []:
Author [Ikuo Degawa <example@ikuwow.com>, n to skip]:
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []:
License []:
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{
    "name": "ikuwow/composertest",
    "authors": [
        {
            "name": "Ikuo Degawa",
            "email": "example@ikuwow.com"
        }
    ],
    "require": {}
}
Do you confirm generation [yes]? yes
composer.composer requireを使います。ここではPHPMailerをインストールしてみます。
$ composer require phpmailer/phpmailer
composer require phpmailer/phpmailer
Using version ^5.2 for phpmailer/phpmailer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing phpmailer/phpmailer (v5.2.16)
    Downloading: 100%
phpmailer/phpmailer suggests installing league/oauth2-google (Needed for Google XOAUTH2 authentication)
Writing lock file
Generating autoload files
この後composer.は以下のように変わります。
{
    "name": "ikuwow/composertest",
    "authors": [
        {
            "name": "Ikuo Degawa",
            "email": "example@ikuwow.com"
        }
    ],
    "require": {
        "phpmailer/phpmailer": "^5.2"
    }
}また、composer.を上記のように直接変更したあとcomposer installコマンドを使うことでもインストールが実行できます。
Composerによってインストールしたパッケージはvendorディレクトリに入ります。ここにあるautoload.を読み込むことで、
以下のコードで動作確認をしてみましょう。
<?php
require_once 'vendor/autoload.php';
if (class_exists('PHPMailer')) {
    $mailer = new PHPMailer();
    echo "PHPMailer is included!" . "\n";
} else {
    echo "PHPMailer is not included." . "\n";
}ここまでComposerの使い方をまとめると、composer requireし、composer.ファイルとcomposer.ファイルをコミットする、
composer.は、composer.でパッケージが指定された結果、git cloneの直後にcomposer installを使うことで、
/vendorディレクトリはバージョン管理の必要が無いので.gitignoreに記述しておきます。composer.に加えてcomposer.も忘れずにバージョン管理の対象とします。
/vendorまた、
$ composer create-project laravel/laravel --prefer-dist
ここまでセットアップしておけば、
Webアプリケーションのデプロイ
PHPはビルドが必要ないスクリプト言語なので、
ただしgit pullで稼働中のコードを更新したり、composer installが完了するまでには時間がかかるため、
このため、git cloneするディレクトリを複数用意し、composer install等が完了した後にドキュメントルートに指定しているcurrentのシンボリックリンクを新しいものに張り替えるというデプロイがよく行われます。
/your/project/path |--releases | |--20150513120631 |--shared | |--... |--current -> /your/project/path/releases/20150513120631
これはDeployerというPHP製のシンプルなデプロイツールを使うと簡単に実現できます。またCapistranoなどでも同様のことが可能です。
- 参考: [Laravel] /vendor配下のjsファイルの読み込みについて|teratail
- https://teratail. com/ questions/ 4964 
終わりに
2回にわたって、
はじめにきちっと環境を整えておくと、
- teratail【テラテイル】 |思考するエンジニアのためのQAプラットフォーム 
- https://teratail. com/