大人気のフレームワークであるLaravelの登場から早くも10年以上が経ちました。LaravelがPHP開発者にもたらす価値に際限はありません。次はどんな機能が登場するのかと、興味津々の方も少なくないでしょう。

中にはLaravelが「開発者を甘やかし過ぎでは」と考える人もいるかもしれません。それもそのはず、PHPはデフォルトでも初心者からプロまで、あらゆる人が気軽に使える言語です。それの利用がさらに簡素化されているのですから無理もありません。

それでは、Laravel開発者にどんな驚きがもたらされたのか、今回の記事ではその中身を見ていきたいと思います。

少なくとも、Laravel 10に多くの魅力が詰め込まれていることは確かです。Laravel 10の新機能、修正内容、廃止されたばかりのメソッドやパッケージなど、詳細に迫ります。

Laravelのリリーススケジュール

Laravelのコアチームは、以前は年に2回、つまり半年に1回メジャーバージョンをリリースしていました。

しかし、このリリースサイクルに変更が出ています。Laravelの生みの親であるTaylor Otwell氏が、今後は毎年1つのメジャーバージョンのリリースに移行すると発表しました。これにより、コアチームとコミュニティは、フレームワークの特定のバージョンにより多くの時間と労力を割くことができます。結果的に大きな問題が発生するリスクをおさえながら、便利な機能の導入が促進されることでしょう。

Laravel 10は、2022年2月8日にリリースされたLaravel 9に続き、2023年2月7日にリリースされる予定でした。しかし、予定よりも多くの時間をかけ、最終的には2023年2月14日に公開を迎えました。

Laravel 11は、2024年2月第1四半期にリリースされる予定です。

また、サポートポリシーによると、すべてのLaravelのバージョンについて、バグの修正は18カ月間、セキュリティの改善は2年間提供されることになっています。

バグ/セキュリティのアップデートについてのスケジュールは以下の通りです。

  • Laravel 9は、2023年8月8日までバグの修正を、2024年2月6日までセキュリティの改善を継続
  • Laravel 10は、2024年8月6日までバグの修正を、2025年2月4日までセキュリティの改善を受ける予定
  • Laravel 11は、2025年8月4日までバグの修正、2026年2月2日までセキュリティの改善が行われる予定

Laravel 10にバージョンアップすべきか

新しいバージョンがリリースされても、必ずしもすぐにアプリケーションのLaravelバージョンを最新版に変更すべきとは限りません。いくつかの点を考慮する必要があります。

Laravelはオープンソースのフレームワークであり、PCに新しいLaravelインスタンスをインストールするたびに、「フレームワークのコードベースを所有する」ことになります。つまり、アプリで使用しているフレームワークのバージョンがサポートされなくなったとしても、アプリは動作します。

そのため、フレームワークのバージョンアップよりもアプリケーションの安定性を優先することが広く推奨されています。

つまり、Laravel 10へのバージョンアップを検討すべきなのは、以下のような場合です。

  • アプリケーションが現在のバージョンで安定しており、問題なく機能している
  • 新しいバージョンで、アプリケーションで必要な機能が追加された、または、アプリケーションで発生している問題の解決が期待できる
  • 実行するにしても、バージョンアップを本番環境に反映する前に、アプリケーションを十分にテストすること

Laravel 10の最新情報

Laravel 10のロゴ
Laravel 10のロゴ

KinstaはLaravelを応援しています。だからこそLaravel 10の注目ポイントを1つの記事にまとめることにしました。このページをブックマークするなどして、ご自由にご活用ください。

Laravel 10の新機能とアップデート

最新版リリースの最も大きな魅力は、新機能の追加であることに疑いの余地はありません。それでは、早速Laravel 10の新機能とアップデートをご紹介します。

1. PHP 8.1─Laravel 10の核心

PHP 8.1は、Laravel 10で最低限必要となります。Laravel 10では、readonlyプロパティやarray_is_listなど、PHP 8.1の機能が一部使用されています。

2. PHP 8.2への対応

PHP 8.2は2022年12月8日にリリースされました。Laravel 10リリース日のわずか2ヶ月前です。とはいえ、ご心配はいりません。Laravel 10はPHP8.2に対応しているので、PHP8.2の機能を思う存分活用することができます。

実際、Forge、Vapor、Envoyerを含むLaravelエコシステム全体がPHP 8.2をサポートしており、Laravel 9でPHP 8.2を使用することも可能です。

3.Laravel公式パッケージのアップグレード

フレームワークだけでなく、すべての公式パッケージやエコシステムが専門的に管理された上で、定期的に更新されています。

Laravel 10に対応する最新のLaravel公式パッケージの一覧は以下の通りです。

  1. Breeze
  2. Cashier Stripe
  3. Dusk
  4. Horizon
  5. Installer
  6. Jetstream
  7. Passport
  8. Pint
  9. Sail
  10. Scout
  11. Valet

さらにRails、Vue、React、Svelte愛用者に嬉しいニュースとして、Inertia.js 1.0.1はLaravel 10をサポートしています。

4. Predisのバージョンアップ

PredisはPHP用の堅牢なRedisクライアントで、キャッシュを最大限に活用して優れたユーザーエクスペリエンスを実現できます。Laravelは以前はバージョン1と2の両方をサポートしていましたが、Laravel 10の時点でフレームワークはPredis 1をサポートしなくなりました。

Laravelのドキュメントでは、Redisと連携するためのパッケージとしてPredisに触れていますが、公式のPHPエクステンションを使用可能です。このエクステンションにより、Redisサーバーとの通信用APIが確保できます。

5. ネイティブの型宣言

Laravelでは、スケルトン(雛形ファイル)コードにDocBlockを使用して、コードの一部が何を行うのか、どのような種類のパラメータやレスポンスが期待されるのかを明確にしていました。しかし今回、Laravel 10のネイティブ型宣言により、これが変わります。

これについては、簡単な例で説明するのが一番です。以下のような関数が今までです。

/**
* ユーザーがモデルを作成できるかどうかを判断
*
* @param  {{ namespacedUserModel }}  $user
* @return IlluminateAuthAccessResponse|bool
*/
public function create({{ user }} $user)
{
    //
}

これが、次のようになります。

/**
* ユーザーがモデルを作成できるかどうかを判断
*/
public function create({{ user }} $user): bool
{
    //
}

この変更は純粋に開発者の利便性を高めるもので、IDEにとって期待されるパラメータとレスポンスの形状が明らかになります。PHPのネイティブ型では不可能な、より明確な型が表現できます。したがって、コードエディターのオートコンプリート機能が今まで以上のパフォーマンスを発揮できるようになります。

6. すべての検証ルールがデフォルトで呼び出し可能

Laravel 9では、呼び出し可能(invokable)な検証ルールを作成する際、artisanコマンドの後に--invokableを追加する必要がありました。Laravel10では、すべてのルールがデフォルトでinvokableになったので、この必要がなくなりました。そのため、以下のようなコマンドを実行して、Laravel 10でinvokableルールを作成することができます。

php artisan make:rule CustomRule

7. ネイティブカラムの修正サポート

change()を使ってカラムを修正する際にdoctrine/dbalパッケージが不要になるように、Laravel 10に新しい機能が追加されました。この機能により、change()メソッドを使用して、MySQL、PostgreSQLSQL Server上のカラムを追加パッケージなしで変更することができます。これは重要かつリスクを伴う変更ですが、追加パッケージの必要性をなくすもので、価値ある調整でしょう。

新機能をよりよく理解するために、以下の例をご覧ください。

$table->integer('user_balance')->unsigned()->default(0)->comment('balance'); // `user_balance` is an integer, unsigned, defaults to '0', and column comment is 'balance'

user_balanceのカラムがあり、その型を変えたいとします。Laravel 10からは、このように簡単にできるようになりました。

$table->bigInteger('user_balance')->change(); // This will change `user_balance` to bigInteger instead of just integer

上記のコードで、カラムのタイプが正常に変更できますが、UNSIGNEDDEFAULTCOMMENT属性が削除されます。このような理由から、カラムのタイプを変更するときには、すべての属性の追加を忘れないようにしましょう。

$table->bigInteger('user_balance')->unsigned()->default(0)->comment('balance')->change();

複数のデータベース接続があり、すでにdoctrine/dbalをインストールしている場合、ネイティブのスキーマ操作を使用できるように、AppProvidersAppServiceProviderbootメソッド内でSchema::useNativeSchemaOperationsIfPossible()メソッドを呼び出し、パッケージに依存する前にネイティブの操作を使用することをお勧めします(例えばSQLiteはまだこれをサポートしていません)。

use IlluminateSupportFacadesSchema;
 
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Schema::useNativeSchemaOperationsIfPossible();
    }
}

8. カラムにおけるデータ型のネイティブ検索

Laravel 10のもう一つの注目すべき点は、doctrine/dbalパッケージに頼らずとも、Schema::getColumnTypeメソッドを使えるようになったことです。今までは、カラムのデータ型を取得するために、Schema::getColumnTypedoctrine/dbalを使用してきました。doctrine/dbalは、すべてのネイティブカラムタイプをdoctrine/dbalの同等物に抽象化するものですが、Laravelが様々なデータベースで使用するカラムのデータ型の多くに対応していません。

一方、Laravel 10の新しいSchema::getColumnTypeメソッドは、doctrine/dbalのそれではなく、実際のデータ型を返します。また、新しいネイティブカラム編集機能の統合テストを書くことができます。この機能を使って、指定したカラムのデータ型名または型定義全体を取得することが可能です。

Schema::getColumnType('products', 'price'); // decimal

9. 高速なハッシュアルゴリズム

xxHashは、非常に高速なハッシュアルゴリズムです。出力のランダム性と分散性に優れ、衝突を減らす一意性も備えています。PHP 8.1ではxxh128がサポートされており、Laravel 10はPHP 8.1で動作するため、Laravel 10でこのような信頼性の高いハッシュアルゴリズムが使えるのは朗報です。

なお、注意点として、Taylor氏の言及にもあるように、サードパーティのパッケージの中には(Laravelがハッシュに使用していたアルゴリズムである)SHA-1ハッシュと同じ形式のファイル名に依存するものが存在します。したがって、Laravel 10へのバージョンアップを計画中であれば、アプリで使用しているサードパーティパッケージでこれを再確認しておくことをおすすめします。

10. EloquentビルダーのwhereExists()メソッドサポート

whereExists()を使用するには、クロージャを使用してネストされたクエリを構成する必要がありました。そして、Laravel10では、Eloquentビルダーをネストされたクエリとして含めることができるようになりました。これにより、カスタムビルダーメソッドやモデルスコープなどを利用することができます。

例えば、whereExists()を使う際に、今までは、このように記述していました。

Order::whereExists(function ($query) {
    $query->from('products')->whereColumn('products.order_id', 'orders.id');
});

Laravel 10では、このようにすることができます。

Order::whereExists(
    Product::whereColumn('products.order_id', 'orders.id')
);

11. eagerロードの最適化

Laravel 10の興味深い新機能の1つが、読み込むキーがない場合のeagerロードの最適化です。この変更は、eagerロード関係で不可能なクエリが大量に実行されるという問題に取り組むもので、機能というより修正と言えます。

読み込むべきキーを持たないリレーションをeagerロードすると、Laravelはこのようなクエリを実行します。

select * from `table_name` where 0 = 1

しかし、Laravel 10のアップデートでは、そもそも利用可能なキーがあるかどうかを確認し、ない場合は空のデータを返すことで、不必要なデータベースクエリを行わないようにしています。

12. $pathがファイルシステムメソッドのオプションという位置づけに

Laravel 10では、以下のメソッドで、$pathパラメータがオプションになりました。

  • FilesystemAdapter#putFile
  • FilesystemAdapter#putFileAs
  • UploadedFile#store
  • UploadedFile#storeAs
  • UploadedFile#storePublicly
  • UploadedFile#storePubliclyAs

そのため、アップロードしたファイルをAmazon S3に保存するために、このような方法をとる必要はありません。

Storage::disk('s3')->putFile(‘post/images', $uploadedFile);

代わりに、以下のように実行できます。

Storage::disk(Disk::PostImages)->putFile($uploadedFile)

13. データベース式と文法に合わせた書式設定

Laravel 10のリリース4日前のことです。Laravelコアチームは、複数のデータベースを扱う際の大きな課題に対処する、素晴らしい機能をマージすることを決定しました。

以前のバージョンでは、PostgreSQLとMySQLを使用していて、リストの最初の値をエイリアスで返したい場合、生のデータベースコードを扱い、次のようにしなければなりませんでした。

DB::table(‘visitors')
->when(isPostgreSQL(), fn ($query) => $query->select(DB::raw('coalesce(NULL, "user", "guest") AS "First Visitor"')))
->when(isMySQL(), fn ($query) => $query->select(DB::raw('coalesce(NULL, `user`, `guest`) AS `First Visitor`')))

上記のコードでは、COALESCE()関数を使用して、最初の非NULL値をfirst visitorというエイリアスとして返しています。したがって、このような操作を行うたびに、生のデータベースコードを記述することになります。

新たな機能により、クエリに必要な生の式や文を実装した、再利用可能なクラスを作成することができるようになりました。これにより、多くのデータベース関連機能を利用する際などに、生のデータベースコードを毎回記述する必要がなくなります。

上記の例に戻って、もう一度考えてみましょう。Laravel 10の新しい記述方法に従って、生のデータベースコードの構文を使用することなく、同じ結果を導き出すことができます。

まず、エイリアス用のクラスと、COALESCE()関数を使用するクラスの2つを作成します。

class Alias implements Expression
{
  public function __construct(
    public readonly Expression|string $expression,
    public readonly string $name,
  ) { }
  public function getValue(Grammar $grammar): string
  {
    return match ($grammar->isExpression($this->expression)) {
      true => "{$grammar->getValue($this->expression)} as {$grammar->wrap($this->name)}",
      false => $grammar->wrap("{$this->name} as {$this->name}"),
    };
  }
}
class Coalesce implements Expression
{
  public function __construct(
    public readonly array $expressions,
  ) { }
  public function getValue(Grammar $grammar): string
  {
    $expressions = array_map(function ($expression) use($grammar): string {
      return match ($grammar->isExpression($expression)) {
        true => $grammar->getValue($expression),
        false => $grammar->wrap($expression),
      };
    }, $this->expressions);
    $expressions = implode(', ', $expressions);
    return "coalesce({$expressions})";
  }
}

そして、MySQLとPostgreSQLの両方について、以下を実行します。

DB::table('visitors') ->select(new Alias(new Coalesce([NULL, 'user', 'guest']), 'First Visitor'));

書くのが面倒だと思うかもしれませんが、一度だけ書けばよいので便利です。複数のデータベースを扱うときに構文を変える手間も省けるので、価値は大いにあります。

さらに、プルリクエストの作成者であるTobias Petry氏によると、この変更により、パッケージを介した一般的なRAWデータベースクエリ実装の可能性が開かれることになるとのこと。さらに彼は、Laravel 10リリース後の専用パッケージ提供についても述べています。

14. orderByを含まないクエリにおけるFETCHOFFSETの使用(SQLサーバーの更新)

以下のようなクエリでorderByを使用することができます。

$builder->select('*')->from('users')->skip(11)->take(10)->orderBy('email', 'desc');

これにより、FETCHOFFSETを使用したSQL文が生成されます。

select * from [users] order by [email] desc offset 11 rows fetch next 10 rows only

しかし、以前のバージョンのLaravelでは、クエリからorderByを削除すると、結果を相殺する古い方法にフォールバックします。

$builder->select('*')->from('users')->skip(11)->take(10);
select * from (select *, row_number() over (order by (select 0)) as row_num from [users]) as temp_table where row_num between 11 and 20 order by row_num

しかし、Laravel 10では、この新しいアップデートにより、Laravel 10のアプリケーションでorderByが存在しない場合でも、FETCHOFFSETを使用することができるようになりました。

select * from [users] order by (SELECT 0) offset 10 rows fetch next 10 rows only

これにより、速度が33%向上し、実行ステップも少なくなります。

15. PHPUnit 10のサポート

Laravel 10はPHPUnit 10に対応しています。PHPの単体テスト用フレームワークで、バージョン10は2023年2月3日にリリースされました。Laravel 10では、PHPUnit 9と8は引き続きサポートされます。

16. Timeboxクラスのセキュリティ改善

Laravel 10には、タイムレスタイミング攻撃からアプリケーションを守ることを目的とした、Timeboxクラスのセキュリティ強化策が組み込まれています。Timeboxクラスは、hasValidCredentialsメソッド内に実装されています。

Timeboxクラスには、Timeboxのコールバック実行中にスローされた例外を処理するサポートが追加されました。

17. dispatch()メソッドの動作がLaravel 10全体で一貫

DispatchesJobsトレイト内のdispatch()メソッドは、グローバルなdispatch()ヘルパ関数と同じように固有のジョブをチェックするようになりました。これにより、dispatch()メソッドは、Laravel 10全体で同じ機能を実行することになります。

18. Laravel Pennant

頻繁に機能が追加されるウェブアプリケーションの開発に携わったことがある方なら、フィーチャーフラグがいかに重要であるか、ご理解いただけると思います。Laravelは新しいファーストパーティのパッケージ、Laravel Pennantでこの点をカバーしていますので、ご心配なく。

Laravel Pennantを使えば、フィーチャーフラグの管理が容易になります。さらに、インメモリ配列ドライバとデータベースまで付属しています。

新しい機能の定義はこのように簡単です。

use LaravelPennantFeature;
use IlluminateSupportLottery;
Feature::define('new-color-button', function () {
return Lottery::odds(1, 10);
});

そして、ユーザーによる機能へのアクセス権を確認できます。

use LaravelPennantFeature;
if (Feature::active('new-color-button')) {
  // ...
}

Laravel Bladeでは、さらにきれいな見た目になります。

@feature('new-color-button')
// Kinsta Rules!!
@endfeature

19. Laravelプロセスファサード

Laravel 10で、CLIプロセスのテストと実行が簡単になりました。テストの負担を軽減する、わかりやすいAPIが特徴です。Taylor氏によるこの機能のPRから、例をつかんでみましょう。

use IlluminateSupportFacadesProcess;
$result = Process::run('ls -la');
$result->successful();
$result->failed();
$result->exitCode();
$result->output();
$result->errorOutput();
$result->throw();
$result->throwIf(condition);

上記のコードがシンプルかつクリーンです。プロセスの構築も同様です。

$result = Process::timeout(60)->path(base_path())->env([...])->run('ls -la');
$result = Process::forever()->run('ls -la');

この新機能をテストに使うために、次のような新しいfakeプロセスが作れます。

Process::fake([
  'ls *' => Process::result('Hello From Kinsta'),
]);

そして、そのfakeプロセスを実行し、新たに利用できるようになったアサーションを使用します。

$result = Process::run('ls -la');
Process::assertRan(function ($process, $result) {
  return $process->command == 'ls -la';
});
Process::assertRanTimes(function ($process, $result) {
  return $process->command == 'ls -la';
}, times: 1);
Process::assertNotRan(function ($process, $result) {
  return $process->command == 'cat foo';
});

20. Pestテストのスキャフォールディング

Laravelプロジェクト作成に際し、Pestテストのスキャフォールディングがデフォルトで有効になるようになりました。この機能を利用にするには、Laravelインストーラでアプリをビルドするときに、--pestを使用します。

laravel new example-kinsta-app --pest

21. 文字列パスワード生成

Laravel 10では、指定した長さのランダムかつ安全なパスワードを作成できます。

$password = Str::password(12);

Laravel 10で非推奨のメソッドとパッケージ

次に、Laravel 10のリリースに伴い、削除されたパッケージやメソッドについて見ていきます。

Laravel 10でPHP 8.0が終了

Laravel 10でPHP 8.0のサポートが打ち切りとなります。したがって、アプリケーションをLaravel 10にバージョンアップする際には、まず先にPHPのバージョンをPHP 8.1またはPHP 8.2に変更する必要があります。

非推奨メソッドの削除

Laravelのドキュメントに、すべての変更点や重要な非推奨事項が追加されました。既存のプロジェクトをLaravel 10に移行する際には、非推奨のメソッドを使用しているコードを別のものに書き直す必要があります。

以下、非推奨事項の一覧をご紹介します。

  • Route::homeメソッド(Laravel 9の時点で非推奨)
  • dispatchNowを中心とした非推奨の関数やメソッド:サポートされている(即座にディスパッチする)唯一の方法であるdispatchSyncを奨励するためのものです。
  • getBaseQuerytoBaseに相当するものがあるため)
  • MaintenanceModeExceptionクラス
  • MocksApplicationServices特性
  • Mail::failuresメソッド
  • 非推奨の$dates プロパティ(代わりに$castsを使うことが推奨されている)
  • assertTimesSent()メソッド
  • Predis 1とdoctrine/dbal 2
  • doctrine/dbalに関する全ての非推奨事項(Laravelがバージョン2のサポートを停止したことに起因)

Laravel 10のインストール方法

Laravelコアチームの献身により、あらゆる環境で簡単にフレームワークが利用できる状態になっています。実際には様々な方法でLaravel 10を使い始めることができます。

MacOSにLaravel 10をインストールする

DockerLaravel Sailを使えば、MacOSでLaravel 10を簡単に始めることができます。アプリケーションをインストールするディレクトリから、以下のターミナルコマンドを実行します。ただし、アプリ名には英数字、ダッシュ、アンダースコアのみが利用できます。

curl -s "https://laravel.build/example-kinsta-app" | bash

インストールが完了したら、プロジェクトディレクトリに移動し、ターミナルで以下のコマンドを実行し、Sailを使用して新しいプロジェクトを作成します。

./vendor/bin/sail up

これにより、Dockerを使用しSailが起動します。完了すると、アプリケーションがhttp://localhostでアクセス可能になります。

Windows 10と11にLaravel 10をインストールする

Docker Desktopを使用することで、WindowsにLaravel 10を素早くインストールできます。ただし、Windows 10でも11でも、まず次の2つのいずれかを有効にする必要があります。

  • Windows Subsystem for Linux 2(WSL2):LinuxファイルシステムとLinuxコマンドラインツールをWindows上で直接実行できるようにするWindowsオペレーティングシステムの機能です。
  • Hyper-Vバックエンド機能:仮想マシンとして知られるコンピュータのソフトウェア版を作成し、操作することができます。

Dockerの要件をすべて満たした上で、ターミナルで以下のコマンドを実行してください。

curl -s https://laravel.build/example-kinsta-app | bash

次に、Sailを使用してhttp://localhostのアプリケーションを実行します。Laravel 10プロジェクトのルートディレクトリから、次のコマンドを実してください。

./vendor/bin/sail up

余談ですが、効率的な作業のため、多くの開発者によりLinux OSが利用されています。WSLを使用することで、Ubuntuのセキュリティ、パフォーマンス、互換性が確保できます。Ubuntuは、その使いやすさで人気を博すLinuxディストリビューションです。

Visual Studio Codeを使用し、さらに(WSLの任意のフォルダを開き、VSCodeの全機能を活用できるように)公式のMicrosoft WSL拡張機能をインストールすることをおすすめします。リモート開発拡張機能も、Laravelのドキュメントで紹介されています。

ComposerでLaravel 10をインストールする

macOSでもWindowsでも、Composerを使って、すぐにLaravel 10を使い始めることができます。

まず、PHP ≤ 8.1、node、npm、ComposerがPCにインストールされていることを確認してください。

  • macOSHomebrewを使ってComposerをインストールすることができます。
  • Windows:Composerの最新安定バージョンは、Composerの公式サイトからダウンロードできます。

一度、Laravel Installerをグローバルに確保した上で、新しいLaravel 10アプリケーションのインストールに使用することができます。

composer global require laravel/installer
laravel new example-kinsta-app

または、Composerのみを使用し直接Laravel 10の新規アプリを作成することもできます。

composer create-project laravel/laravel example-kinsta-app

Laravel 11のインストール方法

Laravel 11のリリースは、まだ1年先です。しかし、Laravel 11は現在、その機能をテストするために利用可能となっています。利用可能なだけでなく、PHP 8.1サポートの中止など、GitHubにマージされたPRも含まれています。

Laravelインストーラの--devを使って、laravel/laravelリポジトリからマスターブランチをインストールすることができます。Laravel 10がリリースされたことで、Laravel 11がマスターブランチで利用できるようになります。Laravel Installerを使用している場合は、ターミナルでこのコマンドを実行するだけでOKです。

laravel new example-kinsta-app --dev

Composerを使用するのであれば、以下のコマンドを実行します。

composer create-project --prefer-dist laravel/laravel example-kinsta-app dev-master

Composerコマンドの簡単な説明は以下の通りです。

  • laravel/laravel:Laravelインストールのためのパッケージ
  • example-kinsta-app:新規プロジェクトのディレクトリ(変更可能)
  • dev-master:Laravelの次期バージョン(今回はLaravel11)

Laravel 11をインストールした後、新しく作成したexample-kinsta-appディレクトリに移動して、このArtisanコマンドを実行すると、バージョンを確認することができます。

$ php artisan --version
Laravel Framework 11.x-dev

プロジェクトをLaravel 10にバージョンアップする方法

早速、Laravel 10にアップグレードしたいと思いませんか?Laravelコアチームは、できるだけ漏れなく変更点をカバーしながら、わかりやすいドキュメント作成に励んでいます。Laravel 10アップグレードガイドで、そのプロセスについての情報が公開されていますので、あわせてご覧ください。

また、Laravel 10がリリースされたことから、Laravel Shiftにも注目したいところです。Laravelのバージョンアップを簡単かつ自動で行うことができます。

Laravel 10のプロジェクトをデプロイする方法

Laravel 10のデプロイは、Laravel 9のプロジェクトのデプロイとそれほど変わりません。サーバーの要件は以下の通りです。

  • PHP ≤ 8.1
  • Ctype PHPエクステンション
  • cURL PHP拡張モジュール
  • DOM PHP拡張モジュール
  • Fileinfo PHP拡張モジュール
  • Mbstring PHP拡張モジュール
  • OpenSSL PHPエクステンション
  • PCRE PHPエクステンション
  • PDO PHPエクステンション
  • Tokenizer PHP エクステンション
  • XML PHP 拡張モジュール
  • Filter PHPエクステンション
  • Hash PHPエクステンション
  • Session PHPエクステンション

Laravelはサポートされているフレームワークですので、KinstaでLaravel 10プロジェクトを数分でデプロイしてホストすることができます。

KinstaにLaravel 10をデプロイする手順

Kinstaでのアプリケーションのホスティングとデプロイには、デプロイメント設定に煩わされないなど、いくつかの利点があります。

Kinstaを使えば、ユーザーフレンドリーかつ便利なツールを利用し、アプリケーションのデプロイ、データベースの接続、パフォーマンスの監視を行うことができます。コントロールパネル「MyKinsta」からあらゆる操作が可能です。以下では、これを使用してLaravel 10アプリケーションをデプロイする手順をご紹介します。

1. Laravel 10アプリケーションの準備

Kinstaにデプロイした状態のLaravel 10アプリケーションのトップページ
Kinstaにデプロイした状態のLaravel 10アプリケーションのトップページ

ローカル環境にLaravel 10アプリケーションがあると仮定して、githubリポジトリが利用可能である必要があります。このリポジトリは、後でアプリケーションをデプロイするのに使用します。

アプリケーションのルートディレクトリに.htaccessファイルを作成し、中身に以下を記述してください。

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

Laravelでは、これによりすべてのリクエストがpublic/index.phpにリダイレクトされます。尚、必要であれば、アプリケーション追加に際して(プロセスの設定ステップで)、またはデプロイ後にアプリケーションの「プロセス」ページで、このコマンドを変更することができます。

  • heroku-php-apache2 /public
  • php artisan serve --host 0.0.0.0 --port 8080

2. MyKinstaにログインする

MyKinstaのログインページ
MyKinstaのログインページ

MyKinstaのログインページに移動し、メールアドレスとパスワードを入力しログインします。まだアカウントをお持ちでない方は、新規登録することで、各種プランに初月20ドル割引が適用されます。

3. GitHubでKinstaを認証する

ログインすると、WordPressサイトの作成アプリケーションの作成データベースの作成の3つの選択肢が表示されます。GitHubと統合するには、「GitHubに接続」ボタンをクリックします。

MyKinstaに表示される選択肢
MyKinstaに表示される選択肢

次に、「GitHubを使って続行」ボタンをクリックします。GitHubにまだログインしていない場合は、ログイン画面が表示されます。次に、「Authorize Kinsta」を選択して、Kinsta GitHubアプリケーションによるGitHubアカウントへのアクセスを許可します。

ここまで完了するとGitHubからMyKinstaにリダイレクトされます。

MyKinstaとGitHubを接続する
MyKinstaとGitHubを接続する

GitHubとの接続が完了すると、「アプリケーションの追加」ポップアップが表示され、ドロップダウンメニューからGitHubリポジトリを選択できます。「GitHubリポジトリ」の項目をクリックし、ドロップダウンで「GitHubの権限を編集」を選択します。

MyKinstaでアプリケーションを追加する
MyKinstaでアプリケーションを追加する

すると、GitHubのウェブページが新しいタブで開き、そこからKinstaがアクセス可能なデータを選択することができます。すべてのリポジトリへのアクセスを有効にする代わりに、Kinstaで使用するリポジトリのみを選択するのがおすすめです。設定をそのように変更するには「Only select repositories」をクリックし、デプロイしたいリポジトリを選択します。

GitHubでアクセス可能なリポジトリを限定する
GitHubでアクセス可能なリポジトリを限定する

そして、「Install」をクリックし、設定完了です。

MyKinstaに戻り、「GitHubリポジトリ」のフィールドをクリックすると、認証済みのリポジトリが表示されるはずです。さらに、

コミットに際し自動でデプロイ」にチェックを入れると、GitHub リポジトリに変更を加えると同時にアプリケーションを自動デプロイする設定になります。

MyKinstaのリポジトリとブランチを選択する
MyKinstaのリポジトリとブランチを選択する

4. アプリケーションの基本情報を入力する

アプリケーションにダッシュボードで使用される名前を付け、25のデータセンターから選択します。アプリケーションでのデータセンター選びでお困りでしたら、データセンターの選び方についてのこちらのページをご覧ください。

アプリケーションの基本情報を入力する
アプリケーションの基本情報を入力する

5. 環境変数を追加する

次のセクションでは、環境変数を追加します。最も重要な環境変数は、APP_KEYです。

.envファイルにまだキーが存在しない場合には、オンラインで利用できるLaravelキージェネレータを使用して生成してください。そして、「キー1」フィールドにAPP_KEYを挿入し、「値1」フィールドに生成されたアプリキーの中身を貼り付けます。

最後に、「ランタイムで利用可」と「ビルドプロセスで利用可」にチェックを入れます。

MyKinstaアプリケーションに環境変数を追加する
MyKinstaアプリケーションに環境変数を追加する

6. ビルド環境を設定する

あとは「続行」ボタンをクリックすると、ビルド環境の設定が完了します。ただし、ビルド高速化等のために、「ビルドリソース」の欄から希望するものを選ぶこともできます。

ビルドパス」のフィールドは任意です。空のままにしておくと、MyKinstaにより自動でルートフォルダが使用されます。

アプリケーションのビルド環境を設定する
アプリケーションのビルド環境を設定する

7. プロセスおよびお支払い方法の設定

リソース」の各フィールドには以下の情報を入力してください。

  • プロセス名:アプリケーションのプロセス一覧に表示される名前になります。
  • プロセスの種類:一度設定すると変更できないので、慎重に選択してください。ただし、デプロイ後、アプリケーションの「プロセス」ページで、バックグラウンドジョブなどのプロセスを追加・変更することは可能です。
  • startコマンド:プロセスの「start」コマンド(必須ではありません)をここで指定することができます。
  • ポッドサイズ:プロセスに必要なポッドの容量を指定します。
  • インスタンス数:プロセスのインスタンス数(最大50)を指定します。

Kinstaのシステムにより、最初のデプロイ時に必要なコマンドが自動で検出されますので、「startコマンド」に何も入力せずに「続行」をクリックするだけで問題ありません。

アプリケーションのプロセスを設定する
アプリケーションのプロセスを設定する

最後のステップでは、算出された毎月の使用料を確認し、お支払い方法を確認します。確認が完了したら、「お支払い方法の確認」ボタンをクリックします。

お支払い内容を確認する
お支払い内容を確認する

これで完了です。これ以後、アプリケーション配信に必要となるバックグラウンドでのあらゆる処理が自動で実行されます。

アプリケーションのデプロイメントプロセスを読み込み中
アプリケーションのデプロイメントプロセスを読み込み中

その後、デプロイプロセスの詳細を確認したり、アプリの一時URLにアクセスしたりできる状態になります。一時URLは後ほど別の独自ドメインに置き換えることができます。

Laravel10アプリケーションのMyKinstaへのデプロイに成功
Laravel10アプリケーションのMyKinstaへのデプロイに成功

Laravel10アプリケーションがKinsta上で公開されましたが、本番環境に変更を加えるにはどうすればよいでしょうか。例えば、アンカータグのhref属性を変更したい場合などです。

コミットに際し自動でデプロイ」が有効になっていることで、デプロイされたブランチに変更が加えられるとMyKinstaが自動でそれを検出し、それに応じて本番環境のアプリケーションが自動で更新されます。

8. Laravel 10とMySQLデータベースを接続する

Laravel 10アプリケーションをデプロイしたので、今度は、データベースを構築し、アプリケーションに接続する方法をご紹介します。左側のナビゲーションメニューから「アプリケーション」をクリックし、「サービスを追加」の後「データベース」を選択してください。

MyKinstaにデータベースを追加する
MyKinstaにデータベースを追加する

すべてのフィールドを入力したら(「続行」で次のページに進み、内容を確認した上で)「データベースを作成する」をクリックします。これで、内部および外部の接続に対応した新しいデータベースができあがります。今回は、デプロイしたLaravel 10プロジェクトに内部接続で紐付けてみましょう。

内部接続」セクションの「アプリケーションの追加」をクリックして、アプリケーションを選択します。「アプリケーションへの環境変数の追加」にチェックを入れると、アプリケーションに必要なすべての.env変数が入力されます。

Laravel 10アプリケーションにデータベースを接続する
Laravel 10アプリケーションにデータベースを接続する

ここまでで、Laravel10アプリケーションのデプロイとデータベースとの接続が完了です。

Laravel 10に貢献する

Laravelはコアチームによって管理されていますが、3,000人以上のボランティアコントリビューターによって活発に開発が進められています。

その一員としてLaravelの未来を形作る手助けをしたいのであれば、新機能の追加、バグの修正、あるいはドキュメントのわかりにくい部分の書き換えから、これに貢献することができます。

Laravel 10への貢献に必要なのは、以下のとおりです。

  1. LaravelのGitHubリポジトリに行き、タイトルに[10.x] とタグ付けされたプルリクエストをチェックしてください。これで、Laravel 10のすべてのプルリクエストを明確に把握することができます。もし、あなたが行おうとしていることがプルリクエストの中で扱われていれば、それを改善できるかどうか考えてみましょう。
  2. もし、あなたが計画している内容がまだ誰によっても対処されていないのであれば、自分でPRを作成することもできます。
  3. すべての機能やコードに、フレームワークのコードベースに追加する価値があるわけではありません。将来的にメンテナンスが容易で、Laravelコミュニティの大多数を助けるような改善のみを実装するように努めましょう。
  4. Laravelのコントリビューションガイドラインを確実に守ることで、あなたの加えた、または提案した変更内容がフレームワークにマージされる可能性が高くなります。

Laravel 10への貢献をより面白くする要素として、バグハントというものがあります。簡単に言えば、貢献度に応じて賞金を獲得できる仕組みです。次の項目では、このバグハントについて説明します。

Laravel 10のバグハント

Laravel 10のバグハント
Laravel 10のバグハント

Laravel 10では、コントリビューターが1000ドルを獲得できるチャンスが発表されています。

Laravel史上初のコンテストになります。Laravel 10の隠れたバグを発見し、パッチ作成を奨励するために企画されました。

ルールは簡単です。

  • laravel/frameworkリポジトリの10.xブランチについて出されたPRのみが対象となります。
  • 純粋なバグの修正のみが考慮されます。新機能、リファクタリング、誤記の訂正などは対象外です。
  • すべてのバグの修正内容は、テストを行うことで、その有効性を証明する必要があります。
  • 採用されたバグの修正はGitHub上でラベル付けされ、コンテストの最後に、無作為に当選者が発表されます。

2023年2月14日に最初の安定版であるLaravel 10がリリースされた時点で、コンテストは終了しました。

まとめ

Laravel 10は非常に有望な内容となっています。あらゆる利点や機能をPHPの世界にもたらすことになりました。

一方、Laravelアプリのパフォーマンス向上策をお探しなら、プレミアムホスティングへの切り替えをおすすめします。Kinstaのアプリケーションホスティングソリューションは、業界でも有数の速度、セキュリティ、使いやすさを特徴とし、特に開発者を念頭に置いて構築されています。加えて、Kinstaのカスタマーサポートは24時間年中無休体制で営業中です。

Mostafa Said

Laravel、Inertia、JavaScriptフレームワークを得意とするフルスタック開発者。コードを書く以外の時間は、解説記事を執筆して知識を共有したり、ハッカソンに参加したり(何度か優勝経験あり)、技術の素晴らしさを伝えるべく他の人の学習をサポートしたりしている。