

# YouTubeコメントをTop（上位表示順）またはNewest（新しい順）で抽出する

取得元が優先表示する順序のコメントにはTop（上位表示順）を、取得元の新しい順のコメントにはNewest（新しい順）を使います。範囲を限定したサンプルを広げるには、両方を使います。それぞれの並び順のラベルとサンプルの制限を一緒に保持してください。これらは取得元が選んだリストです。どちらも無作為標本ではありません。どちらも視聴者全員の意見を表すものではありません。

Topは、取得元がTopランキングに配置するコメントを意味します。これは取得元による順位付けであり、視聴回数の指標ではありません。認証された関連性スコアでも、エンゲージメントスコアでもありません。Newestは、取得元の新しい順を意味します。その順序だけでは、投稿からの正確な経過時間は分かりません。

Actorは、ホスティング環境で動作するデータ収集プログラムです。Actorは公開データの行を収集します。分析は利用者が行います。Taskは、保存された入力設定です。公開Taskは、開始時の入力設定にすぎません。分析が自動で実行されるという意味ではありません。

この方法では、取得元の並び順によって調査サンプルがどう変わるかを示します。スパムの判定、返信ツリーの構造化、未回答の質問の処理待ちリストへの追加、レッスンへのコメントの採点は行いません。ライブチャットのメッセージも対象にしません。

## 最初に分析の問いを書く

手順1。並び順を選ぶ前に、分析の問いを書きます。

取得元が優先表示する順序のコメントを調べる問いには、Topを使います。取得元の新しい順に並ぶコメントを調べる問いには、Newestを使います。両方の問いが重要なら、2つの層を使います。層とは、サンプルを構成する部分として明示した区分です。ここでは、取得時の並び順が層になります。

並び順によって、サンプルに入るコメントが決まります。問いに合った並び順を選んでください。望んでいる結論を裏付けるという理由だけで、並び順を選ばないでください。

手順2。対象とする既知の動画、観測時刻、各モードの上限、トップレベルのコメントを対象とする範囲を明示します。

上限とは、トップレベルのコメントの取得上限である`maxCommentsPerVideo`です。各リストの観測時刻を記録してください。取得元の並び順は後で変わることがあります。後で取得したリストは、同じサンプルではありません。

TopとNewestを比較するときは、上限を同じにします。上限が異なると、テーマの割合を比較しにくくなります。

返信の取得はオフにしてください。返信とは、トップレベルのコメントの下に付くコメントです。返信を含めると、数える単位が変わります。返信の行は、トップレベルのコメントの上限には含まれません。この方法では返信をテストしていません。その制限をメモに記録してください。

## 現在の入力を設定する

ここで使用する[YouTube Comments Actor](https://apify.com/chronometrica/youtube-comments-scraper)の公開ビルドは1.1.6です。入力には、次の範囲を指定できます。

- `startUrls`には、既知の公開動画のURLまたは動画IDを1〜100件指定できます。
- `maxCommentsPerVideo`には、1〜1,000の整数を指定できます。
- `commentSortMode`には、`top`、`newest`、`both`を指定できます。
- `includeReplies`は、オンまたはオフにできます。
- 返信の取得がオンの場合、`maxRepliesPerComment`には1〜100の整数を指定できます。

既知の公開動画を使ってください。非公開動画は使わないでください。このActorは、利用者に代わって動画を検索するものではありません。

2026年10月13日時点で、[YouTube Audience Comment Research Task](https://apify.com/chronometrica/youtube-comments-scraper/examples/youtube-audience-comment-research)には、次の開始用入力が保存されていました。

```json
{
  "startUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
  "maxCommentsPerVideo": 250,
  "commentSortMode": "both",
  "includeReplies": true,
  "maxRepliesPerComment": 10
}
```

現在の入力を設定する

その入力は、既知の楽曲動画、上限250、`both`、返信の取得オン、コメント1件あたり返信最大10件という設定です。楽曲動画を、自分で選んだ既知の公開動画1本に置き換えてください。

最初の予備実行では、既知の公開動画を1本使います。`maxCommentsPerVideo`を2に設定します。`commentSortMode`を`both`に設定します。`includeReplies`をfalseに設定します。

`both`モードでは、その上限をトップレベルのコメント全体で共有します。上限が2なら、TopとNewestに分けて割り当てられます。Topの2行とNewestの2行を取得するという意味ではありません。また、文書に記載された`both`の動作では、同じ実行内のコメントIDごとに1行だけを保持します。

後で明示的に比較するときは、方法が異なります。TopのリストとNewestのリストを、それぞれ別の実行で取得します。各実行には、事前に明示した同じ上限を設定します。観測時刻を比較可能な条件にそろえてください。それぞれの上限は、1回の実行に適用されます。`both`の共有上限を分割するものではありません。

## データの行と実行サマリーを区別して読む

保存されたデータセットの各行は、公開コメントまたは返信1件です。返信の取得をオフにした場合、各行はトップレベルのコメント1件になるはずです。

| フィールド | 意味 |
| --- | --- |
| `videoId` | 動画の公開ID |
| `videoUrl` | 動画の公開URL |
| `commentId` | コメントの公開ID |
| `sortMode` | その保存行に保持された並び順のラベル |
| `text` | 公開コメントの本文 |
| `publishedTimeText` | 取得元に表示されている場合の、相対的な経過時間の表記 |
| `publishedAt` | 取得元が提供する場合の、正確な投稿日時 |
| `updatedAt` | 取得元が提供する場合の更新日時 |
| `authorChannelId` | コメント投稿者の公開チャンネルID |
| `status` | その行の処理結果 |
| `scrapedAt` | Actorがその行を保存した日時 |

`publishedAt`はnullになることがあります。nullは、値が欠損していることを意味します。0という意味ではありません。`publishedTimeText`は正確な日時ではありません。`scrapedAt`は収集日時です。`scrapedAt`を投稿日時にコピーしてはいけません。

`parentCommentId`、`isReply`、`replyDepth`も、出力仕様に含まれるフィールドです。トップレベルのコメントを対象とするこの方法では使いません。

OUTPUTの実行サマリーは、コメントの行ではありません。コメント本文はデータの行から読み取ります。実行の件数と停止理由は、OUTPUTから読み取ります。

| サマリーのフィールド | 読み取る内容 |
| --- | --- |
| `inputsReceived` | 実行が受け取った入力 |
| `uniqueVideosPlanned` | 処理を予定した、重複を除く動画数 |
| `duplicateVideosSkipped` | 重複のためスキップした動画入力 |
| `videosAttempted` | 実行で処理を試みた動画 |
| `videosWithRows` | データの行が書き込まれた動画 |
| `commentsWritten` | 書き込まれたトップレベルのコメント行数 |
| `repliesWritten` | 書き込まれた返信行数 |
| `rowsWritten` | 書き込まれたすべての行数 |
| `statusCounts` | 動画または入力ごとの収集結果を数えます。データセットの行数は数えません。対照実行の`ok`の件数は1です。データセットの行数は2です。 |
| `stopReasonCounts` | 停止理由ごとの件数 |
| `failedInputDetails` | 処理に失敗した入力、または利用できなかった入力 |

検証した対照実行では、`educationalvideo_uQrJ0TkZlc`に`both`を使いました。本文が空でない、重複のないトップレベルのコメントを2行保存しました。1行の`sortMode`は`top`でした。もう1行の`sortMode`は`newest`でした。両方の行の`status`は`ok`でした。両方の行で`publishedAt`はnullでした。OUTPUTでは、`commentsWritten`が2、`repliesWritten`が0と報告されました。停止理由は`requested_comment_limit_reached`でした。

その2行のコメントIDは、それぞれ異なっていました。この実行から、その取得元では`both`がデータの行を返し、`sortMode`を保持できることが分かります。無作為標本を得られることは示していません。すべてのコメントを取得できることも、投稿からの正確な経過時間も示していません。すべての動画で同じ並び順の動作になることも示していません。別々に実行したTopとNewestの重複も示していません。返信はテストしていません。`repliesWritten`が0であることは、返信のテストにはなりません。全件を網羅できるかどうかもテストしていません。

この記事では、その対照実行で取得したコメントの文言は使っていません。返信の総数や高評価数は、すべてのコメントを取得した証拠にはなりません。処理に失敗した入力や利用できなかった入力は、OUTPUTに表示されます。それらに対応するコメント行を作り上げないでください。

## 予備実行をテストしてから、エクスポート方法を選ぶ

手順3。既知の動画1本で、小規模な`both`の予備実行をテストします。

`videoId`と`videoUrl`が、その動画と一致することを確認します。`text`が空でないことを確認します。`commentId`と`sortMode`が存在することを確認します。OUTPUTの停止理由を確認します。共有上限に達した場合、想定される停止理由は`requested_comment_limit_reached`です。

`publishedAt`がnullの場合、投稿からの経過時間は不明のままにします。0と記録しないでください。収集日時も記録しないでください。Newestを示す`sortMode`は、Newestの並び順から取得したことを記録します。投稿からの経過時間を確定できるのは、取得元が実際の日付を提供する場合だけです。

手順4。範囲を広げた1つのエクスポートにするか、別々の2つのリストにするかを選びます。

範囲を広げつつ上限を設けた1つのエクスポートが必要で、停止理由と件数を確認する場合は、`both`を使います。そのエクスポートも、範囲を限定した取得元のリストであることに変わりはありません。

TopとNewestを明示的に比較するには、2回の実行を使います。保存台帳とは、1つのモードで保存した未加工のリストを、入力設定と観測時刻とともに保持したものです。範囲を限定したTopの保存台帳と、範囲を限定したNewestの保存台帳を、それぞれ1回の実行で取得します。各実行には、事前に明示した同じ上限を使います。観測時刻を比較可能な条件にそろえてください。

この一対の実行は、利用者が後で行う作業です。検証した対照実行は、1回の`both`実行でした。その対照実行を、一対の実行の重複を調べた結果として報告しないでください。

手順5。各保存台帳の重複を除去してから、別々の保存台帳を使って和集合を作ります。

重複の除去とは、同一性を確認した対象を1回だけ数えることです。キーは`videoId`と`commentId`の組み合わせです。同じ文言であることはキーになりません。2件のコメントが同じ本文でも、IDは異なる場合があります。

和集合は、いずれかの保存台帳に含まれる、確認済みのIDから重複を除いた集合です。共通部分は、両方の保存台帳に現れる確認済みIDの集合です。所属するリストを`{top}`、`{newest}`、`{top, newest}`として保持します。

`{top, newest}`を付けられるのは、別々の保存台帳の両方にそのIDが含まれる場合だけです。1回の`both`実行内では、重複の除去により1行と1つの`sortMode`が保持されます。その1つのラベルから、もう一方のリストにも含まれるかどうかは分かりません。推測しないでください。所属を確認できるよう、未加工の保存台帳を保持してください。

IDが欠損している場合は、未解決のままにします。IDの欠損を件数0として扱わないでください。失われた所属情報を記憶から再構成しないでください。

## 同じ分類基準を適用してから、集合を比較する

手順6。各層に同じ分類基準を使います。

分類基準とは、1つのテーマに該当するかどうかを判断するために書いた基準です。行に分類を付ける前に書いてください。[TopとNewestに同じ基準を適用します](/ja/articles/reddit%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88-%E3%82%B3%E3%83%BC%E3%83%80%E3%83%BC%E9%96%93%E3%81%AE%E4%B8%80%E8%87%B4%E5%BA%A6%E3%81%AE%E7%A2%BA%E8%AA%8D%E6%96%B9%E6%B3%95/)。分類とともに、元の本文と取得元の文脈を保持してください。

割合を計算する前に、4つの確認事項を照合します。

- 予定した入力：事前に明示した動画とモード。
- 不明なID：同一性を確定できないもの。未解決のままにします。
- 有効な本文：空ではなく、分類できる本文。
- 処理状態に関する欠落：`status`が`ok`ではない行、および失敗したモード。

分母は、割合の計算に含めることができるコメントの件数です。IDが分かっている、有効な本文だけを使います。不明なものは別の件数として報告します。不明は0ではありません。

テーマの件数は、サンプル内のコメントを数えたものです。人数ではありません。コメントしない視聴者の意見を表すものでもありません。人口統計的な結果でもありません。

手順7。別々のリストのIDから、共通部分と和集合を求めます。

取得したリストにコメントが現れた延べ回数を報告し、次に、重複を除いた後に残るID数を報告します。ここでの重複は、それぞれの観測時点における、範囲を限定したリスト同士の重複です。その動画の全コメントに占める割合ではありません。

モードの実行に失敗した場合、取得できなかったリストを、正常に取得できた空のリストとして扱ってはいけません。そのモードをコメント0件として分類しないでください。比較結果は不明のままです。実行と実行の間に、取得元の利用可否が変わることがあります。分類する前に、`failedInputDetails`と`stopReasonCounts`を確認してください。

手順8。並び順と問いに合った結論を書きます。

Topで多く見られるテーマは、取得元が優先表示する順序のコメントを反映している可能性があります。その結果は、取得元による順位付けに基づくものです。視聴回数でも、認証されたスコアでもありません。Newestで多く見られるテーマは、取得元のNewestの並び順における最近の活動を反映している可能性があります。`publishedAt`がnullの場合、投稿からの正確な経過時間を証明するものではありません。

1回の観測だけでは、あるテーマが増えたとは証明できません。減ったとも証明できません。サンプリングのメモ、入力設定、停止理由を保存してください。後から読む人が、同じサンプリングの選択を再現できるようにします。

収集に制限がある状況で、人が書いたコメントを範囲を限定して調べる方法を必要とする読者もいます。[この公開投稿](https://www.reddit.com/r/youtube/comments/1qcpg66/youtube_limits_api_comment_analysis_my_bad/)では、その必要性が述べられています。そこで主張されている数値上の制限は、この記事では検証していません。その主張を、現在の公式APIの動作として扱わないでください。このActorは別の方法を使います。利用者のYouTube APIキーは使いません。公式APIも使う場合は、そのAPIの現在の公式ドキュメントを自分で確認してください。TopまたはNewestを選ぶことで、サンプリングの必要性に対応できます。すべてのコメントを取得できると約束するものではありません。

## 架空の保存台帳で順に確認する

この節の保存台帳は架空のものです。件数の数え方を説明するために使います。Actorの実行結果ではありません。2行を取得した対照実行でもありません。ここに実際のコメント本文があるとは主張していません。

架空のTopの保存台帳には、コメントIDのA、B、Cが含まれます。架空のNewestの保存台帳には、B、D、Eが含まれます。5つのIDすべてに、取得元での同一性を確認できる情報と、分類可能な本文があります。

| ID | Topの保存台帳に含まれる | Newestの保存台帳に含まれる | 所属 |
| --- | --- | --- | --- |
| A | はい | いいえ | `{top}` |
| B | はい | はい | `{top, newest}` |
| C | はい | いいえ | `{top}` |
| D | いいえ | はい | `{newest}` |
| E | いいえ | はい | `{newest}` |

取得したリストに現れるのは、A、B、C、B、D、Eです。延べ6回の出現です。重複を除いたIDは、A、B、C、D、Eです。重複を除くと5件のコメントになります。Bは各保存台帳に1回ずつ現れるため、重複して現れたのはBです。和集合ではBを1回だけ数え、両方のリストへの所属を保持します。重複して現れることは、スパムを意味しません。この方法ではスパムの判定は行いません。

和集合は`{A, B, C, D, E}`です。共通部分は`{B}`です。Topだけに含まれるのは`{A, C}`です。Newestだけに含まれるのは`{D, E}`です。

`both`のエクスポートでBが`sortMode`を`top`としてのみ保存されていた場合、Newestにも含まれることは証明できません。Bが両方に含まれていたことを示せるのは、別々の保存台帳だけです。

テーマの割合を計算する前に、この架空の例の内容を照合します。

| 確認事項 | この架空の例での結果 | 割合の計算への影響 |
| --- | --- | --- |
| 予定した入力 | 動画1本、TopとNewestの別々の保存台帳、同じ上限 | 両方の層を比較できる |
| 不明なID | なし。AからEまですべて既知 | 未解決のIDを件数0として扱うことはない |
| 有効な本文 | 5件の本文すべてを分類できる | 5件すべてを分母に含めることができる |
| 処理状態に関する欠落 | なし。どちらのモードも失敗していない | どちらも取得に失敗したリストではない |

分類基準を最初に確定します。コメントが作業の始め方を尋ねている場合に限り、「開始方法についての質問」というテーマを付けます。すべてのIDに同じ基準を使います。この架空の例では、A、B、Dだけが基準に該当します。CとEは該当しません。

| 集合 | 該当するID | 分母に含まれるID | 分数 | 百分率 |
| --- | --- | --- | --- | --- |
| Top | A, B | A, B, C | 2/3 | 66.7% |
| Newest | B, D | B, D, E | 2/3 | 66.7% |
| 和集合 | A, B, D | A, B, C, D, E | 3/5 | 60% |

2つの層の割合の平均は、`(66.7 + 66.7) / 2`です。これは66.7%になります。和集合の割合である60%とは一致しません。和集合では、重複するBを1回だけ数えます。各層の百分率を平均しても、重複を除いた和集合の割合は求められません。

この架空の例では、どちらの並び順でも66.7%になります。この一致は、この5件のコメントについてだけのものです。視聴者全体の60%が開始方法についての質問を持っていることを証明するものではありません。

結論を述べる前に、ID、所属、分類基準、分母を示してください。ここで導ける結論の範囲は限定的です。この架空の例では、範囲を限定した2つの並び順でテーマの割合が一致し、重複を除いた和集合での割合は5件中3件です。

2つの制限は引き続き適用されます。`publishedAt`がnullなら、Bの正確な日付は不明のままです。Newestに含まれることから、その日付は分かりません。`scrapedAt`からも分かりません。別の動画でNewestの取得に失敗した場合、その動画をTopだけの母集団として扱ってはいけません。比較結果は不明になります。失敗したモードは、正常に実行できた空のモードではありません。

## 次に行うこと

分析の問いを1つ選び、並び順と上限を明示してください。結果を分類する前に、各モードの保存台帳を保持してください。[YouTube Comments Actor](https://apify.com/chronometrica/youtube-comments-scraper)と[YouTube Audience Comment Research Task](https://apify.com/chronometrica/youtube-comments-scraper/examples/youtube-audience-comment-research)を開きます。楽曲動画を、既知の公開動画1本に置き換えます。予備実行では、共有する`maxCommentsPerVideo`を2、`commentSortMode`を`both`、`includeReplies`をfalseに設定します。

## 出典と参考資料

- [YouTube Comments Actor](https://apify.com/chronometrica/youtube-comments-scraper)
- [YouTube Audience Comment Research Task](https://apify.com/chronometrica/youtube-comments-scraper/examples/youtube-audience-comment-research)
- [コメント分析の収集制限についての公開投稿](https://www.reddit.com/r/youtube/comments/1qcpg66/youtube_limits_api_comment_analysis_my_bad/)