Twinkle
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: ドックブロック内の冗長な型ヒントが整理されました。
laravel/framework v12.32.1
https://github.com/laravel/framework/releases/tag/v12.32.1
- 13.x: scopedBy 属性が継承チェーンに従わない問題を修正
- 12.x: AWS S3アダプターのコンストラクターが装飾されたアダプターインスタンスを許可しない問題を修正
Laravelテストにおけるベストプラクティス:モックの活用
外部サービスや依存関係を持つテストを書く際は、モックやスタブを積極的に活用しましょう。LaravelではMockery
やcreateMock()
メソッドを使って、データベース、API、キューなどの外部サービスをモック化できます。これにより、テストの実行速度が向上し、外部依存性によるテスト失敗を防ぐことができます。
public function testOrderProcessing()
{
// 支払いゲートウェイをモック化
$paymentGateway = Mockery::mock(PaymentGateway::class);
$paymentGateway->shouldReceive('charge')->once()->andReturn(true);
$this->app->instance(PaymentGateway::class, $paymentGateway);
// テストコード...
}
テストを独立させ、予測可能な結果を得るためにモックの活用は非常に効果的なベストプラクティスです。
laravel/framework v12.31.1
https://github.com/laravel/framework/releases/tag/v12.31.1
Bladeコンポーネントのプロパティに対する短縮形「false」構文の再導入を取り消しました。
laravel/framework v12.31.0
https://github.com/laravel/framework/releases/tag/v12.31.0
リリースノート要約
- Viteを7.1.2から7.1.6にアップデート
- Bladeコンポーネントプロパティに短縮「false」構文を再導入
- 数値解析ヘルパーがfalseを返せるように変更
- RedisTaggedCacheのflushメソッドをカスタム接続に対応するようリファクタリング
- 例外レンダラーにライト・ダークスキームを使用するように変更
- loggerヘルパーとlog関数の戻り値型を具象型LogManagerから抽象型LoggerInterfaceに変更
- セッション値の欠落アサーションを修正
- median()関数のdiv演算子をintdiv()に置換
- PHP 8.5でのnull-keyに関する非推奨警告を修正
Rollback and Migrate with Foreign Key Constraints
When dealing with database migrations in Laravel, a common problem occurs when trying to modify tables that have foreign key relationships. Attempting to drop a column or table that's referenced by foreign keys will typically result in an error.
Laravel solves this elegantly with the Schema::disableForeignKeyConstraints()
and Schema::enableForeignKeyConstraints()
methods.
Here's how to implement this technique:
public function up()
{
Schema::disableForeignKeyConstraints();
// Your migration logic here
Schema::table('orders', function (Blueprint $table) {
$table->dropColumn('old_user_id');
$table->foreignId('user_id')->constrained();
});
Schema::enableForeignKeyConstraints();
}
This approach temporarily disables foreign key checks during the migration, allowing you to make changes that would otherwise be blocked by constraint violations. After your changes are complete, the constraints are re-enabled.
This technique is particularly useful when:
- Refactoring table relationships
- Renaming or dropping columns that have foreign keys pointing to them
- Running migrations in a specific order becomes challenging
- Working with complex database structures with many interdependencies
Remember to always re-enable the constraints to maintain data integrity in your application.
laravel/framework v12.30.1
https://github.com/laravel/framework/releases/tag/v12.30.1
要約:
Laravel 12.x において、順序位置に国際化拡張機能チェックを適用し、問題を防止する修正が行われました。
laravel/framework v12.30.0
https://github.com/laravel/framework/releases/tag/v12.30.0
Laravel フレームワークリリースノートの要約
- phiki/phiki パッケージの 2.0.0 より新しいバージョンを許可
- memoryExceededExitCode にヌル合体演算子を使用
- RouterRegistrar で定義された 'can' 関数の修正
- SQS FIFO とフェアキューサポートの修正
- Redis キャッシュタグを原子的にフラッシュするよう改善
- Illuminate\Support\Str に型ヒントを追加
- Database Connection の getElapsedTime コメントを時間単位を明記するよう更新
- バリデーションメッセージに序数位置のサポートを追加
- Windows での例外フレームファイルパスの修正
- 新しい例外ページのコピーボタンにフォールバックを追加
- Illuminate/Support/Benchmark に Macroable トレイトを追加
laravel/framework v12.29.0
https://github.com/laravel/framework/releases/tag/v12.29.0
リリースノート要約
- キャッシュされたルートと未キャッシュのルートでアクションと名前を解決する際の優先順位が同じになるよう修正
- SQLiteで任意のプラグマを設定可能に
- "fakerphp/faker"をインストールしなくても使用できるよう対応
- MariaDBのinnodb_snapshot_isolation=ONに対応
- PhpRedisパックで数字を無視するオプションを追加
- バックドEnum型をDynamic Bladeコンポーネントで使用可能に
- 指定したグローバルスコープのみを保持するwithoutGlobalScopesExcept()を追加
- schedule:workコマンドに--whisperオプションを追加
- LazyCollectionにtakeUntilTimeoutのコールバックサポートを追加
- Enumに
Castable
のサポートを追加 - キャッシュセッションドライバーを実装
- モデルに#[UseResource(...)]と#[UseResourceCollection(...)]属性のサポートを追加
- コンテキスト依存のビルダーで無限メソッドチェーンが可能に
- キュー可能リスナーで動的なtries()メソッドを有効化
- ScheduleListCommandに--jsonオプションを追加
- QueueWorkerのメモリ超過時の終了コードを制御する機能を追加
- ローカル例外ページを更新
- laravel-cloud-socketがLOG_LEVELを尊重するよう修正
新bootcamp (Laravel12版)
スターターキットは使ってないので入門用として長く使えそうな作りになっている。
https://github.com/laravel/bootcamp
https://laravel.com/learn
Laravelで独自のArtisanコマンドを作成する方法
概要
Laravelでは、独自のArtisanコマンドを作成して特定のタスクを自動化することができます。ここでは、カスタムArtisanコマンドの作成方法を説明します。
コマンドの作成
まず、以下のArtisanコマンドを使用して新しいコマンドクラスを生成します:
php artisan make:command TaskName
これにより、app/Console/Commands
ディレクトリに新しいコマンドクラスファイルが作成されます。
コマンドの構造
生成されたクラスは以下のような構造になっています:
namespace App\Console\Commands;
use Illuminate\Console\Command;
class TaskName extends Command
{
/**
* コマンドの名前と説明
*/
protected $signature = 'app:task-name';
protected $description = 'コマンドの説明';
/**
* コマンドの実行
*/
public function handle()
{
// コマンドのロジックをここに書く
$this->info('タスクが実行されました!');
}
}
コマンドのカスタマイズ
シグネチャの設定
$signature
プロパティを使用してコマンド名と引数、オプションを定義します:
// 基本的なコマンド名
protected $signature = 'app:send-emails';
// 引数付き
protected $signature = 'app:send-emails {user}';
// オプション引数
protected $signature = 'app:send-emails {user?}';
// デフォルト値付き引数
protected $signature = 'app:send-emails {user=all}';
// オプション
protected $signature = 'app:send-emails {--queue}';
// 値を取るオプション
protected $signature = 'app:send-emails {--queue=}';
ロジックの実装
handle()
メソッド内に実際のコマンドロジックを実装します:
public function handle()
{
// 引数の取得
$user = $this->argument('user');
// オプションの取得
$queue = $this->option('queue');
// 処理の実装
$this->info('処理を開始します...');
// 何らかの処理を実行
$this->info('処理が完了しました!');
}
コマンドの登録
新しいコマンドを登録するには、app/Console/Kernel.php
の$commands
配列にクラスを追加します:
protected $commands = [
\App\Console\Commands\TaskName::class,
];
Laravel 5.5以降では自動検出機能によりこの手順は通常不要です。
コマンドの実行
作成したコマンドは以下のように実行できます:
php artisan app:task-name
まとめ
独自のArtisanコマンドを作成することで、繰り返し行うタスクを自動化し、開発ワークフローを効率化できます。データベース操作、ファイル生成、APIとの連携など、さまざまな用途に活用できるため、Laravelプロジェクトの管理に非常に役立ちます。