Twinkle
tailwindlabs/tailwindcss v4.1.7
https://github.com/tailwindlabs/tailwindcss/releases/tag/v4.1.7
追加:
- bare 値から named 値へのマイグレーション機能を追加
- テンプレート移行のパフォーマンス向上のためキャッシュを導入
修正:
- 候補抽出時に数字の前のアンダースコアを許可
- テーマ指定とユーティリティ指定の併用で重複サジェストが出ないように
- ::before/::after 内のメディアクエリが本番ビルドで有効な CSS ルールになるように
- 単独 CLI 実行後に一時ファイルが残らないように
- -rotate- 系ユーティリティで任意値のネガティブ指定が正しく機能するように
- レガシー JS プラグインの :merge() カスタムバリアントを無視
- Clojure ファイルからドットを含むクラス名を正しく抽出
- @import … source() 使用時のエラーを修正
- 名前付き値ユーティリティのケバブケース化
- Vue の class 以外の属性バインディングでユーティリティ名と一致する文字列を移行対象から除外
Devin
オープンソースのなんたらでクレジットもらったので試している。
Devinだとシェルでコマンドの実行やブラウザも動かせるのでLaravelの開発に必要なこともできそう。
GitHubや最新の公式ドキュメントを読みにいくってことができるので普通に一人分の働きができる。
https://devin.ai/
composer/composer 2.8.9
https://github.com/composer/composer/releases/tag/2.8.9
主な修正内容:
- バージョン検証時の JSON スキーマ問題を解消
update --lock
実行後に不要に発動していたbump-after-update
トリガーを無効化ZipArchive
使用時の ZIP 爆弾誤検知を修正- 空のアーカイブが生成される問題を解決
composer <スクリプト名>
実行時のスクリプト出力を抑制
laravel/laravel v12.0.8
https://github.com/laravel/laravel/releases/tag/v12.0.8
12.xでREADME内のURLフォーマットを整理しました。
laravel/framework v12.14.1
https://github.com/laravel/framework/releases/tag/v12.14.1
10.x 系列の主な変更点
- 接続切断検知時のエラーメッセージを改善(Debian bookworm 互換性対応)
- league/commonmark の最低バージョンを引き上げ
- PHP 8.4 の str_getcsv 非推奨対応を 11.x からバックポート
- 特定ルールクラス内での Validator インスタンスの属性名を修正
共通追加機能
- Illuminate\Support\EncodedHtmlString クラスを導入
11.x 系列の主な変更点
- assertOnlyJsonValidationErrors に return $this を追加
- EncodedHtmlString による互換性破壊を修正
- AboutCommand でキャッシュ済みビューのカスタムパスを尊重
- Str::trim がすべての不可視文字を対象に含むよう拡張
- テストスイートの改善
- メールテンプレートの誤った構文を削除
- Markdown メールのエンコードをトグル可能に
- EncodedHtmlString が HtmlString インスタンスを無視するよう修正
- Laravel Passport 13.x のインストールに対応
- league/commonmark の最低バージョンを再度引き上げ
- Timebox 修正をバックポート
- Ubuntu 22.04 上で SQL Server 2017 のテストを実行
- Symfony 7.3 の非推奨警告を解消
- React/Vue TypeScript アプリ向けにブロードキャスト実装を簡易化(Starter Kits)
laravel/framework v12.14.0
https://github.com/laravel/framework/releases/tag/v12.14.0
・日付・年カラムで useCurrent
をサポート
・Number::fileSize
の接頭辞を修正し、prefix パラメータを追加
・whereRaw
の PHPDoc を更新し、Expression を SQL として許可
・Blueprint リゾルバの静的変更を取り消し
・モデルのシリアライズ時に仮想プロパティをサポート
・Http::pool
利用時の preventStrayRequests
エラー伝播を修正
・Schema\Builder のジェネリクス誤使用を修正
・マイグレーション復元・まとめ実行時に MySQL SSL 無効化オプションを追加
・Context
クラスに except
と exceptHidden
メソッドを追加
・コンテナに currentlyResolving
ユーティリティとテストを追加
・バインディング付きルートパラメータのデフォルト値処理を修正
・認証のタイムボックス機能をパスワードリセットにも適用
・BladeCompiler のパフォーマンス最適化
・イベント探索パスでの iterable サポートによる最適化
・AuthorizesRequests::resourceAbilityMap
の型定義を追加
・メモ化キャッシュストアへの柔軟な対応を追加
・Arr::from()
を導入
・morphToMany 関係の getCurrentlyAttachedPivots
での morphClass
誤りを修正
・HTTP クラスの型ヒントを改善
・サービス制限例外ミドルウェアに deleteWhen
を追加
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();