// app/Console/Commands/ImportUsers.php
public function handle(UserImportService $service)
{
$result = $service->run();
$this->info("Imported {$result->count} users.");
}
// app/Services/UserImportService.php
public function run(): ImportResult
{
// ロジックだけ
return new ImportResult($count);
}
メリット
責務が明確
テストしやすい
Web/Queue からも使える
2) サービスに「出力用のインターフェース」を渡す(柔軟)
サービスに $output を渡し、必要なら出力できるようにする。
public function handle(UserImportService $service)
{
$service->run($this->output);
}
public function run(OutputStyle $output)
{
$output->writeln('Start importing...');
}
メリット
サービス側で進捗を出したいときに便利
テスト時はモックできる
デメリット
サービスが CLI 依存になる(ただしインターフェースなので軽減)
3) サービス側で Log に書き、コマンド側で表示(間接方式)
サービスはログだけ残し、コマンドが必要に応じて表示。
// Service
Log::info('Import started');
// Command
$this->info('Import started');
最近、WordPress界隈で「AI Building Blocks for WordPress」という言葉を耳にする機会が増えてきましたよね。WordPress AIチームが、オープンウェブにおけるパブリッシングの民主化をさらに推し進めるために、精力的に取り組んでいる未来の基盤です。
このAI Building Blocksは、開発者だけでなく、私たちWordPressユーザー全員が、より強力で柔軟なAI機能をサイトに実装できるようにするために設計されています。今回は、この革新的な4つの構成要素(Building Blocks)を、初めての方にも親しみやすく、かつ深く解説し、それが日常のWeb制作にどのような革命をもたらすか、所感を交えて語りたいと思います!
AI Building Blocks for WordPressの全体像
AI Building Blocksは、以下の4つの主要なプロジェクトによって構成されています。これらの要素が連携することで、WordPressサイトの内部からも外部からも、AIを活用した機能やワークフロー、インテリジェントなエージェント(代理人)を構築できるようになります。
所感: AI Experiments Pluginを通じて、このようなAIの協調的な役割が探求されることで、Web制作者は面倒な校正やリライト作業から解放され、よりクリエイティブな戦略立案やコンテンツの構成に集中できるようになるはずです。AIはもはや単なるジェネレーターではなく、「チームメンバー」の一人になるのです。
応用例 3: 柔軟で持続可能なAIプロバイダー選択
AI技術は日進月歩で、最適なLLMは常に変わっていきます。
未来の応用(PHP AI Client SDK): サイト運営者は、PHP AI Client SDKによって得られるプロバイダー選択の自由を最大限に活用できます。
AI Building Blocksは、WordPressの未来、そしてWeb制作の未来を形作るための壮大なプロジェクトです。特に、その多くが、将来的なWordPress Coreへの統合を見据えつつ、今はComposerパッケージやFeature Pluginとして提供される「canonical first, Core when ready」の哲学に基づいて進められている点も、開発者として安心できる要素です。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class User extends Model
{
/**
* ユーザーに属するロール
*/
public function roles(): BelongsToMany
{
return $this->belongsToMany(Role::class);
}
}
ルート定義
routes/web.phpファイルに以下のルートを定義してあるとしましょう。
use App\Http\Controllers\UserController;
Route::get('/users/{user}', [UserController::class, 'edit'])->name('user.edit');
Route::put('/users/{user}', [UserController::class, 'update'])->name('user.update');