あとはコードを書くだけ,はじめに作る開発環境構築ベストプラクティス
第2回 PHP開発環境の構築[2]―リポジトリ構築からデプロイまで
こんにちは。teratail開発チームの出川幾夫
前回はPHPをコマンドラインとWebサーバで実行できる環境の構築手順をまとめました。今回はその後編です。実際にアプリケーションを開発していくためのリポジトリの構成や,
Composerによるリポジトリ構成
PHPでライブラリを管理するパッケージマネージャとしてComposerがあります。これはRubyにおけるBundlerやiOSアプリケーションにおけるCocoaPodsのように,
以前はPEARやPECLでサーバにライブラリをインストールするのが主流でした。しかし,
Composerを利用すると,autoload.
という1つのファイルをrequireするだけで全てのライブラリをロードすることができます。
/index.
<?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.
は以下のように変わります。
composer.
{
"name": "ikuwow/composertest",
"authors": [
{
"name": "Ikuo Degawa",
"email": "example@ikuwow.com"
}
],
"require": {
"phpmailer/phpmailer": "^5.2"
}
}
また,composer.
を上記のように直接変更したあとcomposer install
コマンドを使うことでもインストールが実行できます。
Composerによってインストールしたパッケージはvendor
ディレクトリに入ります。ここにあるautoload.
を読み込むことで,
以下のコードで動作確認をしてみましょう。
/index.
<?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.
も忘れずにバージョン管理の対象とします。
.gitignore
/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/
バックナンバー
あとはコードを書くだけ,はじめに作る開発環境構築ベストプラクティス
- 第2回 PHP開発環境の構築[2]―リポジトリ構築からデプロイまで
- 第1回 PHP開発環境の構築[1]―PHPが実行できるまで