Twinkle
Use a contextual binding in the service container to inject different implementations of the same interface into different classes. For example, in a service provider’s register()
method you can do:
$this->app->when(ReportController::class)
->needs(DataExporter::class)
->give(CsvExporter::class);
$this->app->when(BackupController::class)
->needs(DataExporter::class)
->give(ZipExporter::class);
Now both controllers type‐hint DataExporter
in their constructors, but get completely different concrete exporters—making your code far more flexible and testable.
laravel/framework v12.13.0
https://github.com/laravel/framework/releases/tag/v12.13.0
• Request クラスの引数なし戻り値型を修正
• containsOneItem メソッドでコールバック評価をサポート
• 集約関連メソッド・プロパティおよび QueryBuilder のカラム関連メソッドにジェネリクスを追加
• バインディングへの型ヒントと Database\Grammar メソッドの配列に PHPDoc 型注釈を追加
• PHPDoc のタイプミスを修正
• キューに登録するクロージャへ名前付けを可能に
• assertRedirectBack アサーションメソッドを追加
• trim(null) 引数の非推奨警告を修正
• predis/predis 3.x をサポートし、対応バージョンを調整
• 例外レンダラー内の Vite を 5.4.18→5.4.19 に更新
• league/commonmark の最低バージョンを引き上げ
• MemoizedStoreTest のタイプミスを修正
• 列挙型(enum)値を持つイベントリスナーをキューに登録
• RateLimited ミドルウェアに releaseAfter メソッドを実装
• Cache テストを強化
• Eloquent の whereAttachedTo メソッドにモデル ID のみを渡すよう修正
• Bus チェーンに複数ジョブをまとめて追加する機能を追加
Amazon Q Developer in GitHub
プレビュー版なのでAWSとの連携不要というかAWSアカウント自体不要で使える。
https://aws.amazon.com/jp/blogs/aws/amazon-q-developer-in-github-now-in-preview-with-code-generation-review-and-legacy-transformation-capabilities/
https://github.com/apps/amazon-q-developer
少し試したけど無からLaravel12プロジェクト作成は「Laravel10から12を混ぜたような半端なプロジェクト」が出来上がった。
インストーラーを使って作成みたいなことはできないらしい。
古い情報が邪魔になるLaravelではこういう使い方は向いてない。
プレビュー中だけ試す程度。
Use a custom Eloquent cast to transform a JSON column into a rich PHP Value Object—this gives you encapsulation, immutability and type safety throughout your app. For example:
- Create your Value Object:
final class Address
{
public function __construct(
public string $street,
public string $city,
public string $zip
) {}
}
- Create a CastsAttributes class:
use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
class AddressCast implements CastsAttributes
{
public function get($model, string $key, $value, array $attributes): Address
{
$data = json_decode($value, true) ?? [];
return new Address($data['street'] ?? '', $data['city'] ?? '', $data['zip'] ?? '');
}
public function set($model, string $key, $value, array $attributes): array
{
if ($value instanceof Address) {
$payload = [
'street' => $value->street,
'city' => $value->city,
'zip' => $value->zip,
];
} elseif (is_array($value)) {
$payload = $value;
} else {
throw new InvalidArgumentException('Invalid address format.');
}
return [$key => json_encode($payload)];
}
}
- Register the cast in your model:
class User extends Model
{
protected $casts = [
'address' => AddressCast::class,
];
}
Now whenever you access $user->address
, you get an Address
object; when you assign one, it’s automatically serialized back to JSON.
laravel/framework v12.12.0
https://github.com/laravel/framework/releases/tag/v12.12.0
- Blueprint Resolver を静的に動作させるように変更
- 事前読み込みするアセット数を制限できるように追加
- 「failed」コマンド実行時にジョブインスタンスを設定するように変更
laravel/framework v12.11.1
https://github.com/laravel/framework/releases/tag/v12.11.1
- スケジュールタスク失敗時に
ScheduledTaskFailed
イベントが発火しなかった変更を元に戻し - BelongsToManyRelationshipファクトリの不具合を修正しました
laravel/framework v12.11.0
https://github.com/laravel/framework/releases/tag/v12.11.0
• ジョブペイロードにペイロード作成情報とオリジナル遅延情報を追加
• ビューキャッシュのタイムスタンプを無視する設定オプションを追加
• 通知送信失敗時に NotificationFailed イベントをディスパッチ
• テスト実行時に dispatchAfterResponse を無効化するオプションを追加
• カスタム Json エンコーダーにフラグを渡せるように改善
• モデルファクトリでリレーションモデル作成時に pendingAttributes を利用
• モデルのリレーションシリアル化で発生していた二重クエリを修正
• 自動リレーションロード時の循環リレーション検出を強化
• リレーションの自動ロードコンテキストがシリアル化されないように修正
• InteractsWithIO の $components プロパティから @internal アノテーションを削除
• テスト用フェイクジョブがジョブ契約を正しく実装するよう保証
• AnyOf コンストラクタのパラメータ型定義を修正
• リリース前に Illuminate コンポーネントの変更を同期
• Enum ルールに class-string ジェネリクスを設定
• バインディング関連メソッドに詳しい型ドキュメントを追加
• @use ディレクティブで function/const 修飾子をサポート
• スケジュールタスク失敗時に失敗イベントをディスパッチ
• クラス属性にアクセスする Reflector メソッドを導入
• Arr ヘルパーに型付きゲッターを追加
またフロントエンドを無視してるLaravelプロジェクトを見かけた
リポジトリパターンとかの前にフロントを覚えるのが先だよ。
bootstrapやjQueryをCDNで直接使ってる例はよく見る。
一体誰が教えてるんだろうってくらい多すぎるので何かの本に書いてるんだろう。
この使い方は完全に間違っている。
Laravel4時代の使い方。
「教えてる側がLaravel4時代の知識で止まってる」って認識も間違い。
「Laravel特有の機能とか覚える気のない人が他のフレームワークの使い方を強引にLaravelに当てはめてる」が真相だろう。
コントローラー・データベース・ビューみたいなどのフレームワークでも同じだけど少しずつ使い方が違うようなドキュメント読めば済む浅い部分の説明だけで本を書いてるからLaravelの使い方の説明になってない。
結果としてフロントとの統合がなかったLaravel4相当になる。
Laravel5以降はフロントとの統合が常識化。
その前にまず2010年代前半はフロント周辺が急速に発展。ウェブで何か作るならフロントの知識が必須化。
Laravel4時代はそもそもLaravelが普及してないので事例は少ないけどフロントとの統合はそれぞれ独自にやっていた。
2015年のLaravel5.0からElixirが登場。後にmixに改名。
https://laravel.com/docs/5.0/elixir
5.3からVueが標準搭載。
スターターキットの時代にはVue,React,Livewire。
10年で色々変わったけどフロントが必須なのは同じ。
2025年現在ではさらに時代が回って「LaravelならLivewireで十分」って認識が普及している。
ベテラン勢はリポジトリパターンとかAPIとフロントの分離とかそういうのは何もかも全部やってきた上で「LaravelはLaravelらしい使い方するのが一番いい」という結論に至っている。
別にフロントの知識が不要になったわけでもない。
tailwindのビルドはするし、Livewireが裏で何をしてるかの理解は必要。
フロントのことは当然知ってる前提で実務上はLivewireで開発速度を上げる。
Use a Custom Eloquent Query Builder:
Define your own Builder class with reusable methods, then tell your model to use it by overriding newEloquentBuilder(). For example:
// app/Models/Builders/ProductBuilder.php
namespace App\Models\Builders;
use Illuminate\Database\Eloquent\Builder;
class ProductBuilder extends Builder
{
public function active()
{
return $this->where('is_active', true);
}
public function pricedAbove(float $minPrice)
{
return $this->where('price', '>=', $minPrice);
}
}
// app/Models/Product.php
namespace App\Models;
use App\Models\Builders\ProductBuilder;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
public function newEloquentBuilder($query): ProductBuilder
{
return new ProductBuilder($query);
}
}
Now you can fluently chain:
$premium = Product::active()->pricedAbove(100)->get();
laravel/framework v11.44.6
https://github.com/laravel/framework/releases/tag/v11.44.6
11.x: EncodedHtmlString が HtmlString のインスタンスを無視するように修正しました。
laravel/framework v12.10.2
https://github.com/laravel/framework/releases/tag/v12.10.2
12.x: Model@relationLoadedでリレーションがnullの場合に対応しました。
laravel/framework v11.44.5
https://github.com/laravel/framework/releases/tag/v11.44.5
11.xでMarkdown形式のメールエンコーディングを切り替えられるようになりました。
laravel/framework v12.10.1
https://github.com/laravel/framework/releases/tag/v12.10.1
- ‘when’ メソッドでの value() ヘルパー導入を取り消し、元の挙動に戻した
- 12.x 系でビューの変更検出に xxh128 ハッシュを使用するよう改善
- 12.x 系の HasRelationships::relationLoaded() で関連モデルがイテラブルであることを保証
- 12.x 系の AssertableJsonString::assertJsonPath で Enum 型をサポート
laravel/framework v11.44.4
https://github.com/laravel/framework/releases/tag/v11.44.4
11.x: メールの message
テンプレートから誤った構文を削除しました。
laravel/framework v11.44.3
https://github.com/laravel/framework/releases/tag/v11.44.3
- 10.x: 接続切断検出時のエラーメッセージを改善(Debian bookworm互換性向上)
- 10.x: league/commonmark の最低バージョンを引き上げ
- 10.x: PHP 8.4 の str_getcsv 非推奨対応を 11.x からバックポート
- 10.x: 特定ルールクラス内での Validator インスタンス属性名を修正
- Illuminate\Support\EncodedHtmlString クラスを追加
- 11.x: assertOnlyJsonValidationErrors に return $this を追加
- 11.x: EncodedHtmlString が破壊的変更を起こさないよう修正
- 11.x: AboutCommand がキャッシュ済みビューのカスタムパスを正しく扱うように
- 11.x: Str::trim で全ての不可視文字を除去対象に含めるよう改善
- 11.x: テストを改善