未経験からweb系プログラマーになるための独学履歴~アプリケーション作成を体系的に学ぶ・Laravel導入編~

## はじめに

ここまでチュートリアルやPHPについての基礎的な勉強を積み重ねてきたが、それぞれ個々としての理解に留まり、それらを使った実際のWebアプリケーションの実装の流れの理解には未だ乏しいので、ここから就活に使う成果物の作成のために、実際にWebアプリケーションはどのような手順で作成するのか、セキュリティはどうするのかということを[PHPでログイン機能を実装するチュートリアル](https://qiita.com/ShibuyaKosuke/items/f114ffccf441edb2b745)と、パーフェクトPHPを参考に以前作成した新規登録・ログイン・パスワードリセットのサイト元にそれらを確認しながら実装してみようと試みていたが、テンプレート・エンジンの項目を見て先にLaravelに手を付けたほうが効率が良いと判断したので以下の記事を参考にLaravelの導入とその基本的な仕組みを頭に入れてみる。

[Laravel入門 - 使い方チュートリアル](https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d#%E3%83%AB%E3%83%BC%E3%83%88%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF)
[Laravel超入門 開発環境の構築（VirtualBox + Vagrant + Homestead + Composer）](https://qiita.com/7968/items/97dd634608f37892b18a)
[Laravel5.7: usersのCRUD機能を実装する](https://qiita.com/sutara79/items/cd4371b246b44a2cf87f#%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9-3)
[Laravelで作るRESTなWebアプリ](https://qiita.com/MasaKu/items/82b9743383e73cb62c3e)
[Vagrant + VirtualBox でLaravel5.8環境構築メモ
](https://qiita.com/makimoch/items/f6737f02e6978423f121)

## 1 Homesteadの準備

Laravelと仮想環境以外に必要なもの……[Git Bash](https://git-for-windows.github.io/)、[Composer](https://getcomposer.org/)、[Vim](https://www.vim.org/download.php)

Composerで導入するのでまずComposerを導入していない場合はComposerを導入する。
Composerについては以下を参照。
[Composerの使い方](https://qiita.com/sano1202/items/50e5a05227d739302761)

各種仮想開発環境は各自用意する。
私は今まではXAMPPを使っていたが、今回はLaravelでHomesteadを使いたかったのでVagrantを用いている。
Vagrantの導入については冒頭の参考ページを参照してほしい。

Vagrantを導入した、あるいは導入済みの場合はHomesteadのダウンロードに進む。
まずはHomestead vagrant boxをダウンロードするために以下のコマンドを実行する。

```
vagrant box add laravel/homestead

```
次にHomesteadを入れたい任意のディレクトリとフォルダを用意して以下のコマンドを実行する。

```
git clone https://github.com/laravel/homestead.git Homestead

```
Homesteadのダウンロードが終わったら次はその設定ファイルを作成する。
先程ダウンロードしたHomesteadにディレクトリ移動して以下のコマンドを実行。

```
bash init.sh

```

すると、Homestead.yamlが作成されるのでそちらにHomesteadの設定を書き込んでいくのだが、設定項目でSSH鍵の項目があるので先にそちらを設定する。
一応、SSH鍵があるかどうか検索するコマンドを実行する。

```
ls -al ファイルパス .ssh

Windowsならこっち

dir ファイルパス .ssh
```

私はバッチファイルを作って前者のコマンドを利用した。
[Windowsでもls,pwd,clearコマンドを使いたい！](https://qiita.com/ta_b0_/items/9ce2c7abff16db59b9d6)

検索すると

```
 ～のディレクトリ

ファイルが見つかりません

 （コマンドで指定したファイルパス） のディレクトリ

2019/10/19  04:07    <DIR>          .
2019/10/19  04:07    <DIR>          ..
2019/10/19  04:06    <DIR>          .ssh
2019/10/19  04:40    <DIR>          app
               0 個のファイル                   0 バイト

 コマンドで指定したファイルパス\.ssh のディレクトリ

2019/10/19  02:14    <DIR>          .
2019/10/19  02:14    <DIR>          ..
2019/10/19  02:14             1,766 id_rsa
2019/10/19  02:14               406 id_rsa.pub
               2 個のファイル               2,172 バイト
               2 個のディレクトリ  190,943,170,560 バイトの空き領域

```

といったように検索結果が出てくる。
今回私はすでに作成をしてあるのでこのような結果になる。
つまり、.sshフォルダを任意の箇所に作ってそこにssh鍵を保存するということになる。
では、ssh鍵を作成する。

```
ssh-keygen -t rsa

```

上記コマンドを実行。
`Enter file in which to save the key`と表示されたら、保存したいファイルパスを指定してEnter。
`Enter passphrase`でパスワード求められるので任意のパスフレーズを入力し、確認のため二度目の入力を済ませればSSH鍵の完成と相成る。

ここまで来たらHomestead.yamlファイルを編集する。
Vimエディターを使える方はファイルが保存されているディレクトリに移動して以下を入力してVimを起動してください。

```
vim Homestead.yaml
```

内容は以下の通り

```

ip: "192.168.30.10"  #Laravelに接続する際のipアドレス。デフォルトだと競合してエラーを起こす可能性が高いのでこれにしておく

memory: 2048 #vagrantに割り当てるメモリ数
cpus: 2 #vagrantに割り当てる仮想CPUコア数
provider: virtualbox #仮想ソフトの指定

authorize: ~/.ssh/id_rsa.pub　# ssh鍵の場所。下記のkeysとセット。

keys:
    - ~/.ssh/id_rsa

folders:
  - map: C:\～(ルートフォルダからのファイルパス）\app\code #Windowsの場合はフルパス指定、超めんどくさい。appフォルダを指定する場合はその直後のディレクトリにcodeフォルダを作り、こうやって指定する。
    to: /home/vagrant/Code #ホスト(上で指定した実際のディレクトリ)と連動する仮想環境化のディレクトリ、相互に変更が反映される。

sites: # プロジェクトごとに以下のようにパスを通すと複数のプロジェクトを作成できる。
    - map: homestead.test #後々Lalavelをブラウザで表示させるためのルートアドレス。トップページが表示される。
      to: /home/vagrant/Code/Laravel/public #Laravelのpubilcフォルダ(ウェブルート）を指定する。仮想環境化で入れてるのでこうなる。

databases: # 各プロジェクトで参照するDBの名前。複数ある場合はその都度追記する。
    - laravel_test

features: # オプションの設定、trueにしてから変更を反映すると対応するDBを削除してtrueにしたDBがインストールされる。
    - mariadb: true
    - ohmyzsh: false
    - webdriver: false

# blackfire:
#     - id: foo
#       token: bar
#       client-id: foo
#       client-token: bar

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp


```
注釈を補足すると、foldersの項目では実際に仮想環境化で扱うディレクトリを指定する。
上記の場合は～\app以下にあるcodeフォルダ以下を仮想環境下での/home/vagrant/Codeディレクトリと共有（連動）させるということになる。
つまり、後でこのcodeフォルダにLaravelをダウンロードするのだが、ダウンロードすると仮想環境下でのCodeフォルダも同様の状態になるということになる。

sitesとdatabasesでは作りたいプロジェクト（アプリケーション）に合わせてルートアドレスとウェブルート、そのプロジェクトで参照するDBを設定する。
Homesteadで複数のアプリを動かしたい場合はその都度新しくLaravelを共有フォルダにインストールしてHomestead.yamlに追記していく形になる。

featuresの項目はオプションの設定。
Homesteadには仮想開発するためのツールが一通り付属しているのでそれを使用するためのものだと思っていい。
Laravel及びHomesteadにおいてデフォルトで使用されるデータベースはMySQLかPostgreSQLだが、私はMariaDBを使いたかったのでtrueに設定している。
詳しくはドキュメントを参照。
[Homestead](https://readouble.com/laravel/6.0/ja/homestead.html)

ちなみに私は沼ったのでそうならないために補足すると、このファイルを変更した際それを反映するには`vagrant up --provision`でvagrantをupしないといけないことに注意してほしい。

これで下準備が完了したので次はHomesteadにLaravelをダウンロードする。

## 2 Laravelのインストール

Homesteadディレクトリで以下を実行。

```
vagrant up

vagrant ssh

```

vagrant upしていた場合は、sshのみでOK。
次にCodeディレクトリに移動してそこにLaravelをダウンロードするので以下のコマンドを実行する。

```
cd Code/

composer create-project laravel/laravel -prefer--dist ディレクトリ名

```

ディレクトリ名はプロジェクト名や作成するアプリケーションの名前などダウンロードしたLaravelフォルダの名前にしたいものを指定する。

Laravelのダウンロードはこれで完了。あとは、Homestead.yamlで設定したIPアドレス、あるいはfoldersのmapで定義した文字列を打ち込むとTOPページが表示される。
次回は、Laravelの基本的な扱い方について見ていく。