本文へスキップ
AZASLAB
← Journal
6 min read AI協働開発問い直す力

連載「AIに任せきりにしない発信をつくる」· 第6編/全21編

「前は動いていたのに」を、ひとつずつ疑ってみました

コード?マシン?回線?——犯人を切り分けるまで

「別のPCでは動いていたのに、ここでは動かない」。原因はコードでも機種でもなく、相手側の仕様変更でした。「同じはずなのに」を1つずつ切り分ける——その問い直しの過程を、ある開発のつまずきから一緒に。

安宅春樹 (Ataka Haruki)

— AZASLAB代表 ・ AIエージェント開発ディレクター

— Shimizu Fumio Architects Co., Ltd. 取締役

「同じはずなのに、動かない」と、つぶやいた朝

昨日まで動いていたものが、今日は動かない。設定もコードも、何ひとつ変えていないのに。そんな経験は、ありませんか。

AZASLAB の発信を自動化するしくみは、海外の掲示板 Reddit から「人々の困りごと」を拾って、発信のネタにしています。ところがある日、その取得が突然うまくいかなくなりました。返ってきたのは「403」という、いわば「あなたには見せません」という門前払いの合図です。

こういうとき、人はつい犯人を決めつけたくなります。私も、最初の数分でひとつの結論に飛びつきかけました。今日は、その飛びつきをこらえて、犯人を1つずつ切り分けていった過程を、一緒に見ていきましょう。これは技術の話というより、「思い込みをどう疑うか」のお話です。

最初の直感は、たいてい都合よくできている

私が最初に疑ったのは、「このパソコンが拒否されたのでは」ということでした。使いすぎてはじかれたのかもしれない、と。

そこで、ブラウザのふりをする設定に変えたり、別の入り口から叩いたりしてみました。けれど、どれも同じ403。直感が当たっているなら、何か1つくらいは通りそうなものなのに、全部だめ。

ここで立ち止まりました。直感というのは、たいてい自分にとって分かりやすい物語でできています。「使いすぎた自分が悪い」は、原因が手元にあって、納得しやすい。でも、納得しやすいことと、正しいことは別です。1度すべてを疑ってみよう、と決めました。本当にこのパソコンの問題なら、別の通り道は生きているはずだ、と。

通る道と、通らない道を、並べてみる

そこで、同じパソコンから、いくつかの入り口を順番に叩いてみました。

すると、はっきり分かれたんです。困りごとを取りに行く「データ用の入り口(API)」は403で門前払い。けれど、同じ Reddit の「更新フィード(RSS)」も、ふつうのトップページも、何事もなく開く。つまり、ネットワーク全体が遮断されているわけでも、このパソコンが丸ごと拒否されているわけでもなかった。

通る道が一本でもあるなら、「全部だめ」という物語は、もう間違っている。

遮断されていたのは、「ログインしていない状態でのデータ用の入り口」だけ。これが分かった瞬間、犯人候補がぐっと絞れました。私のコードでも、パソコンでも、回線でもなく、「相手が、その入り口だけを閉じた」のではないか、と。

「別のPCでは動いていた」を、確かめる

ここで、もう1つの手がかりが出てきました。「以前、別のパソコンでは動いていたはずだ」という記憶です。これが本当なら、やはり手元の環境に原因があることになります。だから、これも確かめました。思い込みで終わらせず、1つずつ。

確かめたのは、4つです。まず、動いていたという別のパソコンのコードと、いま手元のコードを突き合わせました。1文字の違いもなく、同じものでした。次に、回線。どちらも同じ自宅のネットワークです。3つめに、その別のパソコンで、今このコードをそのまま走らせてみました。結果は——同じ403。最後に、設定を見直しても、Reddit に特別な合鍵を渡すような情報は、もともとどこにも入っていませんでした。

4つとも、「手元のせいだ」という見立てを否定する方向を指していました。コードは同じ、回線も同じ、別のパソコンでも今は同じく失敗する、特別な設定もない。残る違いは、もう1つしかありません。

残ったのは、「同じ場所」ではなく「同じ時期」だった

行き着いた結論は、こうです。原因は私たちの側ではなく、Reddit がいつからか、ログインなしのデータ取得を断るように方針を変えた、ということ。

「別のパソコンでは動いていた」は、正確には「別の“時期”には動いていた」だったんですね。同じ場所の違いだと思っていたものが、実は時間の違いだった。外のサービスは、こちらに何の断りもなく、静かにルールを変えます。そして、昔うまくいった記憶だけが、こちらに残る。だから「前は動いていたのに」という言葉は、しばしば、相手が変わったことに気づいていないサインでもあるんです。

幸い、解決そのものは難しくありませんでした。ログインの要らない別の入り口(先ほどの更新フィード)に切り替えたら、問題なく取れるようになった。ただ、今回たまたま回り道が一本残っていただけで、いつもこう都合よくいくとは限りません。大事なのは、直し方そのものより、「手元のせいだ」という最初の物語を、証拠で1つずつ崩していけたことのほうだと思っています。

そしてもう1つ、持って帰ったことがあります。外のサービスは、黙って変わる前提で付き合う、ということです。相手は、こちらの都合などおかまいなしに、ある日ルールを変える。それ自体は止められません。だからせめて、「いつ時点では動いていた」を心のどこかに書き留めておく。そうしておくと、次に止まったとき、「自分が壊した」と「相手が変えた」のどちらも、最初から容疑者に入れておけます。昔の成功体験は心強いものですが、同時に「あの頃は」という但し書きつきの記憶でもあるんですね。

切り分けの順番を、決めておく

今回うまく犯人にたどり着けたのは、頭が良かったからではありません。調べる順番を、外側へ向かって一段ずつ広げていったからです。せっかくなので、その順番を残しておきます。次に「同じはずなのに動かない」に出会ったとき、そのまま使えるはずです。

いちばん内側から始めます。まず自分のコード。何か変えなかったか、変えたつもりがないか。次に、そのコードが動いている環境(このパソコン、入れている道具のバージョン)。その次に、ネットワーク(回線そのものは生きているか、ほかの場所には繋がるか)。そして最後に、いちばん外側——相手のサービスと、時間です。相手が仕様を変えていないか、昔と「今」で状況が変わっていないか。

この順で見ていくと良いのは、内側ほど自分で確かめやすく、外側ほど見落としやすいからです。人はつい、いちばん内側の「自分のコード」か、いちばん分かりやすい「自分のパソコン」で犯人を決めてしまう。けれど本当の原因は、いちばん見落としやすい外側——相手や時期——にあることが、案外多いんです。今回も、犯人は最果ての「時期」にいました。

もうひとつ、各段で効くのが「通る道と通らない道を並べる」やり方です。全部だめなのか、一部は通るのか。一部でも通れば、その段は「全滅」ではないと分かり、容疑から外せる。こうして容疑者を1人ずつ消していくと、最後に残った1人が、たいてい本当の犯人です。

おわりに:その「犯人」、もう決めつけていませんか

うまくいかないことに出くわすと、私たちは、いちばん納得しやすい犯人に飛びつきがちです。たいていそれは、自分の手元にある「分かりやすい原因」です。でも、分かりやすさは、正しさの保証にはなりません。

おすすめしたいのは、犯人を1人に決める前に、容疑者を並べてみることです。コードか。マシンか。回線か。それとも、相手側か、時期か。そして、「通る道」と「通らない道」を見比べる。一本でも通る道があれば、「全部だめ」という見立ては崩れます。崩れたぶんだけ、本当の犯人に近づけます。

あなたがいま「前は動いていたのに」と感じていること。その犯人を、もう決めつけてしまってはいないでしょうか。1度だけ、容疑者を並べ直してみると、案外、思っていたのとは別の顔が見えてくるかもしれません。