Twinkle
Laravel Boost Custom CodeEnvironment for GitHub Copilot CLI
laravel/framework v12.36.0
https://github.com/laravel/framework/releases/tag/v12.36.0
リリースノート要約
- Http\Client\Batchのコンストラクタからreturn voidを削除
- ファイルキャッシュロックキーの名前空間化
- コンストラクタから@returnタグを削除
- 不足していた@throwsアノテーションを追加
- セッターでのチェーン呼び出しを許可
- S3ファイルシステムパスの二重プレフィックス問題を修正
- Uriビルダーメソッドのテストを追加
- jsonSerializeメソッドをmatch式を使用してリファクタリング
- リダイレクトレスポンスで同一オリジンを強制
- Eloquentコレクションに「setAppends」と「withoutAppends」メソッドを追加
- 多数のキーがある場合のRedisキャッシュタグフラッシュ時のバッファオーバーフロー修正
- バリデーターメッセージのプレースホルダーの大文字化を許可
- Model::__sleep()の戻り値からプロパティフックを除外
- Http::poolとHttp::batchに同時実行制御を追加
Laravel Boostの使いにくさが完全に解決した
Copilot CLIに--additional-mcp-configが追加されてもエラーで使えなかったけどやっと正しい設定方法が判明。
Laravel Boostが作るデフォルトのjsonがどういう環境を前提にしてるのか分からないほど間違ってる。
GitHub Copilot CLIでのLaravel Boost使用方法
https://github.com/orgs/invokable/discussions/22
The tap() Method in Laravel
One of Laravel's lesser-known yet powerful methods is tap(). This elegant utility allows you to work with a value, perform actions on it, and then return the original value regardless of the callback's return value.
The method signature is simple:
tap($value, $callback = null)
This helper is particularly useful when you want to perform actions on an object and continue chaining methods without breaking the flow. For example:
return tap(new User, function ($user) {
$user->name = 'Taylor';
$user->email = 'taylor@example.com';
$user->save();
});
Instead of assigning the user to a variable, performing operations, and then returning it, tap() handles this cleanly in one expression.
When working with collections, it's invaluable for performing side effects while maintaining chainability:
return $users->filter(function ($user) {
return $user->isActive();
})->tap(function ($filteredUsers) {
Log::info('Filtered users: ' . $filteredUsers->count());
})->map(function ($user) {
return $user->profile;
});
This simple method can significantly clean up your code by reducing variable assignments and improving readability in complex operations.
laravel/framework v12.35.1
https://github.com/laravel/framework/releases/tag/v12.35.1
リリースノート要約
- セッションに以前のルート名を保存する機能を追加
- 最小限の例外ビューのCSSを更新
- HTTPバッチ結果がリクエストと同じ順序で返されるように修正
Batchクラス内のResponse名前空間を修正NamedScopeをScopeにリネーム- S3アダプターが正しいパス区切り文字を使用するように修正し、関連テストを更新
- BootcampをLaravel Learnに置き換え
QueueFailedOverイベントに例外を渡すよう修正- サーバーワーカーが尊重できない場合に警告を追加
- フェイルオーバー使用時にキャッシュイベントで基盤となるストア名を発行するよう修正
laravel/framework v12.35.0
https://github.com/laravel/framework/releases/tag/v12.35.0
- すべてのデータベースで
DB::update()をサブクエリで使用できない問題を修正 - AnyOf、Can、Enumでカスタムバリデーションメッセージが動作するように修正
- ResolvesDumpSourceでNeovimエディタをサポート
- 例外発生時にクリック可能なファイル参照を追加
- クエリツールチップで改行を表示
- SQS FIFOとフェアキューのmessageGroup()メソッドサポートを追加
- MariaDBで
json_value()を使用するように変更 - 遅延キューを実装
- 整数バリデーションのPHPドキュメントタイプ注釈を修正
- Number::format()に可算オブジェクトを渡す際の問題を修正
- Route::middlewareでnullを受け入れるように更新
- ダンプソースのhrefで最初のbasePathのみを置換するように修正
- Encrypterクラスに不足していた@throws注釈を追加
- Database Connectionクラスに不足していた@throws注釈を追加
- テスト改善
- 属性値が配列の場合のvalidateDigitsでTypeErrorを防止
- 例外レンダラーのviteを7.1.6から7.1.11にアップグレード
- フェイルオーバーキャッシュを実装
- イベントの遅延時に未解析のイベントとペイロードを収集するように修正
Contextual Binding for Improved Dependency Injection in Laravel
When you need different implementations of an interface based on the class that's requesting it, use contextual binding:
$this->app->when(PhotoController::class)
->needs(StorageInterface::class)
->give(CloudStorage::class);
$this->app->when(DocumentController::class)
->needs(StorageInterface::class)
->give(LocalStorage::class);
This allows you to inject different implementations of the same interface based on context, making your dependency injection more flexible while maintaining type-hinting throughout your application. Configure these bindings in your service providers to keep your controllers clean and focused on their responsibilities.
laravel/framework v12.34.0
https://github.com/laravel/framework/releases/tag/v12.34.0
リリースノート要約
- PostgreSQLの仮想カラム機能の追加
- Viteのアセットパス生成を継承で拡張可能に変更
- FakeInvokedProcessにwaitUntilメソッドを追加
- Zed、Trae、Windsurf、Kiro、Fleetエディタのサポートを追加
- エラーページのアクセシビリティ向上のためテキスト色を更新
- 構文ハイライト付きクエリのテキスト切り詰め問題を修正
- メールルールのヘルパーメッセージを修正
- Auth::login()中にセッションを再生成するように変更
- HTTP batchにdeferメソッドを追加
- キューのフェイルオーバー機能のプロトタイプ
- throw_if関数でクロージャーをサポート
- PHPUnit 12.4のサポート追加
- PHP 8.5のnull配列インデックス非推奨に関する修正
- マルチバイトロケールでのスケジュールリストCLIフォーマットを修正
- その他コードのフォーマット修正、ドキュメントブロックの改善
GitHub Copilot CLI+Godot+Godot MCP+PixelLab MCPのセットアップ
LaravelのAPIリソース:より良いAPI開発のための技術
LaravelのAPIリソースは、モデルをJSON形式に変換する際のレイヤーとして機能します。この技術は、APIレスポンスを構造化し、一貫性のあるデータ形式を提供する強力な方法です。
APIリソースを使用すると、データベースから取得したEloquentモデルを、APIクライアントに返す前に簡単に変換できます。例えば:
class UserResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->created_at->format('Y-m-d'),
// 必要なフィールドのみを含める
];
}
}
この方法を使うと、モデルの特定のプロパティだけを公開でき、センシティブなデータを除外したり、データ形式を変更したりすることが容易になります。また、コレクションリソースを使用して複数のリソースをまとめて処理することも可能です。
APIリソースを使用することで、ビジネスロジックとプレゼンテーションロジックを分離し、クリーンで保守しやすいAPIインターフェイスを構築できます。
laravel/framework v12.33.0
https://github.com/laravel/framework/releases/tag/v12.33.0
リリースノート要約
- orderByRaw表現を使用するクエリのコンパイルを修正
- Str::is*(...) チェック後の型の絞り込みを改善
- 無効なドキュブロックを修正
- switchをmatchに書き換える複数のリファクタリング
- 例外フレームコンポーネントの丸み問題を修正
- グループ内でのジョブ呼び出しが期待通りに動作するよう保証
- Str::apaメソッドから重複単語を削除
- docblockに|nullを追加
- config:cacheとoptimizeコマンドのシリアライズ不可能な値に関するエラーメッセージを改善
- StartSessionミドルウェアでクッキーの有効期限がセッションの有効期限と一致するよう保証
- PostgreSQL 18でテストを実行
- テスト内での繰り返し挿入を削減
- 複雑な条件でのpushIfブレードディレクティブの使用を修正
- API対称性に合わせてStringable::doesntContain()を追加
- Broadcasterを取得する際のBroadcastManagerエラーメッセージを改善
- HTTPクライアント:上書きせずにURLパラメータを結合するmergeUrlParameters()を追加
LaravelのAPIリソーステクニック: リソーストランスフォーメーション
Laravelは、APIレスポンスデータを変換して整形するための強力な「APIリソース」機能を提供しています。これはモデルやモデルコレクションをJSON構造に変換する際に特に役立ちます。
APIリソースを使用するには、まず以下のコマンドでリソースクラスを生成します:
php artisan make:resource UserResource
生成されたリソースクラスでは、toArrayメソッドをカスタマイズして、APIレスポンスの形式を定義できます:
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'created_at' => $this->created_at->format('Y-m-d'),
// 必要なフィールドのみを含める
];
}
コントローラーでは次のように使用します:
public function show(User $user)
{
return new UserResource($user);
}
このテクニックを使用することで、データベースモデルとAPIレスポンスの間に抽象化層を作成し、クライアントに公開するデータを厳密に制御できます。また、データ構造の変更がAPIに影響を与えるのを防ぎ、APIバージョニングを容易にします。
GitHub Copilot CLI
これでもまだ「プロジェクトローカルのMCP設定を使う」がやりにくいのでPhpStorm+Laravel Boostの問題は解決しない。
XDG_CONFIG_HOMEで~/.configディレクトリの場所は変更できるけどMCP設定だけ変更はまだできない。
https://github.com/github/copilot-cli
Claude Codeと違ってWSL環境にすんなりインストールできたのは良し。
laravel/framework v12.32.4
https://github.com/laravel/framework/releases/tag/v12.32.4
ComposerScripts::prePackageUninstall() 内で Container::getInstance() を使用するように変更されました。
laravel/framework v12.32.3
https://github.com/laravel/framework/releases/tag/v12.32.3
- 12.x: LARAVEL_STARTが未定義の場合に定義するようになりました。
- 12.x: ドックブロック内の冗長な型ヒントが整理されました。