第5章 03: エラー駆動ループ#

Tomásは初めてのウェブフォームを作っていた。コードを打ち、保存し、ブラウザを開いた。ページは真っ白だった。完全に白。何もない。

ファイルを確認した。問題なさそうに見える。もう一度保存。やはり白い。

胸の奥にあの馴染みの熱さがこみ上げる——「お前にはこれは無理だ」と言うあの感覚。もう少しでノートパソコンを閉じるところだった。

代わりに、ブラウザの開発者コンソールを開いた。赤い一行が現れた:Uncaught SyntaxError: Unexpected token '<' at line 14

14行目。エラーが見るべき場所を正確に教えてくれた。閉じ括弧が抜けていた。直した。ページが読み込まれた——壊れてはいるが、見えるようにはなった。

さらに三つのエラー。さらに三つの修正。四十分後、フォームは動いた。

その晩、Tomásはその後のあらゆる技術的課題への向き合い方を変える気づきを得た。エラーメッセージは彼を罰していたのではない。教えていたのだ。

エラーは失敗ではない#

ほとんどの人がエラーを、学校のテストの赤ペンと同じように扱う——自分が劣っている証拠として。エラーは判決のように感じる。間違えた。遅れている。ここに自分の居場所はない。

この解釈は、役に立たないだけでなく、事実として間違っている。

エラーメッセージは、あなたが受け取れる最も正確なフィードバックだ。 何が問題だったか、多くの場合どこで、時にはなぜかまで教えてくれる。これほど具体的な情報を提供する教師もチュートリアルも教科書もない。

逆を想像してみてほしい。エラーが一切出ないスキルを学んでいるとする。何かを入力しても何も起きない。フィードバックなし。正解に近いのか遠いのかもわからない。信号がゼロ。

それこそ本当に学びようがない状態だ。エラーがあるからこそ、学習が成り立つ。

閾値システム(Threshold System)では、環境-行動-フィードバックループ(Environment-Action-Feedback Loop)について語っている。環境を整え、行動を起こし、環境がフィードバックを返す。そしてまた調整して行動する。

エラーはフィードバック層だ。それがなければ、ループは壊れる。

すべての赤いエラーメッセージはこう言っている:「これはまだ知らないことだよ——学びにおいで。」

エラーの位置価値#

フィードバックの質には差がある。友人が「なんか変だね」と言うのはフィードバックだが、曖昧すぎる。教師が「三段落目を直して」と言うのはまだいい。エラーメッセージが TypeError: Cannot read property 'length' of undefined at line 47 と表示するのは、外科手術レベルの精度だ。

これを私はエラーの位置価値と呼んでいる。エラーは何かが間違っていると告げるだけでなく、あなたの理解が途切れる場所を正確に示してくれる。

自分の知識を、未探索の領域が霧に覆われた地図だと想像してみてほしい。エラーが一つ出るたびに、特定の一点から霧が晴れる。「ここだ。ここであなたの理解が止まっている。」

時間が経つにつれ、霧は晴れていく。包括的なガイドを読んだからではなく、一つ一つのエラーが領地の一部を明らかにしたからだ。

TomásはHTMLをマニュアルを読んで学んだのではない。壊れたHTMLを書き、エラーメッセージに自分の無知を教えてもらったのだ。各エラーは地図上の座標であり、各修正は霧が晴れた一区画だった。

これは「全部学んでから始める」よりもはるかに効率的だ。エラーを通じて学ぶと、必要なことを必要なタイミングで学べる。

デバッグマインドセット#

エラーから学ぶ人と、エラーに打ちのめされる人を分ける決定的なマインドシフトがある。二つの内なる反応の違いだ:

反応A: 「何かおかしい。詰んだ。」

反応B: 「何かおかしい。何が、なぜ、どう直すか調べよう。」

反応Bがデバッグマインドセット(Debugging Mindset)だ。感情的な反応を体系的なプロセスに変換する。

三つのステップ——コードの修正でも、料理の失敗の原因探しでも、自転車がカチカチ鳴る理由の特定でも、同じように機能する:

ステップ1:何が起きた? 問題を具体的に記述する。「動かない」では曖昧すぎる。正確に何が起きたか?何を期待していたか?実際は何が起きたか?

Tomásは「ページが壊れた」と言うこともできた。でも彼が言ったのは「フォームが表示されるはずが、ページが空白だ」。これは不満ではなく、診断だ。

ステップ2:なぜ起きた? 原因を追跡する。エラーメッセージを見る。行番号を見る。最後にうまく動いた時から何が変わったか?何も変えていないなら、正しいと思い込んでいたものは何か?

Tomásの場合、エラーメッセージが14行目を指していた。見た。括弧が抜けていた。原因特定。

ステップ3:どう直す——そして次回どう防ぐ? 修正する。そしてメンタルモデルにメモを追加する:「括弧の欠落は白いページの原因になる。」次に白いページを見たら、まず括弧を確認するだろう。

この三つの問いのフレームワーク——何が?なぜ?どうする?——がエラー駆動ループの核心エンジンだ。すべてのエラーを構造化された学習イベントに変える。

エラーログ#

デバッグマインドセットを増幅する実用ツール:エラーログ(Error Log)。

名前の通り——遭遇したエラー、その原因、修正方法を継続的に記録したものだ。ノートでもテキストファイルでもスプレッドシートでもいい。フォーマットは問題ではない。習慣が問題だ。

各エントリには四つのフィールドがある:

フィールド説明
エラーエラーメッセージの内容(または何が起きたか)
原因何が引き起こしたか
修正どう解決したか
パターンこのエラーが属するカテゴリ

最初の三つは単純だ。四つ目の「パターン」——ここで本当の学習が起きる。

十〜十五個のエラーを記録すると、カテゴリが浮かび上がってくる。構文エラー。ロジックエラー。設定エラー。タイミングエラー。各カテゴリは、あなたが犯しやすいタイプの間違いを表している。

カテゴリが見えれば、次のエラーがどこから来るか予測できる。そして予測は予防の始まりだ。

Elenaはデータ分析を学んでいるマーケティングマネージャーで、スプレッドシートの数式を学ぶ最初の二週間、エラーログをつけた。要約版はこうだ:

第1週:

  • エラー:#REF! — 原因:数式が参照する列を削除した — 修正:セル参照の代わりに名前付き範囲を使用 — パターン:参照エラー
  • エラー:#VALUE! — 原因:テキストと数値を掛け算しようとした — 修正:テキスト列を先に数値に変換 — パターン:データ型エラー
  • エラー:合計が間違っている — 原因:合計範囲にヘッダー行を含めていた — 修正:範囲を2行目から開始 — パターン:範囲選択エラー

第2週:

  • エラー:また#REF! — 原因:同じ問題、別のシート — 修正:名前付き範囲 — パターン:参照エラー(再び)
  • エラー:数式がゼロを返す — 原因:循環参照 — 修正:数式を再構築 — パターン:ロジックエラー

二週間の終わりには、Elenaはエラーが起きる前に予測できるようになっていた。新しい数式を設定するとき、「待って——ヘッダー行を含めていないか?」と考える。確認する。気づく。エラーなし。

これがエラー駆動ループの実践だ。エラーを出す。記録する。パターンを見つける。予測する。予防する。

エラーログは失敗の記録ではない。成長の地図だ。

ファストフェイル戦略#

ほとんどの初心者はエラーを避けようとする。入念に計画し、実行前にすべてをダブルチェックし、ゆっくり慎重に作る——一発で正解を出すことを期待して。

これは逆だ。

学習の初期段階では、速く失敗したい。できるだけ早くエラーに出会いたい。早期のエラーは修正コストが安く、学習速度が速いからだ。

三つの原則:

1. すぐに実行する。 「準備ができる」まで待たない。コードを三行書いたら実行する。料理の一工程を終えたら味見する。一段落書いたら声に出して読む。フィードバックは今欲しい、後でではなく。

2. 小さく変える。 十個を一度に変えて何かが壊れたら、どの変更が原因かわからない。一つ変える。テストする。もう一つ変える。テストする。各サイクルが明確で帰属可能なフィードバックを返す。

3. エラーを予期し、歓迎する。 期待値を書き換える。エラーを避けようとしているのではない——効率的に生成しようとしているのだ。今引き起こすエラーの一つ一つが、後でもっと大きく複雑なプロジェクトで解きほぐす必要のないエラーだ。

Tomásは最初の白いページの苦い経験の後、この方法を取り入れた。二つ目のプロジェクト——シンプルな電卓——では、一つの関数を書いてはすぐテストし、エラーが出たらその場で直した。

最初のプロジェクト:四時間、混乱を招く重なり合ったエラーの連鎖。二つ目のプロジェクト:二時間、小さく管理可能なエラーの安定した流れ。スキルレベルは同じ。戦略が違う。時間は半分。

最速で学ぶ人は最も多く失敗する——ただし、小さく、速く、有用な単位で失敗する。

エラーパターンの蓄積#

五十〜六十のエラーを記録した後、注目すべきことが起きる。経験豊富な実践者が「エラー直感」(Error Intuition)と呼ぶものが発達するのだ。

エラー直感とは、エラーが起きる前にそれを感知する能力だ。神秘的なものではない。蓄積された経験に基づくパターン認識だ。

ベテランの料理人はニンニクが玉ねぎより早く焦げることを知っている。毎回ニンニクを焦がす必要はない——一度焦がし、パターンを記録し(頭の中であれ紙の上であれ)、今では自動的にタイミングを調整する。

経験豊富なドライバーは濡れた路面ではより長い制動距離が必要だと知っている。毎回物理を計算し直したりしない。十分なフィードバックを蓄積し——中にはヒヤリハットもある——調整は自動的だ。

あらゆるスキルで同じ蓄積が起きる。十分にエラーを経験すると予測が始まる。十分に予測すると予防が始まる。十分に予防すると、スキルは「自然」に感じ始める。

しかし自然ではない。蓄積されたエラー経験だ——エラー駆動ループが何百サイクルも回り、パターンが内在化されたのだ。

経験者が「ただ知っている」ように見えるのはこれが理由だ。彼らが持っているのは優れた知能ではなく、優れたエラーライブラリだ。

エラー駆動プラクティスの構築#

初日からエラー駆動ループを練習に組み込む方法:

フェーズ1:受け入れる(1-5時間目)#

あらゆるスキルの最初の五時間、唯一の仕事はエラーを生成し、そこから学ぶことだ。

  • 環境を整える(アクショントラックの最小限セットアップ)
  • スキルの最もシンプルなバージョンに取り掛かる
  • エラーに当たったら立ち止まる。パニックにならない。飛ばさない。すぐに検索しない。
  • デバッグの三つの問いを投げかける:何が起きた?なぜ?どう直す?
  • エラーを記録する(非公式でもいい——付箋一枚でも十分)
  • 直して先に進む

この段階で生産性を求めない。生産性は目的ではない。学習が目的だ。

フェーズ2:蓄積する(5-12時間目)#

五〜十二時間の間に、エラーログにパターンが現れ始める。

  • 数時間ごとにログを振り返る
  • タイプ別にグループ化する(構文、ロジック、設定など)
  • どのタイプが繰り返されるか注目する
  • 各練習セッションの前に、上位三つのエラーパターンを確認する
  • 作業中、それらのパターンに能動的に注意を払う

ここからループが加速する。もはやエラーに反応しているだけではない——先回りしている。

フェーズ3:予測する(12-20時間目)#

最終段階では、エラーの予測が自動的になる。

  • エラーが起きる前にキャッチする
  • どの部分がエラーを起こしやすいか知っていて、そこから先にチェックする
  • エラーログのエントリが「知らなかった」から「忘れかけた」に変わる
  • エラーを出してから直すまでの間隔が劇的に縮まる

二十時間目までに、エラーを完全になくしたわけではない。それは目的ではない。目的は、エラーに対する速く信頼できるプロセスを持つことだ。エラー駆動ループは終わらない——ただ速くなるだけだ。

感情の層#

プロセス設計では完全に解決できないことについて触れなければならない。エラーは、つらい。

エラーがフィードバックだと頭では理解していても、感情的な痛みは本物だ。赤いエラーメッセージはストレス反応を引き起こす。心拍数が上がる。自信が揺らぐ。頭の中の声が言う——「これは自分に向いていないのかも。」

これは普通のことだ。誰にでも起きる——エキスパートを含めて。違いは、エキスパートがその痛みを十分な回数経験して、過ぎ去ることを知っていることだ。耐性を築いている。

耐性を築く三つの実践的な方法:

1. 各セッションの最初のエラーを祝う。 文字通り「よし——今から学びが始まる」と声に出す。馬鹿げて聞こえる。でも効く。感情のトリガーをリフレーミングする。

2. エラー目標を設定する。 各練習セッションの前に決める:「今日は少なくとも五つのエラーを出す。」これがマインドセットをエラー回避からエラー探索に切り替える。エラーを生成することに失敗はありえない。

3. 落ち込んだ時にエラーログを読む。 最初の方のエントリまでスクロールバックする。それらのエラーがどれほど基本的だったか気づく。今では絶対にしない間違いだと気づく。その進歩が、成長の目に見える証拠だ。

Tomásは三ヶ月間エラーログをつけ続けた。複雑なプロジェクトで行き詰まると、最初のエントリまでスクロールバックした:ページが空白——14行目の括弧が欠落。笑みが浮かぶ。括弧が何のためにあるかすら知らなかった頃を思い出す。

そしてデバッグに戻る。

ループは止まらない#

経験豊富な開発者も毎日エラーに遭遇する。経験豊富なミュージシャンもミスタッチをする。経験豊富なライターもひどい文を書く。

違いはエラーがなくなることではない。ループの速度だ。

初心者がエラーに遭遇すると三十分固まる。中級者は同じエラーを五分で解決する。エキスパートは三十秒で直す——そのパターンを何百回も見てきたから。

エラー駆動ループの目標はエラーをなくすことではない。対応をより速く、より冷静に、よりシステマティックにすることだ。

それが本当のスキルだ。完璧さではない。ノーミスの実行ではない。問題にぶつかり、診断し、直し、先に進む能力——素早く、感情的に崩壊せずに。

この能力が、能力閾値を越える人と、越える前にやめてしまう人を分ける。

次のステップ#

今日からエラーログを始めよう。メモアプリ、紙のノート、テキストファイル——実際に使うものなら何でもいい。

次にスキルを練習して何か問題が起きた時、ただ直すだけにしない。書き留める。何が起きたか。なぜか。どう直したか。どのパターンに属するか。

一週間続けよう。そして最初からログを読み返そう。

どれだけ遠くまで来たか、驚くはずだ。そして、自分がどこに向かっているか正確に示す地図が手元にある。

記録したすべてのエラーは、二度と受ける必要のないレッスンだ。