はじめに
私は2021年からプログラミングを始め、2023年に生成AIを利用し始めました。AIが優秀なので従来ほどエラーに苦しむことがなくなりました。「したこと」と「エラー内容」をAIに渡せば多くの場合は解決してくれます。
しかし、以前AIに何度問い合わせてもエラーを解消できないケースに遭遇しました。その際、ライブラリの内部コードをプロンプトに含めることで解決できた経験があります。
本記事では、その具体的な事例とAIを活用した問題解決のポイントについてまとめます。
事象
以下の記事で、ライブラリを用いて Node.js と Django Rest Framework でソーシャルログイン機能を実装しました。
この実装ではライブラリの特定クラスをオーバーライドしてコードを追加する必要がありました。
class CustomOAuth2Client(OAuth2Client):
...
# バリデーションの時に pkce_code_verifier を渡すようにオーバーライドで修正する
def get_access_token(self, code, *args, **kwargs):
code_verifier = getattr(self.request, "POST", {}).get("code_verifier")
return super().get_access_token(code, pkce_code_verifier=code_verifier, *args, **kwargs)
上記のように、code_verifier をフロントエンドから受け取り、既存メソッドの引数に渡しています。
一見シンプルな修正ですが、この1行の特定にかなり苦戦しました。
PKCEはOAuthにおけるセキュリティ強化の仕組みで、code_verifierが必要になります。
問題
以下のエラーが発生し、AIに何度問い合わせても解決できませんでした。
Failed to exchange code for access token
試したこと:
- 実装コードとエラー内容をAIに入力
- 出力コードを実行
- エラー内容を再度AIに入力
しかし、同様の回答が繰り返され、根本解決には至りませんでした。
解決アプローチ
このエラー文がPython標準の文言ではなく、ライブラリ内の例外処理で吐かれる文であると気づいたときに、私はその例外処理の探索を思いつきました。
手順:
- import元からクラスの定義元へ遷移
- エラーメッセージ文字列で検索
- ヒットするまでメソッドやクラスを辿り、ファイルを巡る
そうして見つけた該当コードを以下のようにプロンプトに追加しAIに再質問しました。
==== エラーメッセージを出力する例外処理コード ====
try:
token = client.get_access_token(code)
except OAuth2Error as ex:
raise serializers.ValidationError(
_('Failed to exchange code for access token')
) from ex
==== get_access_tokenメソッド ====
def get_access_token(self, code, ...)
...
==== 質問 ====
上記のライブラリ内部実装を参考に、エラーを解消してください。
その結果、code_verifier が適切に渡されていないことが原因であると特定でき、
該当の1行を追加することで問題を解決できました。
教訓
今回の解決方法は偶然ではなく、以下の仮説と知識に基づくと考えています。
AIが文章を生成する仕組み
- AIは膨大なデータを事前に学習しています。なので未学習な文脈もあると想像できます。
- 一般的なOAuthの実装パターンは知っていても、今回のような「特定ライブラリの内部仕様(pkce_code_verifierの扱い)」までは考慮できていなかった可能性があります。
- 検索できるモデルを利用していましたが、最新情報を取得するように指示してもエラーは解消できませんでした。
例外処理というプログラミングの基礎知識
- エラーメッセージ内に「access token」とあることから、これは OAuth ライブラリから出力されたメッセージであると気づけました。
- それなら try 節に原因箇所があるのではないかと仮定できました。
その結果、問題に関連する補足情報をプロンプトに追加できたため、より正確な解決策を得ることができました。
AIの仕組みやプログラミングの基礎知識があったからこそ実行できたと考えていて、AIが登場する前からコードを書いていた経験が活きました。
今やIT未経験でもAIがあればアプリが作れると言われていますが、上手に利用するにはIT知識が必要になることを実感しました。少し前までITスキルがある人は「検索が上手い」と言われていましたが、それが今は「AIをうまく使える」に変わっているのではないかと思いました。
後日談
同様のアプローチは、WordPressを用いたサイト作成でも有効でした。
サイト管理画面をカスタマイズする際、AIの出力だけでは期待通りの挙動になりませんでした。なので、WordPressのテーマやプラグインの内部実装を確認し、表示に関するコードをプロンプトに追加することで解決できました。
過去にソーシャルログイン機能を実装した際にはエラー解消に1時間は要していましたが、この経験を活かすことで同様の問題に対して約10分で対応できるようになりました。特に後者は実務での対応であり、デバッグ時間を大幅に短縮できた点は大きな成果だと考えています。
おわりに
ライブラリのアップデート、AIの学習量の増加、AIモデルの最適化などが行われて今やるとあっさり実装できるかもしれません。ただ、「補足情報を添えて質問する」といった手順は、AIの学習・予測モデルが変わらない限り依然として有効になると思います。つまり、AIに解かせるのではなく、「AIが解ける状態にしてあげる」ことが重要であり、そのために最適な補足情報を見つけられるITスキルが必要だと感じました。
AIで解決できないときに意識したい考え方
・エラーメッセージを手がかりに、発生箇所や原因を逆算する
・AIに渡す情報が不足していないか見直す
・問題の発生箇所をアプリコードだけでなく、ライブラリやフレームワーク内部にも広げて考える