Laravel - 設定

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動

概要

主要な設定ファイルはconfigディレクトリに格納されており、中心となるのは.envファイルである。
.envファイルには、環境固有の設定 (データベース接続情報やAPIキー等) を記述する。

設定の基本的な構造として、configディレクトリ内の各ファイルは特定の機能や要素に対応している。

  • app.php
    アプリケーションの基本設定を管理する。
    タイムゾーン、ロケール、プロバイダの設定等が含まれる。
  • database.php
    データベース関連の設定を行う。
    接続情報やマイグレーション設定等を管理できる。
    特に、実際の接続情報は.envファイルから読み込まれる。
  • cache.php
    キャッシュの設定を管理する。
    Redisやmemcached等、複数のキャッシュドライバを切り替えることが可能である。
  • session.php
    セッション管理を行う。
    ドライバの選択やセッションのライフタイム等を設定する。


設定値へのアクセス方法としては、configヘルパー関数を使用する。

 // タイムゾーンを取得する場合
 
 $value = config('app.timezone');


環境別の設定管理について、重要な点がある。
本番環境と開発環境で異なる設定を使用する場合、.envファイルを環境ごとに用意することで柔軟に対応することができる。
例えば、セキュリティの観点から、機密情報 (APIキーやデータベースパスワード等) は必ず.envファイルで管理して、バージョン管理システムにコミットしないようにすることが推奨される。

設定のキャッシュ機能も活用すべき重要な機能である。
本番環境においては、以下に示すコマンドで設定をキャッシュすることにより、パフォーマンスを向上させることができる。

php artisan config:cache



ディレクトリ構造

詳細は、Laravel - Laravelの構造のページを参照すること。

  • app
    アプリケーションのコアコードを配置する。
    • Http/Controllers
      コントローラクラス
    • Models
      Eloquentモデル
    • Providers
      サービスプロバイダ
  • config
    設定ファイルを格納する。
    • app.php
      アプリケーションの基本設定
    • database.php
      データベース接続設定
    • auth.php
      認証設定
  • database
    • migrations
      データベースマイグレーションファイル
    • seeders
      データベースシーダ
    • factories
      モデルファクトリ
  • routes
    • web.php
      Web用ルート定義
    • api.php
      API用ルート定義
  • resources
    • views
      Bladeテンプレート
    • css
      CSSファイル
    • js
      JavaScriptファイル
  • public
    公開ディレクトリ
    • index.php
      エントリーポイント
    • アセットファイル
      画像、CSS、JS等
  • storage
    • app
      アプリケーションが生成するファイル
    • logs
      ログファイル
    • framework
      フレームワークが生成する一時ファイル



.env

.envファイルの配置

Laravelのプロジェクトディレクトリ直下にenvディレクトリを作成する。

cd <Laravelのプロジェクトディレクトリ>
mkdir env


次に、以下に示すような本番向け、開発向け等に名前を分けてディレクトリを作成する。

cd env
mkdir dev     \  # 開発向け
      staging \  # 評価・試験向け
      prod       # 本番向け


この時、プロジェクトディレクトリ直下に存在する.envファイルを、各ディレクトリにコピーする。
また、プロジェクトディレクトリ直下にある既存の.envファイルは削除すること。

.envファイルの切り替え

.envファイルの読み込みは、Laravelのプロジェクトディレクトリ直下にあるbootstrap/app.phpファイルで指定する。

サーバ情報からホスト名を取得して切り替える。

 // bootstrap/app.phpファイル
 
 // 追記
 switch ($_SERVER['HTTP_HOST'] ?? 'localhost') {
    case 'localhost':              // 開発向け
       $app->loadEnvironmentFrom('env/dev');
       break;
    case 'staging.maydomain.com':  // 評価・試験向け
       $app->loadEnvironmentFrom('env/staging');
       break;
    case 'prod.maydomain.com':     // 本番向け
       $app->loadEnvironmentFrom('env/prod');
       break;
 }


キャッシュの更新

キャッシュを更新 (configのキャッシュ再生成) して、各環境で正常に画面が表示されることを確認する。

php artisan config:cache


.envファイルの設定

APP_NAME=<アプリケーション名>
APP_ENV=local
APP_KEY=<自動生成される>
APP_DEBUG=<true または false  開発向けはdebugを指定する>
APP_URL=<WebサイトのURL  例: http://localhost>

DB_CONNECTION=<データベース  例: mysql>
DB_HOST=<データベースのホスト名  127.0.0.1>
DB_PORT=<データベースに接続するポート番号  例: 3306>
DB_DATABASE=<データベース名>
DB_USERNAME=<データベースのユーザ名>
DB_PASSWORD=<データベースのパスワード>



アプリケーションキーの生成

Laravelアプリケーションの暗号化キーを生成する。

php artisan key:generate


.envファイル内のAPP_KEYの値を設定する。
これは、32文字のランダムな文字列が生成される。

アプリケーションキーは以下に示す用途で使用される。

  • セッションデータの暗号化
  • クッキーデータの暗号化
  • その他の機密データの暗号化


※重要性

  • アプリケーションのセキュリティに不可欠である。
  • アプリケーションを初めて設定する際に必ず実行する必要がある。
  • キーが設定されていない場合、アプリケーションは安全に動作しない。



データベースのマイグレーション

データベースの構造を作成・更新する。

php artisan migrate


database/migrationsディレクトリ内のマイグレーションファイルを実行する。
テーブルの作成、修正、削除等のデータベース構造の変更を行う。

また、マイグレーションの実行履歴をデータベースのmigrationsテーブルで管理する。

特徴

  • データベース構造をバージョン管理できる。
  • チーム開発時にデータベース構造を共有できる。
  • ロールバック可能
    php artisan migrate:rollback
  • 開発環境と本番環境で同じ構造を保証できる。



ストレージディレクトリのシンボリックリンク作成

パブリックからアクセス可能なストレージへのシンボリックリンクを作成する。

php artisan storage:link


public/storageからstorage/app/publicへのシンボリックリンクを作成する。
アップロードされたファイルへのパブリックアクセスを可能にする。

使用例と重要性

  • ユーザーがアップロードした画像を表示する。
  • パブリックにアクセス可能なファイルを管理する。
  • セキュアなストレージ構造を維持しながら、必要なファイルへのアクセスを提供する。


実行するタイミング

  • アプリケーションの初期セットアップ時
  • ファイルアップロード機能を実装する際
  • 本番環境へのデプロイ時



アセットコンパイル

Laravel 9 / 10 (Viteの使用)

  • Viteを使用して、より高速なビルドを行うことが可能である。
  • HMR (Hot Module Replacement) に対応している。
  • vite.config.jsファイルで設定する。
  • ブレードテンプレートでの読み込み方が変更できる。


また、Laravel 9 / 10でもLaravel Mixを使用することは可能である。

# package.jsonの依存関係インストール
npm install

# 開発サーバ起動
npm run dev

# 本番環境向けビルド
npm run build


 /* 設定ファイル: vite.config.js の例 */
 
 import { defineConfig } from 'vite';
 import laravel from 'laravel-vite-plugin';
 
 export default defineConfig({
    plugins: [
       laravel({
          input: ['resources/css/app.css', 'resources/js/app.js'],
          refresh: true,
       }),
    ],
 });


Laravel 8 (Laravel Mixの使用)

  • Laravel Mix (Webpackのラッパ) を使用する。
  • webpack.mix.jsファイルで設定する。
  • npm run watchコマンドでファイル変更監視が可能である。


# package.jsonの依存関係インストール
npm install

# 開発環境向けコンパイル
npm run dev

# 本番環境向けコンパイル (ミニファイ化)
npm run prod

# ファイル変更の監視
npm run watch


 /* 設定ファイル : webpack.mix.js の例 */
 
 const mix = require('laravel-mix');
 
 mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   .version();  // キャッシュバスティング


ブレードテンプレートでの読み込み方の違い

  • Laravel 9 / 10 (Viteの使用)
 <!-- CSS & JavaScript -->
 @vite(['resources/css/app.css', 'resources/js/app.js'])
 
 <!-- または個別に -->
 @vite('resources/css/app.css')
 @vite('resources/js/app.js')


  • Laravel 8 (Laravel Mixの使用)
 <!-- CSS -->
 <link href="{{ mix('css/app.css') }}" rel="stylesheet">
 
 <!-- JavaScript -->
 <script src="{{ mix('js/app.js') }}"></script>


Viteへの移行は比較的簡単で、公式ドキュメントにガイドがある。
Laravel 9 / 10では、開発時のビルド速度が大幅に改善されており、Laravel 10では、Viteの設定がより柔軟になっている。