Laravel Homesteadでササッと環境構築して、Hello worldしてみよう！

## What is Laravel Homestead?

[laravel.com](https://laravel.com/docs/master/homestead) より

> Laravel Homestead is an official, pre-packaged Vagrant box that provides you a wonderful development environment without requiring you to install PHP, a web server, and any other server software on your local machine. 

意訳: Laravel公式のVargrant boxだよ。必要なソフトは最初からインストールされてるよ。

## 含まれているソフトウエア

- Ubuntu 18.04
- Git
- PHP 7.3
- PHP 7.2
- PHP 7.1
- Nginx
- MySQL
- lmm for MySQL or MariaDB database snapshots
- Sqlite3
- PostgreSQL
- Composer
- Node (With Yarn, Bower, Grunt, and Gulp)
- Redis
- Memcached
- Beanstalkd
- Mailhog
- avahi
- ngrok
- Xdebug
- XHProf / Tideways / XHGui
- wp-cli
- Minio

## 手順

1. [VirtualBox](https://www.virtualbox.org/wiki/Downloads)をインストール

2. [vagrant](https://www.vagrantup.com/)をインストール

3. boxを追加

   ```shell
   #仮想マシンのテンプレート
   $ vagrant box add laravel/homestead
   ```

4. githubからlaravel/homesteadをクローン

   ```shell
   # 環境設定ファイルが含まれている
   $ git clone https://github.com/laravel/homestead.git ~/Homestead
   ```

5. 環境設定ファイルの作成

   ```shell
   $ cd ~/Homestead
   $ git checkout release
   $ bash init.sh
   ```

6. Homestead.ymlの編集

   ```shell
   #必要に応じて適宜変更
   $vim Homestead.yml
   ```

   ```yml
   #仮想マシンに割り当てるIPアドレス
   ip: "192.168.10.10" #ローカルマシンと異なるNWセグメントの値を設定する
   memory: 2048 #メモリ
   cpus: 2      #CPU
   provider: virtualbox #vagrantで操作する仮想化ソフト
   
   authorize: ~/.ssh/id_rsa.pub　#vagrant sshで使う公開鍵
   
   keys:
       - ~/.ssh/id_rsa #vagrant sshで使う秘密鍵
   
   #ローカルマシンと仮想マシンのファイル共有設定
   folders:
       - map: ~/code #ローカルのファイルパス
         to: /home/vagrant/code #仮想マシンのパス
   
   sites:
       - map: homestead.test #ドメイン
         to: /home/vagrant/code/public #ドキュメントルート
         
   databases:
       - homestead #データベース名
   ```

7. 仮想マシンの起動

   ```shell
   #しばらく時間がかかる
   $ vagrant up
   ```

8. 仮想マシンに接続

   ```shell
   $ vagrant ssh
   Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-47-generic x86_64)
   
   Thanks for using
    _                               _                 _
   | |                             | |               | |
   | |__   ___  _ __ ___   ___  ___| |_ ___  __ _  __| |
   | '_ \ / _ \| '_ ` _ \ / _ \/ __| __/ _ \/ _` |/ _` |
   | | | | (_) | | | | | |  __/\__ \ ||  __/ (_| | (_| |
   |_| |_|\___/|_| |_| |_|\___||___/\__\___|\__,_|\__,_|
   
   * Homestead 8.4.0 released!
   * Settler v7.2.1 released! Make sure you update
   
   0 packages can be updated.
   0 updates are security updates.
   vagrant@homestead:~$
   ```

9. Laravelプロジェクトの作成

   ```shell
   $ vagrant@homestead:~$ cd ~/code
   $ vagrant@homestead:~/code$ laravel new
   ```

10. Homestead.ymlのIPに設定したアドレスにブラウザでアクセスする

11. Laravelと表示されれば成功

12. ディレクトリ構成見てみる

    ```shell
    #Homestead.ymlのfoldersで設定したローカルディレクトリ
    $ cd ~/code
    $ ls -la
    drwxr-xr-x   7 tsubokoh  staff   238B  6  9 17:22 app
    -rw-r--r--   1 tsubokoh  staff   1.6K  6  9 17:22 artisan
    drwxr-xr-x   4 tsubokoh  staff   136B  6  9 17:22 bootstrap
    -rw-r--r--   1 tsubokoh  staff   1.5K  6  9 17:22 composer.json
    -rw-r--r--   1 tsubokoh  staff   163K  6  9 17:22 composer.lock
    drwxr-xr-x  15 tsubokoh  staff   510B  6  9 17:22 config
    drwxr-xr-x   6 tsubokoh  staff   204B  6  9 17:22 database
    -rw-r--r--   1 tsubokoh  staff   1.1K  6  9 17:22 package.json
    -rw-r--r--   1 tsubokoh  staff   1.1K  6  9 17:22 phpunit.xml
    drwxr-xr-x   8 tsubokoh  staff   272B  6  9 17:22 public
    drwxr-xr-x   6 tsubokoh  staff   204B  6  9 17:22 resources
    drwxr-xr-x   6 tsubokoh  staff   204B  6  9 17:40 routes
    -rw-r--r--   1 tsubokoh  staff   563B  6  9 17:22 server.php
    drwxr-xr-x   5 tsubokoh  staff   170B  6  9 17:22 storage
    drwxr-xr-x   6 tsubokoh  staff   204B  6  9 17:22 tests
    drwxr-xr-x  41 tsubokoh  staff   1.4K  6  9 17:25 vendor
    -rw-r--r--   1 tsubokoh  staff   538B  6  9 17:22 webpack.mix.js
    -rw-r--r--   1 tsubokoh  staff   200K  6  9 17:22 yarn.lock
    ```

13. ルーティング見てみる

    ```
    $ cat routes/web.php
    ```

    ```php
    <?php
    
    /*
    |--------------------------------------------------------------------------
    | Web Routes
    |--------------------------------------------------------------------------
    |
    | Here is where you can register web routes for your application. These
    | routes are loaded by the RouteServiceProvider within a group which
    | contains the "web" middleware group. Now create something great!
    |
    */
    
    Route::get('/', function () { #ルートパスにgetリクエストされたとき
        return view('welcome'); #welcomeテンプレートを返す
    });
    ```

14. テンプレートを編集する

    ```shell
    #BladeはLaravelに標準搭載されているテンプレートエンジン
    #独自の記法がある
    $vi resources/views/welcome.blade.php
    ```

    ```html
            --中略--
                    <div class="title m-b-md">
                        {{-- Laravel コメントアウト --}}
    
                        @php
                         #phpの実行
                      	 #viewでロジックを持つことは非推奨
                         $title = 'Hello world!';
                        @endphp
    
                        {{-- echoはいらない --}}
                        {{ $title }}
                    </div>
            --中略--
    ```

15. Homestead.ymlのIPに設定したアドレスにブラウザでアクセスする

16. Hello world!と表示されれば成功

以上