徹底比較 - Laravel Breeze vs Laravel Jetstream

January 20, 2023
執筆者
Temitope Taiwo Oyedele
寄稿者
Twilio の寄稿者によって表明された意見は彼ら自身のものです
レビュー担当者

本記事は、当社のTwilio Voicesプログラムの一環として、外部の寄稿者によって執筆されたものです。本記事は更新を停止しています。最新情報ではない可能性があります。あらかじめご了承ください。

Laravelは、堅牢でモダンな認証レイヤーを迅速に構築できる、複数の認証オプションを提供しています。Laravelスターターキットには、Laravel BreezeとLaravel Jetstreamがセットになっています。

Laravel Breezeは、迅速な業務立ち上げや事業推進を実現する強力なツールです。一方、Jetstreamは、2要素認証、APIトークン管理、チーム管理機能を備えています。機能性を重視するなら、Jetstreamがおすすめです。

この記事では、両方のパッケージを使いこなすために必要な基礎知識を解説します。インストールの手順、相違点と共通点、状況に応じた使い分けなども併せて説明します。

さぁ、始めましょう!

前提条件

このチュートリアルを進めるには、以下の要件が必要です。

Laravel Breeze

Laravel Breezeは、Laravelの認証機能をすべて搭載しています。高度なビュー、コンポーネントシステム、ダッシュボードレイアウト、そして信頼性の高い認証フローを完備したアプリケーションの基盤をLaravel Bladeで構築します。

Laravel Breezeは、基本的なログイン、登録、ログアウト、パスワードを忘れた場合の再設定、パスワード設定、メール認証、パスワード確認機能を実装した、Laravel UIのアップグレード版です。特定のジョブスクリプトのフレームワークに依存せず、LaravelとBladeのみで構成されているため、ニーズに合わせて自由にカスタマイズできる点が強みです。フロントエンドをプログレードでスタイリングするため、Tailwind CSSフレームワークを採用しています。

Laravel Breezeは、認証設定・構成に必要なコントローラー、ルート、ビューをすべて生成します。

Laravel Breezeのインストール

新しいLaravelプロジェクトを作成した後、新規作成したディレクトリに移動し、以下のコマンドで移行を実行します。

composer create-project laravel/laravel project-name
cd project-name

その後、以下のコマンドでLaravel Breezeサポートを追加します。

composer require laravel/breeze --dev
php artisan breeze:install

コマンドが完了すると、ターミナルに次の出力が表示されます。

INFO  Breeze scaffolding installed successfully.

続いて、以下のコマンドでフロントエンドの依存関係をインストールし、フロントエンドのアセットをコンパイルします。

npm install && npm run dev

次に、Laravelをデータベースに接続するように設定してください(あるいは、Laravel Sailを使用して設定)。その後、新しいターミナルウィンドウまたはタブで、以下のコマンドを実行してアプリケーションを起動します。

./artisan serve

アプリケーションが起動した後、選択したブラウザーでアプリケーションを開きます。デフォルトでは、http://127.0.0.1:8000からアクセスできます。以下の例のように、上部にログインと登録のリンクが表示されたデフォルトのLaravelページが表示されます。

デフォルトのLaravelルート

ログインリンクをクリックすると、ログインフォームの例が表示されます。

Laravel Breezeログインフォーム

ここで、登録リンクをクリックすると、アカウント登録フォームの例が表示されます。

Laravel Breezeユーザー登録フォーム

次に、ファイル構造を見てみましょう。

Breezeのファイルとディレクトリ構造

ルート

ルートとは、アプリケーションのリクエストURLを作成する方法です。ルートは、routes/auth.phpファイルで定義されます。ファイルを確認すると、ログイン、登録、パスワードのリセット、メールアドレス認証、パスワードの確認、ログアウト用のルートを含む、認証ルートのリストが含まれていることがわかります。これは、次の行によってweb.phpファイルに直接含まれています。

require__DIR__.'/auth.php';

コントローラー

認証コントローラークラスは、app/Http/Controllers/Auth/に保存されます。フォルダには、次のコントローラーがあります。

  • AuthenticatedSessionController.php
  • ConfirmablePasswordController.php
  • EmailVerificationNotificationController.php
  • EmailVerificationPromptController.php
  • NewPasswordController.php
  • PasswordController.php
  • PasswordResetLinkController.php
  • RegisteredUserController.php
  • VerifyEmailController.php

ビュー

ビューは、コントローラーやドメインロジックをプレゼンテーションロジックから分離する役割を果たし、resources/views/auth/ディレクトリに配置されています。使用可能なブレードビューのリストは次の通りです。

  • confirm-password.blade.php
  • forgot-password.blade.php
  • login.blade.php
  • register.blade.php
  • reset-password.blade.php
  • verify-email.blade.php

どのような場合にBreezeを使用しますか?

Breezeは、以下のようなケースに最適です。

  • アプリがBladeテンプレート中心で構成されている、または人間のレビューや判断が必要なコードを使用せず、素早く簡単に認証機能を実装したい場合
  • アプリの認証機能を素早く修正したい場合
  • FortifyやJetstreamが提供する機能を必要としないアプリをゼロから構築する場合
  • LaravelのUIを最新版にしたい場合

次に、Jetstreamに移りましょう。

Laravel Jetstream

Jetstreamは、基本認証機能に加え、多彩な機能を搭載しており、Breezeを凌ぐ高度なシステムです。Jetstreamの機能:

  • SanctumによるAPI認証
  • メール認証
  • ログインおよび登録機能
  • セッション管理
  • チーム管理
  • 2要素認証

Jetstreamは、フレームワーク上に構築されたフレームワークとして設計されており、完全な機能を持つSassダッシュボードを容易に構築できる土台やライブラリ機能を提供します。Laravel Jetstreamは、オープンソースの無料ツールです。

Jetstreamは、Laravel Fortifyを使用しています。Fortifyは、アプリケーション認証用のルートとコントローラーを定義し、Jetstream UIからルートへリクエストを送信する構造です。

Jetstreamをインストールすると、config/fortify.php設定ファイルがアプリケーションにインストールされます。フロントエンドを完全に制御したい場合、APIを構築している場合、あるいはフロントエンドがまったく不要な場合に、このパッケージを使用します。Laravel Jetstreamは、オープンソースの無料ツールです。

インストール

Jetstreamは、ComposerまたはLaravelインストーラーのいずれかを使用してインストールできます。

LaravelインストーラーでJetstreamをインストールする

まず、以下のコマンドを実行して、Laravelインストーラーを使用してJetstreamでLaravelプロジェクトを新規作成します。

laravel new project-name --jet

[Which Jetstream stack do you prefer?](どのJetstreamスタックをご希望ですか?)というプロンプトが表示されたら、希望するもの、あるいは使い慣れているものを選択してください。

アプリケーションで[Will your application use teams? (yes/no) [no]:](Teamsを使用しますか?(はい/いいえ)[いいえ]:)というプロンプトが表示されたら、Enterキーを押します。次に、 

  • 新規作成したプロジェクトディレクトリに移動し、 
  • Laravelのデータベース接続を設定します(または、Laravel Sailを使用して設定することもできます)。
  • 以下のコマンドを実行して、移行を実行します。
cd project-name
php artisan migrate

Livewireスタックを利用するには、以下のコマンドを実行し、必要なBladeコンポーネントを公開します。

php artisan vendor:publish --tag=jetstream-views

次に、ターミナルで以下のコマンドを実行して、アプリケーションを起動します。

php artisan serve

これで、ブラウザーでhttp://localhost:8000を開くと、Laravel Breezeの前回のセクションと同様にデフォルトのルートがレンダリングされるのを確認できます。

JetstreamをComposerでインストールする

また、以下のコマンドを実行することで、Jetstreamが組み込まれたLaravelプロジェクトを新規作成することもできます。

composer create-project laravel/laravel project-name
cd project-name
composer require laravel/jetstream

LivewireまたはInertiaをインストールする

完了後、プロジェクトの初期構造を作成する、任意のスキャフォールディングツールをインストールします。Livewire with Bladeテンプレートを使用したい場合は、次のコマンドを実行してください。

php artisan jetstream:install livewire

InertiaをVueと組み合わせて使用したい方は、以下のコマンドを実行します。

php artisan jetstream:install inertia

また、--teamsフラグを追加して、Laravel Jetstream Teamsのサポートを有効にすることもできます。これにより、開発者はアプリケーションにチーム管理機能を迅速かつ簡単に追加できるようになります。多彩な機能に加えて、以下の操作も可能です。

  • チームの作成と管理
  • チームメンバーの招待と管理
  • チームメンバーへの役割と権限の割り当て

アプリケーション内で各チームを管理できる、カスタマイズ可能な組み込みソリューションであるため、複数のチームやユーザーグループのサポートが必要なアプリケーションでは非常に便利です。

コマンドが完了した後、以下のコマンドを使用してフロントエンドアセットをダウンロードしてコンパイルします。

npm install && npm run dev

最後に、データベースを接続し、移行を実行します。

php artisan migrate

新しいターミナルウィンドウまたはタブで、以下のコマンドを実行してアプリケーションを起動します。

php artisan serve

アプリケーションが起動した後、選択したブラウザーでアプリケーションを開きます。デフォルトでは、http://127.0.0.1:8000からアクセスできます。以下の例のように、上部にログインと登録のリンクが表示されたデフォルトのLaravelページが表示されます。

デフォルトのLaravelルート

ログインリンクをクリックすると、ログインフォームの例が表示されます。

Laravel Jetstreamログインフォーム

ここで、登録リンクをクリックすると、ユーザー登録フォームの例が表示されます。

Laravel Jetstreamユーザー登録フォーム

認証

新規インストールされたLaravel Jetstreamプロジェクトには、ログインフォーム、2要素認証、登録フォーム、パスワードのリセット、メール認証が付属しています。これらのテンプレートはすべて、resources/views/authにあります。

前にも書きましたが、JetstreamはLaravel Fortifyというパッケージを使用しています。Fortifyアクションは、app/actions/Fortify/にあり、Fortifyの構成はconfig/fortify.phpにあります。ここでは、さまざまな機能のオン/オフ切り替えなどの設定を変更できます。

プロフィール管理

Jetstreamにはプロフィール管理機能があり、ユーザー名、メールアドレス、プロフィール写真を自由にアップロード・更新できます。ユーザープロフィールビューは、resources/views/profile/update-profile-information-form.blade.phpに保存されます。Inertiaを使用している場合は、resources/js/Pages/Profile/UpdateProfileInformationForm.vueでビューを確認できます。

セキュリティ

アプリケーションのセキュリティ対策でお悩みですか? それなら、問題ありません。Laravel Jetstreamには、ユーザーによるパスワード更新やログアウトなどの機能が標準装備されており、単なる「安全」を超えた安心を届けます。

さらに特筆すべきなのは、ユーザーが簡単に有効・無効を切り替えられる、QRコードを用いた2要素認証(2FA)に対応している点です。また、ユーザーは他のブラウザーセッションからログアウトすることもできます。ユーザープロフィールブレードテンプレートは、resources/views/profile/にあります。Inertiaで作業している場合は、resources/js/Pages/Profile/にあります。

JetstreamのAPI

Laravel Jetstreamは Laravel Sanctumを使用してトークンベースのAPIを提供しています。これは、Single Page Applications(SPA)、モバイルアプリケーション、基本的なトークンベースのAPIの認証用に作成されたLaravelパッケージです。

Sanctumを使用するAPIについては、こちらの記事をお読みください。Sanctumを使用すると、各ユーザーは作成、読み取り、更新、削除(CRUD)などの特定の権限を持つAPIトークンを生成できます。

Jetstream Teams

Jetstreamのインストール中に--teamフラグを使用すると、Webサイトでのチームの作成と管理が可能になります。Jetstream Teams機能を使用すると、各ユーザーは複数のチームを作成したり、複数のチームに所属したりできます。

どのような場合にJetstreamを使用しますか?

Jetstreamは、以下のようなケースに最適です。

  • ユーザーがLaravel LivewireInertia.js、Tailwind CSSに関する深い知識を有している、あるいは導入に際して習得に時間を割くことを厭わない場合
  • 新しいLaravelアプリケーションを構築する際、ユーザー認証などの機能に対応する事前構築されたソリューションが必要な場合

相違点

両ツールの大きな違いは、Jetstreamが特定のフロントエンドスタックに依存している点です。Jetstreamには、「Livewire Blade」テンプレートと「Inertia Vue」テンプレートの2つのオプションが用意されています。普段のアプリケーション構築でVueを使い慣れている場合は、Inertiaルートをおすすめします。それ以外の場合は、LivewireやBladeを選ぶとよいでしょう。

また、使用経験がある場合はわかると思いますが、Laravel Jetstreamはやや扱いにくく、習得に少し時間がかかるのがネックでした。一方、Laravel Breezeは環境構築が非常に容易にできるよう設計されています。

共通点

両者は、フロントエンドとバックエンドの両機能をアプリケーションに追加できるという点で、その類似性は明らかです。

まとめ

ここまで、Laravel BreezeとJetstreamのインストール方法、相違点、共通点、それぞれに適した場面について説明してきました。どちらも認証プロセスにおいて優れた機能を備えています。このパッケージは、セキュリティ保護エリアへの不正アクセスや制限されたアクションの実行を防ぐことが目的です。最も自分のスタイルに合うと思う製品を選んでください。記事の内容が参考になったという場合は、ぜひシェアしてください。

Temitope Taiwo Oyedeleは、ソフトウェア開発者であり、テクニカルライターです。自分が経験し、習得した情報や知識を発信しています。