ホームページ > バックエンド開発 > PHPチュートリアル > Laravel のベストプラクティス、ヒント、コツ 5

Laravel のベストプラクティス、ヒント、コツ 5

Linda Hamilton
リリース: 2024-10-30 00:17:29
オリジナル
709 人が閲覧しました

Laravel Best Practices, Tips, and Tricks for 5

2025 年が近づく中、Laravel は引き続き Web 開発の第一の選択肢であり、開発者に強力で効率的なアプリケーションを作成するツールを提供します。この記事では、Laravel 9、10、または 11 のいずれを使用しているかに関係なく、コードの品質を向上させ、ワークフローを合理化できる主要なベスト プラクティス、ヒント、コツについて概説します。これらの洞察は、Laravel を最大限に活用し、開発スキルを向上させるのに役立ちます。初心者か経験豊富な開発者かに関係なく。

Laravel とパッケージを常に最新の状態に保つ

Laravel を最新の状態に保つことには、いくつかの重要な利点があります。

  • セキュリティの向上: 通常のリリースには、アプリケーションを保護する重要なセキュリティ修正が含まれています。
  • パフォーマンスの向上: 更新によりパフォーマンスが向上することが多く、ロード時間が短縮され、コードの効率が向上します。
  • 新機能と機能: 開発エクスペリエンスを強化する新機能を活用するには、常に最新の状態を維持してください。
  • 互換性: 最新の公式パッケージおよびコミュニティ パッケージとの互換性を向上させます。

Composer アップデートを定期的に実行することは、パッケージを最新の状態に保つために非常に重要です。この簡単な方法は、パッケージが最新の機能とセキュリティ パッチで最新の状態であることを確認するための最良の方法の 1 つです。

更新をためらっている場合は、コードが十分にテストされていないことを示している可能性があります。テスト手法を採用することで、メジャーアップデートによってコードが破損することがなくなり、Laravel の改善点を最大限に活用できるようになります。

手動で更新したくない場合は、PHP 8.4 ベータ版がすでに統合されている環境管理ツールである ServBay の使用を検討してください。これにより、Laravel やさまざまなパッケージを簡単に最新の状態に保つことができます。

強力なテストを維持して重大なエラーを防止

自動テストは広範ですが、過小評価されがちな分野です。ただし、これはプロジェクトの信頼性を確保するための最も重要なベスト プラクティスの 1 つです。

堅牢なテスト スイートを維持する主な利点は次のとおりです。

  • バグの減少: 定期的なテストは問題を早期に発見するのに役立ち、より安定したコードベースにつながります。
  • 顧客の満足度の向上: 信頼性の高いソフトウェアは、製品を信頼できる満足したユーザーをもたらします。
  • 満足している雇用主: よくテストされたプロジェクトは、プロフェッショナリズムと品質への取り組みを反映しています。
  • 自信のある開発者: 包括的なテスト スイートを使用すると、新しいエラーが発生することを心配することなく変更を加えることができます。休憩後にプロジェクトに戻ることはそれほど難しくなくなります。

コードを変更するときは、phpArtisan テストを実行して壊れた機能を特定し、問題を修正してプロセスを繰り返すだけです!

自動テストによりプロジェクトの安定性が大幅に向上し、キャリアが大幅に向上します。

簡単に始められるように、Laracasts では無料のテスト コースを提供しています。 PHPUnit (業界標準) と Pest (PHP テストを簡素化する最新のテスト フレームワーク) について学ぶことができます。 「Pest From Scratch」コースは非常にお勧めです。

デフォルトのディレクトリ構成に従う

Laravel のようなフレームワークを使用する理由を考えたことはありますか?

フレームワークは、開発に対する構造化されたアプローチを提供し、すべてのチームメンバーが一貫性を保ち、共通の目標に向かって作業できるようにします。これらには、豊富で複雑な、実証済みの機能が備わっており、詳細に囚われることなく、プロジェクトの独自の側面に集中できます。

それでは、Laravel のデフォルトのプロジェクト構造に従うことがベストプラクティスとみなされるのでしょうか?絶対に!その理由は次のとおりです:

  • 利便性: Laravel の規約と構造は十分に文書化されています。数週間または数か月後にプロジェクトに戻ると、デフォルト設定の明瞭さと使いやすさに気づくでしょう。
  • チームコラボレーション: チームメンバーと作業するとき、全員が Laravel の規約を理解しているため、コラボレーションが容易になります。この共有された知識を活用することで、毎回車輪を再発明するのではなく、プロジェクトを前進させることができます。

複雑な検証にカスタム フォーム リクエストを使用する

Laravel のカスタム フォーム リクエストは、検証を処理するための強力なツールであり、いくつかの重要な利点を提供します。

  • 検証ロジックの再利用: 複数のコントローラー間で検証ルールを簡単に再利用し、コードを DRY (繰り返さない) に保ちます。
  • コントローラーの膨張を削減: 検証コードを専用のフォーム要求クラスにオフロードし、コントローラーをクリーンな状態に保ち、ビジネス ロジックに集中させます。

カスタムフォームリクエストの作成

カスタム フォーム リクエストの作成は簡単です。次の Artisan コマンドを実行するだけです:

php artisan make:request StorePostRequest
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

その後、コントローラーで、単純にリクエストをタイプヒントすることができます。

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

カスタムフォームリクエストの強化

カスタム フォーム リクエストには、検証以外の追加ロジックを含めることもできます。たとえば、prepareForValidation メソッドをオーバーライドすることで、入力データがコントローラーに到達する前に正規化できます。

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例では、メソッドは検証プロセスが発生する前にタイトルからスラッグを自動的に生成します。

認可管理

カスタム フォーム リクエストは承認ロジックも処理できます。ポリシーの使用が面倒な場合は、簡単な承認チェックをフォームリクエストに直接含めることができます。

シングルアクションコントローラーでコードベースを簡素化

ベスト プラクティスに従っている場合でも、コントローラーが扱いにくくなる場合があります。優れた解決策は、Laravel でシングルアクションコントローラーを使用することです。これらのコントローラーは、標準のリソース コントローラーのような複数のアクションではなく、単一のアクションを処理するように設計されています。

シングルアクションコントローラーの作成

シングル アクション コントローラーを作成するには、次の Artisan コマンドを使用します。

php artisan make:request StorePostRequest
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

このコマンドは、__invoke という名前のアクションを 1 つだけ持つコントローラーを作成します。 __invoke マジック メソッドの詳細については、Laravel ドキュメントを参照してください。

ルートの定義

シングルアクションコントローラーを使用すると、ルート定義を簡素化できます。ルートでこれを使用する方法は次のとおりです:

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

主観的なベストプラクティス

シングル アクション コントローラーの使用は主観的なベスト プラクティスです。このアプローチがプロジェクトの構造と読みやすさの好みに適合するかどうかを判断するのは、あなたとあなたのチーム次第です。

ミドルウェアを使用してコードの重複を回避する

Laravel では、ミドルウェアは受信リクエストをフィルターしたり変更したりできる強力なツールです。ミドルウェアを活用することで、コードの重複を回避し、コントローラーをクリーンで管理しやすい状態に保つことができます。一般的なミドルウェアの使用例をいくつか示します:

  • 必要な権限の確認: ユーザーが特定のルートにアクセスするために必要な権限を持っていることを確認します。
  • ユーザー ロケールの設定: ユーザーの優先言語を確認し、それに応じてアプリケーションのロケールを調整します。

Laravel は、認証やレート制限などの一般的なタスク用のさまざまな組み込みミドルウェアを提供します。

カスタムミドルウェアの作成

カスタムミドルウェアを作成するには、次のアーティザンコマンドを使用します:

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

ミドルウェアでは、リクエストを処理するロジックを定義できます。ユーザーが十分なトークンを持っているかどうかを確認するミドルウェアの例を次に示します:

php artisan make:controller ShowPostController --invokable
ログイン後にコピー
ログイン後にコピー

ミドルウェアをルートにアタッチする

ミドルウェアを定義したら、それを任意の数のルートに接続できます。このモジュール式のアプローチは、コードをクリーンに保ち、コントローラーでの重複を減らすのに役立ちます。

use App\Http\Controllers\ShowPostController;

// Single action controller route
Route::get('/posts/{post}', ShowPostController::class);
ログイン後にコピー
ログイン後にコピー

認可にポリシーを使用する

Laravel での承認ポリシーの利用は、明確で保守可能なアプリケーションを構築するために重要です。ポリシーを使用する主な利点は次の 3 つです:

  • コントローラ間での共有認可ロジック: 認可ルールをポリシーに統合することで、一貫性が促進され、アプリケーション内の重複コードが排除されます。
  • コントローラーの複雑さの軽減: 認可ロジックをポリシーに移動することで、コントローラーは主要なタスクに集中できるようになり、コードがよりクリーンで理解しやすくなります。
  • 認可コードへの簡素化されたアクセス: ポリシーは app/Policies ディレクトリに配置されているため、開発者は必要に応じて認可ルールを簡単に検索して変更できます。

更新後のポリシーを使用する実際のシナリオを見てみましょう:

php artisan make:request StorePostRequest
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

移行が最新であることを確認する

移行は、純粋な PHP コードを使用してデータベース スキーマを定義する方法です。これらは、データベース構造をプログラムで管理する方法を提供する、phpMyAdmin の代替コードと考えることができます。このアプローチは、全員がローカル マシン上で同じ開発環境を複製し、Git の変更履歴を明確に維持できるため、チームにとって特に有益です。

移行により、他の環境からデータベースをエクスポートする必要がなく、新しい環境 (ステージングや実稼働など) へのプロジェクトのデプロイも容易になります。ただし、よくある落とし穴は、一部の開発者が新しい移行を作成する代わりにデータベースに直接変更を加えることです。この方法では、Slack 経由でデータベース ダンプをリクエストする必要がある他のチーム メンバーに迷惑がかかる可能性があります。プロジェクトを向上させ、一貫性を維持するには、移行を効果的に利用することが重要です。

匿名移行を使用して競合を防ぐ (Laravel 8 以降)

匿名移行は、クラス名の競合を回避する効果的な解決策です。この機能を使用すると、エラーが発生することなく「update_posts_table」という名前の複数の移行を作成できるため、開発プロセス中の手間が軽減されます。

Laravel 9 以降では、次のコマンドを実行すると、匿名移行が自動的に生成されます。

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これらの移行の構造は次のようになります:

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

興味深いことに、Laravel 8 では匿名移行を実装することもできます。これを行うには、クラス名を return new class に置き換え、最後にセミコロンを必ず含めるだけです。こうすることで、以前のバージョンでも匿名移行のメリットを享受できます。

ロールバック用の down() メソッドを正しく実装する

down() メソッドは、データベースに加えられた変更を元に戻すために、php 職人の移行:ロールバック コマンドによって使用されます。一部の開発者がそれを実装することを選択し、他の開発者が実装しない場合、それを使用する場合は、down() メソッドが正しく定義されていることを確認することが重要です。

基本的に、down() メソッドは、up() メソッドで実行された操作を逆にする必要があります。基本的な例を次に示します:

php artisan make:request StorePostRequest
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

down() メソッドを使用したくない場合は、単純に削除できます。

Eloquent のデータベース テーブルの命名規則に従ってください

Laravel のテーブル命名規則に従うことは、チームに大きな利益をもたらすシンプルなベストプラクティスです。 Artisan コマンドを使用すると、フレームワークはこれらの規則 (phpArtisan make:model Post --migration --factory.

など) を自動的に処理します。

何らかの理由でこれらのコマンドを使用できない場合は、次のクイックガイドを参照してください。

  • Post という名前のモデルの場合、対応するテーブルには複数形を使用して post という名前を付ける必要があります。例:

    • コメントモデル → コメントテーブル
    • 返信モデル → 返信テーブル
  • 投稿とコメントを接続するピボット テーブルの場合 (例: comment_post):

    • 両方の名前の単数形を使用します。
    • アルファベット順に並べてください。

詳細については、公式ドキュメントを参照してください。

Eager Loading を使用して N 1 問題を回避する

カバーすべきベスト プラクティスは他にもあります。 N1問題に遭遇したことはありますか?積極的にロードすることは、それらを防ぐ効果的な方法です。

たとえば、30 件の投稿とその作成者のリストを表示すると、遅延読み込みにより、Eloquent は 30 件の投稿に対して 1 つのクエリを実行し、その後各投稿者に対してさらに 30 のクエリを実行します (これは、$post を呼び出すたびに意味します) ->コード内で user を使用すると、ユーザー関係が取得されます)。

解決策は簡単です。with() メソッドを使用して、クエリの数を 31 から 2 に減らします。

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

N 1 の問題を防ぐために、リレーションシップが遅延ロードされるたびに例外をスローするようにアプリケーションを構成できます。この制限はローカル環境でのみ適用する必要があります。

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Eloquent の Strict モードを使用してパフォーマンスの問題やエラーを回避する

Eloquent の strict モードは、貴重なデバッグ ツールです。さまざまなシナリオで例外をスローすることで、開発者が開発中の潜在的な問題を特定するのに役立ちます。

  • 遅延読み込み関係: 遅延読み込みは、特に大規模なデータセットを扱う場合にパフォーマンスの問題を引き起こす可能性があります。この状況は、アクセスされたときにのみ関連モデルがデータベースからフェッチされる場合に発生します。厳密モードでは、リレーションシップが遅延ロードされると例外がスローされ、積極的なロードの使用が推奨されます。
  • 入力不可能な属性の割り当て: Eloquent モデルの $fillable プロパティは、一括割り当ての脆弱性を防ぎます。入力できない属性を割り当てようとすると例外がトリガーされるため、開発者は一括割り当てを処理する際に注意が必要です。
  • 存在しない属性へのアクセス: 存在しない属性、またはデータベースから取得されていない属性にアクセスしようとすると、予期しない動作やエラーが発生する可能性があります。このような場合、厳密モードは例外をスローし、開発者が問題を特定して解決できるようにします。

厳密モードを有効にするには、AppServiceProvider.php の boot() メソッドに次のコードを追加します。

php artisan make:request StorePostRequest
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

新しいメソッドを使用してアクセサーとミューテーターを定義する

Laravel 9 では、アクセサーとミューテーターを宣言する新しい方法が導入されました。今すぐ実装する方法は次のとおりです:

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この新しい構文を使用すると、より簡潔な方法でアクセサーとミューテーターを定義できます。計算負荷の高い値をキャッシュすることもできます:

public function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->title),
    ]);
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

対照的に、前のメソッドは次のようになります:

php artisan make:controller ShowPostController --invokable
ログイン後にコピー
ログイン後にコピー

新しい構文に切り替えると、コードが簡素化され、読みやすくなります。

dispatchAfterResponse() を使用して長時間実行タスクを処理する

時間のかかるタスク (お問い合わせフォームの送信後の電子メールの送信など) を処理する場合、サーバーがユーザーに応答するまでタスクを遅らせることで、ユーザー エクスペリエンスを向上させることができます。ここでdispatchAfterResponse()が活躍し、長時間実行されるプロセスを延期できるようになります:

use App\Http\Controllers\ShowPostController;

// Single action controller route
Route::get('/posts/{post}', ShowPostController::class);
ログイン後にコピー
ログイン後にコピー

また、匿名関数を使用してタスクをスケジュールしたい場合は、次のように実行できます。

php artisan make:middleware CheckTokens
ログイン後にコピー

dispatchAfterResponse() を使用すると、バックグラウンド タスクがユーザー エクスペリエンスに影響を与えずに、ユーザーがサーバーからより高速な応答を受け取ることができます。

キューを使用して長時間実行タスクを処理する

計算負荷の高いタスク (ユーザーがアップロードした画像の処理など) を処理する場合、これらの操作をすぐに実行するとサーバーに過負荷がかかり、ユーザー エクスペリエンスが低下する可能性があります。対処方法は次のとおりです:

  • サーバーの負荷: すべてのユーザーに対してリアルタイム処理タスクを送信すると、サーバーに負荷がかかる可能性があります。
  • ユーザー エクスペリエンス: ユーザーは読み込み画面を見つめながら待たされるため、イライラが生じます。

Laravel のキュー システムを使用すると、これらの長時間実行タスクを延期して、順序付けまたは制御された並列方法で実行できるため、サーバーの応答性が維持され、ユーザーが待つ必要がなくなります。

タスク管理を容易にするために、キュータスクを効率的に監視および制御するためのユーザーインターフェイスを提供する Laravel Horizo​​n の使用を検討してください。こうすることで、スムーズなパフォーマンスを維持しながら、バックグラウンドで複雑なプロセスを処理できます。

各テストの前にデータベースを遅延更新する

ローカル環境でテストする場合は、テストを実行するたびに新しいデータベースを使用することをお勧めします。 Laravel は、各テストの前にデータベースを遅延更新することで、これを処理する効率的な方法を提供します。これは、テスト クラスで RefreshDatabase トレイトを使用して実現できます。これにより、テストを実行するたびにデータベースがクリーンな状態になり、残りのデータによって引き起こされる潜在的な問題が排除されます。

RefreshDatabase の使用

テスト クラスで RefreshDatabase トレイトを使用します。

php artisan make:request StorePostRequest
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

メリット

  • 一貫性: テストを実行するたびにデータベースの状態が一貫していることを保証し、状態の変化によるテストの失敗を回避します。
  • 分離: 各テストは干渉することなく独立して実行され、テストの信頼性が向上します。

機密情報を安全に管理

機密情報を管理する場合、セキュリティを確保することが重要です。以下にいくつかのベストプラクティスを示します:

環境変数を使用する

機密情報 (API キーやデータベース認証情報など) は、コードベースではなく .env ファイルに保存します。

Laravel の暗号化機能を使用する

暗号化が必要なデータについては、Laravel の暗号化機能を利用してください。

use App\Http\Requests\StorePostRequest;

class PostController
{
    public function store(StorePostRequest $request)
    {
        $validated = $request->validated();
        Post::create($validated);
        // Other logic...
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

キーを定期的に更新する

アプリケーション キー (APP_KEY) を定期的に更新し、更新後にデータを再暗号化してください。

結論

これらのベストプラクティス、ヒント、コツに従うことで、Laravel アプリケーションの品質とセキュリティを大幅に向上させることができます。これらのメソッドは、より効率的なコードを作成するのに役立つだけでなく、ユーザーにより良いエクスペリエンスを提供します。これらのプラクティスを学び、適用し続けることは、開発においてより大きな成功を収めるのに役立ちます。

以上がLaravel のベストプラクティス、ヒント、コツ 5の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート