ビルトインウェブサーバーで簡単環境構築 や、 EC-CUBE の開発環境の作り方の2020年度版です。
最近、 symfony/cli が超絶使えるようになっているのでご紹介したいと思います。
- 一部制約がありますが、 WordPress や Symfony を使用していない EC-CUBE2系でも利用可能です
- Symfony3系、4系では
Symfony/WebServer-bundle
で開発用ローカルウェブサーバーを起動していましたが、 Symfony5系では廃止されました
symfony/cli とは
- Symfonyプロジェクトを新しく作成したり
- パワフルな開発用ローカルウェブサーバーが利用できたり
- セキュリティチェックができたり
する便利なコマンドラインツールです。
ここでは開発用ローカルウェブサーバーの利用方法を中心に紹介したいと思います。
インストール方法
2023年1月21日追記
最近、 Symfony cli のインストール方法が変わりましたので、こちらを参考にインストールしてください。
https://symfony.com/download
Mac
curl -sS https://get.symfony.com/cli/installer | bash
## $HOME/.symfony/bin に PATH を通しておきます
export PATH=$HOME/.symfony/bin:$PATH
Windows
後日もうちょっと詳細にまとめます
- こちらから setup.exe をダウンロードし、インストールしてください
- (Git がインストールされていない場合) インストールの最後に、 Git for Windows のダウンロードページが表示されます。 Click here to download manually のリンクをクリックし、 Git for Windows をダウンロードし、インストールしてください
- (PHP がインストールされていない場合) Web Platform Installer をインストールし、(PHP7.3.x(x64)) をインストールします
TODO: PHPのインストールは chocolatey の方が簡単かも
Linux
wget https://get.symfony.com/cli/installer -O - | bash
## $HOME/.symfony/bin に PATH を通しておきます
export PATH=$HOME/.symfony/bin:$PATH
EC-CUBE(4.0系)のインストール方法
symfony コマンドをインストールしたら、以下3つのコマンドを実行することでEC-CUBEをインストールできます。
symfony composer selfupdate --1 ## EC-CUBE4.1以降は不要です
symfony composer install
symfony console eccube:install -n
開発用ローカルウェブサーバーの利用方法
以下のコマンドを実行することで http://127.0.0.1:8000
で開発用ローカルウェブサーバーが起動します。
symfony server:start
インストールされている PHP を自動的に検索してくれますので、特別な設定不要です。
また、 php-fpm がインストールされていれば、 php-fpm 経由で起動します
停止したい場合は CTRL+C
で停止します。
SSL を利用したい場合
以下のコマンドでオレオレSSL証明書を自動設定できます。
symfony server:ca:install
開発用ローカルウェブサーバーの URL も https://127.0.0.1:8000
になります。
WSL2 を使用している場合は https://localhost:8000
へアクセスしてください。
インストールされているPHPの表示
symfony local:php:list
コマンドで、インストールされている PHP を一覧表示できます
symfony local:php:list
コマンドを実行すると、以下のようなテーブルが表示されます
Version | Directory | PHP CLI | PHP FPM | PHP CGI | Server | System? |
---|---|---|---|---|---|---|
5.3.29 | /opt/local | bin/php53 | PHP CLI | |||
5.4.45 | /Users/nanasess/.phpbrew/php/php-5.4.45 | bin/php | sbin/php-fpm | bin/php-cgi | PHP FPM | |
5.6.40 | /Users/nanasess/.phpbrew/php/php-5.6.40 | bin/php | sbin/php-fpm | bin/php-cgi | PHP FPM | |
7.0.33 | /Users/nanasess/.phpbrew/php/php-7.0.33 | bin/php | sbin/php-fpm | bin/php-cgi | PHP FPM | |
7.1.33 | /Users/nanasess/.phpbrew/php/php-7.1.33 | bin/php | sbin/php-fpm | bin/php-cgi | PHP FPM | |
7.2.30 | /Users/nanasess/.phpbrew/php/php-7.2.30 | bin/php | sbin/php-fpm | bin/php-cgi | PHP FPM | |
7.3.11 | /usr | bin/php | sbin/php-fpm | PHP FPM | ||
7.3.17 | /Users/nanasess/.phpbrew/php/php-7.3.17 | bin/php | sbin/php-fpm | bin/php-cgi | PHP FPM | |
7.4.3 | /usr/local | bin/php | Cellar/php/7.4.3/sbin/php-fpm | Cellar/php/7.4.3/bin/php-cgi | PHP FPM | * |
7.4.5 | /Users/nanasess/.phpbrew/php/php-7.4.5 | bin/php | sbin/php-fpm | bin/php-cgi | PHP FPM |
僕みたいな、 PHPをたくさん入れている人は上記のようにたくさん表示されます。
とても便利な機能ですね!
試した限りでは、 cli 版のPHP5.4でも動作しました。
指定したPHPバージョンで開発用ローカルウェブサーバーを起動する
基本的に、 PATH の通った PHP で開発用ローカルウェブサーバーは起動します。
PHP7.2を利用したいプロジェクトでは、以下のように .php-version
ファイルを作成します。
cd my-project
echo "7.2" > .php-version
DocumentRoot を指定する
EC-CUBE2系、EC-CUBE3系のように、 html ディレクトリをドキュメントルートにしたい場合は --document-root
オプションを使用します
symfony server:start --document-root=html
EC-CUBE2系や WordPress で使用する
この開発用ローカルウェブサーバーは、 DirectoryIndex を設定することができません
少々不便ですが 下層の DirectoryIndexにアクセスする場合は、以下の例のように index.php 付与してアクセスしましょう
例
-
https://wordpress.example.com/wp-admin/
→https://wordpress.example.com/wp-admin/index.php
EC-CUBE2系は html/define.php
の define('USE_FILENAME_DIR_INDEX', true);
を設定することで対応可能です。
注意点
symfony server:ca:install
で SSL(TLS)を有効にした場合の注意点
$_SERVER['HTTPS']
は On となります (Apache などは小文字の on)。一部のアプリケーションやフレームワークでは誤作動の可能性がありますので注意してください
開発用ローカルウェブサーバーからメールを送信しようとすると、 Invalid ID given エラーになる場合
開発用ローカルウェブサーバーからメールを送信しようとすると、 Message ID が 乱数@127.0.0.1:8000
となり、 Invalid ID given というエラーになってしまう場合があります。
これは、 $_SERVER['SERVER_NAME']
が 127.0.0.1:8000
に設定されるためです。
以下のようなコードを path/to/ec-cube/index.php
に入れておくことで回避できます。
// require $autoload; の下あたり
if (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Symfony') !== false) {
$_SERVER['SERVER_NAME'] = '127.0.0.1';
}
まとめ
Symfony と Docker は相性が強烈に悪く、設定も煩雑で難解です。
symfony/cli でしたら、簡単なコマンドで SSL のテスト環境まで構築できてしまいます。ローカル開発環境構築に挫折したり苦しんでいる方には、ぜひおすすめします。