Laradockで複数のLaravelプロジェクトを動かす

ローカル環境で、Laradockを使い複数のLaravelプロジェクトを動作させたい場合の設定メモです。
追記: 2018年4月 Laradockの最新版(おそらくv7.0.0)で試したメモとして更新しました。

Laravelとは

PHPのフレームワークの一つです。
Laravel

詳しくは下記のサイトなど。
Laravelのここがすごい

Laradockとは

Laradockは、Laravelをdocker環境で利用できるようにしたツールです。

ドキュメントがあるのですが、ちょっと情報が古くなっていて設定項目名が違っていたり、知りたい情報が無かったりしてわかりづらいため、メモに残すことにしました。
この記事は、LaradockドキュメントのGetting Started
「B) Setup for Multiple Projects」
という項目に沿った内容になっています。

環境

  • Mac High Sierra 10.13.4
  • Laradock 最新版(2018年4月18日時点 v.7.0.0

行うこと

  • ローカル環境において、下記2つのURLでLaravelのサンプルアプリケーションをそれぞれ動作させる
http://project1.test
http://project2.test
  • 下記のフォルダ構成になる。複数のプロジェクトを1つのLaradockで動くようにする
+ laradock
+ project1
+ project2

Laradockをダウンロード

Laradockを git clone する

git clone https://github.com/laradock/laradock.git

laradockディレクトリに入る
設定ファイルをコピーして作成

cd laradock
cp env-example .env

設定ファイルを編集

vi .env

下記のようになっていることを確認。なっていなかったら下記のように変更

APP_CODE_PATH_HOST=../
...
APP_CODE_PATH_CONTAINER=/var/www:cached

docker-compose.ymlですべてのvoluemesの設定が下記のようになっていることを確認。
voluemesは、[ホストのファイルシステム:workspaceのファイルシステム]の書式でマウントするフォルダを指定できる。
${APPLICATION}.envで指定した値。つまりここでは、..//var/www:cachedにマウントするという設定。

- ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}

(:cachedの意味は…不明)
デフォルトでは上記の設定になっているはずなので、あくまで確認です。

Laravelプロジェクトを作成

コンテナを起動する

docker-compose up -d nginx mysql workspace

php-fpmのコンテナは書かなくても一緒に起動する
(以前はworkspaceも書かなくても起動したし、ドキュメント上もそのように見えるが、実際にはworkspaceは明示しないと起動しなかった)

workspaceコンテナに入る

docker-compose exec workspace bash

/var/www配下で2つのプロジェクトを作成

cd /var/www
composer create-project laravel/laravel --prefer-dist project1
composer create-project laravel/laravel --prefer-dist project2

ちょっと時間がかかるので待つ

ディレクトリが作成されたら、一旦コンテナから出る

exit

各プロジェクトごとにnginx設定ファイルを作成

laradockディレクトリ直下で作業を行う

まずデフォルトの設定ファイルを念のため無効にする。
(ファイル名を変更。拡張子がconfのものが全て読み込まれるため)

mv laradock/nginx/sites/default.conf default.conf.bk

各プロジェクトごとのnginx設定ファイルを作成する
ファイル名は*.confになっていれば何でもよい

cp nginx/sites/app.conf.example nginx/sites/app1.conf
cp nginx/sites/app.conf.example nginx/sites/app2.conf

app1.confserver_nameroot を下記のように編集

server_name project1.test;
root /var/www/project1/public;

同じく app2.conf でも下記のように編集

server_name project2.test;
root /var/www/project2/public;

コンテナを再起動して設定を反映させる

docker-compose stop
docker-compose up -d mysql nginx workspace

hostsファイルの編集

http://project1.testといったURLで見るために、hostの設定を追加する

hostsファイルを開く

vi /etc/hosts

下記を追記する

127.0.0.1 project1.test
127.0.0.1 project2.test
...

確認

ブラウザで下記のアドレスを確認する

http://project1.test
http://project1.test

Laravelのデフォルトのサイトが表示されます。
以上です。

参考サイト

三菱東京UFJ銀行にワンタイムパスワードについて問い合わせてみた

全く技術ネタでもWordPressネタでもないのですが。
三菱東京UFJ銀行のワンタイムパスワードについて、アプリにするか、カードにするか、私のように悩んでいる方も多いのではないかと思い、問い合わせをした内容をブログに書いてみることにしました。

2016年6月12日より前にワンタイムパスワードを使えるようにしなくてはならない

三菱東京UFJ銀行は乱数表を利用してインターネットバンキングができていましたが、2016年6月12日からは、乱数表の代わりにワンタイムパスワードを使用しないと、取引ができなくなりますよ、というお話です。昨年から再三案内はされてきましたが、ずっと放置してきました。が、6月も迫ってきたところで、そろそろ利用登録をしてみようと思い立ちました。

アプリ or パスワードカード?

ワンタイムパスワードを利用するためには、2つの方法があります。
スマートフォンアプリで利用登録をするか、ワンタイムパスワードカードを発行してもらうかのいずれかです。どちらかを選択すると、その方法でのみワンタイムパスワードを発行することが可能です。

スマホを持っているならやはりアプリが便利か?と思いきや、アプリの評価が悪い悪い・・・。どうやらOSのアップデートのたびに利用登録をしなおさなくてはならないそうです(iPhoneアプリ)。
一方パスワードカードについてもこちらのブログを見ると、電池交換の手間があったり、時刻補正が必要だったりと書いてあり、何だかどちらも微妙。
さて、どうするか。

三菱東京UFJ銀行のヘルプデスクに問い合わせてみた

というわけで、もう少し詳しいことをヘルプデスクに直接聞いてみることにしました。

Q1. アプリかパスワードカード、一度利用方法を選択したら変更はできないの?

A1. 変更可能

だそうです。ですよね。
具体的には、パスワードカードからアプリに変える場合には、インターネットバンキングの画面で利用登録解除を行った後、普通にアプリで利用登録をすればよいとのこと。
アプリからパスワードカードに変更したい場合も、インターネットバンキングの画面で利用登録を行い、その後同じくWebの画面でカードの利用申し込みをすればよいとのこと。パスワードカードの発行までには1週間〜10日かかるとのことなので、この間ネットバンキングの取引ができなくなる点は注意。

Q2. パスワードカードの電池ってどのくらい保つの?

A2. 5年くらい

ということです。また、電池が切れたらパスワードカードは再発行の扱いになると言っていました。再発行は、インターネットバンキングの画面で、利用開始から1年以降でできるとのこと。紛失した場合は有料みたいですが、電池切れの場合の再発行は無料と言っていました。紛失と電池切れの住み分けをどう行っているのかはちょっとわからなかったですが。

Q3. パスワードカードの時刻って、そんなにずれるもの?

A3. 最初に合わせたら、時刻補正が頻繁に必要ということはない

というような回答でした。時刻補正もインターネットバンキングの画面上で可能らしいですが、面倒なことはできたらあまりしたくないので、補正ってそんなに高い頻度で必要になるんだろうかと思っての質問でした。

Q4-1. iOSアプリで、アプリのバージョンアップごとに再利用登録が必要になると聞いた。それって本当?

A4-1. 本当

残念ですね。

Q4-2. 再利用登録が必要になるのは例えば、iOS9.2->9.3のアップデートのとき?それともiOS9->10へのアップデートのとき?

A4-2. iOS9.2->9.3のようなバージョンアップでも必要

残念ですね。メジャーバージョンアップの頻度でならまだいいか?と思っての質問でしたが、マイナーバージョンアップのときも再利用登録が必要だそうです。

まとめ

以上のことから、今のところはパスワードカードにするのが良いのかなぁと考えています。

  • パスワードカードは電池切れで再発行の手間があるにしても、5年はもつので十分
  • 時刻補正が必要な場面もそんなになさそう
  • アプリ(iOS)は再利用登録の頻度が半端なさそう
  • 後々アプリの使い勝手が向上したらアプリに変えるのもいいかも

といったところでしょうか。
みなさまの選択の判断材料になれば幸いです。

参考

三菱東京UFJ銀行の「ワンタイムパスワード」申込みが怖くて出来ない
三菱東京UFJ銀行|ワンタイムパスワード

VCCWでphpのerror_logを表示する

WordPressのテーマ・プラグイン開発中は、PHPをいじったりしているとすぐページが真っ白になってしまいます。
PHPのエラーログを見れるようにしておくと便利です。
VCCWで見れるようにする方法のメモです。

php設定ファイルを探す

VCCWではphpenvを使っているため、phpの設定ファイルはphpenvの中にあります。
/etc/php.iniではないので注意。
そこで、まずはphp.iniの場所を調べます。
下記プラグインをWordPressでインストールしましょう。
WordPress phpinfo()
プラグインを有効にすると、[設定] > [WordPress phpinfo()]というメニューができるので、そこへ。
「Loaded Configuration File」の項目の値が、設定ファイルのパスです。
スクリーンショット 2016-02-05 15.52.26

私の環境はphp5.6.9なので、5.6.9のフォルダ配下にあるphp.iniが読み込まれています。

php設定ファイルにエラーログ出力の設定を記述する

設定ファイルを開きます。

$ sudo vi /usr/local/phpenv/versions/5.6.9/etc/php.ini

下記の記述を検索します。

;error_log = php_errors.log

これを下記のように変更します。

error_log = /var/log/php/php_errors.log

ファイルを保存します。
最後に変更反映のため、apacheを再起動。

$ sudo /etc/init.d/httpd restart

ログ出力フォルダを作成

フォルダを作るところに移動。

$ cd /var/log

フォルダを作ります。

$ sudo mkdir php

フォルダのユーザーとグループは、apacheの実行ユーザーと同じにします。
VCCWでは、apacheの実行ユーザは

User vagrant
Group vagrant

と設定してあります(/etc/httpd/conf/httpd.confに記載されている)
この情報は、先ほどのphpinfo()の画面でも確認できます。

下記コマンドで変更。

$ sudo chown vagrant:vagrant php

そしてパーミッションも変更します。

$ sudo chmod 644 php

これで、下記の権限になるので、ユーザーに書き込み権限が付与されます。

-rw-r--r--.

ログを出す

では実際にログを出してみましょう。
まずは何か、適当にエラーがが出るように動かしているテーマやプラグインでわざと不正な記述を書き込みます。
そして、ブラウザをリロードします。
ログが出力されているか確認します。

$ vi /var/log/php/php_errors.log

ログファイルができた後は、tailコマンドで常に最新ログを出しておくと便利ですね。

$ tail -f -n 100 /var/log/php/php_errors.log

まとめ

VCCWでは、phpの設定ファイルはphpenvのものを使っている点に注意が必要です。最初、/etc/php.iniを編集してログが出ず、頭をひねっていました。
また、ログを格納するフォルダのUser/Groupと権限も、間違っているとログを書き込むことができないので要注意です。

参考

error_logの出力先を設定する【PHP】【apache2】【debian】
Apache 実行ユーザーの設定

WordPressで投稿を表示するループの書き方・利用シーンまとめ

WordPressのループの仕様はCodexのループに書いてあるとおりですが、ループの利用シーンがいまいち分かりづらいです。
この記事では、Codexや他ブログ記事を参考にし、自分でも試した結果を踏まえてループの書き方と利用シーンについてまとめてみました。

“WordPressで投稿を表示するループの書き方・利用シーンまとめ” の続きを読む