AIコーディング活用で陥りやすい失敗とは?開発現場でよくある問題と対策
AIコーディングは、ソフトウェア開発の生産性を大きく高める可能性を持っています。コード補完、関数生成、テストコード作成、エラー解析、リファクタリング案の提示など、これまで時間がかかっていた作業を短時間で進められるようになりました。特に、定型的なCRUD処理、API実装、設定ファイル作成、ドキュメント生成のような領域では、AIは非常に強力な補助ツールになります。
しかし、AIコーディングを導入すれば必ず開発品質が上がるわけではありません。むしろ、使い方を間違えると、バグの混入、セキュリティリスク、保守性の低下、設計判断の弱体化、技術的負債の増加につながる可能性があります。重要なのは、AIを「自動で正解を出す存在」として扱うのではなく、「開発者の判断を支援する補助ツール」として活用することです。
1. AIコーディングとは
AIコーディングとは、生成AIやAIコーディング支援ツールを使って、コードの作成、補完、修正、説明、テスト生成、レビュー支援などを行う開発手法です。代表的な用途としては、関数の雛形作成、既存コードのリファクタリング、エラーメッセージの解釈、テストケース生成、API連携コードの作成などがあります。開発者は自然言語で要件を伝えるだけで、AIから実装案を得られるため、初期実装のスピードを上げやすくなります。
一方で、AIコーディングは「開発者の代わりにすべてを判断する仕組み」ではありません。AIは入力された情報や周辺コンテキストをもとにコードを生成しますが、プロジェクト固有の設計思想、ビジネス要件、セキュリティ基準、運用制約を完全に理解しているとは限りません。そのため、AIが生成したコードは必ず人間が読み、検証し、必要に応じて修正する必要があります。
| 項目 | 内容 |
|---|---|
| 定義 | AIを使ってコード作成・修正・説明・テスト生成を支援する開発手法 |
| 主な用途 | コード補完、関数生成、バグ修正案、テスト生成、ドキュメント作成 |
| 強み | 定型作業の高速化、学習支援、実装案の提示 |
| 注意点 | 出力の正確性、セキュリティ、保守性は人間が確認する必要がある |
| 理想的な使い方 | AIを補助者として使い、最終判断は開発者が行う |
AIコーディングの価値は、開発者の思考を省略することではなく、開発者がより重要な判断に集中できるようにすることです。実装の下書きや候補案をAIに任せ、人間は設計、レビュー、品質保証、セキュリティ、ユーザー価値に集中する。この役割分担ができているチームほど、AIコーディングの効果を安全に引き出しやすくなります。
2. なぜAIコーディングで失敗が起こるのか
AIコーディングで失敗が起こる最大の理由は、AIの出力を「完成品」と誤解してしまうことです。AIは非常に自然でそれらしいコードを生成できますが、そのコードが本当に要件を満たしているか、安全か、拡張しやすいか、既存設計と整合しているかまでは別問題です。見た目は正しく動きそうでも、例外処理が不足していたり、境界条件に弱かったり、セキュリティ上の問題を含んでいたりすることがあります。
また、開発プロセスの中にAIをどのように組み込むかが曖昧なまま使うと、失敗が起きやすくなります。誰がAI生成コードをレビューするのか、どの範囲までAIに任せてよいのか、機密情報を入力してよいのか、テスト基準はどうするのかといったルールがないと、チーム内で品質のばらつきが生まれます。AIコーディングはツール導入だけでなく、開発プロセス全体の設計が必要です。
2.1 AIへの過度な期待
AIへの過度な期待は、AIコーディング失敗の典型的な原因です。AIはコードを素早く生成できますが、ビジネス要件、チームの設計方針、長期運用の制約、既存システムの歴史まで完全に理解しているわけではありません。そのため、「AIに聞けば最適な設計が出る」「AIが書いたコードなら問題ない」と考えてしまうと、設計不整合や品質低下が起こりやすくなります。
| 過度な期待 | 実際に起こりやすい問題 |
|---|---|
| AIなら正しいコードを書く | 仕様漏れや例外処理不足が混入する |
| AIなら最適設計ができる | プロジェクト文脈に合わない設計になる |
| AIならセキュアに書ける | 入力検証や認可処理が不足する |
| AIならレビュー不要 | バグや保守性の問題が見逃される |
| AIなら学習不要 | 開発者の判断力が育ちにくくなる |
AIに期待すること自体は悪くありません。問題は、AIの得意・不得意を理解しないまま、過剰に信頼することです。AIは実装候補を出すのは得意ですが、プロダクト全体の責任を持つことはできません。AIを使うほど、人間側の設計力、レビュー力、判断力が重要になります。
2.2 出力結果の過信
AI生成コードは、見た目が自然で、変数名や構造もそれらしく整っているため、正しいコードのように見えやすいです。しかし、実際には要件の一部を満たしていなかったり、セキュリティ上の欠陥があったり、パフォーマンスに問題があったりします。特に、エラーがすぐに表面化しない種類のバグは、レビューを省略すると後から大きな問題になります。
| 過信しやすい出力 | 注意すべき点 |
|---|---|
| 認証処理 | 権限チェックが正しいか |
| SQL処理 | インジェクション対策があるか |
| ファイル処理 | パス検証や権限確認があるか |
| API連携 | エラー処理とタイムアウトがあるか |
| 非同期処理 | 競合状態や例外処理があるか |
AIの出力は「レビュー対象のドラフト」として扱うべきです。コードが動くかどうかだけでなく、なぜその実装なのか、他の選択肢と比べて妥当なのか、チームの設計方針と合っているのかを確認する必要があります。過信を避けることが、AIコーディング活用の第一歩です。
2.3 開発プロセスとの不整合
AIコーディングを個人単位で自由に使い始めると、チームの開発プロセスと合わなくなることがあります。たとえば、ある開発者はAI生成コードを積極的に使い、別の開発者はほとんど使わない場合、コード品質や実装スタイルにばらつきが出ます。また、AI生成コードのレビュー基準がないと、レビュー担当者の負荷が増えたり、重要な問題が見逃されたりします。
| 不整合の例 | 影響 |
|---|---|
| AI利用ルールがない | 品質やセキュリティ基準がばらつく |
| レビュー基準がない | AI生成コードの確認漏れが起こる |
| プロンプト共有がない | 個人依存の使い方になる |
| テスト基準がない | 動くだけのコードが増える |
| ガバナンスがない | 機密情報入力やライセンスリスクが増える |
AIコーディングは、個人の便利ツールとしてだけでなく、チームの開発プロセスに組み込む必要があります。利用範囲、レビュー基準、テスト方針、機密情報の扱い、プロンプトの共有方法を定めることで、AI活用の効果を安定させることができます。
2.4 理解不足のまま利用する問題
AIコーディングは、開発者が理解していない技術でもコードを生成できるため、一見便利です。しかし、理解不足のまま生成コードを使うと、問題が起きたときに原因を追えなくなります。特に、非同期処理、認証、データベース、セキュリティ、インフラ設定などは、表面的に動いても内部理解がないと危険です。
| 理解不足の領域 | 起こりやすい問題 |
|---|---|
| 非同期処理 | デッドロック、競合、例外漏れ |
| 認証・認可 | 権限チェック不足 |
| データベース | N+1問題、トランザクション不備 |
| セキュリティ | 入力検証不足、秘密情報漏洩 |
| インフラ設定 | 本番環境での不具合 |
AIは学習支援にも使えますが、理解を置き換えるものではありません。生成されたコードを読み、なぜそのように書かれているのかを説明できる状態にすることが重要です。AIを使って学習を加速することは有効ですが、理解を省略する使い方は長期的に危険です。
3. AI生成コードをそのまま採用する
AI生成コードをそのまま採用することは、AIコーディングで最も危険な失敗の一つです。AIが出力したコードは、あくまで候補案であり、完成品ではありません。動作するように見えても、境界条件、例外処理、セキュリティ、パフォーマンス、保守性の観点で問題を含むことがあります。
AI生成コードを採用する前には、コードレビュー、テスト、静的解析、セキュリティチェックを行う必要があります。特に、本番環境に入るコードや、ユーザーデータを扱うコードでは、AI生成かどうかに関係なく、通常以上に慎重な確認が必要です。
3.1 コードレビューを省略するリスク
AI生成コードのレビューを省略すると、開発速度は一時的に上がるように見えます。しかし、後からバグ修正や設計変更に多くの時間がかかる可能性があります。レビューを省くことで、要件漏れ、命名不統一、責務の混在、セキュリティ不備、テスト不足が見逃されやすくなります。
| レビュー省略で起こる問題 | 具体例 |
|---|---|
| 要件漏れ | 一部の条件だけ処理されない |
| 例外処理不足 | API失敗時にアプリが落ちる |
| セキュリティ不備 | 入力検証や認可が不足する |
| 保守性低下 | 責務が分離されていない |
| チーム規約違反 | 命名や構成が統一されない |
AI生成コードほどレビューが重要です。人間が一から書いたコードよりも、生成されたコードは「見た目が整っているため問題に気づきにくい」ことがあります。レビューでは、動作確認だけでなく、設計意図、影響範囲、テスト可能性、セキュリティを確認するべきです。
3.2 潜在的なバグの混入
AI生成コードには、すぐには見つからない潜在的なバグが含まれることがあります。たとえば、通常ケースでは動くが、空データ、null、異常値、大量データ、同時アクセス、ネットワーク失敗のようなケースで問題が起きることがあります。AIは一般的な実装パターンを出すのは得意ですが、プロジェクト固有の例外条件を十分に考慮できないことがあります。
| バグの種類 | 例 |
|---|---|
| 境界値バグ | 0件、最大値、空文字で失敗 |
| 例外処理漏れ | API失敗時に未処理例外 |
| 状態管理バグ | 更新順序によって結果が変わる |
| 非同期バグ | レースコンディションが発生 |
| データ不整合 | トランザクションが不足する |
潜在的なバグを減らすには、AI生成コードに対して意図的に異常系テストを作ることが重要です。「正常に動いたからOK」ではなく、「どのケースで壊れるか」を確認する必要があります。AIにテストケースの候補を作らせることも有効ですが、そのテスト自体も人間が確認する必要があります。
3.3 保守性低下の原因
AI生成コードは、短期的には便利でも、長期保守に向かない構造になることがあります。たとえば、関数が大きすぎる、責務が混在している、既存アーキテクチャに合わない、抽象化の粒度が不適切、命名がプロジェクト規約とずれているといった問題です。こうしたコードが増えると、技術的負債が蓄積します。
| 保守性を下げる要因 | 影響 |
|---|---|
| 巨大関数 | 修正範囲が分かりにくい |
| 責務混在 | テストしにくい |
| 命名不統一 | 読みづらくなる |
| 既存設計との不整合 | 将来の変更が難しくなる |
| 過剰な抽象化 | 理解コストが増える |
保守性を守るには、AIに「既存の設計方針に合わせる」「責務を分ける」「テストしやすくする」「命名規則に従う」と明確に指示する必要があります。また、生成後に人間がリファクタリングし、プロジェクトの構造に合う形へ整えることが重要です。
3.4 品質保証への影響
AI生成コードをそのまま採用すると、品質保証プロセスにも影響します。コードが速く増える一方で、テスト、レビュー、セキュリティチェックが追いつかなくなる可能性があります。開発速度だけを重視すると、品質保証の負担が後工程に押し込まれ、結果的にリリース直前の不具合対応が増えます。
| 品質保証への影響 | 対策 |
|---|---|
| レビュー量が増える | AI生成部分を明示する |
| テスト不足 | テスト生成もセットで行う |
| セキュリティ確認漏れ | 静的解析と手動確認を併用する |
| 仕様不一致 | 要件との対応表を確認する |
| 後工程負荷 | 早い段階で検証する |
AIコーディングを導入する場合は、「実装速度」だけでなく「検証速度」も高める必要があります。AIを使ってコードを書くなら、AIを使ってテスト案やレビュー観点も作るべきです。ただし、最終的な品質保証の責任は人間にあります。
4. コードの内容を理解せずに利用する
AI生成コードを理解せずに利用することは、短期的には作業が進んでいるように見えますが、長期的には大きなリスクになります。開発者がコードの意図、制約、前提、失敗条件を理解していなければ、問題が起きたときに修正できません。また、レビューや説明責任も果たせなくなります。
AIコーディングを学習や開発補助に使う場合、生成されたコードを「答え」として扱うのではなく、「教材」や「実装候補」として扱うことが重要です。なぜこの書き方なのか、他の方法はないのか、どの条件で失敗するのかを確認することで、AI活用とスキル向上を両立できます。
4.1 学習機会の喪失
AIがすぐにコードを出してくれるため、開発者が自分で考える時間が減ることがあります。特に初心者やジュニアエンジニアは、エラーの原因を調べたり、ドキュメントを読んだり、試行錯誤したりする経験を通じて成長します。AIにすべてを任せると、この学習プロセスが短絡される可能性があります。
| 失われやすい学習機会 | 内容 |
|---|---|
| エラー調査 | 原因を追跡する力 |
| 仕様理解 | 要件をコードに落とす力 |
| デバッグ | 仮説を立てて検証する力 |
| 設計判断 | 複数案を比較する力 |
| ドキュメント読解 | 公式仕様を理解する力 |
AIを使う場合でも、生成されたコードを自分の言葉で説明できるかを確認することが重要です。理解できないコードをそのまま使うのではなく、AIに「このコードを初心者向けに説明して」「なぜこの実装なのか」「代替案は何か」と質問することで、学習機会を維持できます。
4.2 問題発生時に対応できない
コードの内容を理解していないと、障害やバグが発生したときに対応できません。AIが生成したコードでも、本番環境で問題が起きれば責任を持つのは開発チームです。特に、非同期処理、認証、データベース、キャッシュ、外部API連携などは、仕組みを理解していないと原因特定が難しくなります。
| 理解不足で困る場面 | 影響 |
|---|---|
| 本番障害 | 原因調査に時間がかかる |
| 仕様変更 | どこを変えるべきか分からない |
| パフォーマンス問題 | ボトルネックを特定できない |
| セキュリティ指摘 | 修正方針を判断できない |
| チームレビュー | 実装意図を説明できない |
AIコーディングでは、コードを生成した後に「説明できる状態」にすることが重要です。実装の目的、入力、出力、例外条件、依存関係を理解していれば、問題が起きても対応しやすくなります。AIはコードを書く支援はできますが、運用責任までは肩代わりできません。
4.3 技術力低下のリスク
AIに頼りすぎると、開発者の技術力が伸びにくくなるリスクがあります。特に、基礎文法、アルゴリズム、設計原則、デバッグ力、セキュリティ感覚を身につける前にAIへ依存すると、表面的にはコードを書けても、深い問題解決ができない状態になりやすいです。
| 技術力低下の兆候 | 説明 |
|---|---|
| エラーを読まずにAIへ投げる | 自力で原因分析しなくなる |
| 生成コードを説明できない | 実装理解が不足している |
| 公式ドキュメントを読まない | 正確な仕様確認が弱くなる |
| 設計比較をしない | トレードオフ判断ができない |
| テストを書かない | 品質意識が弱くなる |
AI時代のエンジニアには、コードを手で書く力だけでなく、AIの出力を評価する力が必要です。そのためには、基礎技術の理解が不可欠です。AIを使うほど、基礎を軽視するのではなく、むしろ基礎理解の重要性が高まります。
4.4 長期的な影響
理解不足のままAIコーディングを続けると、個人にもチームにも長期的な悪影響が出ます。個人としては、自力で設計やデバッグができない状態になりやすくなります。チームとしては、誰も意図を説明できないコードが増え、保守性が低下します。結果として、短期的な開発速度は上がっても、長期的な開発効率は下がる可能性があります。
| 長期的な影響 | 内容 |
|---|---|
| 個人の成長停滞 | 問題解決力が伸びにくい |
| チーム知識の空洞化 | コード意図を共有できない |
| 技術的負債増加 | 直しにくいコードが増える |
| レビュー品質低下 | 問題を見抜けなくなる |
| 保守コスト増加 | 変更に時間がかかる |
AIを使うなら、生成されたコードをレビューし、説明し、改善する習慣を持つべきです。AIコーディングを成長の妨げにするか、成長を加速する道具にするかは、使い方次第です。
5. 設計をAIに丸投げする
設計をAIに丸投げすることは、AIコーディングで特に注意すべき失敗です。AIは一般的なアーキテクチャ案や設計パターンを提示できますが、ビジネス要件、チーム体制、運用制約、既存システム、将来の拡張計画まで正確に判断できるわけではありません。設計はコード生成よりも文脈依存性が高く、人間の判断が不可欠です。
AIに設計案を出させること自体は有効です。複数案を比較したり、メリット・デメリットを整理したり、設計レビューの観点を出したりする用途では役立ちます。しかし、最終的なアーキテクチャ判断や技術選定をAIに任せきると、プロジェクトに合わない設計を採用してしまうリスクがあります。
5.1 アーキテクチャ設計の難しさ
アーキテクチャ設計では、性能、保守性、拡張性、セキュリティ、開発チームのスキル、運用体制、コストなど、多くの要素を考慮する必要があります。AIは一般論としての設計案を出せますが、プロジェクト固有の制約を十分に把握できない場合があります。
| 設計判断の要素 | 人間が確認すべき理由 |
|---|---|
| システム規模 | 過剰設計や不足設計を避ける |
| チームスキル | 実装・保守できる構成にする |
| 運用体制 | 監視や障害対応を考慮する |
| セキュリティ要件 | データ保護や権限を設計する |
| 将来拡張 | 変更しやすい構造にする |
AIが提案するアーキテクチャは、しばしば「それっぽく正しい」ものになります。しかし、実務では最適解は一つではありません。設計はトレードオフの連続であり、何を優先し、何を捨てるかを人間が判断する必要があります。
5.2 ビジネス要件理解の限界
AIはコードや技術情報には強い一方で、ビジネス要件の背景や組織内の事情を完全には理解できません。たとえば、なぜその機能が必要なのか、どのユーザーにとって重要なのか、将来どのような変更が予定されているのかといった情報は、明示的に与えなければ判断できません。
| ビジネス要件 | AIが見落としやすい点 |
|---|---|
| 顧客ごとの違い | 一律の実装にしてしまう |
| 業務フロー | 現場の例外処理を反映しにくい |
| 法務・規制 | 業界固有の制約を見落とす |
| 将来計画 | 拡張予定を考慮できない |
| 社内事情 | 運用可能な体制を判断できない |
AIに設計を相談する場合は、要件、制約、優先順位、禁止事項を明確に伝える必要があります。それでも、AIの回答は設計判断の材料として扱い、最終判断はプロダクト責任者やエンジニアリングチームが行うべきです。
5.3 技術選定の問題
AIは技術選定の候補を出すのは得意ですが、最終選定には注意が必要です。AIは新しい技術や人気のフレームワークを提案することがありますが、それがプロジェクトに適しているとは限りません。技術選定では、流行よりも、チームが保守できるか、長期的に安定しているか、既存システムと相性が良いかが重要です。
| 技術選定の観点 | 確認内容 |
|---|---|
| 学習コスト | チームが短期間で扱えるか |
| エコシステム | ライブラリや情報が十分か |
| 長期保守 | 数年後も使い続けられるか |
| 既存資産 | 現在のシステムと統合しやすいか |
| 運用負荷 | デプロイや監視が複雑すぎないか |
AIの技術選定案は、比較表や検討材料として使うのが適切です。「この技術を使うべき」と結論だけを受け取るのではなく、なぜその選択が良いのか、代替案は何か、リスクは何かを確認する必要があります。
5.4 人間が担うべき判断
AIコーディングにおいて、人間が担うべき判断は多くあります。プロダクトの目的、ユーザー価値、セキュリティ基準、アーキテクチャ、技術選定、運用方針、品質基準などは、人間が責任を持つべき領域です。AIは判断材料を提供できますが、責任を持つことはできません。
| 人間が担う判断 | 理由 |
|---|---|
| 要件の優先順位 | ビジネス価値を判断する必要がある |
| アーキテクチャ | 長期保守と拡張性に関わる |
| セキュリティ | リスク責任が大きい |
| 品質基準 | チームの基準に合わせる必要がある |
| リリース判断 | 顧客影響を考慮する必要がある |
AIを活用するほど、人間はより上流の判断に集中する必要があります。AIにコード生成を任せる分、人間は設計、レビュー、検証、リスク判断に時間を使うべきです。
6. 不明確なプロンプトを使う
不明確なプロンプトは、AIコーディングの品質を大きく下げます。AIは与えられた情報をもとにコードを生成するため、要件、前提条件、技術スタック、入力・出力、制約が曖昧だと、期待と異なるコードが生成されやすくなります。プロンプトが曖昧なまま何度も修正を依頼すると、かえって時間がかかることもあります。
効果的なAIコーディングでは、プロンプトを「依頼文」ではなく「小さな仕様書」として考える必要があります。何を作るのか、どの環境で動くのか、どのような制約があるのか、どのような出力を期待するのかを明確に伝えることで、AIの出力品質は大きく改善します。
6.1 要件不足による誤生成
要件が不足していると、AIは一般的な実装を推測して生成します。しかし、その推測がプロジェクトの要件と合っているとは限りません。たとえば、「ログイン機能を作って」とだけ依頼すると、認証方式、セッション管理、パスワード保存、エラー処理、権限制御などが曖昧なまま実装されてしまいます。
| 不足しやすい要件 | 影響 |
|---|---|
| 入力形式 | 想定外のデータに弱い |
| 出力形式 | 後続処理で使いにくい |
| エラー処理 | 異常時に壊れる |
| セキュリティ要件 | 脆弱性が入りやすい |
| 技術スタック | プロジェクトと合わないコードになる |
AIにコード生成を依頼する際は、少なくとも目的、入力、出力、使用技術、制約、禁止事項を伝えるべきです。要件が明確であるほど、AIの生成結果も使いやすくなります。
6.2 出力品質低下の要因
プロンプトが曖昧だと、AIは余計なコードを書いたり、必要な処理を省いたりします。また、コードスタイルがプロジェクトと合わなかったり、テストが不足したり、コメントが過剰または不足したりします。出力品質は、AIの性能だけでなく、入力されるプロンプトの質にも大きく依存します。
| 品質低下の原因 | 例 |
|---|---|
| 技術指定がない | 別フレームワークのコードが出る |
| 制約がない | 過剰に複雑な実装になる |
| 期待形式がない | 説明とコードが混ざる |
| テスト要求がない | 実装だけ出力される |
| 既存設計の説明がない | アーキテクチャに合わない |
プロンプトには、完成形のイメージを明確に含めることが大切です。「短く」「保守しやすく」「既存のRepository Patternに合わせて」「例外処理を含めて」「単体テストも作成して」のように条件を指定すると、出力の品質が安定しやすくなります。
6.3 コンテキスト不足の問題
AIは、プロジェクト全体の文脈を知らない状態では、最適な実装を判断しにくくなります。既存のディレクトリ構成、命名規則、利用しているライブラリ、アーキテクチャ方針、テスト方針を伝えないと、生成コードがプロジェクトに馴染まない可能性があります。
| 必要なコンテキスト | 例 |
|---|---|
| 技術スタック | C#, ASP.NET Core, EF Coreなど |
| アーキテクチャ | Clean Architecture, MVC, MVVMなど |
| 既存コード | 関連クラスやインターフェース |
| コーディング規約 | 命名、例外処理、コメント方針 |
| テスト方針 | xUnit, NUnit, Moqなど |
AIに適切なコンテキストを与えることで、より現実的な実装案が得られます。ただし、機密情報や秘密鍵を入力してはいけません。必要な範囲だけを抽象化して共有することが重要です。
6.4 効果的な指示の考え方
効果的な指示では、目的、前提、制約、期待出力、検証条件を明確にします。たとえば、「ASP.NET Coreでユーザー検索APIを作って」ではなく、「ASP.NET Core Web APIで、UserServiceに検索メソッドを追加し、nameとemailで部分一致検索できるようにしてください。EF Coreを使い、AsNoTrackingを使い、単体テストも作成してください」のように伝える方が効果的です。
| 指示項目 | 内容 |
|---|---|
| 目的 | 何を実現したいか |
| 環境 | 言語、フレームワーク、バージョン |
| 入力・出力 | 受け取る値と返す値 |
| 制約 | 使うべき設計や禁止事項 |
| 品質条件 | テスト、例外処理、セキュリティ |
AIコーディングでは、良いプロンプトが良い出力につながります。プロンプトを短くすることより、必要な情報を過不足なく伝えることが重要です。曖昧な指示で何度も修正するより、最初に小さな仕様として整理する方が効率的です。
7. テストを省略する
AI生成コードでも、テストは必須です。AIが生成したコードは、通常ケースでは動くように見えることが多いですが、異常系、境界値、同時実行、大量データ、外部API失敗などのケースに弱い場合があります。テストを省略すると、問題が本番環境で発覚し、修正コストが大きくなります。
AIコーディングを活用する場合は、コード生成と同時にテスト生成も依頼するのが効果的です。ただし、AIが作ったテストも完全ではないため、人間がテスト観点を確認する必要があります。AIに実装とテストの両方を作らせ、人間がレビューする流れが理想です。
7.1 AI生成コードでもテストは必要
AI生成コードは、人間が書いたコードと同じようにテストが必要です。むしろ、生成過程を完全に追えていない場合があるため、通常以上にテストで確認するべきです。正常系だけでなく、異常系や境界値も含めることで、潜在的な問題を早期に発見できます。
| テスト種類 | 確認内容 |
|---|---|
| 単体テスト | 関数やクラス単位の動作 |
| 結合テスト | 複数コンポーネントの連携 |
| 異常系テスト | エラーや例外時の動作 |
| 境界値テスト | 空値、最大値、最小値 |
| セキュリティテスト | 入力検証、認可、権限 |
AIに「このコードのテストケースを作って」と依頼するだけでなく、「正常系、異常系、境界値、権限エラー、外部API失敗を含めて」と具体的に伝えると、より実用的なテストが得られます。
7.2 想定外ケースの見落とし
AI生成コードでは、想定外ケースが見落とされることがあります。たとえば、空配列、null、重複データ、タイムアウト、同時更新、権限不足などです。これらは通常の動作確認では見つかりにくいですが、本番環境では頻繁に問題になります。
| 想定外ケース | 例 |
|---|---|
| 空データ | 検索結果0件 |
| null | 任意項目が未入力 |
| 重複 | 同じIDが複数存在 |
| 外部失敗 | APIタイムアウト |
| 権限不足 | 一般ユーザーが管理機能へアクセス |
AIにテスト案を出させる場合は、「この実装が壊れそうなケースを列挙して」と依頼するのも有効です。AIをコード生成だけでなく、リスク洗い出しにも使うことで、テスト品質を高められます。
7.3 回帰不具合の発生
AIが既存コードを修正する場合、回帰不具合が起こることがあります。特定のバグは直っても、既存機能が壊れる可能性があります。AIは修正対象の周辺だけを見ていることが多いため、システム全体への影響を十分に考慮できない場合があります。
| 回帰不具合の原因 | 対策 |
|---|---|
| 既存仕様の理解不足 | 関連テストを実行する |
| 影響範囲の見落とし | 依存箇所を確認する |
| 修正の副作用 | 差分レビューを行う |
| テスト不足 | 回帰テストを自動化する |
| 部分最適 | 設計全体を確認する |
AIに修正を依頼する際は、「既存の挙動を壊さないこと」「影響範囲を説明すること」「追加すべき回帰テストを提案すること」を求めると安全です。修正コードだけでなく、影響分析も出させるべきです。
7.4 テスト自動化との関係
AIコーディングを成功させるには、テスト自動化との組み合わせが重要です。AIによってコード生成速度が上がると、手動テストだけでは追いつきにくくなります。単体テスト、結合テスト、静的解析、CI/CDを整備することで、AI生成コードを安全に取り込めます。
| 自動化対象 | 効果 |
|---|---|
| 単体テスト | 小さな変更を素早く検証 |
| 静的解析 | 基本的な品質問題を検出 |
| セキュリティスキャン | 脆弱性を早期発見 |
| CI/CD | 変更ごとの検証を自動化 |
| カバレッジ確認 | テスト不足を把握 |
AIコーディングで重要なのは、「生成を速くすること」と「検証を速くすること」をセットで考えることです。コードだけが速く増える状態は危険です。テスト自動化によって品質確認も高速化することで、AI活用の効果を安全に引き出せます。
8. セキュリティを確認しない
AIコーディングで特に注意すべきなのがセキュリティです。AIは一般的なコードを生成できますが、常にセキュアな実装を出すとは限りません。入力検証、認証、認可、秘密情報管理、ログ出力、依存ライブラリ、エラーメッセージの扱いなど、多くの観点で確認が必要です。
セキュリティを確認しないままAI生成コードを採用すると、SQLインジェクション、XSS、権限昇格、認証バイパス、機密情報漏洩などのリスクが生まれます。AI生成コードは、通常のコードと同じくセキュリティレビューの対象にするべきです。
8.1 脆弱性混入の可能性
AI生成コードには、脆弱性が混入する可能性があります。特に、古い実装パターンや不十分な入力検証を含むコードが生成されることがあります。たとえば、SQLを文字列連結で作る、ユーザー入力をそのままHTMLへ出す、認可チェックを省略する、例外内容をそのまま返すといった問題です。
| 脆弱性例 | 問題 |
|---|---|
| SQLインジェクション | 不正なSQL実行 |
| XSS | 悪意あるスクリプト実行 |
| 認可漏れ | 権限外データへのアクセス |
| 秘密情報露出 | APIキーやトークン漏洩 |
| 不適切なエラー表示 | 内部情報の露出 |
AIにコードを生成させる場合は、「セキュアコーディングを考慮して」「入力検証を含めて」「認証済みユーザーの権限確認を行って」と明示することが重要です。ただし、指示しただけで安全になるわけではないため、静的解析や人間レビューも必要です。
8.2 認証・認可の不備
認証と認可は、AI生成コードで見落とされやすい領域です。認証は「誰か」を確認する仕組みであり、認可は「何をしてよいか」を確認する仕組みです。AIが認証処理だけを実装し、認可チェックを省略してしまうと、ログイン済みユーザーが本来アクセスできないデータを見られる可能性があります。
| 項目 | 確認内容 |
|---|---|
| 認証 | ユーザー本人確認が正しく行われるか |
| 認可 | 権限に応じて操作が制限されるか |
| ロール | 管理者・一般ユーザーの区別があるか |
| 所有者確認 | 自分のデータだけ操作できるか |
| セッション管理 | トークンやCookieが安全か |
AIに認証関連コードを作らせる場合は、必ず権限チェック、所有者確認、トークン管理、失敗時の挙動を確認する必要があります。認証・認可はビジネスロジックと密接に関わるため、AIに丸投げしてはいけません。
8.3 入力検証不足
入力検証不足は、AI生成コードでよくある問題です。ユーザー入力、ファイルアップロード、URL、JSON、フォームデータなどは、すべて信頼できないものとして扱う必要があります。AIが生成したコードに入力検証が含まれていない場合、不正データや攻撃に弱くなります。
| 入力対象 | 必要な検証 |
|---|---|
| フォーム入力 | 型、長さ、必須、形式 |
| ファイル | 拡張子、サイズ、MIMEタイプ |
| URL | 許可ドメイン、形式 |
| JSON | スキーマ、必須項目 |
| 数値 | 範囲、境界値 |
入力検証は、フロントエンドだけでなくバックエンドでも必ず行うべきです。AIにコードを依頼する場合は、「サーバー側の入力検証を含める」「不正入力時のエラーハンドリングを含める」と明示すると安全性が高まります。
8.4 セキュアコーディングの重要性
AIコーディング時代でも、セキュアコーディングの基本は変わりません。最小権限、入力検証、出力エスケープ、秘密情報管理、依存ライブラリ更新、ログの安全管理、エラー処理などを徹底する必要があります。AIはこれらを補助できますが、最終確認は人間が行うべきです。
| セキュアコーディング原則 | 内容 |
|---|---|
| 最小権限 | 必要最小限の権限だけ与える |
| 入力検証 | すべての入力を検証する |
| 出力エスケープ | 表示時に適切に無害化する |
| 秘密情報管理 | APIキーやパスワードをコードに書かない |
| ログ管理 | 機密情報をログに出さない |
AI生成コードを安全に使うには、セキュリティレビューを開発プロセスに組み込む必要があります。AIを使うほどコード生成が速くなるため、セキュリティチェックも自動化・標準化することが重要です。
9. パフォーマンスを検証しない
AI生成コードは、正しく動作しているように見えても、パフォーマンスが悪い場合があります。特に、データベースアクセス、ループ処理、API呼び出し、キャッシュ、非同期処理、大量データ処理では注意が必要です。AIは一般的な実装を生成しますが、実際のデータ量やアクセス頻度に最適化されているとは限りません。
パフォーマンス問題は、開発環境では見つからず、本番環境でユーザー数やデータ量が増えたときに表面化することがあります。AI生成コードでも、実環境に近い条件で検証し、ボトルネックを確認することが重要です。
9.1 非効率な実装の生成
AIは、分かりやすさを優先したコードを生成することがあります。そのため、小規模データでは問題なくても、大量データでは遅くなる実装が出る場合があります。たとえば、ループ内で毎回データベースへアクセスする、必要以上に全件取得する、キャッシュを使わないといった問題です。
| 非効率な実装 | 問題 |
|---|---|
| 全件取得 | メモリ使用量が増える |
| ループ内DBアクセス | N+1問題が発生する |
| 不要な変換 | CPU負荷が増える |
| キャッシュなし | 同じ処理を何度も実行する |
| 同期処理の多用 | 応答が遅くなる |
AIにコードを依頼する場合は、データ量や性能要件を伝えることが重要です。「最大10万件のデータを扱う」「ページングを入れる」「N+1問題を避ける」「非同期処理を使う」など、具体的な条件を指定すると、より現実的な実装が得られます。
9.2 リソース消費の増加
AI生成コードは、メモリやCPUを過剰に使う場合があります。たとえば、大きなファイルを一度にメモリへ読み込む、不要なオブジェクトを大量に作る、外部APIを過剰に呼び出すなどです。こうした問題は、開発環境では気づきにくく、本番運用でコストや障害につながることがあります。
| リソース問題 | 例 |
|---|---|
| メモリ消費 | 大量データを一括読み込み |
| CPU負荷 | 非効率なループや変換 |
| ネットワーク負荷 | 外部APIの過剰呼び出し |
| DB負荷 | インデックス未使用クエリ |
| ストレージ負荷 | 不要なログ出力 |
リソース消費を抑えるには、AI生成コードに対して負荷試験やプロファイリングを行う必要があります。コードが短く見えても、実行コストが高い場合があります。特に、クラウド環境ではリソース消費が直接コストに反映されるため注意が必要です。
9.3 スケーラビリティ問題
AIが生成したコードは、現在の小規模な利用には対応できても、ユーザー数やデータ量が増えたときにスケールしない場合があります。スケーラビリティは、単に高速なコードを書くことではなく、負荷が増えても安定して動く構造を設計することです。
| スケーラビリティ観点 | 確認内容 |
|---|---|
| データ量 | 大量データでも処理できるか |
| 同時接続 | 複数ユーザーで問題ないか |
| 外部API | レート制限に対応できるか |
| DB設計 | インデックスやページングがあるか |
| キャッシュ | 繰り返し処理を削減できるか |
AIに実装させる場合でも、スケール要件を明確に伝える必要があります。「将来的にユーザー数が増える可能性がある」「大量データに対応する」「ページングとキャッシュを考慮する」といった条件を与えると、より良い設計案が得られます。
9.4 実環境での検証
パフォーマンスは、開発環境だけでは正確に判断できません。実際のデータ量、アクセスパターン、ネットワーク条件、クラウド環境、外部APIの応答時間を考慮する必要があります。AI生成コードも、実環境に近い条件で検証することで、問題を早期に発見できます。
| 検証方法 | 目的 |
|---|---|
| 負荷試験 | 同時アクセス時の挙動を見る |
| プロファイリング | ボトルネックを特定する |
| クエリ分析 | DB処理の無駄を確認する |
| ログ監視 | 運用時の異常を検出する |
| APM導入 | 応答時間やエラー率を可視化する |
AIコーディングでは、実装が速くなる分、検証を軽視しがちです。しかし、実装速度と運用品質は別です。パフォーマンス検証を開発プロセスに組み込むことで、AI生成コードを安全に利用できます。
10. 技術的負債を増やしてしまう
AIコーディングは、使い方を誤ると技術的負債を増やします。短期的な実装速度を優先し、設計や保守性を確認しないままコードを追加すると、後から修正しにくいコードベースになります。AIによってコード生成が速くなるほど、質の低いコードも速く増える可能性があります。
技術的負債は、すぐには問題にならないことが多いです。しかし、機能追加や仕様変更のたびに修正コストが増え、開発速度を徐々に低下させます。AIコーディングでは、生成速度だけでなく、将来の保守コストも意識する必要があります。
10.1 一時的な解決策の蓄積
AIは、目の前の問題を解決するコードを素早く生成できます。しかし、その解決策が長期的に適切とは限りません。一時的な条件分岐、重複コード、場当たり的な例外処理が増えると、システム全体の構造が崩れていきます。
| 一時的な解決策 | 長期的な問題 |
|---|---|
| 条件分岐の追加 | 複雑度が上がる |
| 重複コード | 修正漏れが発生する |
| 直接依存 | テストしにくくなる |
| ハードコード | 環境変更に弱い |
| 例外握りつぶし | 障害原因が分かりにくい |
AIに修正を依頼する際は、「最小修正」だけでなく、「保守しやすい形で」「既存設計に合わせて」「重複を避けて」と指示することが重要です。短期的に動くコードではなく、長期的に扱えるコードを目指す必要があります。
10.2 コード品質のばらつき
AIをチーム全体で使う場合、使い方に差があるとコード品質がばらつきます。ある人は丁寧にレビューし、別の人は生成コードをそのまま採用するという状態になると、コードベース全体の一貫性が失われます。AI活用ルールがないチームほど、この問題が起きやすくなります。
| 品質ばらつきの原因 | 対策 |
|---|---|
| 個人ごとの使い方 | チームガイドラインを作る |
| レビュー基準の違い | チェックリストを統一する |
| プロンプトのばらつき | 良いプロンプトを共有する |
| テスト方針の違い | テスト基準を決める |
| 設計理解の差 | アーキテクチャ方針を明文化する |
AIコーディングをチームで使うなら、コード規約、レビュー観点、テスト方針、セキュリティ基準を統一する必要があります。個人の便利さだけを追求すると、チーム全体の保守性が下がる可能性があります。
10.3 リファクタリング不足
AIは新しいコードを書くのは得意ですが、既存コード全体の設計を考慮したリファクタリングは簡単ではありません。生成コードを追加し続けるだけで、定期的に整理しないと、コードベースは複雑化していきます。AIを使うほど、リファクタリングの重要性は高まります。
| リファクタリング対象 | 目的 |
|---|---|
| 重複コード | 修正漏れを防ぐ |
| 巨大関数 | 理解しやすくする |
| 責務混在 | テストしやすくする |
| 命名不統一 | 可読性を高める |
| 依存関係 | 変更に強くする |
AIをリファクタリング支援に使うことは有効です。ただし、AIに丸投げするのではなく、目的と制約を明確に伝える必要があります。「外部仕様を変えずに」「テストが通る範囲で」「責務を分けて」といった条件を指定すると、安全に進めやすくなります。
10.4 長期保守への影響
技術的負債が増えると、長期保守が難しくなります。新機能追加に時間がかかり、バグ修正の影響範囲が読めなくなり、開発者がコードを触ることを避けるようになります。AIコーディングで短期的に速度を上げても、長期的な保守性を失えば、結果的に開発効率は下がります。
| 長期保守の問題 | 影響 |
|---|---|
| 仕様変更に弱い | 修正コストが増える |
| テスト不足 | 変更が怖くなる |
| 設計不整合 | 新機能追加が難しい |
| 属人化 | 特定メンバーしか触れない |
| 品質低下 | 障害やバグが増える |
AIコーディングでは、「今すぐ動く」だけでなく、「半年後も安全に修正できるか」を考える必要があります。保守性を守るためには、レビュー、テスト、リファクタリング、設計方針の共有が欠かせません。
11. AIの回答を唯一の正解と考える
AIの回答を唯一の正解と考えることも危険です。ソフトウェア開発には、多くの場合、複数の実装方法があります。どの方法が適切かは、要件、チーム、性能、保守性、コスト、セキュリティによって変わります。AIの回答は候補の一つであり、最終的な判断材料として扱うべきです。
AIは自信があるように回答することがありますが、その自信と正確性は必ずしも一致しません。そのため、AIの回答に対して批判的に考え、代替案やトレードオフを確認することが重要です。
11.1 複数の実装方法の存在
同じ要件でも、実装方法は複数あります。たとえば、状態管理、データアクセス、認証方式、キャッシュ戦略、非同期処理の設計などは、プロジェクトによって適切な選択が異なります。AIが最初に出した方法が常に最適とは限りません。
| 要件 | 複数の実装選択肢 |
|---|---|
| データ取得 | REST, GraphQL, gRPC |
| 状態管理 | Local State, Store, Server State |
| 認証 | Cookie, JWT, OAuth |
| キャッシュ | Memory, Redis, CDN |
| DBアクセス | ORM, Raw SQL, Repository Pattern |
AIに一つの答えだけを求めるのではなく、「3つの実装案を比較して」「メリット・デメリットを表にして」「このプロジェクト条件ならどれが適切か」と依頼すると、より良い判断材料を得られます。
11.2 トレードオフの理解
開発における選択は、ほとんどがトレードオフです。高速だが複雑、簡単だが拡張しにくい、安全だが実装コストが高い、柔軟だが学習コストが高いなど、何かを得るために何かを犠牲にする必要があります。AIの回答を採用する前に、このトレードオフを理解することが重要です。
| 判断軸 | 確認すべきトレードオフ |
|---|---|
| 開発速度 | 長期保守性を犠牲にしていないか |
| パフォーマンス | 複雑性が増えすぎていないか |
| セキュリティ | ユーザー体験を過度に悪化させていないか |
| 拡張性 | 過剰設計になっていないか |
| コスト | 運用負荷が増えていないか |
AIには、結論だけでなく判断理由を説明させるべきです。トレードオフを確認することで、開発者はAIの提案を鵜呑みにせず、プロジェクトに合った選択ができます。
11.3 エンジニアの判断力
AI時代でも、エンジニアの判断力は非常に重要です。AIは候補を出せますが、どの候補を採用するかは人間が決めます。判断力が弱いと、AIの出力に流され、プロジェクトに合わない実装を採用してしまいます。
| 判断力が必要な場面 | 内容 |
|---|---|
| 技術選定 | 長期的に使える技術か |
| 設計方針 | 既存構造と合うか |
| セキュリティ | リスクが許容できるか |
| 品質基準 | チーム基準を満たすか |
| リリース判断 | 本番投入してよいか |
AIを使うほど、エンジニアは「書く力」だけでなく「見極める力」が求められます。AIの提案を評価し、必要に応じて修正し、最終判断を下す能力が重要になります。
11.4 批判的思考の重要性
AIの回答に対して批判的に考える姿勢は、AIコーディングを安全に使うために不可欠です。「本当に正しいか」「別の方法はないか」「セキュリティ上問題ないか」「将来変更しやすいか」と問い続けることで、AIの出力をより良い形へ改善できます。
| 批判的に見る観点 | 質問例 |
|---|---|
| 正確性 | この実装は要件を満たしているか |
| 安全性 | 脆弱性はないか |
| 保守性 | 後から変更しやすいか |
| 性能 | 大量データでも問題ないか |
| 一貫性 | 既存設計と合っているか |
AIコーディングでは、AIを疑うことが悪いのではありません。むしろ、AIの出力を建設的に疑い、より良いコードへ改善することが、開発者の重要な役割です。
12. レビュー工程を軽視する
AIコーディングを使うと、コード生成速度が上がるため、レビュー工程が追いつかなくなることがあります。しかし、レビューを軽視すると、品質問題、設計不整合、セキュリティリスクが見逃されます。AI時代のレビューは、単に人間が書いたコードを見るだけでなく、AI生成コードの妥当性を検証する工程へ変化しています。
レビュー工程を強化するには、AI生成コードであることを明示し、レビュー観点を標準化することが重要です。レビュアーは、コードが動くかだけでなく、AIが誤解した要件がないか、不要な複雑性がないか、セキュリティや保守性に問題がないかを確認する必要があります。
12.1 人間による品質確認
人間による品質確認は、AIコーディングにおいて不可欠です。AIは高速にコードを生成できますが、コードの意図、ビジネス要件、ユーザー影響、セキュリティリスクを最終的に判断するのは人間です。レビューを通じて、生成コードがプロジェクトの基準を満たしているかを確認します。
| レビュー観点 | 確認内容 |
|---|---|
| 要件適合 | 仕様を満たしているか |
| 可読性 | 読みやすく理解しやすいか |
| 保守性 | 変更しやすい構造か |
| セキュリティ | 脆弱性がないか |
| テスト | 十分なテストがあるか |
AI生成コードのレビューでは、「なぜこの実装なのか」を説明できるかも重要です。開発者自身が説明できないコードは、将来の保守で問題になります。AIの出力を採用するなら、採用理由も明確にするべきです。
12.2 チーム開発への影響
AIコーディングは、チーム開発にも影響を与えます。各メンバーが異なるAIツールやプロンプトを使うと、実装スタイルがばらつく可能性があります。また、AI生成コードのレビュー量が増えることで、レビュアーの負担が高まることもあります。
| チームへの影響 | 対策 |
|---|---|
| 実装スタイルのばらつき | コーディング規約を強化する |
| レビュー負荷増加 | AI生成箇所を明示する |
| 品質基準の不一致 | レビュー観点を統一する |
| ナレッジ属人化 | プロンプトや事例を共有する |
| セキュリティ懸念 | 利用ルールを策定する |
チームでAIを使う場合、個人の裁量だけに任せるのではなく、共通ルールを作ることが重要です。AI利用の透明性を高めることで、チーム全体の品質を維持できます。
12.3 レビュー観点の変化
AI時代のコードレビューでは、従来のレビュー観点に加えて、AI特有の問題も確認する必要があります。たとえば、生成コードが既存設計を無視していないか、不要な依存ライブラリを追加していないか、古いAPIを使っていないか、説明できない複雑な処理がないかを確認します。
| AI時代の追加レビュー観点 | 内容 |
|---|---|
| 生成意図 | なぜこのコードを採用したのか |
| 既存設計との整合 | アーキテクチャに合っているか |
| 依存追加 | 不要なライブラリが増えていないか |
| 古い実装 | 非推奨APIを使っていないか |
| 過剰実装 | 要件以上に複雑でないか |
AIが生成したコードは、一般的なパターンに基づいていることが多いため、プロジェクト固有の基準と合わない場合があります。レビューでは、一般的に正しいかではなく、このプロジェクトに適しているかを確認することが重要です。
12.4 品質文化の維持
AIコーディングを導入しても、チームの品質文化を維持する必要があります。コードレビュー、テスト、設計議論、セキュリティ確認を軽視すると、AIによって低品質なコードが高速に蓄積される可能性があります。AIは品質文化を置き換えるものではなく、品質文化の中で使うべきツールです。
| 品質文化の要素 | AI時代の考え方 |
|---|---|
| レビュー | AI生成コードも必ず確認する |
| テスト | 生成コードにも十分なテストを付ける |
| 設計議論 | AI案を材料に人間が判断する |
| 改善 | 失敗例を共有しプロンプトを改善する |
| 学習 | AIの出力を理解する習慣を持つ |
AIコーディングを成功させるチームは、AIによってレビューを減らすのではなく、レビューの質を変えます。人間は細かい実装だけでなく、設計、品質、リスク、保守性により集中するようになります。
13. 機密情報を入力してしまう
AIコーディングツールに機密情報を入力してしまうことは、重大なリスクです。ソースコード、APIキー、認証情報、顧客データ、社内仕様、未公開プロダクト情報などを外部AIツールに入力すると、情報漏洩や規約違反につながる可能性があります。特に、チームでルールが整備されていない場合、個人判断で危険な情報を入力してしまうことがあります。
AIコーディングを安全に利用するには、入力してよい情報と入力してはいけない情報を明確にする必要があります。また、企業利用では、ツールのデータ保持ポリシー、学習利用の有無、アクセス権限、監査ログ、管理機能を確認することが重要です。
13.1 ソースコード漏洩リスク
ソースコードには、ビジネスロジック、内部仕様、セキュリティ設計、未公開機能などが含まれます。AIツールにコード全体を貼り付ける場合、その内容が外部に送信される可能性があります。特に、商用プロダクトや顧客向けシステムでは慎重な扱いが必要です。
| 漏洩しやすい情報 | リスク |
|---|---|
| ソースコード | 知的財産や脆弱性情報の流出 |
| 設計資料 | システム構成の露出 |
| 顧客情報 | 個人情報保護上の問題 |
| 障害ログ | 内部構成や秘密情報の露出 |
| 未公開仕様 | 競争上のリスク |
AIにコードを見せる場合は、必要最小限の範囲に限定し、機密情報を削除・マスクすることが重要です。企業では、許可されたAIツールだけを使うルールを設けるべきです。
13.2 APIキー管理
APIキーやトークンをAIツールに入力してしまうことは非常に危険です。AIにエラー解決を依頼する際、ログや設定ファイルをそのまま貼り付けると、キーやパスワードが含まれている場合があります。これにより、外部サービスの不正利用や情報漏洩につながる可能性があります。
| 秘密情報 | 扱い方 |
|---|---|
| APIキー | 入力前に必ずマスクする |
| パスワード | AIツールへ入力しない |
| トークン | ログから削除する |
| 接続文字列 | 認証情報を除去する |
| 秘密鍵 | 絶対に貼り付けない |
エラー相談やコード修正を依頼する場合は、秘密情報を伏せたサンプルに置き換えるべきです。たとえば、実際のAPIキーではなく「YOUR_API_KEY」のようなダミー値を使います。チーム全体でこの習慣を徹底する必要があります。
13.3 社内情報の取り扱い
AIツールに社内情報を入力する場合、情報の機密レベルを確認する必要があります。社内規程、顧客リスト、売上データ、契約書、未公開戦略などは、外部サービスに入力してはいけない場合があります。情報管理ポリシーを理解せずにAIを使うと、ガバナンス上の問題が発生します。
| 社内情報 | 注意点 |
|---|---|
| 顧客データ | 個人情報や契約情報を含む |
| 売上データ | 経営情報として機密性が高い |
| 契約書 | 法務上の制約がある |
| 社内戦略 | 未公開情報が含まれる |
| 障害情報 | セキュリティ情報を含む可能性がある |
企業でAIコーディングを使う場合は、情報分類ルールを明確にし、入力可能なデータ範囲を定める必要があります。機密情報を扱う場合は、社内環境や契約済みのエンタープライズ向けAI環境を使うことが望ましいです。
13.4 ガバナンス対策
AIコーディングのガバナンス対策では、利用ツール、入力可能情報、レビュー基準、ログ管理、承認フローを整備します。個人の判断に任せると、便利さを優先して機密情報を入力してしまうリスクがあります。組織としてルールを作り、教育することが必要です。
| ガバナンス項目 | 内容 |
|---|---|
| 利用可能ツール | 承認済みAIツールを指定 |
| 入力禁止情報 | APIキー、個人情報、機密コードなど |
| レビュー | AI生成コードの確認基準を設定 |
| ログ管理 | 利用履歴を確認可能にする |
| 教育 | 開発者へリスクを周知する |
AIコーディングは便利ですが、情報管理の視点なしに導入すると危険です。安全に活用するためには、技術面だけでなく、組織的なルール作りが不可欠です。
14. AIツールを適材適所で使わない
AIコーディングツールには得意な領域と苦手な領域があります。定型的なコード生成、テストケースの下書き、エラー説明、リファクタリング案の提示には強い一方で、複雑な業務要件の理解、アーキテクチャ判断、セキュリティ設計、組織固有の制約判断は苦手です。適材適所で使わないと、期待した効果が出ません。
AIを万能ツールとして扱うのではなく、「どの作業に使うと効果的か」「どの作業は人間が判断すべきか」を明確にすることが重要です。AIの役割を適切に限定することで、開発速度と品質のバランスを取りやすくなります。
14.1 AIが得意な領域
AIは、パターン化された作業や定型的なコード生成に強みがあります。たとえば、CRUD処理、バリデーション、テストケースの候補、エラー説明、ドキュメント生成、コードの読み解きなどです。こうした作業では、AIを使うことで時間を大きく短縮できます。
| AIが得意な作業 | 活用例 |
|---|---|
| 定型コード生成 | CRUD、DTO、Mapper |
| コード説明 | 既存コードの要約 |
| テスト案作成 | 正常系・異常系の候補 |
| リファクタリング案 | 関数分割、命名改善 |
| ドキュメント生成 | README、コメント、仕様説明 |
AIが得意な領域では、積極的に活用する価値があります。ただし、出力をそのまま採用するのではなく、人間が確認してプロジェクトに合わせることが前提です。
14.2 AIが苦手な領域
AIが苦手なのは、文脈依存が強い判断です。たとえば、業務要件の背景、組織の制約、長期的なアーキテクチャ方針、ユーザー影響、法務・セキュリティリスクなどは、AIだけでは判断しにくい領域です。
| AIが苦手な作業 | 理由 |
|---|---|
| 複雑な要件判断 | 背景情報が不足しやすい |
| アーキテクチャ決定 | 長期運用の責任を持てない |
| セキュリティ判断 | リスク評価が必要 |
| 技術選定 | チーム事情や運用制約が関わる |
| ビジネス判断 | 顧客価値や事業優先度が必要 |
AIに苦手な領域を任せる場合は、回答を判断材料として使うべきです。最終判断は、プロダクト責任者、エンジニア、セキュリティ担当者など、人間が行う必要があります。
14.3 活用範囲の見極め
AIを効果的に使うには、活用範囲を見極める必要があります。すべての作業にAIを使うのではなく、効果が高くリスクが低い作業から始めるべきです。たとえば、テストケース案、コード説明、ドキュメント生成、単純なリファクタリングは導入しやすい領域です。
| 活用しやすい領域 | 慎重に扱う領域 |
|---|---|
| コード説明 | 認証・認可 |
| テスト案作成 | セキュリティ設計 |
| ドキュメント生成 | アーキテクチャ判断 |
| 小さな関数生成 | 本番データ処理 |
| リファクタリング案 | 法務・規制関連 |
活用範囲を明確にすると、チーム全体で安全にAIを使いやすくなります。最初は低リスク領域から始め、運用ルールやレビュー体制が整ってから範囲を広げるのが現実的です。
14.4 効果的な役割分担
AIと人間の役割分担を明確にすることが、AIコーディング成功の鍵です。AIは実装案の生成、説明、テスト案、リファクタリング候補を担当し、人間は要件理解、設計判断、レビュー、セキュリティ、リリース判断を担当します。
| 役割 | AI | 人間 |
|---|---|---|
| 実装案作成 | 得意 | 確認・修正 |
| 要件理解 | 補助 | 最終判断 |
| 設計 | 候補提示 | 決定 |
| テスト | 案を生成 | 妥当性確認 |
| セキュリティ | 指摘補助 | 責任ある判断 |
| リリース | 直接判断しない | 最終責任 |
AIを「代替者」ではなく「共同作業者」として扱うことで、開発者はより高いレベルの判断に集中できます。役割分担が明確であれば、AIの強みを活かしながらリスクを抑えられます。
15. 開発者自身の成長を止めてしまう
AIコーディングは便利ですが、使い方を誤ると開発者自身の成長を止めてしまう可能性があります。特に、問題を自分で考えずにすぐAIへ依頼する習慣がつくと、原因分析、設計判断、デバッグ、公式ドキュメント読解の力が伸びにくくなります。
AI時代のエンジニアには、AIを使いこなす力と、AIなしでも問題を理解できる基礎力の両方が必要です。AIを学習のショートカットとして使うのではなく、理解を深めるための補助として使うことが重要です。
15.1 思考プロセスの省略
AIにすぐ答えを求めると、自分で仮説を立てる機会が減ります。エラーが出たときに、ログを読み、原因を推測し、切り分けるプロセスは、エンジニアの成長にとって非常に重要です。このプロセスを毎回AIに任せると、問題解決力が育ちにくくなります。
| 省略されやすい思考 | 本来の価値 |
|---|---|
| エラー読解 | 原因特定力が伸びる |
| 仮説立案 | デバッグ力が高まる |
| 仕様確認 | 正確な実装力が身につく |
| 設計比較 | 判断力が育つ |
| テスト設計 | 品質意識が高まる |
AIを使う前に、まず自分で仮説を立て、その後AIに確認する方法が効果的です。AIに「自分の仮説が正しいか確認して」と依頼すれば、思考プロセスを維持しながらAIを活用できます。
15.2 問題解決能力への影響
問題解決能力は、実務経験と試行錯誤によって育ちます。AIがすぐに修正案を出してくれる環境では、問題の本質を理解しないまま修正できてしまうことがあります。しかし、表面的な修正だけでは、似た問題が再発したときに対応できません。
| 問題解決能力 | AI依存で起こる影響 |
|---|---|
| 原因分析 | 表面的な修正に頼りやすい |
| 切り分け | ログや再現条件を見なくなる |
| 設計判断 | AIの提案に流されやすい |
| 応用力 | 類似問題への対応が弱い |
| 説明力 | 実装意図を説明できない |
AIを問題解決に使う場合は、答えだけでなく「なぜそうなるのか」「他に考えられる原因は何か」「再発防止策は何か」を聞くと学習につながります。AIを単なる答え生成機ではなく、思考を広げる相手として使うべきです。
15.3 学習習慣の重要性
AI時代でも、学習習慣は重要です。むしろ、AIによって新しい技術を触る速度が上がるため、基礎を確認しながら学ぶ姿勢が必要になります。AIが生成したコードをきっかけに、公式ドキュメントを読み、仕組みを理解し、実際に手を動かすことで、学習効果を高められます。
| 学習習慣 | 効果 |
|---|---|
| 生成コードを読む | 実装パターンを理解できる |
| 公式ドキュメントを確認 | 正確な仕様を学べる |
| 小さく試す | 実際の動作を確認できる |
| テストを書く | 仕様理解が深まる |
| 説明する | 知識が定着する |
AIを使うことで学習が浅くなるか、深くなるかは使い方次第です。AIに説明させ、比較させ、誤りを指摘させることで、学習支援ツールとしても活用できます。
15.4 AI時代のエンジニア像
AI時代のエンジニアは、すべてのコードを手で書く人ではなく、AIを使って実装を加速しながら、設計、品質、セキュリティ、ユーザー価値を判断できる人です。コード生成能力だけでなく、問題定義、プロンプト設計、レビュー、テスト、運用を含めた総合力が求められます。
| 必要な能力 | 内容 |
|---|---|
| 要件理解 | 何を作るべきか判断する |
| AI活用力 | 適切な指示を出す |
| レビュー力 | 出力の良し悪しを見抜く |
| 設計力 | 長期保守を考える |
| セキュリティ意識 | リスクを予測する |
| 学習力 | 新しい技術を継続的に学ぶ |
AIによってエンジニアの価値が下がるのではなく、求められる能力が変わります。AIを使いこなしながら、自分の判断力を高めることが重要です。
16. AIコーディングを成功させる考え方
AIコーディングを成功させるには、AIを補助ツールとして扱い、人間が最終責任を持つという考え方が必要です。AIは実装候補を素早く出してくれますが、それを採用するかどうかは開発者が判断します。AIを使うことで、開発者は単純作業から解放され、設計や品質判断により多くの時間を使えるようになります。
成功するチームは、AIを「コードを書く機械」としてではなく、「開発プロセスを支援するパートナー」として使います。コード生成、テスト案、レビュー観点、ドキュメント作成などをAIに任せつつ、最終判断は人間が行います。
16.1 AIを補助ツールとして扱う
AIを補助ツールとして扱うとは、AIの出力をそのまま正解にするのではなく、開発者が検討するための材料として使うことです。AIは候補案を出すのが得意なので、複数の実装案、テスト観点、リファクタリング案を出させると効果的です。
| AIの使い方 | 良い例 |
|---|---|
| 実装案 | 複数案を比較する |
| テスト案 | 正常系・異常系を洗い出す |
| レビュー補助 | 潜在的な問題を指摘させる |
| 説明 | 既存コードの理解に使う |
| ドキュメント | READMEや仕様説明の下書きに使う |
AIは開発者の判断を置き換えるものではありません。AIの出力を見て、必要な部分を採用し、不要な部分を捨て、プロジェクトに合わせて修正することが重要です。
16.2 人間が最終責任を持つ
AI生成コードであっても、リリース後の責任は人間のチームにあります。障害、セキュリティ問題、データ不整合、顧客影響が起きたときに、「AIが書いたから」は理由になりません。人間が最終責任を持つ前提で、レビューとテストを行う必要があります。
| 責任領域 | 人間が確認すべきこと |
|---|---|
| 要件 | 本当に仕様を満たしているか |
| 品質 | 保守しやすいコードか |
| セキュリティ | リスクがないか |
| 運用 | 障害時に対応できるか |
| リリース | 本番投入してよいか |
AIを使うほど、人間の責任が軽くなるのではなく、確認すべき範囲が変わります。実装の細部だけでなく、全体の整合性やリスクを見る力が重要になります。
16.3 設計と判断に集中する
AIによって定型実装が効率化されると、開発者はより上流の設計や判断に集中できます。どの機能を作るべきか、どの設計が長期的に良いか、どのリスクを優先して潰すべきかといった判断は、人間の重要な役割です。
| 人間が集中すべき領域 | 内容 |
|---|---|
| 要件整理 | 本当に必要な機能を定義する |
| 設計判断 | 長期保守を考える |
| 品質基準 | チームとしての基準を守る |
| リスク管理 | セキュリティや運用を考慮する |
| ユーザー価値 | 使う人にとって価値があるか判断する |
AIを使う目的は、開発者が考えなくなることではありません。むしろ、より重要なことを考える時間を増やすことです。AIに任せる作業と、人間が判断すべき作業を分けることが成功の鍵です。
16.4 継続的なスキル向上
AIコーディングを使う開発者ほど、継続的なスキル向上が必要です。AIツールの使い方、プロンプト設計、コードレビュー、セキュリティ、テスト、自動化、アーキテクチャなど、学ぶべき領域は広がっています。AIがあるから学ばなくてよいのではなく、AIを使いこなすために学ぶ必要があります。
| 向上すべきスキル | 理由 |
|---|---|
| プロンプト設計 | 良い出力を得るため |
| コードレビュー | AI出力を評価するため |
| テスト設計 | 品質を保証するため |
| セキュリティ | リスクを防ぐため |
| アーキテクチャ | 長期保守を考えるため |
AI時代のエンジニアは、AIを使うスキルと基礎技術の両方が必要です。AIを使いながら学び続けることで、開発者としての価値を高められます。
17. チーム開発における活用ルール
チーム開発でAIコーディングを使う場合、個人任せにしないことが重要です。利用できるツール、入力してよい情報、レビュー基準、テスト基準、AI生成コードの扱い方を明確にする必要があります。ルールがない状態では、便利さが優先され、セキュリティや品質が犠牲になる可能性があります。
AI活用ルールは、厳しく制限するためだけのものではありません。安全に使える範囲を明確にし、チーム全体で効果的に活用するための土台です。ルールがあることで、開発者は安心してAIを使いやすくなります。
17.1 利用ガイドライン策定
利用ガイドラインでは、どのAIツールを使ってよいか、どの情報を入力してよいか、どの作業でAIを使ってよいかを定めます。特に、機密情報や顧客データの扱いについては明確にする必要があります。
| ガイドライン項目 | 内容 |
|---|---|
| 利用可能ツール | 承認済みのAIツールを指定 |
| 入力禁止情報 | APIキー、個人情報、機密コードなど |
| 利用可能作業 | テスト案、コード説明、下書き生成など |
| レビュー必須範囲 | 本番コードは必ずレビュー |
| 記録方針 | 必要に応じてAI利用を明示 |
ガイドラインは一度作って終わりではありません。AIツールや開発プロセスは変化するため、実運用で出た問題をもとに定期的に更新する必要があります。
17.2 レビュー基準の統一
レビュー基準を統一することで、AI生成コードの品質を安定させられます。AI生成コードだから特別に甘く見るのではなく、むしろ要件、設計、セキュリティ、テスト、保守性を明確に確認する必要があります。
| レビュー基準 | 確認内容 |
|---|---|
| 要件適合 | 仕様を満たしているか |
| 設計整合 | 既存アーキテクチャに合うか |
| セキュリティ | 入力検証や認可があるか |
| テスト | 十分なテストがあるか |
| 保守性 | 読みやすく変更しやすいか |
レビュー基準が統一されていれば、AI生成コードの品質ばらつきを抑えられます。また、レビュアーの負担を減らすために、チェックリスト化することも有効です。
17.3 品質管理プロセス
AIコーディングを導入するなら、品質管理プロセスも強化する必要があります。静的解析、単体テスト、セキュリティスキャン、コードレビュー、CI/CDを組み合わせることで、AI生成コードのリスクを下げられます。
| 品質管理プロセス | 目的 |
|---|---|
| 静的解析 | 基本的なコード品質を確認 |
| 単体テスト | 小さな単位で動作確認 |
| セキュリティスキャン | 脆弱性を検出 |
| コードレビュー | 設計や保守性を確認 |
| CI/CD | 変更ごとに自動検証 |
AIによって開発速度が上がるほど、品質管理も自動化・標準化する必要があります。生成だけが速くなり、検証が遅いままだと、開発全体のボトルネックはレビューやテストに移ります。
17.4 ナレッジ共有
チームでAIを効果的に使うには、ナレッジ共有が重要です。良いプロンプト、失敗例、レビュー観点、便利な使い方、セキュリティ上の注意点を共有することで、チーム全体のAI活用レベルを上げられます。
| 共有すべきナレッジ | 内容 |
|---|---|
| 良いプロンプト | 成功した指示例 |
| 失敗例 | 問題が起きたAI出力 |
| レビュー観点 | 確認すべきポイント |
| テスト例 | AI生成コードに必要なテスト |
| セキュリティ注意点 | 入力禁止情報や危険な実装 |
ナレッジ共有により、AI活用が個人スキルに依存しにくくなります。チーム全体で学び、改善することで、AIコーディングの効果を安定させることができます。
18. AIコーディングのベストプラクティス
AIコーディングのベストプラクティスは、小さな単位で使うこと、出力を必ず検証すること、テストを自動化すること、継続的に改善することです。AIを大きなタスクにいきなり使うより、小さく分けて使う方が安全で効果的です。
| ベストプラクティス | 内容 |
|---|---|
| 小さく使う | 関数単位やテスト単位で依頼する |
| 検証する | 生成コードを必ず読む |
| テストする | 自動テストを追加する |
| セキュリティ確認 | 入力検証や認可を確認する |
| 継続改善 | プロンプトやルールを更新する |
AIコーディングは、適切に使えば開発効率を大きく高めます。しかし、コード生成速度だけを追うと失敗します。品質を守る仕組みとセットで導入することが重要です。
18.1 小さな単位で利用する
AIには、大きな機能を丸ごと作らせるより、小さな単位で依頼する方が安全です。関数、テストケース、バリデーション、リファクタリング案、エラー原因の調査など、範囲を絞ることで出力を確認しやすくなります。
| 小さな依頼例 | 効果 |
|---|---|
| 1つの関数を作る | レビューしやすい |
| テストケースを出す | 品質確認に使える |
| エラー原因を説明する | デバッグ支援になる |
| 既存関数を分割する | リファクタリングしやすい |
| SQLを改善する | 性能改善の候補になる |
小さな単位で使うと、AIの出力ミスも早く発見できます。大きな機能を一気に生成すると、問題箇所が分かりにくくなるため、段階的に進めることが重要です。
18.2 出力を必ず検証する
AIの出力は必ず検証する必要があります。コードが動くかだけでなく、要件を満たしているか、セキュリティ上問題ないか、既存設計と整合しているか、保守しやすいかを確認します。
| 検証項目 | 内容 |
|---|---|
| 動作 | 正常系と異常系で動くか |
| 要件 | 仕様を満たしているか |
| セキュリティ | 脆弱性がないか |
| 保守性 | 読みやすく変更しやすいか |
| 性能 | 大量データでも問題ないか |
検証を省略すると、AIコーディングは危険な自動生成になります。AIの出力を検証して初めて、開発支援として安全に使えるようになります。
18.3 テストを自動化する
AIコーディングでは、テスト自動化が重要です。AIによってコード生成速度が上がるため、手動確認だけでは品質を保ちにくくなります。単体テスト、結合テスト、静的解析、セキュリティスキャンを自動化することで、安心してAI生成コードを取り込めます。
| 自動化対象 | 目的 |
|---|---|
| 単体テスト | 関数単位の品質確認 |
| 結合テスト | コンポーネント連携の確認 |
| 静的解析 | コード品質の確認 |
| セキュリティスキャン | 脆弱性検出 |
| CI/CD | 変更ごとの自動検証 |
AIにコードだけでなく、テストケースも生成させると効率的です。ただし、テストの妥当性は人間が確認する必要があります。AI生成テストが本当に重要なケースを網羅しているかを見極めることが大切です。
18.4 継続的に改善する
AIコーディングの使い方は、継続的に改善する必要があります。良いプロンプト、失敗した出力、レビューで指摘された問題、セキュリティ上の注意点を蓄積し、チーム全体で共有することで、AI活用の品質が上がります。
| 改善対象 | 方法 |
|---|---|
| プロンプト | 成功例をテンプレート化する |
| レビュー | チェックリストを更新する |
| テスト | 失敗例をテストに追加する |
| セキュリティ | 禁止事項を明文化する |
| 教育 | チームで事例共有する |
AIツールは進化し続けるため、使い方も固定しない方がよいです。定期的にルールやプロンプトを見直し、実際の開発現場に合う形へ改善していくことが重要です。
19. AIコーディングの未来と課題
AIコーディングは今後さらに進化し、単なるコード補完から、設計支援、テスト生成、レビュー、自動修正、AIエージェントによるタスク実行へ広がっていくと考えられます。しかし、AIが高度化するほど、セキュリティ、品質保証、説明責任、ガバナンスの重要性も高まります。
今後の開発現場では、AIを使うかどうかではなく、どのように安全に使うかが重要になります。AIを活用できるチームは開発速度を高められますが、品質管理を怠るチームは技術的負債を増やす可能性があります。
19.1 AIエージェントの進化
AIエージェントが進化すると、AIはコード補完だけでなく、タスクを分解し、ファイルを編集し、テストを実行し、エラーを修正するようになります。これは開発効率を大きく高める可能性がありますが、同時にリスクも増えます。
| AIエージェントの進化 | 注意点 |
|---|---|
| 自動修正 | 変更範囲を確認する必要がある |
| テスト実行 | テスト結果の解釈が必要 |
| 複数ファイル編集 | 影響範囲が広がる |
| 外部ツール利用 | 権限管理が必要 |
| 自律実行 | 人間確認の設計が必要 |
AIエージェントを使う場合は、実行権限を制限し、変更内容を必ずレビューする必要があります。便利さと安全性のバランスが重要です。
19.2 開発プロセスの変化
AIコーディングの普及により、開発プロセスは変化します。コードを書く時間は短くなり、レビュー、検証、設計、要件整理の重要性が高まります。開発者の仕事は、単なる実装から、AI出力を監督し、品質を保証する方向へ広がります。
| 従来の開発 | AI時代の開発 |
|---|---|
| 手作業で実装 | AIが下書きを生成 |
| 人間が全て調査 | AIが候補を提示 |
| 実装中心 | 設計・レビュー中心 |
| テスト後回し | 生成と同時にテスト作成 |
| 個人スキル依存 | チームルールとAI活用力が重要 |
この変化に対応するには、開発プロセス自体を見直す必要があります。AIを既存プロセスに雑に追加するのではなく、レビュー、テスト、ガバナンスとセットで再設計することが重要です。
19.3 エンジニアに求められる能力
AI時代のエンジニアには、プロンプト設計、AI出力評価、コードレビュー、セキュリティ、アーキテクチャ、テスト設計などの能力が求められます。単にコードを書く力だけではなく、AIを使って品質の高いソフトウェアを作る力が重要になります。
| 求められる能力 | 内容 |
|---|---|
| プロンプト設計 | 明確な指示を出す |
| レビュー力 | AI出力を評価する |
| 設計力 | 長期保守を考える |
| テスト力 | 品質を保証する |
| セキュリティ意識 | リスクを予測する |
| 学習力 | 変化に対応する |
AIによってエンジニアが不要になるのではなく、エンジニアの役割が変化します。より高い判断力と品質管理能力が求められるようになります。
19.4 人間とAIの協働
AIコーディングの理想は、人間とAIの協働です。AIは高速な実装案、説明、テスト案、修正候補を提供し、人間は要件、設計、品質、セキュリティ、ユーザー価値を判断します。この協働関係を作ることで、開発速度と品質を両立できます。
| AIが担うこと | 人間が担うこと |
|---|---|
| 実装案の生成 | 採用判断 |
| テスト案の提示 | テスト妥当性確認 |
| エラー説明 | 原因の最終判断 |
| リファクタリング候補 | 設計方針との整合確認 |
| ドキュメント下書き | 正確性と文脈確認 |
AIを競争相手として見るのではなく、開発プロセスを支援する道具として使うことが重要です。人間とAIが適切に役割分担できれば、ソフトウェア開発の質と速度は大きく向上します。
まとめ
AIコーディングは、開発生産性を高める強力な手段です。コード補完、実装案作成、テスト生成、エラー解析、ドキュメント作成など、多くの場面で開発者を支援できます。しかし、AI生成コードを過信したり、レビューやテストを省略したり、設計をAIに丸投げしたりすると、バグ、セキュリティリスク、技術的負債が増える可能性があります。
AIコーディングを成功させるには、AIを補助ツールとして扱い、人間が最終責任を持つことが重要です。小さな単位で使い、出力を検証し、テストを自動化し、チームで利用ルールを整備することで、AIの強みを安全に活かせます。AI時代の開発者には、コードを書く力だけでなく、AIの出力を評価し、品質を保証し、設計判断を行う力が求められます。
EN
JP
KR