Refactoring English: Month 16

Michael Lynch

Refactoring English:16ヶ月目

一言まとめ

もうすぐゴールです。

ハイライト

  • 一気に書き上げた記事Hacker Newsのトップページに掲載されました。
  • 今後数年間、ソフトウェアのセキュリティは厳しい状況が続くと見ています。
  • 家族向け写真共有アプリの最初のマイルストーンを達成しました。

今月の目標と自己評価

毎月初めに、その月に達成したい目標を宣言しています。今回はその結果を振り返ります。

Refactoring Englishを完成させる

  • 結果: 新しい章を1つ公開しましたが、完成には至りませんでした
  • 評価: C

残り3章を1ヶ月で仕上げるのは野心的だとわかっていましたが、可能だと思っていました。実際には1章しか終えられませんでしたが、本の完成は目前です。

Refactoring Englishの指標

指標2026年2月2026年3月変化
ユニーク訪問者数7,7886,932-856 (-11%)
予約販売による収益$886.20$725.80-$160.40 (-18%)

今月は訪問者数も売上もやや減少しました。ただ、これといったプロモーションを行わなくても、読者や購入者が途切れず訪れてくれているのは嬉しいことです。

今月唯一のプロモーションは「Which Design Doc Did a Human Write?(どちらの設計書を人間が書いた?)」という記事でした。Lobstersでは好評でしたが、Hacker Newsでは振るいませんでした。/r/programmingでは「AI生成」だとして却下され、記事自体は人間が書いたものだとモデレーターに伝えても受け入れられませんでした。

この記事のアイデアは、前回のRefactoring Englishライブ授業から得ました。AIは設計書を書けるほど優秀なのかという議論の中で、手書きした設計書をAIに別バージョンとして生成させれば簡単に比較できることに気づいたのです。読者の皆さんが、人間とAIの設計書を見分ける手がかりとして挙げていた「ここがAIっぽい」「ここが人間らしい」といった推測を読むのはとても面白いものでした。

Simon Willisonの手法を使うチャンスを見つける

Simon Willisonはこの3年間、Hacker Newsで最も人気のあるブロガーです。先日、彼のあまり使われていないのに効果的なブログ戦略について書きました

Simonはしばしば、TikTokやTwitterといった閉じたプラットフォームの中からアイデアを見つけ、それをオープンなウェブに持ち込むことで、Hacker Newsで議論しやすくしています。彼の特に人気を集めた投稿の中には、少しコメントを添えただけの短い引用やリンクもあります。「Excelにコパイロットを入れたのが心配だ」という投稿は、彼がTikTokで見た動画からの引用にすぎません。「コンピューターは決して責任を負えない」という投稿も、いくつかのツイートを彼が要約したものです。

Simon自身、この手法を「手間は少なく、価値の高いインターネットへの貢献のしかた」と呼んでおり、私も同感です。

この戦略で難しいのは、使うタイミングを見極めることだけです。ツイートやTikTokをやみくもに要約しても、あまり注目は集まりません。面白い情報がウェブにとって扱いづらい形式の中に閉じ込められていることに気づき、それがまだ新鮮なうちにウェブへ移植する必要があるのです。

先週、Nicholas Carlini氏の「Black Hat LLMs」講演を見て、Willisonの手法を使う絶好の機会だと気づきました。

講演の中でCarlini氏は、23年間誰にも気づかれていなかった、リモートから悪用可能なLinuxカーネルの脆弱性をどのように見つけたかを語っていました。驚くべきことに、彼がやったことは誰にでもできたことでした。Linuxカーネルのソースコードの各ファイルをClaude Codeに渡し、脆弱性を探すよう指示しただけだったのです。

ネット上でこの発見についての議論を探してみましたが、驚くほど話題になっていませんでした。YouTubeで公開され、Hacker Newsのスレッドでも触れられてはいたものの、受けるべき注目には遠く及ばないように見えました。Claude CodeがFreeBSDのバグのエクスプロイトを書いたことは大々的に話題になっていたのに、今回の件の方がよほど大きなニュースだと感じました。

そして、その直感は当たっていました。

その記事は3時間で一気に書き上げました。普段は10〜30時間を数週間かけて書くのに比べると、はるかに速いペースでした。これまでに4万1,000人のユニーク読者を集め、Hacker NewsLobstersでも好評でした。私自身はX(Twitter)に投稿すらしていないのに、読者の半数近くがX経由で記事を見つけていました。

これまで個人ブログの記事が話題になると、多くの読者がそこからRefactoring Englishを見つけてくれていました。今回はそうはなりませんでした。おそらく、AIに関心のある読者は、AIを使わずに書くことをテーマにした本にはあまり興味がないからでしょう。

今後数年、ソフトウェアのセキュリティは厳しい局面を迎えます

Carlini氏の講演は、私がここ数ヶ月考えてきたことを浮き彫りにしました。今後数年間、サイバーセキュリティはかなり厳しい状況になるということです。

これまでは、セキュリティ上の脆弱性を見つけるコストが高いことが、一般の人にとってある種の防御になっていました。

例えば半年前、オープンソースのファイル同期ツールであるSyncthingのユーザーを攻撃したいと考えたとしても、あなた自身がセキュリティの専門家でなければ、次のような条件を満たす人を雇う必要がありました。

  • 脆弱性を見つけるのが得意
  • それを悪用可能な形にすることを金銭で引き受けてくれる
  • 見知らぬ相手との仕事をいとわない

仮に5,000ドルでSyncthingの脆弱性を見つけて悪用してくれる人が見つかったとしても、それでも大きな手間と費用がかかります。しかも相手が詐欺ではなく本物だと仮定しての話です。

さらに、そこまで苦労して手に入れたとしても、使うたびにエクスプロイトを「燃やして」しまうリスクがあります。誰かが侵害に気づき、原因をSyncthingだと突き止めれば、バグが報告されてエクスプロイトは無価値になってしまうからです。

それが今はどうでしょう。Claude Codeのサブスクリプションを月100ドルで契約すれば、Carlini氏と同じように重大な脆弱性を見つけられます。Claude Codeにはガードレールがあり、脆弱性を武器化する要求は拒否されますが、オープンウェイトモデルを使って誰にも咎められずに密かにエクスプロイトを開発できるようになるのも時間の問題でしょう。

つまり、エクスプロイトを作るコストは劇的に下がったのに、それを修正する側の価値は変わらないか、むしろ下がっています。AIが生成したバグ報告があまりに多いため、ベンダーはバグバウンティプログラムを終了させており、誠実な研究者への金銭的な報奨もなくなっています。

Carlini氏の成果は偶然ではありません。私も同じ手法を再現し、人気のあるコードベースに潜んでいた未知のリモートコード実行の脆弱性を見つけました。労力をかければ他にも見つけられるでしょうが、私にとって金銭的な価値はマイナスです。そのプロジェクトにはバグバウンティがないため、修正をベンダーと調整するために何時間もかけても報酬は0円だからです。

私が見つけた脆弱性に対して報酬を払わない、欲張りな大企業がいるわけではありません。メンテナーは善意でプロジェクトを続けている、どこにでもいる一人の開発者です。まさにxkcdの「Dependency(依存関係)」の世界です。彼自身も報酬を得ていないので、脆弱性報告にお金を払う余裕はありません。にもかかわらず、何十億ドル規模の企業が彼のコードを利用しているのです。

xkcd #2347、「Dependency」

やがて、AIによるセキュリティツールが今の静的解析ツールと同じくらい安価で手軽になることで、再び均衡が取れるようになるでしょう。ベンダーはAIを使って、本番環境に出る前にセキュリティ上の問題を検出するようになります。

しかし短期的には、突然手の届くところにぶら下がった脆弱性が山のようにあります。攻撃者にとってはそれを突く価値がある一方で、誠実な研究者が修正する側に回るインセンティブは乏しいのです。

初のLittle Momentsマイルストーンを達成

昨年12月、既存の選択肢にうんざりしていた私は、家族の写真を共有するための無料オープンソースアプリを作ると発表しました

最初はバイブコーディングで簡単に作れるだろうと思っていましたが、これは設計書(デザインドキュメント)を書く練習にうってつけだと気づきました。Refactoring English設計書へのフィードバックのしかたについて書いてきたものの、実際に本格的な設計書を書くのは10年近くぶりでした。

短期的にはバイブコーディングの方がずっと楽しいので、なかなか設計書を書く気になれませんでした。そのせいで12月から時間がかかってしまいましたが、ようやく集中してアプリ「Little Moments」の設計書を書き上げました。設計書ができてしまえば、あとは簡単でした。

現時点では、TinyBeansからエクスポートしたデータをインポートしてローカルで表示できます。実際の家族のプライベートな写真は見せたくないので、テスト用にダミーデータを作成しました。

この最小限の実装だけでもとてもワクワクしていて、完成が待ちきれません。

TinyBeansやPhotoCircleを使ったことがなければ、この程度のプロトタイプでなぜそんなに興奮するのか不思議に思うかもしれません。ただ、あのアプリのユーザー体験がどれほどひどいか、いくら強調しても足りません。

TinyBeansでは、次の写真や前の写真を見るという基本的な操作すらまともにできません。写真を見ている状態から次の写真に行くには、一度一覧に戻って、また次の写真を探さなければなりません。それもモバイルアプリの場合です。ウェブアプリでは写真を連続して見ることすらできず、カレンダーから探す必要があります。そのうえ広告や課金への誘導だらけで、動作もとにかく遅いのです。

Little Momentsは非常に高速で、ナビゲーションをさらに簡単にするためにキーボードショートカットモバイルでのスワイプ操作も追加しました。早くこのアプリを完成させて、TinyBeansを使うのをやめたいと思っています。

まとめ

できたこと

学んだこと

  • 今後数年間、サイバーセキュリティは厳しい状況が続きます
    • 悪意ある攻撃者が脆弱性を見つけるのはかつてないほど容易になっている一方で、誠実な研究者がそれを修正する見返りは減っています。

来月の目標

  • Refactoring Englishを書き上げる

原文は Michael Lynch により に公開されました。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。