

# Redditコメントのエクスポート行数が投稿の表示件数より少ない理由

Redditのエクスポートが完全だと判断する前に、コメントの取得上限、スレッドの状態、未展開の分岐、行が不足する要因を確認してください。アクターとは、サーバー上で実行されるデータ収集プログラムです。タスクとは、保存済みの入力設定です。データセットとは、収集したデータ行を保存したものです。未展開の分岐とは、公開スレッドの構造のうち、収集時にその先のコメントを完全には展開できなかった部分です。

## 制約を理解する

ソースに表示される件数と保存済みの行数では、単位や対象範囲が異なることがあります。差の内訳や原因は、いずれも証明されていません。

入力項目 `postUrls` には、既知の公開スレッドを1〜50件指定できます。`maxCommentsPerPost` には、投稿ごとに1〜500件を指定できます。既定値は100で、現在のタスクの保存済み設定では250です。試験実行では、対象のスレッドを1件指定し、取得上限を3件に抑えます。アクター本体は [Reddit Comments Scraper](https://apify.com/chronometrica/reddit-comments-scraper)、タスクの例は [Reddit Thread and Replies Export](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-thread-and-replies-export) で確認できます。

各行では、`commentId`、`parentId`、`postId`、`body`、`status`、`unavailableFields`、`observedAt` という正確なフィールド名を使います。行のステータスは `ok`、`deleted`、`removed` のいずれかに限られ、入力単位の取得が部分的だった状態や失敗した状態を表すものではありません。取得できない本文とプレースホルダーはそのまま保持されます。これらは、分析可能な文章としては扱えません。

OUTPUTの集計には、`commentsSaved`、`duplicatesSkipped`、`hiddenBranchesRemaining`、`completionReason`、`status`、`isComplete`、`inputResults` が含まれます。`inputResults` の各項目には、`commentsFound`、`commentsSaved`、`status`、`reason` が含まれます。`isComplete` フラグは処理状況を示す真偽値であり、ステータスでも、スレッド全体を取得できた証拠でもありません。

今回の試験実行では、本文のあるコメントIDを3件取得した時点で上限に達しました。`parentId`、`depth`、`hiddenBranchesRemaining` の各フィールドは、不明または null です。`isComplete` が true でも、全体と入力ごとのステータスは、部分的な取得を示したままです。この結果からは、実際の親子関係のツリーも、全件を取得した証拠も得られません。取得できていない分岐は不明であり、0ではありません。重複を除いたコメント数を数える機能は備わっていないため、確認済みの既知のコメントIDは自分で数える必要があります。

## 監査のための8つの手順

1. 対象URL、入力した取得上限、収集時刻、データセット、出力をそれぞれ保存してください。実行全体の行数だけを見るのではなく、スレッドごとに状況を調べてください。
2. 対象が有効な公開スレッドとして読み込まれたかを確認してください。失敗した入力やアクセスが制限された入力は、収集状況が不明です。正常に収集して0件だったという意味ではありません。返された投稿の識別情報が、要求したURLと一致することを確認してください。
3. 取得上限の数値と、その上限の使用状況または停止状態の報告を確認してください。上限への到達は、収集がどこで区切られたかを説明します。上限を引き上げて再実行すると、さらに行を取得できる場合があります。ただし、対象範囲の全件取得を保証するものでも、ソース側のあらゆる制約をなくすものでもありません。
4. 未展開の分岐がどれだけ残っているかと、部分的な取得の状態や結果の状態を確認してください。未展開の分岐は、明確な未取得部分です。未展開の分岐が0であることは、確認項目の1つにすぎません。過去の本文や削除された本文をすべて取得できた証拠にはなりません。
5. 既知のコメントIDの数は、観測した行数やIDが欠けている行数と分けて数えてください。キーの重複と情報の不一致を確認してください。識別情報を確定できない行も集計管理のために残し、ソースにないIDを作らないでください。
6. [削除済み、運営による削除、取得不可の本文の状態](/ja/articles/reddit-%E3%83%A2%E3%83%87%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E7%A0%94%E7%A9%B6-%E6%AC%A0%E6%90%8D%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AE%E8%A8%98%E9%8C%B2/)を調べてください。プレースホルダーは通常のコメント本文として数えないでください。本文がなくても位置が分かっているコメントと、未収集で状況が不明な分岐は異なります。単位が同じであるかのように、未展開の分岐数を表示済みのコメント数に足さないでください。
7. ソースに表示される件数を比較するときは、明示された単位と観測時刻に必ず合わせてください。母集団全体と単位が分からない限り、保存件数を表示件数で割った比率は、検証済みの再現率にはなりません。ソースの件数を取得できない場合は、不明のままにしてください。
8. 観測したサンプルを採用するか、範囲を限定した再実行が妥当か、全範囲の取得を裏付けられないかを判断してください。必要な範囲が現在公開されている仕様を超える場合は、その不足を報告し、利用が認められた適切なソースを選んでください。アクセスが遮断されたソースへの再試行を続けたり、削除された本文を復元できると主張したりしないでください。

## 架空の具体例と台帳

この節のスレッド、件数、結果は、すべて架空の例です。分類ルールの検証に使います。

| スレッドID | 表示件数 | 保存行数 | 上限への到達 | 未展開の分岐数 | 状態／診断 |
| --- | --- | --- | --- | --- | --- |
| T1 | 40 | 3 | はい（上限3件） | 2 | 上限に達し、未展開の分岐が残る公開データのサンプル |
| T2 | 8 | 8 | いいえ | 0 | コメントの位置を観測済み。本文のある行は6件、取得不可は2件 |
| T3 | 不明 | 不明 | 不明 | 不明 | 収集状況は不明。件数が0という意味ではない |

スレッドT1の表示件数は40ですが、上限の3件に達したため、保存行数は3です。未展開の分岐が2つ残っており、この入力の取得は部分的です。3行と2つの分岐を足して、コメントを5件収集したと言うのは誤りです。

スレッドT2の表示件数は8で、コメントの識別情報を含む行が8件保存され、未展開の分岐は0です。このスレッドの収集は、観測した範囲内では完了しています。8行のうち、6行には本文があり、1行は運営によって削除され、1行は投稿者によって削除されています。これは、8か所のコメント位置を観測し、そのうち6行の本文を利用できるという意味です。利用可能な本文付きコメントが8件あるという意味ではありません。本文が不明なコメントも、その位置は存在しており、収集の失敗ではありません。

スレッドT3は収集に失敗したため、採用する収集台帳では件数と行数を不明とします。これは収集状況が不明ということであり、コメントが0件だったという結果ではありません。

T1とT2で採用した行は、合計11件です。スレッドT3を推測で0件として加算することはしません。T1で利用できる本文の件数は示されていないため、両スレッドを合わせた本文の取得率を算出しないでください。

続く架空の例では、T1を上限10件で再実行し、既知のIDを7件保存し、未展開の分岐を1つ記録します。両方の時点の記録を残してください。以前の3件のIDが新しい7件のIDに含まれている場合、和集合の7件を使います。3件と7件を足して、重複を除いたコメント数を10件としてはいけません。分岐が1つ残るため、取得は引き続き部分的です。最終的な台帳には、スレッドごとの上限への到達状況、分岐の状態、本文の利用可否、識別情報の状態、次の判断を記載します。再構成、復元、モデレーションの原因分析は必要ありません。

## 次に行うこと

[Reddit Comments Scraper](https://apify.com/chronometrica/reddit-comments-scraper) アクターを開き、既知のスレッドを1件指定して、取得上限を3件に抑えてください。出力を保存し、[Reddit Thread and Replies Export](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-thread-and-replies-export) の保存済み設定を使って、取得範囲の台帳を基にサンプルを採用するか再実行するかを判断してください。

## 出典と参考資料

- [Reddit Comments Scraper アクター](https://apify.com/chronometrica/reddit-comments-scraper)
- [Reddit Thread and Replies Export タスクの保存済み設定](https://apify.com/chronometrica/reddit-comments-scraper/examples/reddit-thread-and-replies-export)
- [投稿内の全コメントを取得する方法についての議論](https://www.reddit.com/r/redditdev/comments/12f885c/getting_all_the_comments_in_a_post/)
- [Reddit JSON APIで追加のコメントを取得する方法についての議論](https://www.reddit.com/r/redditdev/comments/10jchxr/reddit_json_api_how_to_get_more_comments/)
- [YouTube字幕の抽出](https://chronometrica.com/ja/articles/youtube-%E6%96%87%E5%AD%97%E8%B5%B7%E3%81%93%E3%81%97%E3%81%AE%E5%8F%96%E5%BE%97-%E5%AD%97%E5%B9%95%E3%81%AE%E7%A2%BA%E8%AA%8D/)