赤い型エラーの表示が消えてホッとしつつも、AIの直し方に何か引っかかりを感じて、もう一度差分を見直そうとしている開発者

AIに型エラーを直させるとanyが増える|安全な直し方の型

エディタに真っ赤な型エラー。とりあえずAIに「このエラー直して」と投げたら、一瞬で消えた。 助かった——と思ったのも束の間、差分をよく見ると、変数に any がついていたり、as で型を押し通していたり。エラーは消えているのに、なんだかスッキリしない。そんな経験、ありますよね。

厄介なのは、型エラーは「消す」だけならいくらでも消せてしまうこと。any をつける、as でキャストする、@ts-ignore で黙らせる。どれも赤い波線は消えます。でも、それは型が守ってくれていた安全網ごと外している、ということでもあります。

この記事は、AIに型エラーを直させるときに「消しただけ」を「ちゃんと直した」に変えるための型をまとめたものです。長く見えますが、全部は要りません。まず「差分に anyas@ts-ignore が増えていないか見る」だけ持ち帰れば、今日から危ない直し方に気づけます。

30秒のファストパス(最低ライン)
- 原因を先に聞く:「直して」の前に「なぜこの型エラーが出ている?」を一度聞く
- 黙らせ系を数える:直したあとの差分に any / as / @ts-ignore が増えていないか目で確認する
- 1つでも増えたら聞き返す:「any を使わずに正しい型で直せる?」ともう一度頼む
※型エラーは「消えたか」ではなく「型で守れているか」で見る。消すだけなら誰でもできる、が合言葉。
結論:AIは型エラーを消すのは速いけれど、いちばん楽な消し方(anyas@ts-ignore)を選びがちです。だから、①「なぜ出ているか」を先に説明させる → ②「黙らせずに正しい型で直して」と条件をつけて頼む → ③直したあとの差分で any / as / @ts-ignore が増えていないかを数える → ④増えていたら「これは本当に型を諦めるしかない箇所か」を確かめる、の順で見ます。エラーを消すスピードはAIに、「型を諦めていいか」の最終判断はあなたに。この分担で、赤い波線を消すだけの作業が、安全網を保ったままの修正に変わります。

型エラーをゼロにすることがゴールではありません。型に守ってもらったまま、エラーを消す。その線引きを、AIに丸投げしないための話です。

何が起きているか——なぜAIは any で消したがるのか

AIが手を抜いているわけでも、あなたの頼み方が悪いわけでもありません。型エラーの「いちばん簡単な消し方」が、たまたま危ない直し方と一致しているという構造的な事情があります。ここを押さえると、どこに気をつければいいかが見えてきます。

裏を返せば——正しい型が何かを一緒に考えることは、AIが得意な作業です。楽な逃げ道をふさいで頼めば、ちゃんと型で直してくれる。順に見ていきます。

手順1:「直して」の前に「なぜ出ているか」を聞く

いきなり「直して」と投げると、AIは最短で消しにいきます。その前に一度、エラーの原因を説明させるだけで、直し方の質が変わります。

そのまま使える聞き方の例です。

次の型エラーが出ています。まず、なぜこのエラーが出ているのかを説明してください。どの値の型と、どの期待される型が食い違っているのかを教えてください。(直すのはそのあとで頼みます)

原因が言葉になると、あなた自身も「ああ、ここでnullが混じる可能性があるのか」と腑に落ちます。そのうえで直せば、AIの直し方が的外れなときにすぐ気づけます。急がば回れで、この一手間が「消しただけ」を防ぐ入口になります。

手順2:「黙らせずに正しい型で直して」と条件をつける

型エラーの直し方を「消すだけ(anyで黙らせる)」と「型で直す」の2つに分けて並べた対比図

原因が見えたら、直しを頼みます。ポイントは、逃げ道をあらかじめふさぐこと。条件をつけないと、AIは楽な消し方を選びがちです。

そのまま使える頼み方の例です。

このエラーを直してください。ただし、次の条件を守ってください。
- any 型を新しく増やさないでください
- as(型アサーション)や @ts-ignore で黙らせないでください
- どうしてもそれらが必要な場合は、なぜ正しい型で書けないのかを説明してください

値が本当に複数の型を取りうるなら、any ではなく具体的な型の組み合わせ(ユニオン型)や、nullの可能性を含んだ型で表現してください。

補足すると、any は「どんな型でもOK」と型チェックを丸ごと止めてしまう指定、as は「これはこの型だと自分が保証する」とAIやコンパイラの確認を上書きする書き方です。どちらも便利ですが、間違っていても誰も止めてくれません。だから、使うなら理由が要る——という線引きを最初に伝えておきます。

「必要なら理由を説明して」を添えるのが効きます。本当にやむを得ない箇所(型定義が壊れている外部ライブラリなど)はありますが、理由が読めれば、それが妥当な諦めか、ただの手抜きかを見分けられます

手順3:直したあとの差分で「黙らせ系」を数える

直してもらったら、差分に any / as / @ts-ignore が増えていないかを見ます。ここが、丸投げにしないための肝です。

見つけたら、責める必要はありません。「この any、正しい型に置き換えられる?無理ならなぜか教えて」ともう一度聞き返すだけです。多くはそれで、ちゃんとした型に直ります。

差分の見方そのものはリファクタリングをAIに任せるときの差分の確認方法も地続きの話です。エラーが消えたことと、意味が変わっていないことは別、という視点はそのまま使えます。

手順4:それでも any が残るなら「本当に諦める箇所か」を確かめる

世の中には、正しい型で書ききれない箇所も確かにあります。型定義が用意されていない古いライブラリ、形が定まらない外部データ、まだ移行途中のコード。そういうときは、anyas が現実解になることもあります。

大事なのは、それを「今回は諦める」と意識して選ぶこと。なんとなく紛れ込んだ any と、事情があって残した any は、見た目は同じでも意味が違います。

AIが「これは any にするしかない」と言い切っても、それは鵜呑みにしないところです。もっともらしく必要性を語ることがあるので、AIのハルシネーション(もっともらしい誤り)の見抜き方の視点で、本当にそうかを一度照らしてみてください。

手順5:型が通ったら、動きも一度確かめる

型エラーが消えて、any も増えていない。それでも最後に、実際に動かして挙動が変わっていないかを軽く見ます。型が通ることと、正しく動くことは、必ずしも同じではありません。

とくに as で型を書き換えた箇所は要注意です。as は「この型だと思って進めて」という指定なので、実際の値が違っていても、実行するまで気づけないことがあります。型の上では通っていても、動かすと undefined が来て落ちる、というのはよくある落とし穴です。

具体例:APIレスポンスの型エラーを直させる

たとえば、外部APIのレスポンスを扱う箇所で「user.namestring | undefined かもしれない」という型エラーが出たとします。AIに「直して」と投げると、こんな直し方が返ってくることがあります。

3つ目が、エラーの原因そのものに向き合った直し方です。同じ「エラーが消える」でも、1つ目・2つ目は問題を先送りしているだけ。AIに頼むときは「undefined の可能性を握りつぶさずに直して」と一言添えると、3つ目に寄せやすくなります。

ありがちな落とし穴

明日からやること(小さく始める3つ)

  1. 型エラーをAIに投げる前に、「なぜ出ているか」を一度説明させる
  2. 直しを頼むときに、anyas@ts-ignore で黙らせないで」と一言添える
  3. 直ったら、差分に any / as / @ts-ignore が増えていないかを数える

この3つだけでも、「赤い波線を消すだけ」から「型に守ってもらったまま直す」に変わります。慣れたら、境界での型固めや @ts-expect-error の使い分けを足していけば十分です。

AI型エラー修正のチェックリスト

「関係する所だけ見る」が前提です。全部に○は要りません。いま直している型エラーに関わる所だけ、さっと確認します。

頼む前

頼み方

直したあとの確認

動きの確認

最後に

赤い型エラーを前に、とりあえずAIに消してもらう。その動き自体は、なにも悪くありません。むしろ、消えた差分をもう一度見直そうとした時点で、あなたは十分に丁寧です。多くの人は、消えた安心でそのまま閉じてしまうのですから。

型エラーは、消すだけなら一瞬です。でも、型が守ってくれていた安全網を外してまで消す必要は、たいていありません。消すスピードはAIに、「型を諦めていいか」の最後の判断はあなたに。役割を分ければ、赤い波線を消す作業は、安全網を保ったままの修正に変わります。

any を1個増やさずに直せた——その小さな一手が、半年後の自分を、静かに助けてくれます。

型エラーをanyに頼らず直しきって、肩の力が抜けて穏やかにコードを見つめている開発者

今日ひとつ、「型エラーは消えたかではなく、型で守れているかで見る」を決められたなら、それはもう、"波線を消すだけ"を"ちゃんと直す"に変える確かな一歩です。

よければ、こちらも