ブログ

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はおよそ年に一度メジャーバージョンを公開しており、それぞれにアップグレードガイドが用意されています。小さなアップグレードを定期的に行うほうが、複数のバージョンを一度に飛び越えるよりずっと簡単です。