Laravel Sailで作成したプロジェクトをGitHubリポジトリにpushして利用する

Laravel Sailでさくっとプロジェクト作成する手順を[まとめた](https://qiita.com/kai_kou/items/12c060a8b5e6eb409da8)のですが、そのプロジェクトをGitHubリポジトリにpush後、cloneして利用するのに少し難儀したので、手順をまとめました。


## 前提

[こちら](https://qiita.com/kai_kou/items/12c060a8b5e6eb409da8)の記事でLaravelプロジェクトを作成済み。


## 手順

### GitHubでリポジトリ作成

[公式のドキュメント](https://docs.github.com/ja/github/getting-started-with-github/create-a-repo)がわかりやすいです。

### GitHubリポジトリにpush

Laravelプロジェクトのディレクトリでローカルリポジトリを作成し、GitHubの(リモート)リポジトリにpushします。

実際に作成したリポジトリが以下となります。

kai-kou/laravel-sail-sample-projects: Sample project made with Laravel Sail and Laravel Breeze. 　
https://github.com/kai-kou/laravel-sail-sample-projects


```console
> cd <Laravelプロジェクトのディレクトリ>
> git init
# masterブランチの名前変更(必要であれば)
> git branch -M main
> git add .
> git commit -m “<コミットメッセージ>”
> git remote add origin <GitHubのリポジトリURL(HTTPS or SSH)>
> git push -u origin main
```

Laravel Sailでプロジェクト作成すると`.gitignore`が含まれており、除外すべきファイル・ディレクトリも設定してくれているので、助かります。

```txt:.gitignore
/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
.env
.env.backup
.phpunit.result.cache
docker-compose.override.yml
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
```

### GitHubリポジトリをクローンして利用する

GitHubリポジトリからクローンしてプロジェクトが利用できるようにします。ここでは私が作成したリポジトリを利用します。

#### GitHubリポジトリをクローン

```console
> cd <リポジトリをcloneするディレクトリ>
> git clone https://github.com/kai-kou/laravel-sail-sample-projects.git
> cd laravel-sail-sample-projects
```

#### プロジェクトのセットアップ

クローンしたリポジトリには`vendor` ディレクトリや`.env` ファイルが含まれていないので用意します。

##### 環境変数の設定

```console
> cp .env.example .env
```

今回のGitHubリポジトリに含まれる`.env.example` はすでに設定変更済みですが、以下の設定を変更する必要があります。

```txt:.env
APP_URL=http://localhost
DB_HOST=mysql
MEMCACHED_HOST=memcached
REDIS_HOST=redis
MAIL_FROM_ADDRESS=hoge@example.com
```

##### PHPのパッケージのインストール

`vendor` ディレクトリはリポジトリに含まれていないので、パッケージをインストールします。手元のPCにPHPやComposerがインストールされていればそれを利用することもできますが、ここでは、Laravel Sailのセットアップスクリプトでも利用されているDockerイメージを利用してインストールします。

```console
# パッケージのインストール
> docker run --rm \
  -v $(pwd):/opt \
  -w /opt \
  laravelsail/php80-composer:latest \
  bash -c "composer install"
```

コマンドを叩くのが若干面倒なので、セットアップ用のスクリプトを用意しておくと便利かと思います。


##### Dockerコンテナの起動

パッケージがインストールできたら`sail` コマンドが利用できるようになるので、Dockerコンテナの起動とLaravelの`APP_KEY`を生成します。

```console
# Dockerコンテナの起動
./vendor/bin/sail up -d

# LaravelのAPP_KEY生成
./vendor/bin/sail artisan key:generate
```

`APP_KEY`は`.env`に設定されます。設定されていないと以下のように`No application encryption key has been specified.` エラーとなるのでご注意ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/50d818b9-cd5d-ae2b-ab4d-934bb06b574b.png)

##### Node.jsのパッケージをインストール

今回のプロジェクトではLaravel Breezeを利用しているので、Node.jsのパッケージもインストールします。

```console
> ./vendor/bin/sail npm install
> ./vendor/bin/sail npm run dev
```

##### マイグレーション実行

マイグレーションを実行して必要となるテーブルを作成します。

```console
> ./vendor/bin/sail artisan migrate
```

## 動作確認

以下のURLが表示されたらセットアップ完了です。

`http://localhost/`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/97930402-ac2f-3720-dc74-664147a87104.png)

`http://localhost:8025/`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48549/b012df3d-d287-8872-e40d-733ce7a9572e.png)

やったぜ

## 参考

Laravel SailとLaravel Breezeでさくっとログイン機能を実装する - Qiita 　
https://qiita.com/kai_kou/items/12c060a8b5e6eb409da8