Skip to content

refactor(translate): 翻訳を共通 cors-proxy 経由に統一し translate 専用 Lambda を obsolete 化 #862

Description

@smalruby3-editor-bot

概要

翻訳拡張(#857/#858)は現在 translate 専用 Lambda/scratch-api-proxy/translate)経由だが、
text2speech(#859/#861) と同じ共通 cors-proxy 経由に統一する。これにより translate 専用 Lambda は
obsolete(使わない)
になる。#861 の実装を雛形にする。

関連: #861(synthesis を共通 cors-proxy に。雛形), #857/#858(translate を専用 Lambda にした・本 issue で置換)。

現状 vs 目標

修正方針(#861 の text2speech を踏襲)

packages/scratch-vm/src/extensions/scratch3_translate/index.js:

  1. serverURLupstream の値に戻す: https://translate-service.scratch.mit.edu/
    fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 と同じ設計思想: upstream 定数は変えず、fetch 直前でラップする。upstream merge の衝突を最小化)。
  2. CORS_PROXY_HOST = 'https://api.smalruby.app/cors-proxy' を追加(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 と同一)。
  3. 翻訳 URL 組み立て箇所(urlBase = ${serverURL}translate?language=... → 最終 URL に text 付与後)で、
    url = ${CORS_PROXY_HOST}?url=${encodeURIComponent(最終URL)} にラップしてから fetch する。
  4. Smalruby マーカーで囲む(既存の translate CORS proxy マーカーを更新)。
    マーカー一覧 docs/maintenance/smalruby-markers-vm.md を更新。
  5. cors-proxy はテキスト応答をそのまま返す(binary は base64)。翻訳レスポンスのパースが通ることを確認
    fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 は arrayBuffer で成功済み。translate は JSON/text)。unit テスト
    test/unit/extension_translate_proxy.js を追加(extension_text2speech_proxy.js を雛形に、
    fetch URL が cors-proxy?url= 経由になること)。

translate 専用 Lambda の obsolete 化(ドキュメント)

  • docs/infra/smalruby-api.md/scratch-api-proxy/translate 行に 「obsolete。translate は共通
    cors-proxy 経由に統一(fix(text2speech): route synthesis through Smalruby CORS proxy (#859) #861 と同方式)。新規開発で使わない」
    と明記する。
  • Lambda コード(lambda/scratch-api-translate.ts)と CDK スタック定義は 今回は削除しない
    (削除は deploy を伴うため別作業)。ドキュメント上 obsolete と分かればよい。

⚠️ .claude/rules/infra/smalruby-api.md への obsolete 明記は autopilot では行わない
.claude/ 配下の編集は権限プロンプトで stall する(#820)。その部分は人間(メンテナ)が手で追記する
autopilot は コード + docs/ + docs/maintenance/ + テストまで担当する。

進め方

DoD

  • scratch3_translate が共通 cors-proxy 経由になる(serverURL は upstream 値、fetch 直前にラップ)
  • マーカー更新 + docs/maintenance/smalruby-markers-vm.md 追記
  • test/unit/extension_translate_proxy.js 追加(cors-proxy 経由を検証)、cd packages/scratch-vm && npm exec tap ...
  • docs/infra/smalruby-api.md に translate 専用 Lambda が obsolete である旨を明記
  • (人間).claude/rules/infra/smalruby-api.md にも obsolete 明記(autopilot は触らない)
  • 実機確認は HITL で依頼

Metadata

Metadata

Assignees

No one assigned

    Labels

    🤖 autopilotautopilot(AI)が管理する PR/Issue(AI処理対象)

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions