この記事は、連載「言わない技術」の第 3 回です。うまくいかない症状と、その対処を一つずつ並べています。各回はファイルやスクリプトを一つ置けば完結します。その仕組みがなぜ要るのかは、置いたあとに解説を読めば分かります。連載の全体像と各回の一覧は序論にあります。
今回は、AIに不具合を伝えるときの話です。それには、どの画面で、何をしたら、何が出たかを書く必要があります。以前は毎回、がそれを書いていました。いまは、不具合が出た画面からフォームで送り、届いたものをコピーして、AIに貼るだけです。が書き写していた詳細は、もともと画面が知っているものでした。
前作「AIの意見を聞かない技術」の第 6 回で、テストで確かめきれずに本番へ出た不具合は、その不具合を踏んだ人から届くと書きました。届く経路は、不具合報告のフォームです。今回は、同じフォームをが使います。
まず一つだけ、思い出してみてください。
直近で、あなたがAIに不具合を直させたときに書いた文章です。再現手順、URL、エラーの文言、ブラウザ。
そのうち、あなたにしか書くことのできなかったものは何行ありましたか。
CC BY 4.0
が書いていたのは、画面が知っていることでした
不具合の報告は、書くのに時間がかかります。どのURLか。どの曲か。何をクリックしたか。コンソールに何が出ていたか。画面の大きさはいくつか。が書き終えてAIに渡すと、AIから足りない項目を聞き返され、はまた画面を開いて確かめます。
書きながらが気づいたのは、報告に書く項目の大半を、画面から書き写しているということでした。URLはアドレスバーに、エラーはコンソールに出ています。画面の見た目は、目の前に映っています。が知っていて画面が知らないのは、「何が変だと思ったか」という症状の一文だけです。
あなたが、AIに不具合を直させようとして、どの画面で何をしたら何が出たかを書いて渡したとします。書くのに時間がかかったうえ、AIからは、どのURLか、コンソールに何が出ていたかを聞き返されました。あなたは画面を開き直して確かめ、書き足しました。次に不具合を伝えるとき、あなたなら次のどちらにしますか。
- 聞き返されないように、URL、エラーの文言、画面の大きさまで、漏れなく書いてから渡す
- 不具合が出た画面からフォームで送り、URLとエラーとスクリーンショットはフォームに集めさせて、自分が書くのは症状の一文だけにする
答えは、フォームで送るほうです。聞き返されたURLもコンソールの中身も、あなたが確かめに開き直した画面に出ていました。あなたが書いていたのは、画面に出ているものの書き写しです。漏れなく書けば、聞き返される項目は減っても、書き写す項目が増えるぶん、書くのにかかる時間が長くなるだけです。フォームに集めさせれば、画面に出ているものは、あなたが書き写さなくても報告に入り、あなたが書くのは、画面が知らない、何が変だと思ったかの一文だけになります。
の手元には、typingtube という本番プロジェクトがあります。YouTube の音楽動画でタイピング練習ができる Web サービスです。そこには、ユーザー向けの不具合報告のフォームがあります。ある日から、は、自分で見つけた不具合も、そのフォームから送るようになりました。運営者用に別の入口を作る代わりに、ユーザーと同じ画面から、同じフォームで送ります。
理解したことは一文にできます。
不具合の詳細の大半は、人が書き写す前から、その場の画面が知っている。だから人が書くのは症状の一文だけにして、残りはフォームに集めさせ、そのままAIに貼る。
仕組み: 人が書くのは、症状の一文だけにする
が置くのは、フォーム 1 つです。
// app/javascript/controllers/feedback_controller.js(手元のコードを短くしたもの)
const payload = {
category: this.categoryValue, // 選ぶだけ(不具合 / 要望 / 歌詞の間違い)
comment: this.commentTarget.value, // ← 症状の一文。人が書くのは、ここだけ
page_url: window.location.pathname + window.location.search, // どこで(画面が知っている)
screenshot_data: includeScreenshot ? this._screenshotData : null, // 画面そのもの(html2canvas)
console_logs: includeConsoleLogs ? getErrorLog().slice(-20) : [], // 直近 20 件。スタックトレース込み
screen_resolution: `${window.screen.width}x${window.screen.height}`
}
サーバー側は、これに送信日時と環境の情報を足します。人が書くのは症状の一文だけで、ほかに人がするのは、カテゴリを選ぶことと、スクリーンショットとコンソールログを添えるかどうかの、チェック 2 つです。
届いた報告は、1 件ごとに管理画面の 1 ページに一式で並びます。並ぶのは、不具合が出たページのURL、カテゴリ、環境、スクリーンショット、コンソールログ、そして症状の一文です。がやるのは、その管理画面のページを開いて中身を全部コピーし、AIに貼ることだけです。が貼った時点で、画面が知っていることは、が書き写さなくても一式に入っています。
フォームが集めているのは、事実だけです。原因の推測と直し方は、一式を受け取ったAIが、コードを読んで決めます。
CC BY 4.0 はここまで
書かなくなったもの
が不具合の報告に書かなくなったのは、URLと、環境と、エラーの文言です。減ったのは、画面が知っていることをが書き写す工程です。残ったのは症状の一文で、これは今もが書いています。
CC BY 4.0
注意: フォームが無いところでは、詳細を書くのは今もです
一つ、がフォームを置いているのは、不具合と要望の経路だけです。新機能の設計のように、フォームが無いところでは、詳細を書くのは今もです。
そして、そのフォームを作るには手間がかかります。保存する列を決め、送信をサーバーにつなぎ、管理画面に一覧を作り、報告ごとに対応の状態を持たせる必要があります。書くのをやめるのは、そのフォームを作ったあとです。
二つ、フォームが集めるのは、送った時点の画面と、それまでに溜まったエラーの直近 20 件です。どの画面で何をクリックしてきたかは、集めません。別の画面から始まる再現手順や、時間が経ってから出る症状は、フォームが集める範囲の外にあります。そういう不具合では、が症状の一文にそのことを書きます。それでも、報告に付くURLとコンソールログとスクリーンショットは、いつもと同じです。
三つ、コンソールログには、ページで出たエラーが、スタックトレースごと入ります。スタックトレースは長いので、1 件で送る量が膨らみます。の手元の上限は、ログ 1 件あたり 2,000 字、1 回の送信あたり 20 件です。この上限で、クライアントは送る前に、サーバーは受け取ったあとに、それぞれログを切ります。
検証手順: フォームが集めた一式を点検する
前提
不具合報告のフォームと、届いた報告を開く管理画面を置いておきます。手元で再現することのできる不具合を 1 つと、新しいセッション(AIとの、始まりから終わりまで一続きのやり取り)を 1 つ用意します。
所要時間: 10 分
手順
- あなたが、不具合の出る画面で、その不具合を起こします
- あなたが、同じ画面のフォームから、症状の一文だけを書き、スクリーンショットとコンソールログのチェックを入れて送ります
- あなたが、管理画面で届いた報告を開き、ページのURL・環境・スクリーンショット・コンソールログ・症状の一文の 5 つを見ます
- あなたが、その一式をそのままコピーし、新しいセッションのAIに貼ります。何も書き足しません
合格条件
手順 3 で、5 つの欄がすべて埋まっていて、コンソールログに手順 1 で出たエラーが入っていることを確かめます。手順 4 では、AIが、項目を聞き返さずに原因の調査を始めれば合格です。
合格しなかったとき
- 空の欄があった —— フォームがその項目を集めていません。その欄を集める処理を疑う
- AIが項目を聞き返した —— 聞き返された項目は、フォームが集めていないものです。フォームに足す列の候補です
後始末
検証で送った報告を、管理画面で対応済みにします。
CC BY 4.0 はここまで
次回は「計画を書けと言わない技術」。は、AI に「計画を書いて」と頼んだことがありません。 それでも、計画書は 200 本あります。
連載「言わない技術」
- ← 前回: 第 2 回 具体的な指示を出さない技術
- → 次回: 第 4 回 計画を書けと言わない技術
- 全回の一覧: 序論