0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIがテストまで書く開発で、テスト全緑でも画面がおかしかった3つの実例 〜人間がレビューする5か所の決め方〜

0
Posted at

テストは全部緑✅。コミットもした。なのに画面を開いた瞬間、「…あれ?」😱 こういう朝、ありませんか?

🎉 今回から文体を変えて、絵文字と図をぐっと増やしました。気に入っていただけると幸いです🙇

日本株のAI銘柄スクリーニング&継続学習端末「ALPHA FORGE(アルファフォージ)」を、Claude Code と二人三脚で個人開発しています。この記事では、AIがコードもテストも書く開発で、テストが全部緑でも見逃した3つの不具合と、そこから作った「人間がレビューする場所」の決め方をまとめます。

【要約:この記事で伝えたいこと】

  1. AIは速く書いて、テストも自分で書いて通す。でも、書いた本人とテストを書いた本人が同じなので、盲点も仲良く共有する🤝
  2. 「同じ銘柄が2回出てる」「価格が画像に写ってる」「マーカーが見えない」。見つけたのは毎回、実際の画面を見た人間だった
  3. 持ち帰り:指摘は1回で終わらせず、テスト・ルール・手順書に落として、同じ盲点を二度と通さない形にする

※本記事はnote連載[ALPHA FORGE 開発秘話 #13] の技術的な部分を、エンジニア向けに再構成したものです。

🪞 環境と前提:書いた人とテストを書いた人が同じ

項目 内容
開発 Claude Code(CLI)
バックエンド Python / FastAPI(テストは千件超え)
ルール 変更のたびに全テストを流し、全部緑になってからコミット

Claude Code は、機能を作るとき、テストも一緒に書いてくれます。仕組みとしてはとっても健全です💪

ただ、ここに落とし穴があります。テストは「書いた人が想定したこと」しか確かめてくれません。コードを書いたのもAI、テストを書いたのもAIなら、AIが想定しなかったことは、コードにもテストにも入りません。

テストが全部緑というのは「想定どおりに動く」証明であって、「想定が正しい」証明ではないんですよね🤔 この穴をふさいだのは、毎回、実際の画面を見た人間でした。

👀 テストは緑、画面は「あれ?」

02_wall.jpg
チェックはすべて緑。それでも実際の画面には、テストが想定していなかったずれが残っていた

実例を3つ紹介します。

① 同じ銘柄が2回並んでいる(9月13日)

ダッシュボードのAIピック一覧に、同じ銘柄がダブって表示されていました。「重複している銘柄があります」と伝えると、Claude Code は原因を見つけて修正。一覧が日付で絞り込まれておらず、前の日のピックまで並んでいたのです。昼すぎに直って、やれやれ☕

……と思ったら、同じ日の夕方、また「重複しています」と伝えることになりました😅 今度の原因は別物。定期実行と手動実行が同じ日に重なると、同じ銘柄の記録が2行できてしまう。症状は同じなのに、原因が2つあったのです。

fig_chat_dup.jpg
同じ症状で2回呼ばれた。原因は別々で、根っこが直るまで1週間かかった

2回目の修正は、一覧で「銘柄ごとに最新の1件だけを見せる」ものでした(実際のコードからの抜粋)。

def _dedupe_by_symbol(rows):
    seen = set()
    out = []
    for row in rows:
        if row.symbol in seen:
            continue
        seen.add(row.symbol)
        out.append(row)
    return out

ただしこれは、見え方を整えただけです。記録が2行できること自体は止まっていません。根っこの「同じ日に2回走らない」ガードが入ったのは、1週間後の9月20日でした。

症状を隠す修正と、原因を断つ修正は別物です。表示側で重複を隠すと画面は直りますが、台帳には重複行が残ります。「直った」と言う前に、どちらを直したのかを確かめましょう。

② 画像に価格が写っている(9月22日)

外部に公開する資料用に、台帳の値から一覧表の画像を作っていました。公開物には価格の値を出さない、というのが当時のルール。画面のスクリーンショットには、その処理をちゃんとかけていました。

ところが、一覧表の画像だけ、価格がそのまま写っていたのです😱 AIは「これはスクリーンショットじゃなくて、表示用に描いた画像だから」と、処理の対象から外していました。理屈は通っています。でも、読む人から見れば、価格が写った画像であることに変わりなし。公開前に人間が気づいて、止めました🛑

fig_compare_price.jpg
スクリーンショットは処理済み。でも「描いた画像」は対象外になっていた

③ マーカーが見づらい(9月20日)

ローソク足チャートに、ゴールデンクロスとデッドクロスの目印を付けました。テストでは、目印が正しい位置に出ることを確認済み。ところが実際の画面では、目印がローソク足と同じ赤と緑で塗られていて、完全に埋もれていました🙈

「同系色で見づらい」と伝えて、目印だけブランドのオレンジとオリーブに変えてもらいました。「正しい位置に出る」と「目に入る」は、別の品質なんです。

fig_compare_marker.jpg
位置が正しくても、同系色だと埋もれる。目印だけブランド色に変えた

🛡️ 指摘を「仕組み」に変える

03_fix.jpg
人間が見つけた盲点を、テスト・ルール・手順書の3つに落とし込んで、次からは機械が止める

人間のレビューは強力ですが、毎回同じ目を期待するのは危険です。私も普通に見落とします🙏 そこで、指摘を受けたら、その場の修正で終わらせず、機械が止められる形に落とすことにしています。

落とし先 重複の件 価格の件 色の件
テスト 同じ銘柄が2行あっても一覧は最新の1件だけ。同じ日の2回目は何もしない、を確かめるテスト — —
手順書 — 公開物を作る手順書に「スクリーンショットだけでなく、描いた画像も同じ扱い」と追記 —
規約 — — 上げ赤・下げ緑の色をブランドの色と分けて扱う。値動きの色は値動きにだけ使う

あわせて、Claude Code へのお願いの仕方も変わりました。「直して」だけでなく、「他の画面も確認して」を添えるようになったのです。1か所で見つかった問題は、たいてい別の場所にもいます。横に広げて探すのは、AIの得意技です🔍

🧰 ハーネス術:人間がレビューする場所を決めておく

全部を人間が見るのは無理です。だから「ここだけは必ず人間が見る」場所を決めておくのが現実的だと考えています。

fig_checklist_review.jpg
全部は見られないから、人間が必ず見る場所を5つに絞る

  1. 実際の画面で触る(テストが緑でも)
  2. 実際のデータで見る(空のデータ、重複、休場日)
  3. 「これで本当に効果は出ているか」を数字で問う
  4. 外に出るもの(公開物、コミット、課金を伴う操作)は、最後に人間が確認する
  5. 指摘は、テスト・ルール・手順書のどれかに落とす

逆向きの使い方もあります。別のAIエージェントに作業させたものを、Claude Code に「レビューしてあげて」と頼んだこともあります。AI同士でも、書いた本人ではない目は効きます。ただし、最後に採用を決めるのは人間です👤

🤝 まとめ:今回の役割分担

fig_roles.jpg
気づくのは人間、仕組みにするのはAI、決めるのは人間

  • 気づいたのは人間👀:同じ銘柄の重複(2回)、画像に写った価格、見づらい目印。どれも実際の画面を見て見つけた
  • 直して仕組みにしたのはAI🛠️:原因の特定と修正、再発を止めるテスト、ルールへの明文化、他の画面への横展開
  • 決めたのは人間🧭:何をレビューの必須項目にするか、どこまでをAIに任せるか

「人間が気づき、AIが突き止める」は、だいたいレビューの形をしているのだと思います✨

次の記事では、セッションの終わりに裏で動いていた処理が道連れで止まった話から、失敗を「スキル」と「メモリ」に変える仕組みをまとめます。

☕ note.comで開発秘話と毎朝の検証ログを連載中

note.comでは、ALPHA FORGE の開発秘話と、毎朝のアルゴリズム検証ログを公開しています。

👉 元記事(note連載第13話):
【ALPHA FORGE 開発秘話 #13】テストは全部緑✅なのに、画面を開いたら「あれ?」😱 ― 人間のレビューが最後の砦


免責事項
本記事は個人開発およびAIエージェントを活用したシステム開発の技術記録です。特定の銘柄の売買推奨や投資助言を行うものではありません。本ツールは証券会社等への発注機能を持ちません。記事中の日付・発言は開発時の記録にもとづくもので、AIの返答は要約です。

⚠️ 【システム検証記録に関する免責事項・注意事項】

  • 本記事は、独自開発アルゴリズム「ALPHA FORGE」の動作検証およびデータ分析過程を公開する技術・運用の個人的な記録ログです。
  • 掲載されているすべてのデータ(各スコア、基準観測値、統計的変動上限、シナリオ無効化水準など)は、過去の市場データに基づき数式(ATR等)により機械的に算出されたバックテスト・シミュレーション用のパラメータであり、特定の有価証券の売買勧誘、取引の推奨、投資助言・代理行為を目的としたものではありません。
  • また、将来の株価変動や運用成果を保証するものではありません。実際の投資判断および最終決定は、必ずご自身の責任と判断において行っていただけますようお願いいたします。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?