「言語を跨いだ移植、AIに任せていいの?」という悩み
高速なJavaScriptランタイムBunは、もともとZig言語で実装されていることで知られています。そのBunの実装をRustへ移植する取り組みが注目を集め、AIを使ったコード移植の進め方に関心が集まりました。とはいえ「大規模なコードベースをAIに移植させる」と聞くと、どこから手を付ければいいのか、どこまで任せていいのか、正直不安に感じる人も多いのではないでしょうか。
筆者自身も、言語間の移植作業でAIを使うとき、最初は「丸ごと投げれば終わる」と思っていましたが、実際にはそう甘くありませんでした。コンテキストの区切り方やプロンプトの設計次第で、精度も作業スピードも大きく変わります。
この記事でできるようになること
この記事では、Claude APIを使ってコードを別言語に移植する際の実践的なプロンプト設計と、作業を進める上での具体的な手順を解説します。読み終える頃には、自分のプロジェクトでも「どの単位でAIに投げるか」「どんな指示を書けば精度が上がるか」が見えてくるはずです。
ポイント:大規模な移植は「一括変換」ではなく「小さな単位に分けて、検証しながら進める」のが基本です。
手順1:移植対象の構造をClaudeに把握させる
まず最初にやるべきは、対象コードの全体像をClaudeに理解させることです。ファイルを1つずつ渡すのではなく、ディレクトリ構成やモジュール間の依存関係をまとめたメモを用意し、それを最初のプロンプトに含めます。
例えば「このモジュールは○○の役割を持ち、△△のモジュールから呼ばれる」といった説明を添えると、後続の移植作業で文脈のズレが起きにくくなります。最初に構造を共有しておくかどうかで、その後の移植精度がかなり変わってきます。
手順2:言語間の対応ルールを先に決めておく
ZigからRustへの移植のように、言語のパラダイムが異なるケースでは、メモリ管理や所有権の扱いに関する対応ルールを事前に整理しておくことが欠かせません。
- ポインタ操作をどう書き換えるか
- エラーハンドリングの方式(例外→Result型など)
- 標準ライブラリの対応関係
こうしたルールを箇条書きでプロンプトに含めておくと、Claudeが一貫した方針でコードを生成しやすくなります。ここを飛ばしていきなり変換を依頼すると、ファイルごとに書き方がぶれてしまい、後で統一する手間が増えます。正直、この下準備は少し面倒に感じる作業ですが、後工程の修正量を考えると割に合う投資です。
AIへの指示方法は以下の記事でも詳しく解説しています → ChatGPTのカスタム指示を仕事用に最適化する設定手順【業務別テンプレ付き】
手順3:小さい単位で移植し、都度テストする
移植は関数単位、あるいは小さなモジュール単位で進めるのが基本です。Claudeに1つの関数を移植させたら、その場でテストを書かせ、既存の挙動と一致するか確認します。
- 対象の関数とその依存先を提示する
- 移植後のコードと、対応するテストコードを同時に生成させる
- テストを実行し、失敗した場合は差分をそのままClaudeに戻して修正を依頼する
このループを繰り返すことで、まとめて移植して後から大量のバグを追いかける事態を避けられます。「小さく移植してすぐ検証する」を徹底するだけで、後戻りの手間が大きく減ります。
手順4:差分レビューをAI任せにしない
Claudeが生成したコードは、必ず人間の目で差分を確認する工程を挟みます。特に所有権やライフタイムの扱いなど、言語特有の落とし穴はAIが自信満々に書いてきても、実際には意図と違う挙動になっていることがあります。
差分レビューの際は「このコードで意図した挙動と違う部分はないか」をClaude自身にも聞いてみるのがおすすめです。自己チェックを促すプロンプトを一言添えるだけで、見落としに気づいてくれることがあります。
個人的には、レビュー用のプロンプトを最初から用意しておき、移植のたびに同じフォーマットで確認させるやり方が楽でした。毎回考える必要がなくなります。
Claude Codeでコード移植を実践した事例はこちらで確認できます → Claude Codeと論文を書いたら「良い論文」はできた——ただし過程には落とし穴が多かった
つまずきやすいポイントと対処
コンテキストが長すぎて精度が落ちる
一度に大量のコードを渡すと、Claudeの回答の精度が落ちることがあります。ファイル単位、関数単位で区切って渡すことを基本にしましょう。最初は「全部まとめて渡した方が早い」と思いがちですが、結局は分割した方が手戻りが少なく、トータルでは速いです。
言語特有の慣用表現がそのまま移植されない
Zigの書き方をそのままRustに置き換えると、Rustらしくない冗長なコードになることがあります。「Rustのイディオムに沿って書き直してほしい」と明示的に指示すると改善しやすいです。
テストの網羅性が足りない
AIが生成したテストは、正常系に偏りがちです。境界値や異常系のテストは人間側で追加を指示する、あるいは自分で書き足す意識が必要です。
移植作業の途中で仕様の解釈が食い違うことがあります。少しでも違和感を覚えたら、その場で元の実装に立ち返って確認する習慣をつけると安心です。
まとめ
Bunのようなランタイムの移植事例は、Claudeを使ったコード移植の可能性を示す好例です。ポイントは「構造の共有」「対応ルールの事前整理」「小さな単位での移植と検証」「人間によるレビュー」の4段階を丁寧に踏むことにあります。まずは自分の手元にある小さな関数やモジュールから、この流れを試してみてはいかがでしょうか。Claude APIは従量課金で始められるため、まずは小規模な検証から取り組むのがおすすめです。

コメント