目次

AWS Transform v2.0 完全ガイド

公式ドキュメント


1. 本質と位置付け

AWS Transform は 「生成 AI(Amazon Q Developer)を活用してレガシーコード(COBOL・Java・.NET)を自動変換・モダナイズするマネージドサービス」 である。2024 年 GA。コード意味理解 AI が大規模ソースコードを分析・変換し、数百万行のレガシーアプリケーション現代化を数ヶ月で実現する。

サービス概要

  • 対応言語:COBOL / PL/I → Java、Java 8/11 → Java 17/21、.NET Framework → .NET、Assembler → COBOL
  • 変換内容:言語アップグレード、フレームワーク近代化(Spring Boot 2 → 3)、UI 現代化(CICS → Angular/React)
  • 実行形式:AWS コンソール、CLI、CodeBuild パイプライン統合
  • 価格モデル:$0.0011/行(変換対象コード行数に応じた従量課金)
  • 品質保証:自動ビルド検証、単体テスト実行、差分レポート生成

このサービスを選ぶ理由

なぜ AWS Transform でないといけないのか?

  1. 意味的なコード変換(生成 AI の価値)

    • 単純な正規表現・検索置換ツール:javax → jakarta パッケージ置換のみ
    • AWS Transform(Amazon Q Developer):コードのビジネスロジック・パターンを理解
    • 例)Spring Boot 設定ファイル自動生成、API Gateway 統合の推奨設定
    • 例)COBOL COPY BOOK → Java POJO に意味的に変換
    • 変換精度:業界平均 70% → AWS Transform 95%+
  2. 大規模プロジェクトのコスト削減

    • 100 万行の .NET Framework アップグレード:
      • 手動リファクタリング:3~5年、チーム 20人、総コスト $5M~8M
      • AWS Transform:3~6ヶ月、AI 変換 + QA、総コスト $1,100 + インフラ + 人件費(QA のみ)
      • ROI:6~12ヶ月で回収
  3. ビルド検証付き変換

    • 単なるコード生成でなく、変換後のコードを自動ビルド・コンパイルエラー修正・単体テスト実行
    • 変換品質の機械的保証(VS 手動コードレビューの属人性排除)
  4. AWS クラウドネイティブへの最短経路

    • COBOL の JCL バッチ → AWS Batch / Step Functions
    • メインフレーム CICS 画面 → Angular/React SPA
    • VSAM ファイルシステム → RDS / DynamoDB
    • 完全なモダンアーキテクチャへの段階的移行

2. 対応する変換タイプ詳細

2.1 .NET Framework アップグレード

対応バージョン:.NET Framework 3.5 / 4.0 / 4.5 / 4.6 → .NET 6 / 7 / 8

変換範囲

  • Web.config → appsettings.json の自動変換
  • System.* → Microsoft.* 名前空間の置換
  • 非推奨 API の現代的な代替への自動置換
  • NuGet パッケージ互換性チェック・アップグレード
  • WCF(Windows Communication Foundation)→ gRPC / ASP.NET Core への提案
// 変換前(.NET Framework 4.8)
[ServiceContract]
public interface IOrderService
{
    [OperationContract]
    Order GetOrder(int orderId);
}

// 変換後(.NET 8)
public interface IOrderService
{
    Task<Order> GetOrderAsync(int orderId);
}

[ApiController]
[Route("api/[controller]")]
public class OrdersController : ControllerBase
{
    [HttpGet("{id}")]
    public async Task<ActionResult<Order>> GetOrder(int id)
    {
        // ASP.NET Core で実装
    }
}

2.2 Java バージョンアップグレード

対応バージョン:Java 8 / 11 → Java 17 / 21 LTS

変換範囲

  • Spring Boot 2.x → 3.x のアップグレード
  • javax.* → jakarta.* パッケージの完全置換(Jakarta EE 10)
  • 非推奨の Collection API → Modern Streams API
  • 古い XML/JSON パーサー → Jackson / GSON アップグレード
// 変換前(Java 8 + Spring Boot 2.x)
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp();
    }
}

// 変換後(Java 17 + Spring Boot 3.x)
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/jsp/", ".jsp");
    }
}

2.3 メインフレーム COBOL → Java Spring Boot

対応スコープ

  • COBOL オンラインプログラム(CICS TXN)→ Spring Boot REST API
  • COBOL バッチ(JCL)→ Spring Boot Batch / AWS Batch ジョブ
  • VSAM ファイルシステム → JPA / Hibernate ORM
  • COBOL COPY BOOK → Java POJO / DTO 自動生成
* 変換前(COBOL)
       IDENTIFICATION DIVISION.
       PROGRAM-ID. ORDPROC01.
       DATA DIVISION.
       FILE SECTION.
       FD  ORDER-FILE.
       01  ORDER-REC.
           05  ORDER-ID PIC 9(8).
           05  ORDER-AMT PIC 9(7)V99.
           05  CUST-ID PIC 9(5).
// 変換後(Java)
@Entity
@Table(name = "orders")
public class Order {
    @Id
    @Column(name = "order_id")
    private Long orderId;
    
    @Column(name = "order_amount")
    @Digits(integer = 7, fraction = 2)
    private BigDecimal orderAmount;
    
    @Column(name = "customer_id")
    private Long customerId;
}

@Service
public class OrderProcessingService {
    @Autowired
    private OrderRepository orderRepository;
    
    public Order processOrder(Long orderId) {
        Order order = orderRepository.findById(orderId)
            .orElseThrow(() -> new OrderNotFoundException());
        // ビジネスロジック
        return orderRepository.save(order);
    }
}

2.4 VMware / Container 化(プレビュー機能)

VM 上で実行されているアプリケーション → Dockerfile / ECS / EKS タスク定義への変換。


3. AWS Transform 実行フロー

フェーズ 1:コード分析・準備

┌─────────────────────────────────────────────────────────┐
│ ステップ 1: ソースコード収集                            │
├─────────────────────────────────────────────────────────┤
│ · ソースコードを S3 に配置                              │
│ · ビルドスクリプト / Maven pom.xml / .csproj を準備   │
│ · 依存関係ライブラリを s3://dependencies/ に配置       │
└─────────────────────────────────────────────────────────┘
         ↓
┌─────────────────────────────────────────────────────────┐
│ ステップ 2: CodeBuild プロジェクト構成                 │
├─────────────────────────────────────────────────────────┤
│ · buildspec.yml 作成(ビルド・テストコマンド)         │
│ · 環境変数(JAVA_VERSION, MAVEN_VERSION など)         │
│ · S3 出力パス(変換結果保存先)                         │
└─────────────────────────────────────────────────────────┘
         ↓
┌─────────────────────────────────────────────────────────┐
│ ステップ 3: AWS Transform ジョブ作成                   │
├─────────────────────────────────────────────────────────┤
│ · 変換タイプ選択(JAVA_UPGRADE / DOTNET_UPGRADE)    │
│ · 入出力 S3 パス指定                                    │
│ · ターゲットバージョン指定                              │
└─────────────────────────────────────────────────────────┘

フェーズ 2:AI による自動変換

# AWS Transform ジョブ作成
aws transform start-job \
  --job-name "legacy-app-dotnet-modernization" \
  --transformation-type NET_FRAMEWORK \
  --input-location '{
    "s3Bucket": {
      "s3BucketName": "my-legacy-apps",
      "s3KeyPrefix": "legacy-dotnet-4.8/"
    }
  }' \
  --output-location '{
    "s3Bucket": {
      "s3BucketName": "my-modernized-apps",
      "s3KeyPrefix": "modern-dotnet-8/"
    }
  }' \
  --server-side-encryption-strategy AWS_OWNED_KEY

# ジョブ進捗確認
aws transform get-job --job-id job-0123456789abcdef0

# 出力形式:
# {
#   "job": {
#     "jobId": "job-0123456789abcdef0",
#     "jobName": "legacy-app-dotnet-modernization",
#     "transformationType": "NET_FRAMEWORK",
#     "status": "IN_PROGRESS",
#     "inputLocation": { ... },
#     "outputLocation": { ... },
#     "createdTime": 1694000000.0,
#     "progressReport": {
#       "filesAnalyzed": 542,
#       "filesTransformed": 328,
#       "filesWithIssues": 27
#     }
#   }
# }

フェーズ 3:ビルド・検証

# buildspec.yml(変換後のコード検証)
version: 0.2

phases:
  install:
    runtime-versions:
      dotnet: 8.0
  
  pre_build:
    commands:
      - echo "Restoring NuGet packages..."
      - dotnet restore src/
  
  build:
    commands:
      - echo "Building transformed code..."
      - dotnet build src/ --configuration Release
      - echo "Running unit tests..."
      - dotnet test src/Tests/ --logger:"trx;LogFileName=test-results.trx"
  
  post_build:
    commands:
      - echo "Creating artifact..."
      - dotnet publish src/ -o ./publish -c Release

artifacts:
  files:
    - '**/*'
  base-directory: publish/
  name: dotnet-modernized-artifact

フェーズ 4:差分レポート生成

変換レポート(transformation-report.md):

## Transformation Summary
- Total Files Analyzed: 542
- Files Successfully Transformed: 515 (95%)
- Files Requiring Manual Review: 27 (5%)
- Estimated Effort (Manual): 40 hours
- Code Quality Score: 92/100

## Transformation Breakdown

### Automatic Changes
- Framework upgrade (.NET Framework 4.8 → .NET 8): ✅
- Package name updates (System.* → Microsoft.*): ✅
- Configuration migration (app.config → appsettings.json): ✅
- NuGet dependency updates: ✅ (14 packages updated)

### Manual Review Required
⚠️ Legacy WCF usage detected (3 services):
  - OrderService.svc → Requires gRPC/ASP.NET Core migration
  - PaymentService.svc → Consider moving to API Gateway
  
⚠️ Deprecated APIs (8 references):
  - System.Net.ServicePoint → Use HttpClientHandler
  - XmlDocument → Use XDocument (LINQ to XML)

### Performance Improvements
- Async/await support: Ready
- Dependency injection: Configured
- Entity Framework Core: Upgraded (EF 6 → EF Core 8)

4. Java アップグレード実装例

# Java 11 → Java 17 の変換ジョブ
aws transform start-job \
  --job-name "springboot-2-to-3-upgrade" \
  --transformation-type JAVA_UPGRADE \
  --input-location '{
    "s3Bucket": {
      "s3BucketName": "legacy-java-apps",
      "s3KeyPrefix": "springboot-2.x/"
    }
  }' \
  --output-location '{
    "s3Bucket": {
      "s3BucketName": "modernized-java-apps",
      "s3KeyPrefix": "springboot-3.x/"
    }
  }' \
  --transformation-params '{
    "targetJavaVersion": "17",
    "targetSpringBootVersion": "3.0",
    "upgradeStrategy": "FULL_MODERNIZATION"
  }'

変換対象の例

// 変換前(Spring Boot 2.x + Java 11)
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
    List<Order> findByCustomerId(Long customerId);
}

@Service
public class OrderService {
    @Autowired
    private OrderRepository orderRepository;
    
    public List<Order> getCustomerOrders(Long customerId) {
        return orderRepository.findByCustomerId(customerId);
    }
}

// 変換後(Spring Boot 3.x + Java 17)
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
    List<Order> findByCustomerId(Long customerId);
}

@Service
public class OrderService {
    private final OrderRepository orderRepository;
    
    // Java 16+ Records との組み合わせ
    public record CustomerOrdersResponse(
        Long customerId,
        List<Order> orders,
        LocalDateTime retrievedAt
    ) {}
    
    @Autowired
    public OrderService(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }
    
    public CustomerOrdersResponse getCustomerOrders(Long customerId) {
        var orders = orderRepository.findByCustomerId(customerId);
        return new CustomerOrdersResponse(customerId, orders, LocalDateTime.now());
    }
}

5. コンプライアンス・品質保証

5.1 変換品質の指標

品質指標 実測値 業界平均
コード変換成功率 92~98% 60~80%
自動修正率(ビルドエラー) 87% 40%
セキュリティ問題検出 94% 70%
テストケース通過率 96% 75%
手動レビュー必要率 3~8% 20~40%

5.2 セキュリティ検証

# 変換後のセキュリティスキャン実施
aws transform analyze-job \
  --job-id job-0123456789abcdef0 \
  --analysis-type SECURITY_SCAN

# 検出される脆弱性(例)
# ✅ SQL Injection リスク:なし
# ✅ Hardcoded credentials:検出 3件 → 手動対応必要
# ✅ OWASP Top 10:レベル軽微 2件

6. 料金と ROI シミュレーション

6.1 料金体系

課金項目 価格
変換行数(.NET / Java) $0.0011/行
最小課金 $25/変換ジョブ

6.2 ROI シミュレーション

シナリオ: 100万行の .NET Framework 4.8 → .NET 8 アップグレード

AWS Transform 実行:
  変換コスト: 100万行 × $0.0011 = $1,100
  QA・テスト:1~2人月 = $8K~15K
  総コスト:$10K~16K

従来の手動アップグレード:
  開発チーム:10人 × 3ヶ月 = $60K
  QA テスト:5人 × 2ヶ月 = $30K
  プロジェクト管理:1人 × 3ヶ月 = $10K
  総コスト:$100K~120K

削減効果:
  コスト削減:$85K~110K(85~90%)
  期間短縮:3ヶ月 → 2週間(93% 削減)
  ROI:初期投資は即日回収

7. 比較:AWS Transform vs 代替ツール

比較項目 AWS Transform Microsoft Azure Migrate GCP Migrate Center Astadia Cohesity
対応言語 COBOL / Java / .NET / PL/I .NET / Java / SQL Server Java / Python / Node.js COBOL / Java / Python Multi-cloud
AI 活用 ✅ Amazon Q △ 限定的 △ 限定的 △ 限定的
全自動化率 92~98% 65~75% 70~85% 70~85% 60~70%
マネージド度 ✅ フル(AWS) ✅ フル(Azure) ✅ フル(GCP) ❌ 自管理 △ ハイブリッド
価格 $0.0011/行 従量制 従量制 $0.0008~0.0015/行 要見積
AWS 統合 ✅ 最高 ○ 限定的 ○ 限定的
推奨対象 AWS への統合移行 Azure への統合移行 GCP への統合移行 複雑なメインフレーム 複雑なマルチクラウド

8. 実装チェックリスト

準備フェーズ

  • [ ] ソースコード Git リポジトリで完全管理
  • [ ] ビルドスクリプト(Maven / Gradle / MSBuild)確認
  • [ ] 依存関係リスト作成(pom.xml / package.json / .csproj)
  • [ ] AWS IAM ロール(Transform ジョブ実行)作成
  • [ ] S3 バケット準備(ソースコード / 結果保存)

実行フェーズ

  • [ ] 小規模モジュールで試験的に変換実施
  • [ ] 変換レポート詳細確認(手動対応項目リストアップ)
  • [ ] 自動ビルド・テスト成功確認
  • [ ] セキュリティスキャン実施(hardcoded credentials 等)
  • [ ] 変換後コードの業務ロジック検証

検証フェーズ

  • [ ] 単体テスト追加実装(手動対応項目)
  • [ ] 統合テスト実行(外部 API・DB 連携)
  • [ ] パフォーマンステスト(変換前後の比較)
  • [ ] セキュリティペネトレーションテスト
  • [ ] ステージング環境での本番相当テスト

本番投入

  • [ ] Blue/Green デプロイメント準備
  • [ ] ロールバック計画策定
  • [ ] 本番環境での動作確認
  • [ ] 旧版システム監視継続(1~2週間)

9. まとめ

AWS Transform は 「生成 AI を活用した大規模レガシーコード変換サービス」 である。

主な価値

  • コスト削減:85~90% の開発費削減
  • 期間短縮:3年プロジェクト → 6ヶ月
  • 品質向上:AI による意味的な変換(92~98% 成功率)
  • AWS 統合:クラウドネイティブ移行への最短経路
  • リスク軽減:自動テスト・セキュリティスキャン実施

使うべき場合

  • 100 万行以上のレガシーコード(ROI 高い)
  • .NET Framework / Java 8 / COBOL の大規模アップグレード
  • AWS への完全統合・モダナイズが目標
  • 開発リソース限定(AI で効率化)

参考資料

AWS Transform は モダナイズの民主化 を実現し、大規模レガシーシステムの AWS への段階的移行を加速させるキーサービスである。