クラウドソリューション事業部の中村です。
今回は AWS Transform の Power を使って、10年以上前の PHP 5.3 アプリを PHP 8.5 にアップグレードしてみました。結論から言うと、Kiro に「PHP 8.5 にモダナイズしたい」と打つだけで、コード変更から Docker イメージの書き換え、PHPUnit のアップグレードまで一通りやってくれました。
AWS Transform とは
AWS Transform は、AWS が提供するエージェント型の AI サービスで、コードのアップグレードや移行を自動化してくれるサービスです。Java、Python、Node.js のバージョンアップや AWS SDK の移行が可能になります。
2026年4月に Kiro Power として使えるようになった ので、Kiro IDE から直接変換を実行できるようになりました。
参考:
AWS Transformが使用するAIについて
AWS TransformはKiroやBedrockを直接呼ぶのではなく、AWS Transform サービスの APIを経由して通信しています。AI モデルの選択や呼び出しはサービス側で管理されているため、具体的にどのモデルが使われているかは公式には明示されていません。
実際のコード変換処理は AWS Transform サービス側の AI エージェントが行う感じになります。
料金について
AWS Transform custom の料金は「エージェント分」という単位で課金されます。
| 項目 | 内容 |
| 単価 | $0.035 / エージェント分 |
| 最小課金単位 | 1分 |
| 課金対象 | エージェントがコードの分析・変換を行っている時間 |
複数のエージェントが並列で動作するため、実際の経過時間よりもエージェント分の合計が大きくなることがあるようです。
詳しくは AWS Transform の料金ページ をご確認ください。
今回のターゲット
使ったのは aws-samples/aws-demo-php-simple-app という AWS のデモアプリです。最終アクティビティが10年以上前という、なかなかの年代物です。
| バージョン | |
| PHP | 5.3(ヘッダーで確認) |
| Base Image | CentOS 6 |
| PHPUnit | 4.x |
引用:aws-samples/aws-demo-php-simple-app - GitHub
事前準備
Kiro Power のインストール
AWS Transform の Power は、記事執筆時点では Kiro の AVAILABLE 一覧に出てこなかったので、kirodotdev の GitHub リポジトリ から URL で直接追加しました。
AWS Transform Kiro Power:AWS Transform Kiro Power - GitHub
KiroからAWS Transformを実行してみる
前提条件の確認
AWS Transform Kiro Power を使うには以下が必要です。
- AWS CLI(認証情報設定済み)
- ATX CLI(AWS Transform のコマンドラインツール)
ATX CLI は Kiro Power が自動でインストールしてくれました。ありがたいですね。
AWS TransformでTransformation Definition (以降TD) を作る
TDを使って、何をどう変換するかを指定します。Java や Python、Node.js のバージョンアップ用の TD は AWS が用意してくれているのですが、PHP 用はまだ提供されていません。
ということで、自分で TD を作成します。Kiro に「TD がないよ」と言われたので、言われた通りに atx -t を別ターミナルで実行。対話形式で何をしたいかを聞かれるので、Kiro が考えてくれた TD の説明文をそのまま入力して変換内容を定義していきます。
TD ができたら公開します。ここでいう「公開」は自分の AWS アカウント上に登録するという意味合いですね。
(Publishをタイポしています🫣)
モダナイゼーション開始
今回は小規模なコードベースなので、ローカルモードで実行しました。リモートモードだと AWS Batch/Fargate で大規模に並列実行できるとのことなので、そちらもいずれ試してみようと思います。
AWS Transform が作ったプラン
AWS Transform が自動でリポジトリを分析して、3ステップの変換プランを作ってくれました。作成されたプランは こちら にアップロードしていますので、詳細が気になる方はご確認ください。
| Step | 内容 | 対象ファイル数 |
| 1 | PHP 構文のモダナイズ(array() → []、型宣言追加、?> 削除など) | 9 |
| 2 | Dockerfile の更新(CentOS 6 → php:8.5-apache) | 1 |
| 3 | PHPUnit 4.x → 11.x へのアップグレード | 4 |
plan.json:PHP 5.3 → PHP 8.5 plan.json - GitHub
変換の実行
プランが確定したら、あとは AWS Transform が自動で変換を進めてくれます。各ステップごとにコミットしてくれます。
変換にかかった時間はおよそ30分でした。
AWS Transformによる自動検証
AWS Transform は各ステップの変換後に、Docker ビルドや PHP 構文チェック、PHPUnit の実行といった検証を自動で走らせてくれます。最終的に全8つの終了基準がパスし、テストも全パスでした。
1PHPUnit 11.5.55 by Sebastian Bergmann and contributors.
2
3Runtime: PHP 8.5.5
4Configuration: /app/phpunit.xml
5
6...... 6 / 6 (100%)
7
8Time: 00:13.092, Memory: 8.00 MB
9
10OK (6 tests, 6 assertions)変換結果を確認してみる
実際の差分は こちらの PR から確認できます。なかなかいい感じですね。
参考:PHP 5.3 → PHP 8.5 Diff - GitHub
起動してみる
ちゃんと動いていますね。レスポンスヘッダーの PHP バージョンも 8.5 になっていることを確認できました。
まとめ
AWS Transform の Kiro Power を使って、PHP 5.3 のレガシーアプリを PHP 8.5 にモダナイズしてみました。
正直なところ、PHP の TD は AWS 公式にはまだ用意されていないので、自分で TD を作る必要があります。
やってくれたことをまとめると:
- PHP 構文のモダナイズ(array() → []、型宣言、null 合体演算子)
- Dockerfile の書き換え(CentOS 6 → php:8.5-apache)
- PHPUnit 4.x → 11.x へのアップグレード
- 各ステップごとの自動検証(Docker ビルド、構文チェック、テスト実行)
全部で約30分、コストは $2.38 でした。今回のコードベースは小規模なので手動でもそこまで時間はかからないかもしれませんが、分析・変換・検証をエージェンティックループで自動的に回してくれるのは非常に助かりますね。
今回はローカルモードで1リポジトリだけでしたが、リモートモードなら最大128並列で大量のリポジトリを一気に変換できるとのことなので、大規模なモダナイゼーションプロジェクトにはかなり有効だと感じました。
本記事では小規模なデモアプリケーションに対してAWS Transformを使用し変換しただけとなります。実際のPHPモダナイゼーションでは十分なテストが揃っていないケースも多く、構文上は問題なくとも実行時の入力値やDBの値によってWarningやエラーが表面化することがあります。AWS Transformは強力なツールとなりますが、実データに依存する挙動については人間の確認が必要となると思われます。
弊社ではツールを使った変換だけでカバーしきれない部分も含めてPHPモダナイゼーションを支援しています。レガシーPHPでお困りの方は、ぜひお気軽にご相談ください。
