Show HN 4.1万件をPythonで検証:「AI」明記群の10点到達率は5.7%だった
Show HN 41,831件を上限検知付きで取得し、タイトル長・8種類の表現・リンク種別を分析。AI/LLM群とbrowser/WASM群の差を、月・曜日・時間帯で層別して検証します。
この記事の目次
INTERACTIVE EVIDENCE
Show HN 41,831件を条件別に比較する
タイトル表現・文字数・リンク先ごとに、10点到達率、50点到達率、投稿時期を層別した差を切り替えて確認できます。
| 条件 | 件数 | 10点以上 | 50点以上 | 時間層別差 |
|---|
時間層別差は月・PT曜日・PT 3時間帯の層内リスク差を加重した値です。因果効果ではありません。集計結果JSON
4万件を集めるまでに、最初の取得を捨てた
「Show HNではAIプロダクトが伸びやすい」。2026年の空気感だけで考えると、そう思いたくなる。一方で、Hacker Newsを眺めていると、AIを名乗る投稿が票を集めないまま流れていく場面も珍しくない。
そこで、2025年7月1日から2026年6月30日までの show_hn 投稿を、公開されているAlgolia HN Search APIから取得した。対象は41,831件である。
最初は14日ずつ取得したが、ほぼ毎回ちょうど1,000件になった。APIの検索上限による欠落だったため、そのスナップショットは破棄した。7日窓でも1,000件に達する期間があったので、最終的には3日窓、全122リクエストで取り直した。各窓が上限未満であることをコードで検査し、objectIDで重複を除いた。
何を検証したか
取得前に、次の問いと分類を分析コードへ固定した。
- タイトルの長さと「10点到達率」に関係はあるか
open source、AI / LLM、browser / WASM、I built、数字など、8種類の表現で到達率は違うか- GitHub等のコードホスト、独自ドメイン、URLなしで違いはあるか
主要アウトカムは、取得時点のAlgolia points が10以上かどうか。10点に特別な意味があるわけではないが、「作者本人と数人だけの反応」から一段抜けた状態を、全投稿へ同じ基準で適用できる。
表現8種類の比較には二標本比率検定を使い、Benjamini-Hochberg法でFDRを補正した。さらに、投稿時期の偏りを少し抑えるため、暦月 × PT曜日 × PT 3時間帯の層内でリスク差を計算し、サンプル数に応じて加重した。
def stratified_risk_difference(rows, predicate): strata = defaultdict(list) for row in rows: key = (row["month"], row["ptWeekday"], row["ptHour"] // 3) strata[key].append(row) numerator = denominator = 0.0 for values in strata.values(): exposed = [r for r in values if predicate(r)] control = [r for r in values if not predicate(r)] if not exposed or not control: continue weight = len(exposed) * len(control) / len(values) difference = mean_success(exposed) - mean_success(control) numerator += weight * difference denominator += weight return numerator / denominator
完全な取得・分析コードと固定データは、記事上部の「検証済み分析」からダウンロードできる。外部パッケージは使わず、Python 3.11以降の標準ライブラリだけで再実行できるようにした。
発見1:短いタイトルほど到達率は高かった
Show HN: を除いたタイトルを文字数で4群に分けた。29文字以下は2,750件で、10点到達率は 10.04%。 30〜49文字は9.15%、50〜69文字は8.02%、70文字以上は7.66%だった。
| タイトル長 | 件数 | 10点到達率 | 95%信頼区間 | 時間層別後の差 |
|---|---|---|---|---|
| 29文字以下 | 2,750 | 10.04% | 8.97〜11.22% | +1.36 pt |
| 30〜49文字 | 10,310 | 9.15% | 8.61〜9.72% | +0.82 pt |
| 50〜69文字 | 24,476 | 8.02% | 7.69〜8.37% | -0.68 pt |
| 70文字以上 | 4,295 | 7.66% | 6.90〜8.49% | -0.76 pt |
ここで「30文字未満に削れば票が増える」と結論づけるのは早い。短いタイトルで説明できるプロダクトは、そもそも理解しやすい可能性がある。強いブランド名を持つ投稿、説明不要の開発者ツール、既に外部で知られたプロジェクトも短くなりやすい。見えているのは、短さそのものではなく、短く表現できる明瞭さかもしれない。
発見2:「AI」は多いが、10点到達率は低い
表現ごとの結果は、2026年らしいが単純ではなかった。
| タイトル表現 | 件数 | 10点到達率 | 時間層別後の差 | FDR補正p値 |
|---|---|---|---|---|
| browser / WASM系 | 1,385 | 11.84% | +3.51 pt | 0.000007 |
| Open sourceを明記 | 2,234 | 10.74% | +2.56 pt | 0.000077 |
| 数字を含む | 6,574 | 9.89% | +1.97 pt | 0.000007 |
I built / madeで開始 | 2,508 | 8.81% | +0.14 pt | 0.497872 |
| local / privacy系 | 2,413 | 8.08% | -0.28 pt | 0.569009 |
freeを明記 | 1,447 | 6.29% | -2.06 pt | 0.005282 |
| AI / LLMを明記 | 10,016 | 5.65% | -3.43 pt | < 0.000001 |
「Open source」を明記した群は、時間層別後でも +2.56ポイントだった。 AI / LLM群は全投稿の約24%を占める一方、10点到達率は非AI群の9.26%に対して5.65%である。
考えられる説明は少なくとも4つある。
- AIという語が増え、目新しさとして機能しにくくなった
- AI群には試作品や薄いラッパーも多く、分布の中身が違う
- AIであることより、何ができるかを前に出した強い投稿がAI群へ分類されない
- HN読者の選好が、ブラウザ実行・低レイヤー・公開コードなど特定の技術へ偏っている
今回のデータだけでは、この4つを分離できない。言えるのは、AIというラベルが高反応の代理変数にはなっていないことまでだ。
発見3:GitHub等への直リンク群は9.78%
リンク種別にも差があった。GitHub、GitLab、Codebergへの直リンク14,489件は10点到達率 9.78%だった。 独自・外部ドメイン24,692件は7.82%、URLなし2,650件は6.19%である。
| リンク種別 | 件数 | 10点到達率 | 時間層別後の差 |
|---|---|---|---|
| GitHub等コードホスト | 14,489 | 9.78% | +2.28 pt |
| 独自・外部ドメイン | 24,692 | 7.82% | -1.60 pt |
| URLなし | 2,650 | 6.19% | -2.19 pt |
これも「独自サイトをやめてGitHubへ貼ればよい」という話ではない。公開コードに直結するプロジェクトと、サインアップが必要なSaaSでは対象が違う。むしろ、HNでは中身をすぐ検証できることが歓迎される、という仮説を次に検証する材料になる。
投稿者が使える実務的な読み方
この分析からタイトルの必勝法を作ることはできない。それでも、投稿前レビューの問いは改善できる。
AIを外しても、何が新しいか一文で伝わるか- 50文字以上を使っているのは、価値ではなく機能を列挙しているからではないか
open sourceと書くなら、クリック直後にコードと再現手順を確認できるかbrowser / WASMのような技術語は、本当の差別化要因として使っているか- 独自サイトでも、ログイン前にデモ・コード・結果を検証できるか
数字はテンプレートではなく、曖昧な説明を発見する診断材料として使うのがよい。
再現方法
データ取得と分析は分離した。再取得するとポイントが変動する可能性があるため、記事の数値はSHA-256で固定したスナップショットに対応している。
cd ops/articles/show-hn-trend-2026 python3 evidence/fetch.py --window-days 3 python3 evidence/analyze.py shasum -a 256 evidence/data/*.jsonl.gz evidence/results.json
fetch.py は各取得窓が1,000件へ到達すると失敗する。API上限で一部が欠けたまま成功扱いにしないためである。analyze.py は results.json、3つのCSV、2つのSVGを生成する。記事内の主要数値は evidence/manifest.json のclaim IDと results.json のパスで対応づけ、ビルド時に一致を検査している。
限界
- 観察研究: 表現をランダムに割り付けた実験ではなく、因果関係は示せない
- ポイントのスナップショット: Algoliaのポイントは取得後に変わり得る。この記事は2026年7月15日取得分に固定している
- 分類の粗さ: 正規表現による複数ラベルで、意味理解はしていない。例えば
private betaもprivacy系に入る可能性がある - 未調整の交絡: 投稿者、本文、初期コメント、デモ品質、過去の知名度などは含めていない
- 10点という閾値: 実務上わかりやすい基準として選んだが、50点到達や連続スコアでは順位が変わる可能性がある
- APIの収録仕様: Hacker News本体の完全な履歴監査ではなく、Algolia HN Search APIが
show_hnとして返したレコードの分析である
まとめ
- 1年間のShow HN 41,831件を、上限検知付きで取得し直した
- 全体の10点到達率は8.39%、AI / LLM明記群は5.65%
- browser / WASM系は11.84%で、時間層別後も+3.51ポイント
- 29文字以下のタイトルは10.04%だったが、短さの因果効果とは言えない
- GitHub等コードホスト直リンク群は9.78%。検証しやすさが一つの仮説になる
- すべての主要数値、固定データ、Python、CSV、SVGを記事と同時に公開する
次に必要なのは「AIという語を消す」小手先の最適化ではない。本文、デモ有無、リポジトリのREADME品質まで含め、どこで反応差が生まれているかを段階的に分解することだ。
参考・データ出典
次の分析も検証可能な形で
新しい記事は、データ取得・Python・結果・限界の確認が終わったものだけ公開します。