やりたいこと
年末にアドベントカレンダーを書いていて「やっぱり、この時期に投稿数が増えるのだろうか?」と思い、Qiitaに投稿されている記事の投稿日を集めてグラフにしようと考えました。
他に調べている人がいないか見てみると2022年までの投稿数を調べている人がいました。この記事にあるグラフを見ると、やはり12月に投稿数が大幅に増えていました。目的は達成された感がありましたが、2025年の最新の状況も知りたいし、なにより自分の手でやってみたかったので調査しました。
APIをほとんど使ったことがないので、至らぬところが多々あると思います。
本記事の内容は2026年1月1日時点のものです。
結果だけを見たい人はこちらからページ下部に飛んでください。
↓2022年までの投稿数を調べた方の記事
投稿日を取得するには
当初、Qiita記事の投稿日をスクレイピングで収集しようとしていましたが、公式から禁止されていました。
スクレイピングはサーバーの負荷上昇への懸念があるため、Qiitaへのスクレイピングは許可しておりません。
(https://help.qiita.com/ja/articles/qiita-api)
Qiita APIで新着記事一覧を取得できるようなので、そちらを利用しました。
Qiita APIを使ってみる
Qiita APIは認証なしでは1時間に60件のリクエストを送れますが、アクセストークンで認証をすると1時間に1000件までリクエストを送ることができます。
アクセストークン認証は「設定」>「アプリケーション」>「新しくトークンを発行する」から発行できます。発行すると「個人用アクセストークン」のところに表示されました。
↓参考記事
APIドキュメントを読むとhttps://qiita.com/api/v2/docs#投稿に記事の一覧を作成日時の降順で取得する方法が書かれていました。
qiita.comがホスト、GETメソッドで/api/v2/itemsにアクセスします。
パラメーターはpage、per_page、queryの3つです。一部の配列を返すAPIはすべての要素を一度に返さず、ページ番号をpageで指定し、1ページあたりの要素の数をper_pageで指定します。
page
返す要素のページ番号を指定する。1から100までで、初期値は1。
per_page
1ページに表示する要素の数を指定する。1から100までで、初期値は20。
query
検索クエリで、記事を絞り込むことができる。
例)qiita+user:Qiita→「qiita」が含まれる、ユーザー@Qiitaが作成した記事
↓こちらに詳しく書かれています
GETメソッドはURLでリクエストするので試しにhttps://qiita.com/api/v2/items/?page=1&per_page=1&query=user:ruby1031にアクセスすると、ちゃんと表示されました。

Qiitaに投稿された記事の情報を集める
これまでに投稿された記事がいくつあるのかを検索欄にcreated:<=2025-12-31を入れて調べると1,139,029件と大量にありました。1時間に100×1000の100,000件しか記事を取得できないので2025年に投稿された122,946件の記事を調べることにしました。
↓この記事を参考にしながらGASで取得し、スプレッドシートにまとめました。
function get_qiita_b(){
//記録するスプレッドシートを指定
var spreadsheet = SpreadsheetApp.openById('/*記録先シートのID*/');
var sheet = spreadsheet.getSheetByName('2025');
var rows = sheet.getLastRow();
//検索クエリを指定
var q_spreadsheet = SpreadsheetApp.openById('/*検索クエリを保存しているシートのID*/');
var q_sheet = q_spreadsheet.getSheetByName('query_b');
var query = q_sheet.getRange("A" + q_sheet.getLastRow()).getValue();
q_sheet.getRange("A" + q_sheet.getLastRow()).setValue('');
var url = "https://qiita.com/api/v2/items/?per_page=100&query=" + encodeURIComponent(query);
getPosts_b(url,sheet,rows);
}
function getPosts_b(url,sheet,rows) {
//Qiita APIのアクセストークンを付与
var options = {
'method': 'GET',
'headers': {
'Authorization': 'Bearer ' + '/*Qiitaの個人用アクセストークン*/'
}//,
//'muteHttpExceptions': true
}
rows += 1;
for(var i = 1; i< 101; i++){
Logger.log(i); //進行確認用
//APIの結果を受け取る
var response = UrlFetchApp.fetch(url + "&page=" + i, options);
var json = JSON.parse(response.getContentText());
if(json.length != 0){
//取得日時を取得
var time = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd HH:mm:ss');
//結果を配列化
var values = json.map((data) => {
return [
time,
'',
'',
data.coediting,
data.comments_count,
data.created_at,
data.group,
data.id,
data.likes_count,
data.private,
data.reactions_count,
data.stocks_count,
JSON.stringify(data.tags),
data.title,
data.updated_at,
data.url,
JSON.stringify(data.user),
data.page_views_count,
data.team_membership,
data.organization_url_name,
data.slide
]
});
//スプレッドシートに保存
sheet.getRange(rows, 1, values.length, values[0].length).setValues(values);
rows += 100;
}
else{
break;
}
}
}
コードの軽い説明
get_qiita()で記録先のシートや検索クエリを準備して、get_Posts()に渡しています。get_Posts()は①リクエストURLを作る、②APIを叩く、③情報を保存する、という流れになっています。
8〜14行目
GASの実行時間制限を回避するために一回の実行でAPIを叩く回数が50回程度になるように調整した検索クエリ(26個)を、事前に別のシートに保存しています。各実行時には保存していた検索クエリを取得してリクエストURLを作成し、get_Posts()に渡しています。
18〜24行目
UrlFetchApp()を使う時にheaderにAPIのアクセストークンを付けています。
23行目はコピペの残骸です。
26行目
Qiita APIは1〜最大100ページに分けて返すので、それに対応しています。
28行目
pageパラメータを追加してリクエストを送っています。
34〜59行目
APIが返してくれたデータを保存しています。
各ページでデータをまとめて保存すると、GASの時間短縮につながりました。
困ったところ① 検索クエリ
Qiita APIドキュメントではqueryのパラメーターを+でつないでいましたが、500エラーが返ってきたので困りました。結局Qiitaで検索をするときのURLと同じように (半角スペース)でつなぐと上手くいきました。
困ったところ② GASの実行時間制限
最初は記事情報を1件ごとにスプレッドシートへ保存していたのでGASの実行時間制限が問題になりました。APIからの情報を保存する処理を「1行増やして1投稿を保存×100件」から「100投稿分の100行を一気に保存」に修正したことで、実行時間が10分の1になりました。結果として検索クエリを細かく分ける必要はなくなりました。
大量のデータをスプレッドシートなどに保存するときは「まとめて一度に実行」が大切だと学びました。
最近知った「N+1問題」に近いと思いました。
困ったところ③ Qiitaの投稿数
すべての投稿を収集した後に、漏れや重複がないかどうかQiitaの検索窓で2025年中に投稿された記事を調べました。すると、集めた数より検索結果のほうが少なく、重複を疑いましたが、記事固有のidに重複はありませんでした。一部の記事が非公開になったのだろうということで何もしていません。
ちなみに、この記事の冒頭では122,946件の記事が公開されていると書きましたが、収集した数は122,941件で、収集完了後にQiitaに公開されていた数は122,940件でした。執筆開始(2026/01/01 11時)から収集完了(2026/01/02 22時)までに6件が非公開になったのでしょう。
困ったところ④ スプレッドシートのサイズ制限
スプレッドシートのサイズ上限は「1,000万セルまたは18278列」ですが、数万行になると動作が重くなるという記事がちらほら見られたので心配していました。
保存用に使ったのは21列×12万行で、読み込みや関数や検索に数秒〜数十秒かかりました。GASの実行履歴を見ると、3万行を超えたあたりから時間が長くなっているのがわかります。

データの加工用にシートをコピーしていると4回目のコピー時に1000万セルを超えたため、警告が出ました。
↓今回は直接関係がありませんが、スプレッドシートのサイズ上限について興味深い記事があったので、ぜひ合わせてご確認ください。
良かったこと① Qiita APIのリクエスト制限
Qiita APIのリクエスト制限である1000件/時間がネックになると思っていましたが、手動で複数回に分けてGASを動かしたため時間がかかり、結果としてAPIアクセスが止められることはありませんでした。
データを分析する
①結果
データは2026年1月2日時点のものです。
Qiitaの記事の中には非公開となり現在は公開されていないものもあります。そのため、データの値と実際の数が異なる場合があります。
全部で122,941件の記事のデータを集めました。
今回収集したデータを表計算ソフトで確認していると16226行目が空白になっていて欠損していました。
毎日の投稿数について
2025年の日ごとの投稿数
以下のデータは2026年1月2日の19時から22時にかけて集めたものです。| 日付 | 投稿数 |
|---|---|
| 1月1日 | 260 |
| 1月2日 | 256 |
| 1月3日 | 264 |
| 1月4日 | 315 |
| 1月5日 | 338 |
| 1月6日 | 309 |
| 1月7日 | 277 |
| 1月8日 | 262 |
| 1月9日 | 308 |
| 1月10日 | 256 |
| 1月11日 | 224 |
| 1月12日 | 292 |
| 1月13日 | 295 |
| 1月14日 | 290 |
| 1月15日 | 254 |
| 1月16日 | 247 |
| 1月17日 | 263 |
| 1月18日 | 260 |
| 1月19日 | 316 |
| 1月20日 | 315 |
| 1月21日 | 329 |
| 1月22日 | 282 |
| 1月23日 | 260 |
| 1月24日 | 284 |
| 1月25日 | 259 |
| 1月26日 | 378 |
| 1月27日 | 298 |
| 1月28日 | 345 |
| 1月29日 | 305 |
| 1月30日 | 308 |
| 1月31日 | 333 |
| 2月1日 | 278 |
| 2月2日 | 351 |
| 2月3日 | 305 |
| 2月4日 | 293 |
| 2月5日 | 246 |
| 2月6日 | 242 |
| 2月7日 | 271 |
| 2月8日 | 255 |
| 2月9日 | 356 |
| 2月10日 | 305 |
| 2月11日 | 370 |
| 2月12日 | 249 |
| 2月13日 | 308 |
| 2月14日 | 291 |
| 2月15日 | 370 |
| 2月16日 | 323 |
| 2月17日 | 291 |
| 2月18日 | 302 |
| 2月19日 | 250 |
| 2月20日 | 317 |
| 2月21日 | 278 |
| 2月22日 | 282 |
| 2月23日 | 315 |
| 2月24日 | 310 |
| 2月25日 | 310 |
| 2月26日 | 329 |
| 2月27日 | 278 |
| 2月28日 | 321 |
| 3月1日 | 265 |
| 3月2日 | 305 |
| 3月3日 | 277 |
| 3月4日 | 284 |
| 3月5日 | 247 |
| 3月6日 | 319 |
| 3月7日 | 265 |
| 3月8日 | 310 |
| 3月9日 | 308 |
| 3月10日 | 360 |
| 3月11日 | 292 |
| 3月12日 | 263 |
| 3月13日 | 269 |
| 3月14日 | 270 |
| 3月15日 | 236 |
| 3月16日 | 350 |
| 3月17日 | 301 |
| 3月18日 | 293 |
| 3月19日 | 248 |
| 3月20日 | 290 |
| 3月21日 | 274 |
| 3月22日 | 302 |
| 3月23日 | 303 |
| 3月24日 | 336 |
| 3月25日 | 316 |
| 3月26日 | 342 |
| 3月27日 | 315 |
| 3月28日 | 275 |
| 3月29日 | 312 |
| 3月30日 | 348 |
| 3月31日 | 432 |
| 4月1日 | 310 |
| 4月2日 | 312 |
| 4月3日 | 301 |
| 4月4日 | 287 |
| 4月5日 | 256 |
| 4月6日 | 399 |
| 4月7日 | 342 |
| 4月8日 | 387 |
| 4月9日 | 304 |
| 4月10日 | 314 |
| 4月11日 | 276 |
| 4月12日 | 286 |
| 4月13日 | 399 |
| 4月14日 | 311 |
| 4月15日 | 312 |
| 4月16日 | 304 |
| 4月17日 | 297 |
| 4月18日 | 244 |
| 4月19日 | 300 |
| 4月20日 | 330 |
| 4月21日 | 334 |
| 4月22日 | 308 |
| 4月23日 | 342 |
| 4月24日 | 343 |
| 4月25日 | 269 |
| 4月26日 | 247 |
| 4月27日 | 258 |
| 4月28日 | 380 |
| 4月29日 | 355 |
| 4月30日 | 343 |
| 5月1日 | 301 |
| 5月2日 | 321 |
| 5月3日 | 273 |
| 5月4日 | 329 |
| 5月5日 | 325 |
| 5月6日 | 356 |
| 5月7日 | 279 |
| 5月8日 | 278 |
| 5月9日 | 247 |
| 5月10日 | 276 |
| 5月11日 | 359 |
| 5月12日 | 373 |
| 5月13日 | 296 |
| 5月14日 | 311 |
| 5月15日 | 267 |
| 5月16日 | 246 |
| 5月17日 | 289 |
| 5月18日 | 342 |
| 5月19日 | 315 |
| 5月20日 | 274 |
| 5月21日 | 299 |
| 5月22日 | 288 |
| 5月23日 | 267 |
| 5月24日 | 294 |
| 5月25日 | 352 |
| 5月26日 | 332 |
| 5月27日 | 322 |
| 5月28日 | 294 |
| 5月29日 | 346 |
| 5月30日 | 314 |
| 5月31日 | 321 |
| 6月1日 | 379 |
| 6月2日 | 316 |
| 6月3日 | 291 |
| 6月4日 | 340 |
| 6月5日 | 277 |
| 6月6日 | 259 |
| 6月7日 | 293 |
| 6月8日 | 336 |
| 6月9日 | 293 |
| 6月10日 | 279 |
| 6月11日 | 315 |
| 6月12日 | 291 |
| 6月13日 | 326 |
| 6月14日 | 243 |
| 6月15日 | 328 |
| 6月16日 | 282 |
| 6月17日 | 358 |
| 6月18日 | 368 |
| 6月19日 | 336 |
| 6月20日 | 329 |
| 6月21日 | 353 |
| 6月22日 | 338 |
| 6月23日 | 325 |
| 6月24日 | 330 |
| 6月25日 | 311 |
| 6月26日 | 375 |
| 6月27日 | 329 |
| 6月28日 | 334 |
| 6月29日 | 424 |
| 6月30日 | 389 |
| 7月1日 | 336 |
| 7月2日 | 354 |
| 7月3日 | 335 |
| 7月4日 | 336 |
| 7月5日 | 319 |
| 7月6日 | 371 |
| 7月7日 | 354 |
| 7月8日 | 322 |
| 7月9日 | 279 |
| 7月10日 | 281 |
| 7月11日 | 294 |
| 7月12日 | 322 |
| 7月13日 | 309 |
| 7月14日 | 355 |
| 7月15日 | 464 |
| 7月16日 | 305 |
| 7月17日 | 311 |
| 7月18日 | 259 |
| 7月19日 | 260 |
| 7月20日 | 243 |
| 7月21日 | 339 |
| 7月22日 | 343 |
| 7月23日 | 281 |
| 7月24日 | 254 |
| 7月25日 | 279 |
| 7月26日 | 325 |
| 7月27日 | 333 |
| 7月28日 | 312 |
| 7月29日 | 324 |
| 7月30日 | 339 |
| 7月31日 | 317 |
| 8月1日 | 239 |
| 8月2日 | 319 |
| 8月3日 | 302 |
| 8月4日 | 324 |
| 8月5日 | 337 |
| 8月6日 | 310 |
| 8月7日 | 260 |
| 8月8日 | 290 |
| 8月9日 | 293 |
| 8月10日 | 301 |
| 8月11日 | 335 |
| 8月12日 | 339 |
| 8月13日 | 334 |
| 8月14日 | 358 |
| 8月15日 | 319 |
| 8月16日 | 274 |
| 8月17日 | 300 |
| 8月18日 | 340 |
| 8月19日 | 287 |
| 8月20日 | 335 |
| 8月21日 | 306 |
| 8月22日 | 250 |
| 8月23日 | 265 |
| 8月24日 | 338 |
| 8月25日 | 285 |
| 8月26日 | 295 |
| 8月27日 | 313 |
| 8月28日 | 290 |
| 8月29日 | 288 |
| 8月30日 | 252 |
| 8月31日 | 377 |
| 9月1日 | 366 |
| 9月2日 | 296 |
| 9月3日 | 304 |
| 9月4日 | 301 |
| 9月5日 | 250 |
| 9月6日 | 287 |
| 9月7日 | 315 |
| 9月8日 | 290 |
| 9月9日 | 325 |
| 9月10日 | 331 |
| 9月11日 | 285 |
| 9月12日 | 259 |
| 9月13日 | 242 |
| 9月14日 | 263 |
| 9月15日 | 334 |
| 9月16日 | 295 |
| 9月17日 | 299 |
| 9月18日 | 329 |
| 9月19日 | 259 |
| 9月20日 | 244 |
| 9月21日 | 326 |
| 9月22日 | 275 |
| 9月23日 | 323 |
| 9月24日 | 286 |
| 9月25日 | 254 |
| 9月26日 | 277 |
| 9月27日 | 247 |
| 9月28日 | 325 |
| 9月29日 | 391 |
| 9月30日 | 349 |
| 10月1日 | 308 |
| 10月2日 | 303 |
| 10月3日 | 263 |
| 10月4日 | 257 |
| 10月5日 | 299 |
| 10月6日 | 310 |
| 10月7日 | 277 |
| 10月8日 | 251 |
| 10月9日 | 270 |
| 10月10日 | 231 |
| 10月11日 | 264 |
| 10月12日 | 238 |
| 10月13日 | 344 |
| 10月14日 | 279 |
| 10月15日 | 274 |
| 10月16日 | 308 |
| 10月17日 | 286 |
| 10月18日 | 229 |
| 10月19日 | 288 |
| 10月20日 | 284 |
| 10月21日 | 283 |
| 10月22日 | 283 |
| 10月23日 | 223 |
| 10月24日 | 259 |
| 10月25日 | 244 |
| 10月26日 | 312 |
| 10月27日 | 350 |
| 10月28日 | 281 |
| 10月29日 | 245 |
| 10月30日 | 292 |
| 10月31日 | 299 |
| 11月1日 | 294 |
| 11月2日 | 286 |
| 11月3日 | 360 |
| 11月4日 | 304 |
| 11月5日 | 343 |
| 11月6日 | 284 |
| 11月7日 | 303 |
| 11月8日 | 305 |
| 11月9日 | 340 |
| 11月10日 | 353 |
| 11月11日 | 311 |
| 11月12日 | 302 |
| 11月13日 | 290 |
| 11月14日 | 288 |
| 11月15日 | 285 |
| 11月16日 | 311 |
| 11月17日 | 301 |
| 11月18日 | 370 |
| 11月19日 | 407 |
| 11月20日 | 321 |
| 11月21日 | 366 |
| 11月22日 | 314 |
| 11月23日 | 344 |
| 11月24日 | 453 |
| 11月25日 | 417 |
| 11月26日 | 429 |
| 11月27日 | 420 |
| 11月28日 | 466 |
| 11月29日 | 457 |
| 11月30日 | 587 |
| 12月1日 | 784 |
| 12月2日 | 710 |
| 12月3日 | 693 |
| 12月4日 | 723 |
| 12月5日 | 678 |
| 12月6日 | 642 |
| 12月7日 | 763 |
| 12月8日 | 768 |
| 12月9日 | 782 |
| 12月10日 | 763 |
| 12月11日 | 642 |
| 12月12日 | 683 |
| 12月13日 | 570 |
| 12月14日 | 699 |
| 12月15日 | 769 |
| 12月16日 | 725 |
| 12月17日 | 615 |
| 12月18日 | 621 |
| 12月19日 | 661 |
| 12月20日 | 612 |
| 12月21日 | 766 |
| 12月22日 | 806 |
| 12月23日 | 755 |
| 12月24日 | 721 |
| 12月25日 | 971 |
| 12月26日 | 385 |
| 12月27日 | 255 |
| 12月28日 | 339 |
| 12月29日 | 373 |
| 12月30日 | 363 |
| 12月31日 | 450 |
上のグラフは集めたQiitaの投稿記事のデータを元に、1日毎の投稿数(青)と7日間の移動平均(赤)を表した折れ線グラフです。これを見ると、日によって多少の大小はありますが1月から10月までは毎日200件から400件程を推移していることがわかります。そして11月の中頃から急に増え始め12月はクリスマス(25日)まで毎日600件から800件程と2〜3倍の数が投稿されています。25日の971件をピークに26日には385件まで落ちています。そこから大晦日(31日)にかけて少し増えています。
1時間ごとの投稿数について
2025年の時間別の投稿数
以下のデータは2026年1月2日の19時から22時にかけて集めたものです。| 時間帯 | 投稿数 |
|---|---|
| 0:00 | 738 |
| 1:00 | 412 |
| 2:00 | 272 |
| 3:00 | 140 |
| 4:00 | 169 |
| 5:00 | 120 |
| 6:00 | 189 |
| 7:00 | 277 |
| 8:00 | 321 |
| 9:00 | 468 |
| 10:00 | 534 |
| 11:00 | 555 |
| 12:00 | 583 |
| 13:00 | 565 |
| 14:00 | 593 |
| 15:00 | 627 |
| 16:00 | 702 |
| 17:00 | 740 |
| 18:00 | 662 |
| 19:00 | 572 |
| 20:00 | 587 |
| 21:00 | 722 |
| 22:00 | 792 |
| 23:00 | 951 |
②考察
以下の考察はどれも統計的な検定などを行っておらず、私の主観を多分に含んでいます。ご承知ください。
7月15日の464件
7月15日のは他の日と比べて464件と特に多くなっています。7月15日は合計1657人(重複含む)が参加したQiita Tech Festa2025のさまざまな記事投稿キャンペーンの最終日でした。このキャンペーンに間に合わせようとした駆け込み投稿があったのかもしれません。
月末
投稿数や移動平均のグラフを見ていると、多くの月で月末に投稿数が増えています。「今月中に!」と思って投稿が増えているのでしょうか。
12月
12月の中旬までは他の月の2〜3倍となる700件前後の記事が毎日投稿されていて、25日の971件をピークにその後は350〜450件程度と他の月と同程度になっています。12月1日から25日まで行われたQiita Advent Calendar 2025のために多くの人が記事を書いたのだろうと思います。
よく投稿される時間帯
17時前後や23時前後に投稿数が多くなっています。夕方や夜中に多く投稿される傾向がありそうです。特に23時前後には、夜の趣味の時間などに記事を書いて投稿する方が多いのかも知れません。
分析について 〜次に向けて〜
今回の考察はまとめたグラフを私が見た感じで考えたものなので統計的な証明ができていません。気が向いて統計を調べることがあれば、検定などをして客観的に証明したいと思いました。また今回は、記事が参加しているイベントについてのデータは集められていないので、今後はそのデータも含めて投稿数とイベントの関係などを詳しく見ていきたいと思います。もしこの記事を読んで分析に興味が湧いた方がいれば、より詳細な分析をしてほしいなと思います。
最後に
内容は記事情報の収集パートが大半を占めてしまいました。分析の結果として予想通り12月に投稿数が急増していることがわかったので良かったです。
今回の情報収集を通してDBへのクエリはまとめて1度に送る「N+1問題」を体感したり、APIの使い方やスプレッドシート周りについての理解が深まったりしたのでとてもよかったです。なによりQiita APIの存在を知り、今後の遊びの幅が広がりそうです。



