Laravel 7.xでアプリケーション開発を始める時の手順まとめ


``` motivation
掲題時に最初にやることがいつも大体決まっている気がするので、個人的メモがてらまとめておく。
```





## プロジェクトの作成
* laravelコマンドを使ってアプリケーションを作成する。
  * 認証機能なしの場合

    ``` console
    laravel new your-laravel-project-name
    ```

  * 認証機能ありの場合
  
    ``` console
    laravel new your-laravel-project-name --auth
    ```

## Git管理
* Git管理に追加する。

  ``` console
  cd your/laravel/project/path

  git init
  git add .
  git commit -m "Initial Commit."
  git remote add origin your-git-repository-url
  git push -u origin master
  ```





## .env関連
### 環境別の.env.xxxファイルを配置。
* 各環境別にファイルを配置する。

  ``` console
  cd your/laravel/project/path

  cp .env .env.development
  cp .env .env.staging
  cp .env .env.production
  ```

* この辺の値を変更。
  * APP_NAME
  * APP_ENV
  * APP_DEBUG
  * APP_URL

### .env.exampleを除外。
* .envと.env.exampleは不要。

  ``` console
  cd your/laravel/project/path

  rm -rf .env
  rm -rf .env.example
  ```





## 日本語化

### 言語を日本語に変更。

* config/app.php

  ``` config/app.php
  -    'timezone' => 'UTC',
  +    'timezone' => 'Asia/Tokyo',

  -    'locale' => 'en',
  +    'locale' => 'ja',

  -    'fallback_locale' => 'en',
  +    'fallback_locale' => 'ja',
  ```

* 言語ファイルの生成

  ``` console
  php -r "copy('https://readouble.com/laravel/7.x/ja/install-ja-lang-files.php', 'install-ja-lang.php');"
  php -f install-ja-lang.php
  php -r "unlink('install-ja-lang.php');"
  ```





## migrate実行（必要なタイミングで随時）
* サーバ側でmigrateを実行。

  ``` console
  cd your/laravel/project/path

  APP_ENV=development php artisan migrate

  または

  APP_ENV=development php artisan migrate:refesh
  ```





## barryvdh/laravel-debugbar
* デバッグを便利に。

### barryvdh/laravel-debugbarを導入。
* composerでモジュールを追加。

  ``` console
  cd your/laravel/project/path

  composer require barryvdh/laravel-debugbar
  ```

* artisanで設定ファイルを配置。

  ``` console
  cd your/laravel/project/path

  # /config/debugbar.php配置
  php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
  ```

### 各環境のdebugbar設定を変更。
* .env.xxxのAPP_DEBUGの値を適切に設定。





## predis/predis
* セッション管理をRedisに変更。

### predis/predisを導入。
* composerでモジュールを追加。

  ```
  cd your/laravel/project/path

  composer require predis/predis
  ```

### predis/predisの設定を追記。
* .env.xxxx

  ``` .env.xxxx
    DB_USERNAME=root
    DB_PASSWORD=

    BROADCAST_DRIVER=log
    CACHE_DRIVER=file
    QUEUE_CONNECTION=sync
  - SESSION_DRIVER=file
  + SESSION_DRIVER=redis
    SESSION_LIFETIME=120

  - REDIS_HOST=127.0.0.1
  - REDIS_PASSWORD=null
  + REDIS_HOST=(redis-host)
  + REDIS_PASSWORD=(redis-password)
    REDIS_PORT=6379

    MAIL_MAILER=smtp
    MAIL_HOST=smtp.mailtrap.io
    MAIL_PORT=2525
    MAIL_USERNAME=null
  ```





## モデルクラスの配置場所をApp\Models内へ変更。
* app配下にUser.phpができているが、どうにも気持ちが悪い。
* app/Models/Storage/(schema_name)を作ってその中に納めたい。

  ``` console
  cd your/laravel/project/path

  mkdir app/Models/Storage/(schema_name)
  mv app/User.php app/Models/Storage/(schema_name)/
  ```
* app/Models/Storage/(schema_name)User.phpのnamespaceを変更。
  * IDEの呼出元参照機能を使って、先に呼出元の記述修正を行っておくと楽。





## adldap2/adldap2-laravel
* ActiveDiretory/LDAP認証を行う場合のみ。

### adldap2/adldap2-laravelを導入。
* composerでモジュールを追加。

  ```
  cd your/laravel/project/path

  composer require adldap2/adldap2-laravel
  ```

* artisanで設定ファイルを配置。

  ``` console
  cd your/laravel/project/path

  # /config/ldap.php配置
  php artisan vendor:publish --provider="Adldap\Laravel\AdldapServiceProvider"

  # /config/ldap_auth.php配置
  php artisan vendor:publish --provider="Adldap\Laravel\AdldapAuthServiceProvider"
  ```

### adldap2/adldap2-laravelの設定を追記。
* 使用するActiveDiretory/LDAPの環境により異なる。

#### Active Directory認証でメールアドレスとパスワードを使用するケースでは、この辺を変更した。

* config/auth.php

  ``` config/auth.php
       | Supported: "database", "eloquent"
       |
       */

       'providers' => [
           'users' => [
  -            'driver' => 'eloquent',
  +            'driver' => 'ldap',
               'model' => App\User::class,
           ],

           // 'users' => [
           //     'driver' => 'database',
           //     'table' => 'users',
  ```

* config/ldap_auth.php

  ``` config/ldap_auth.php
               | to the sync attributes below. It is synchronized automatically.
               |
               | This option is only applicable to the DatabaseUserProvider.
               |
               */

  -            'guid_column' => 'objectguid',
  +            'guid_column' => 'email',

               /*
               |--------------------------------------------------------------------------
               | Username Column
               |--------------------------------------------------------------------------
               |

  ```

  ``` config/ldap_auth.php
           | Set this to `null` if you do not have a password column.
           |
           | This option is only applicable to the DatabaseUserProvider.
           |
           */

  -        'column' => 'password',
  +        'column' => null,

       ],

       /*
       |--------------------------------------------------------------------------
       | Login Fallback

  ```

* .env.xxxx

  ``` .env.xxxx
  PUSHER_APP_KEY=
  PUSHER_APP_SECRET=
  PUSHER_APP_CLUSTER=mt1

  MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
  MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

  + LDAP_HOSTS=xxxxx
  + LDAP_BASE_DN=xxxxx
  + LDAP_USER_ATTRIBUTE=xxxxx
  + LDAP_USERNAME=xxxxx
  + LDAP_PASSWORD=xxxxx
  ```

### 認証方式に合わせてusersテーブルの定義を変更。

* database/migrations/yyyy_mm_dd_hhmmss_create_users_table.php

  ```   database/migrations/yyyy_mm_dd_hhmmss_create_users_table.php
        public function up()
        {
            Schema::create('users', function (Blueprint $table) {
                $table->id();
                $table->string('name');
                $table->string('email')->unique();
  -             $table->timestamp('email_verified_at')->nullable();
  -             $table->string('password');
                $table->rememberToken();
                $table->timestamps();
            });
        }

        /**
  ```

### ルーティングを変更。
* routes/web.php

  ``` routes/web.php
   |
   */

  +// トップページ
  -Route::get('/', function () {
  -    return view('welcome');
  -});
  +Route::get('/', 'HomeController@index')->name('home');

  +// 認証機能
  -Auth::routes();
  +Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
  +Route::post('login', 'Auth\LoginController@login');
  +Route::post('logout', 'Auth\LoginController@logout')->name('logout');

  -Route::get('/home', 'HomeController@index')->name('home');

  ```

* 不要になったモジュールを削除

  ``` console
  rm -rf app/Http/Controllers/Auth/ConfirmPasswordController.php
  rm -rf app/Http/Controllers/Auth/ForgotPasswordController.php
  rm -rf app/Http/Controllers/Auth/RegisterController.php
  rm -rf app/Http/Controllers/Auth/ResetPasswordController.php
  rm -rf app/Http/Controllers/Auth/VerificationController.php
  rm -rf resources/views/auth/passwords
  rm -rf resources/views/auth/register.blade.php
  rm -rf resources/views/auth/verify.blade.php
  rm -rf resources/views/welcome.blade.php
  rm -rf database/migrations/*_create_password_resets_table.php
  ```




## artisanコマンド

* コントローラ作成
	
	``` console
	php artisan make:controller YourControllerName
	```

* モデル作成
	
	``` console
	php artisan make:model YourModelName
	```

* マイグレーション定義作成
	
	``` console
	php artisan make:migration your_migration_filenames --create=YourModelName
	```