ホームページ >バックエンド開発 >PHPチュートリアル >Laravel のベストプラクティス、ヒント、コツ 5
2025 年が近づく中、Laravel は引き続き Web 開発の第一の選択肢であり、開発者に強力で効率的なアプリケーションを作成するツールを提供します。この記事では、Laravel 9、10、または 11 のいずれを使用しているかに関係なく、コードの品質を向上させ、ワークフローを合理化できる主要なベスト プラクティス、ヒント、コツについて概説します。これらの洞察は、Laravel を最大限に活用し、開発スキルを向上させるのに役立ちます。初心者か経験豊富な開発者かに関係なく。
Laravel を最新の状態に保つことには、いくつかの重要な利点があります。
Composer アップデートを定期的に実行することは、パッケージを最新の状態に保つために非常に重要です。この簡単な方法は、パッケージが最新の機能とセキュリティ パッチで最新の状態であることを確認するための最良の方法の 1 つです。
更新をためらっている場合は、コードが十分にテストされていないことを示している可能性があります。テスト手法を採用することで、メジャーアップデートによってコードが破損することがなくなり、Laravel の改善点を最大限に活用できるようになります。
手動で更新したくない場合は、PHP 8.4 ベータ版がすでに統合されている環境管理ツールである ServBay の使用を検討してください。これにより、Laravel やさまざまなパッケージを簡単に最新の状態に保つことができます。
自動テストは広範ですが、過小評価されがちな分野です。ただし、これはプロジェクトの信頼性を確保するための最も重要なベスト プラクティスの 1 つです。
堅牢なテスト スイートを維持する主な利点は次のとおりです。
コードを変更するときは、phpArtisan テストを実行して壊れた機能を特定し、問題を修正してプロセスを繰り返すだけです!
自動テストによりプロジェクトの安定性が大幅に向上し、キャリアが大幅に向上します。
簡単に始められるように、Laracasts では無料のテスト コースを提供しています。 PHPUnit (業界標準) と Pest (PHP テストを簡素化する最新のテスト フレームワーク) について学ぶことができます。 「Pest From Scratch」コースは非常にお勧めです。
Laravel のようなフレームワークを使用する理由を考えたことはありますか?
フレームワークは、開発に対する構造化されたアプローチを提供し、すべてのチームメンバーが一貫性を保ち、共通の目標に向かって作業できるようにします。これらには、豊富で複雑な、実証済みの機能が備わっており、詳細に囚われることなく、プロジェクトの独自の側面に集中できます。
それでは、Laravel のデフォルトのプロジェクト構造に従うことがベストプラクティスとみなされるのでしょうか?絶対に!その理由は次のとおりです:
Laravel のカスタム フォーム リクエストは、検証を処理するための強力なツールであり、いくつかの重要な利点を提供します。
カスタム フォーム リクエストの作成は簡単です。次の 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 つです:
更新後のポリシーを使用する実際のシナリオを見てみましょう:
php artisan make:request StorePostRequest
移行は、純粋な PHP コードを使用してデータベース スキーマを定義する方法です。これらは、データベース構造をプログラムで管理する方法を提供する、phpMyAdmin の代替コードと考えることができます。このアプローチは、全員がローカル マシン上で同じ開発環境を複製し、Git の変更履歴を明確に維持できるため、チームにとって特に有益です。
移行により、他の環境からデータベースをエクスポートする必要がなく、新しい環境 (ステージングや実稼働など) へのプロジェクトのデプロイも容易になります。ただし、よくある落とし穴は、一部の開発者が新しい移行を作成する代わりにデータベースに直接変更を加えることです。この方法では、Slack 経由でデータベース ダンプをリクエストする必要がある他のチーム メンバーに迷惑がかかる可能性があります。プロジェクトを向上させ、一貫性を維持するには、移行を効果的に利用することが重要です。
匿名移行は、クラス名の競合を回避する効果的な解決策です。この機能を使用すると、エラーが発生することなく「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() メソッドは、データベースに加えられた変更を元に戻すために、php 職人の移行:ロールバック コマンドによって使用されます。一部の開発者がそれを実装することを選択し、他の開発者が実装しない場合、それを使用する場合は、down() メソッドが正しく定義されていることを確認することが重要です。
基本的に、down() メソッドは、up() メソッドで実行された操作を逆にする必要があります。基本的な例を次に示します:
php artisan make:request StorePostRequest
down() メソッドを使用したくない場合は、単純に削除できます。
Laravel のテーブル命名規則に従うことは、チームに大きな利益をもたらすシンプルなベストプラクティスです。 Artisan コマンドを使用すると、フレームワークはこれらの規則 (phpArtisan make:model Post --migration --factory.
など) を自動的に処理します。何らかの理由でこれらのコマンドを使用できない場合は、次のクイックガイドを参照してください。
Post という名前のモデルの場合、対応するテーブルには複数形を使用して post という名前を付ける必要があります。例:
投稿とコメントを接続するピボット テーブルの場合 (例: comment_post):
詳細については、公式ドキュメントを参照してください。
カバーすべきベスト プラクティスは他にもあります。 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 モードは、貴重なデバッグ ツールです。さまざまなシナリオで例外をスローすることで、開発者が開発中の潜在的な問題を特定するのに役立ちます。
厳密モードを有効にするには、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()が活躍し、長時間実行されるプロセスを延期できるようになります:
use App\Http\Controllers\ShowPostController; // Single action controller route Route::get('/posts/{post}', ShowPostController::class);
また、匿名関数を使用してタスクをスケジュールしたい場合は、次のように実行できます。
php artisan make:middleware CheckTokens
dispatchAfterResponse() を使用すると、バックグラウンド タスクがユーザー エクスペリエンスに影響を与えずに、ユーザーがサーバーからより高速な応答を受け取ることができます。
計算負荷の高いタスク (ユーザーがアップロードした画像の処理など) を処理する場合、これらの操作をすぐに実行するとサーバーに過負荷がかかり、ユーザー エクスペリエンスが低下する可能性があります。対処方法は次のとおりです:
Laravel のキュー システムを使用すると、これらの長時間実行タスクを延期して、順序付けまたは制御された並列方法で実行できるため、サーバーの応答性が維持され、ユーザーが待つ必要がなくなります。
タスク管理を容易にするために、キュータスクを効率的に監視および制御するためのユーザーインターフェイスを提供する Laravel Horizon の使用を検討してください。こうすることで、スムーズなパフォーマンスを維持しながら、バックグラウンドで複雑なプロセスを処理できます。
ローカル環境でテストする場合は、テストを実行するたびに新しいデータベースを使用することをお勧めします。 Laravel は、各テストの前にデータベースを遅延更新することで、これを処理する効率的な方法を提供します。これは、テスト クラスで RefreshDatabase トレイトを使用して実現できます。これにより、テストを実行するたびにデータベースがクリーンな状態になり、残りのデータによって引き起こされる潜在的な問題が排除されます。
テスト クラスで RefreshDatabase トレイトを使用します。
php artisan make:request StorePostRequest
機密情報を管理する場合、セキュリティを確保することが重要です。以下にいくつかのベストプラクティスを示します:
機密情報 (API キーやデータベース認証情報など) は、コードベースではなく .env ファイルに保存します。
暗号化が必要なデータについては、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 サイトの他の関連記事を参照してください。