【初心者向け】LaravelとGitHubを使った小規模なチーム開発でありがちなエラーやQ&A（メモ）

チーム開発の練習でLaravelとGit/GitHubを使ったプロジェクトの作成をしていて、ローカル環境構築時に自分がつまずいた点やチームメンバーに聞かれることが多かった手順をまとめた個人的な覚書です。

### 前提

バージョン管理はMacのローカルにGit、リモートリポジトリにGitHub、パッケージマネージャやフレームワークはComposerやHomebrewやLaravelを使用しています。それぞれの導入、インストール方法については基本的に割愛しますが、自分の環境は以下の通りです。

- Mac OS Mojave (バージョン 10.14.3)
- MacBook Pro (Retina, 13-inch, Early 2015)
- git version 2.22.0
- Composer version 1.9.0
- Homebrew 2.1.11
- Laravel Framework 5.8.34

### Q1. 他のメンバーのリモートリポジトリからプルできない

例えば、以下のようなエラーが出る場合です。

```shell:git
fatal: not a git repository (or any of the parent directories): .git
```

```shell:git
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rightsand the repository exists.
```

確認すべきは以下の点。


- リモートリポジトリは公開されていますか？
    - コマンドやリポジトリ名(URL)は合っていますか？

        - 非公開リポジトリの場合はリポジトリに招待してもらっていますか？
    
- 自分側のディレクトリで `git init` しましたか？
    - `git remote add リポジトリ名` もしましたか？
    
- それよりもむしろ `git clone リポジトリ名` の方がオススメだったりします
    - クローンすれば丸っと一括で init から pull までしてくれるので...


### Q2. リモートリポジトリからcloneしたLaravelプロジェクトがエラーになる
エラーには色々あり、ここで全ては紹介できないものの、例えば下記のようなエラーになったでしょうか。

```shell:Laravel
Warning: require(/project/vendor/autoload.php): failed to open stream: No such file or directory in /project/artisan on line 18

Fatal error: require(): Failed opening required '/project/vendor/autoload.php' (include_path='.:') in /project/artisan on line 18
```

詳しくは後述しますが、他人のリモートリポジトリからクローンしただけではLaravelのサイトは正常に表示されません。

PC環境はひとそれぞれに異なるので、Laravelのプロジェクト内にある .env ファイルを設定したり、コマンドを打ったりする必要があります。確認すべきは以下のすべての内容です。

1. `composer install` のコマンドを実施する
2. 必要なDBを自分のローカルに作成する
3. `cp .env.example .env` のコマンドを打つか、.env.example ファイルを複製して .env ファイルを作る
4. 自分の環境に合わせ、DB周りの変数に関して .env を編集する (下記参照)
5. `php artisan key:generate` ( .env 内で APP_KEY が自動的に生成される)
6. `php artisan migrate:fresh --seed` (DBのマイグレート)
7. `php artisan serve` (Laravelの内部サーバを起動)
8. 内部サーバのログに書かれたURL `http://localhost:8000` などにアクセスする


```Laravel:.env
DB_DATABASE={DB_NAME}
DB_USERNAME={DB_USER}
DB_PASSWORD={DB_PASSWORD}
DB_PORT=8889　　//DBのポート番号を変更している場合にのみ修正
DB_SOCKET=/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock   //XAMPPを使用する場合に追記
```

`composer install` のコマンドは、自分でLaravelをインストールした場合は必要ありませんが、人のリポジトリからクローンしてきた際は必要になります。
自分でインストールした場合はすべての情報が揃っているが、ファイル自体全部Gitに上がってる訳じゃないのでクローンした時は一部自分で補完する必要がある、と思えばわかりやすいかもしれません。

下記の記事で、もう少し詳しく説明しています。

参考：
[Laravelのエラー：Fatal error: require(): Failed opening required '/project/vendor/autoload.php' (include_path='.:') in /project/artisan on line 18](https://qiita.com/chimayu/items/82d9d457a056829b3b2e)

### Q3. localhost:8000 でアクセスできない

人によって `http://localhost:8000` の番号の部分が違う場合があるので、その場合は番号を変えてアクセスしてみてください。8000が意味するのはポート番号で、内部サーバを複数立てているなどで8000のポートが埋まっている場合は、8001などが代替の番号になることが多いです。以下のコマンドでLaravelのローカル開発環境のポート番号を変更してあげることもできます。

```
php artisan serve --port=8080
```
こうするとポート番号を8080として、 `http://localhost:8080/` でアクセスが可能です。

### Q4. Laravelの内部サーバを立ち上げたらコマンドが打てない

内部サーバを立ち上げたターミナルではコマンドが効かなくなるので、もうひとつタブを開きましょう。

自分はVSCodeというテキストエディタ付随のターミナルを使うことが多いですが、VSCodeの場合は、メニューの Terminal > New Terminal か、[control + shift + `(バッククォート)] のショートカット、またはターミナルセクションの右側にある＋ボタンをクリックで複数のターミナルを開くことができます。

iTermを使っている場合は、メニューの Shell > Split Vertically with Current Profile または [command + D] のショートカットから。

Mac標準のターミナルの場合は、メニューの シェル > 新規タブ または [command + T] のショートカットから開けます。

### Q5. Laravelの内部サーバの終了方法がわからない
Laravelの内部サーバを終了させるには [control + C] のショートカットから可能です。

### Q6. Laravelで作ったサイトからどうやってもDBに繋がらない
DBの名前やユーザー名やパスワードが合っている、DB_SOCKETのパスも合っている（空欄で良い場合や、パスが人によって違う可能性があります）、内部サーバもDBサーバも起動できている、なんならマイグレートは通った。それなのに何故か、サイトの画面からDBへデータ投入・DB接続しようとする時だけエラーになる、なんてこともありました。
そのようなエラーでは自分の場合、最終的にLaravelを再インストールしたり、クローンし直したりしてエラーが解消したことがあります。ネットワークの問題か何かで、一部ファイルが壊れていたのでしょうか。（そういえば認証機能をmake:authで作った後にメールアドレスなど入力しようとしたらバリデーションが発動しなかったので、やはり何かのファイルが足りないか壊れていたのだと思います。）
レアなケースではありますが、最終手段として頭の片隅に入れておくのも良いかと思います。数時間をエラーに費やしたのにも関わらず、その時はLaravel再インストールによって一瞬で直ったので...笑

他にもエラーやTipsがあればまた書きます。


--

参考：
[No application encryption key has been specified.となったときの対応方法](https://qiita.com/ponsuke0531/items/197c76fcb9300d7c5f36)
[[Laravel5.5] APP_KEY の行方を追う](https://qiita.com/yk2220s/items/dcbf54c6d1f33a0cb06f)
[laravel プロジェクトで RuntimeException No application encryption key has been specified.](https://qiita.com/pugiemonn/items/641718fd241320384972)
[laravelで サーバーを起動することができません](https://teratail.com/questions/141714)
[composer install と composer updateの違い](https://qiita.com/YusukeHigaki/items/47dd3ec23544225f7301)
[Gitもまだよく分かっていない](https://memo.sugyan.com/entry/20091002/1254436981)
[initしてremote addするのとcloneするのの違い](https://hokaccha.hatenablog.com/entry/20110802/1312278626)
[git cloneとgit pull](https://teratail.com/questions/82078)
[他の人が作成したブランチ上で作業する](https://maku77.github.io/git/branch/checkout-pushed-branch.html)
[リモートのgitブランチをローカルにチェックアウトする](https://www.setoya-blog.com/entry/2012/11/04/132746)
[SVNユーザーのGitHub初心者メモ：他人のプロジェクトに手を加える場合（フォーク＆プルリクエスト）](http://lilylila.hatenablog.com/entry/2018/06/22/071932)
[githubで他人の作成中のブランチをローカルに持ってくる方法](https://qiita.com/YamKenta/items/dbc416cbc1bfe086afea)
[git pullを使ってリモートリポジトリと同期する方法【初心者向け】](https://techacademy.jp/magazine/10274)
[laravelでserverのport番号を変えよう](http://suga-tech3.hatenablog.com/entry/2016/07/17/015220)