Edited at

Laravel5のプロジェクトをGitで管理する

More than 1 year has passed since last update.

いつも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