いつも1人で開発しているのでついついバージョン管理が疎かになりがちです。
ここではLaravelのバージョン管理をGitで行う際のおそらくは標準的なやり方、ワークフローをメモしておきます。
##想定利用シーン
想定する利用シーンとしては、
- 開発はローカルで行って動作確認
- リモートレポジトリにpush
- テストサーバでpull(clone)し、動作確認
- 本番サーバでpull(clone)
という流れ。ひとまず自動化等は気にしない。
自動化等を検討する場合は、こちらもご覧下さい。
##Laravelにて、おそらく想定している開発方法
###ベストプラクティス?を紐解く
Laravelはプロジェクトを作ると、.gitignoreが既に作成されており、内容が、
/vendor
/node_modules
Homestead.yaml
Homestead.json
.env
となっている。無視されるファイルは初期状態では下記のような状態。
- /vendor(Laravel本体含め、各種ライブラリ群)
- /node_modules(初期状態では存在しない)
- Homestead.yaml(初期状態では存在しない)
- Homestead.json(初期状態では存在しない)
- .env(開発、テスト、本番等、それぞれ環境依存のパラメータ設定)
という状態なので、事実上、
- /vendor
- .env
が無視される = 環境依存なので、各サーバ環境下で個別に用意しろ!というのがお作法と推測できる。
###/vendor
Laravelの本体等も含むので、???という感じですが、各環境下でcomposer.jsonをベースにcomposerを利用してインストールしろとのことらしい。
composer install
###.env
.envは各サーバで個別に用意して、DB接続情報を含め、各種環境依存パラメーターを設定しろということのようです。
##実際に開発ワークフローを試してみる
では、簡単ではありますが、開発ワークフローを試してみたいと思います。
流れとしては、
- 1)リモートリポジトリ用意
- 2)ローカルLaravelの用意
- 3)ローカルからリモートにpush
- 4)別のサーバでclone(pull)
- 5)別のサーバで.envの準備と編集
- 6)別のサーバでcomposer installを実行
- 7)ローカルで編集しpush
- 8)別のサーバでpull
という感じになるかと思います。
###1)リモートリポジトリの作成
では、ここでは既にGitがインストールされ、SSHでログインができるサーバ上にリモートリポジトリを作成してみます。もちろんGithubとかでも問題ありません。
基本、こんな感じ。チームで開発するならgroupを変更して、書込み権限を付与しておきましょう。
mkdir /var/www/test.git
chown user /var/www/test.git
cd /var/www/test.git
git init --bare --shared
###2)ローカルにLaravelを用意
homeディレクトリにlocal_l5というプロジェクト作成を想定。
cd
composer create-project laravel/laravel local_l5
###3)ローカルからリモートにpush
作成されたプロジェクトディレクトリ内で各種gitのinit,remoteリポジトリ登録,push等を行う。
cd local_l5
git init
git add .
git commit -m "1st commit."
git remote add origin ssh://servername/var/www/test.git
git push origin master
リモートリポジトリの登録を間違うなどして消したい場合は、
git remote rm origin
とすればいい。登録されているリポジトリを見るには単に、git remoteでよい。
###4)テストサーバ等でclone(pull)
テストサーバや本番サーバの所定の位置で、cloneをかけます。
ディレクトリ名を指定しないとリポジトリ名(ここだとtest)になるので、test_l5と指定。
git clone ssh://servername/var/www/test.git test_l5
実運用では、/var/www/html等のApacheのDcumentRootとかになるでしょうね。
###5).envの準備と編集
cloneした先で.envを編集します。0から作ってもいいですし、cloneさている.env.sampleをリネームして用意してもいいでしょう。
必要に応じてDBの接続情報、メール送信サーバ等を編集します。
5)と6)は順番が入れ替わっても何ら問題ありません。
###6)composer installの実行
冒頭触れた通り、/vendorが全くコピーされていないので、そのままでは動きません。
cd test_l5
composer install
として、各種ライブラリをインストールします。既にローカルでcomposer updateをかけている場合はcomposer updateでもいいと思います。
####動作確認
ここで一度、動作確認しておくといいでしょう。
テスト等でビルトインサーバを使いたい場合は、Firewall(あるいはiptables)を編集し8000を許可する必要があります。
iptablesで制御している場合は、/etc/sysconfig/iptablesに下記を加えます。AWSやAzure等を利用している場合は、サービス側でポートを空けます。
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8000 -j ACCEPT
あと、ビルトインサーバ起動時に --host 0.0.0.0等のオプションを付与する必要があります。
php artisan serve --host 0.0.0.0
などとし、外部からのアクセスを許可する必要があります(通常はローカルからのみの許可になっているようです)。
5)と6)は順番が入れ替わっても何ら問題ありません。
###7)ローカルでの編集とpush
ローカルでLaravelを編集します。git add .,commitを繰り返すことになるでしょう。
編集が一段落したらリモートリポジトリにpushします。
cd local_l5
git add .
git commit -m "編集しました。"
git push origin master
###8)テストサーバ等でpull
一度cloneしたファイル群に変更を反映するには、
cd test_l5
git pull
とします。後は、基本7)と8)を繰り返すことになります。
ここではpullしていますが、必要に応じてfetchとかでも。お好みで。ただ、デプロイを目的とするならpullで問題無いかと思います。
簡単ではありますが、こんな感じです。
##その他
展開先で問題があった場合、元に戻す必要があります。特に本番環境など。
###履歴を見る
git log
###1つ前に戻る
git reset -hard HEAD
###任意のコミットに戻る
git reset --hard 518198b8041000c5d5843f5d7b68ee4434fbc71f