Laravel
LaravelによるWebアプリケーション開発。ルーティング、Eloquentモデル、認証、キュー、デプロイまで、実際のプロジェクトで使える実践的な例とともに解説します。
このトピックにはまだ記事がありません!
この記事はまだ執筆されていません。他のトピックをご覧いただくか、また遊びに来てくださいね!
Questions about this topic
Quick, clear answers to what readers ask most about this topic.
Laravelとは何ですか?
Laravelは、Webアプリケーションを開発するための無料でオープンソースのPHPフレームワークです。Laravelにはルーティング、データベース、ログイン、メール、キュー、テストのための既製の部品がそろっているため、開発者は同じようなコードを何度も書かずに済みます。このフレームワークはMVCパターンに沿っており、大きなコミュニティがあります。
Laravelは何に使われますか?
Laravelは、業務管理システム、顧客ポータル、ネットショップ、予約プラットフォーム、モバイルアプリ向けのAPIなどのWebアプリケーション開発に使われます。ユーザー、データベース、業務ルールが必要なプロジェクトなら、どれにも向いています。フレームワークが安定していて拡張しやすいため、多くの企業が大規模な社内システムをLaravelで運用しています。
Laravelは初心者に向いていますか?
コードが読みやすく公式ドキュメントもわかりやすいため、PHPの基本をすでに知っている初心者にはLaravelは向いています。大きなコミュニティ、多数のチュートリアル、ログイン画面を自動で用意してくれるスターターキットもあります。先に素のPHPを学んでおくと、フレームワークがずっと理解しやすくなります。
自分のパソコンにLaravelをインストールするにはどうすればよいですか?
Laravelは、まずPHPとComposerをインストールし、続けて composer create-project laravel/laravel の後にプロジェクト名を付けて実行することでインストールします。laravel new で呼び出すLaravelインストーラーも同じことができ、スターターキットも選べます。その後 php artisan serve を実行するとローカルサーバーが起動し、ブラウザでアプリを開けます。
LaravelにはどのPHPバージョンが必要ですか?
Laravelには最近のPHP 8系が必要で、Laravelの各リリースが対応するPHPの最低バージョンを明記しています。新しいLaravelのリリースでは、セキュリティサポートが終了した古いPHPバージョンへの対応が打ち切られます。使う予定のLaravelバージョンのアップグレードガイドを必ず確認しましょう。
Laravelのルーティングとは何ですか?
Laravelのルーティングとは、WebアドレスとGETやPOSTなどのHTTPメソッドを、それに応答するコードに結びつける仕組みです。ルートは、ページ用の routes/web.php やAPI用の routes/api.php などのファイルに書きます。ルートはクロージャーやコントローラーのメソッドを呼び出せ、ログイン確認などのミドルウェアを付けることもできます。
LaravelのEloquentとは何ですか?
EloquentはLaravelのORMで、データベースのテーブルをモデルと呼ばれるPHPクラスとして扱えるようにする部分です。各モデルが一つのテーブルに、各オブジェクトが一つの行に対応するため、SQLを書かずにデータを読み書きできます。Eloquentは、一対多や多対多といったリレーションも扱えます。
LaravelのEloquentリレーションはどのように機能しますか?
LaravelのEloquentリレーションは、hasMany、belongsTo、belongsToManyなど、二つのテーブルのつながりを表すモデルのメソッドです。一度定義すれば、JOINを書かずに $order->customer のように関連データを読み出せます。withメソッドによるEager Loadingを使えば関連する行をまとめて読み込み、遅い繰り返しのクエリを避けられます。
LaravelのN+1クエリ問題とは何ですか?
LaravelのN+1クエリ問題とは、コードがレコードの一覧を読み込んだ後、関連データを取得するためにレコードごとに追加のクエリを実行してしまう問題です。100件の注文を表示するページで101回のクエリが実行され、表示が遅くなることがあります。withメソッドによるEager Loadingで関連する行を一回のクエリで取得すれば、この問題は解決します。
Laravelのマイグレーションとは何ですか?
Laravelのマイグレーションとは、データベースのテーブルの作成や変更をコードで行うPHPファイルです。php artisan migrate を実行すると適用され、すべての開発者とすべてのサーバーで同じデータベース構造になります。マイグレーションはバージョン管理に含まれるため、テーブルの変更履歴がすべて残ります。
LaravelのBladeとは何ですか?
BladeはLaravelのテンプレートエンジンで、ループ、条件分岐、レイアウトのための簡単なタグを使ってHTMLページを書けます。Bladeは出力する値を標準でエスケープするため、ページをクロスサイトスクリプティングから守ります。テンプレートは素のPHPにコンパイルされてキャッシュされるので、Bladeはリクエストごとの負荷をほとんど増やしません。
Laravelの認証はどのように機能しますか?
Laravelの認証は、ユーザーが誰かを確認するガードと、データベースからユーザーを読み込むプロバイダーによって機能します。Laravel Breezeなどのスターターキットを使えば、ログイン、ユーザー登録、パスワード再設定の画面がすぐに用意できます。パスワードはbcryptやArgon2でハッシュ化されるため、平文で保存されることはありません。
Laravel SanctumとLaravel Passportの違いは何ですか?
Laravel Sanctumはシングルページアプリ、モバイルアプリ、基本的なAPI向けに簡単なトークンとCookieによるログインを提供し、Laravel PassportはOAuth2サーバーの完全な機能を提供します。Sanctumのほうが軽くて設定も簡単なため、ほとんどのプロジェクトではSanctumで十分です。Passportは、外部のアプリケーションがユーザーに代わってログインする必要がある場合に適しています。
Laravelのミドルウェアとは何ですか?
Laravelのミドルウェアとは、リクエストがコードに届く前、またはレスポンスが送られる前に、それを確認したり変更したりする層です。よく使われるミドルウェアは、ログイン確認、CSRF対策、リクエスト数の制限、言語設定などを担当します。ミドルウェアは、個別のルート、ルートのグループ、アプリケーション全体に付けられます。
Laravelのキューはどのように機能しますか?
Laravelのキューは、メール送信やレポート作成などの時間のかかる処理をWebリクエストから切り離し、バックグラウンドのジョブとして実行します。ジョブはRedisやデータベースなどのキュードライバーに送られ、php artisan queue:work で起動したワーカーが実行します。重い処理がバックグラウンドで進む間も、ユーザーにはすぐに応答が返ります。
Laravelアプリケーションではいつキューを使うべきですか?
メール、ファイル処理、決済のWebhookなど、一瞬以上かかる処理や外部サービスとやり取りする処理には、Laravelのキューを使うべきです。キューを使えばページを速く保て、失敗したジョブも自動で再試行されます。Laravel Horizonを使うと、Redisのキューを監視するダッシュボードが手に入ります。
Laravelでタスクを定期実行するにはどうすればよいですか?
Laravelでは、dailyやeveryFiveMinutesなどのメソッドでスケジューラーにタスクを定義し、サーバー上の一つのcron設定で php artisan schedule:run を毎分実行してタスクを定期実行します。どのタスクを実行する時刻かは、スケジューラーが判断します。こうすれば、多数のcron設定を個別に書かず、すべての定期処理をコードの中で管理できます。
Laravelでフォームのデータを検証するにはどうすればよいですか?
Laravelでは、リクエストのvalidateメソッド、またはルールをまとめたForm Requestクラスを使ってフォームのデータを検証します。required、email、max、uniqueなどのルールが、コードで使う前に各項目を確認します。検証に失敗すると、Laravelはエラーメッセージと入力済みの値を付けてユーザーを元の画面に戻します。
LaravelはよくあるWeb攻撃からどのように守ってくれますか?
Laravelは、フォームのCSRFトークン、Bladeでの出力のエスケープ、データベースクエリでのパラメーターバインディング、パスワードのハッシュ化によって、よくあるWeb攻撃から守ってくれます。これらの標準機能により、通常の使い方ではクロスサイトリクエストフォージェリ、クロスサイトスクリプティング、SQLインジェクションを防げます。それでも開発者は、入力の検証、権限の確認、フレームワークの更新を行う必要があります。
Laravelアプリケーションをサーバーに公開するにはどうすればよいですか?
Laravelアプリケーションは、コードをサーバーに取得し、開発用パッケージを除いて composer install を実行し、.envファイルを設定してマイグレーションを実行することで公開します。その後、設定、ルート、ビューをキャッシュし、Webサーバーの公開先をpublicフォルダに向けます。多くのチームは、どのリリースも同じ手順になるよう、これらの作業をGitから自動化しています。
Laravelアプリケーションにはどんなサーバーが必要ですか?
Laravelアプリケーションには、PHP、NginxやApacheなどのWebサーバー、MySQLやPostgreSQLなどのデータベース、Composerを備えたサーバーが必要です。キャッシュとキューのためにRedisを加えることが多く、プロセスマネージャーでキューのワーカーを動かし続けます。LinkysoftのホスティングブランドであるHostrenaは、Gitから直接デプロイできるLaravel向けのWebアプリホスティングを提供しています。
Laravelアプリケーションを速くするにはどうすればよいですか?
設定、ルート、ビューをキャッシュし、リレーションをEager Loadingで読み込み、検索に使うデータベースの列にインデックスを追加すれば、Laravelアプリケーションは速くなります。時間のかかる処理をキューに移し、重いクエリの結果をRedisにキャッシュすると、さらに効果があります。サーバーでPHPのOPcacheを有効にするだけでも、少ない手間で大きな改善が得られます。
Laravelアプリケーションをテストするにはどうすればよいですか?
Laravelアプリケーションは、新しいプロジェクトに最初から設定されているPHPUnitまたはPestでテストします。フィーチャーテストはルートに擬似的なリクエストを送ってレスポンスとデータベースを確認し、ユニットテストは個々のクラスを確認します。php artisan test を実行すると、すべてのテストがまとめて実行されます。
Laravelは多くのユーザーを抱える大規模なアプリケーションに対応できますか?
キャッシュ、キュー、データベースのインデックスを備えた良いサーバーで動かし、ロードバランサーの後ろに複数のアプリサーバーを置けば、Laravelは多くのユーザーを抱える大規模なアプリケーションに対応できます。限界の原因がフレームワークそのものであることはまれで、たいていは遅いクエリやキャッシュの不足です。こうした理由から、LinkysoftはPHP、Laravel、MySQL、Redisで独自のWebアプリケーションを開発しています。
Laravelのバージョンはどれくらいの頻度でアップグレードすべきですか?
少なくとも、現在のバージョンのセキュリティ修正が終了する前には、Laravelのバージョンをアップグレードすべきです。Laravelはおよそ年に一度メジャーバージョンを公開しており、それぞれにアップグレードガイドが用意されています。小さなアップグレードを定期的に行うほうが、複数のバージョンを一度に飛び越えるよりずっと簡単です。