Help us understand the problem. What is going on with this article?

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

More than 3 years have 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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした