ChatGPTが公開される前の月から4年、Qiitaで書かれる技術はどう動いたのか。Qiita APIで、2022年10月から2026年9月までの48か月について、毎月8日〜14日の1週間に投稿された記事を全部(合計105,160本)集め、タグを地図にしました。
2022年10月と2026年9月の地図と、10の国それぞれの4年前と今を、この記事の中で比べられます。
2022年10月と2026年9月
タグを町、まとまりを国に見立てた地図です。点の大きさは、その週にそのタグで書いた人の割合です。陸は、書いた人が1人でもいれば島として見えるように、小さなタグにも最低の大きさを付けています。
よく同じ記事に一緒に付くタグほど近くに置いてあり、配置は4年分で一度だけ決めて固定しています。4年で、真ん中の「生成AI・エージェント」の国は、「AI」「Security」などの小島が散らばる海から、大陸に育ちました。
AIのタグを1つでも付けて書いた人は、2022年10月には1.2%(1,007人のうち12人)でした。2026年9月には34.9%(1,352人のうち472人)で、書いた人のおよそ3人に1人です。
その月に書いた人の多いタグの上位10に入ったAIのタグは、2022年10月は0個、2026年9月は5個(AI、生成AI、ClaudeCode、AIエージェント、LLM)でした。
グラフの線と端の数字は、3か月の移動平均(前の月・その月・次の月の平均)です。本文の数字は、断りがなければその月1か月の値です。
ここで数えたAIのタグは、AI、生成AI、LLM、ClaudeCode、Claude、AIエージェント、ChatGPT、OpenAI、Gemini、MCP、codex、cursor、rag、AI駆動開発、AI活用、Anthropic、OpenClawの17個です。
地図の「生成AI・エージェント」の国には、AIのタグと一緒に付くことの多いSecurity・GoogleCloud・自動化・CLIも入っているので、国の割合(4.1% → 38.5%)は、AIのタグの割合より少し大きくなります。
いま、Qiitaのトップに並んでいるもの
10月3日朝のQiitaのトップでは、トレンドの30本のうち18本に、AIのタグが付いていました。トップの「タグランキング(週間)」の上位10も、この記事で数えた2026年9月の上位10と、順番は違っても10個とも同じタグでした。
10の国の、4年前と今
| 国 | 2022年10月 | 2026年9月 |
|---|---|---|
| 生成AI・エージェント | 4.1% | 38.5% |
| Python・データ | 17.1% | 19.8% |
| Webフロントエンド | 15.4% | 17.2% |
| 入門・Git | 18.6% | 16.6% |
| サーバー・DB | 13.8% | 9.3% |
| クラウド・インフラ | 6.2% | 7.6% |
| 設計・テスト | 2.1% | 4.3% |
| Windows・Mac | 5.1% | 3.6% |
| スマホアプリ | 6.3% | 2.7% |
| C#・Unity | 3.5% | 2.1% |
(1人が複数の国のタグで書くことがあるので、足しても100%にはなりません)
3か月の移動平均で比べると、生成AI・エージェントの国は2025年7月に、ほかのどの国よりも大きくなりました。
ほかの大きな国(入門・Git、Python・データ、Webフロントエンド)は、2022年10月と2026年9月の差がどれも3ポイント以内でした(入門・Git 18.6% → 16.6%、Python・データ17.1% → 19.8%、Webフロントエンド15.4% → 17.2%)。縮んだのは、サーバー・DB(13.8% → 9.3%)とスマホアプリ(6.3% → 2.7%)です。
AIの国が34ポイント増えたあいだ、ほかの9か国の割合を足すと87.9%から83.2%で、5ポイントほどの減りでした。1人が1週間に書く記事も1.5本から2.0本に増えていて、そのぶん1人が複数の国に数えられやすくなっています。
2023年春のPython・データの山(3か月の移動平均で23.8%、2023年4月)は、この国に入っている「ChatGPT」のタグで書いた人が、2023年1月1.0% → 2023年2月3.2% → 2023年4月9.6%と急に増えた時期と重なります。
「ChatGPT」と「OpenAI」がAIの国ではなく「Python・データ」の国に入ったのは、同じ記事に付くタグのせいです。
ChatGPTのタグが急に増えた2023年2〜6月に、ChatGPTのタグが付いた449本のうち、AI・生成AI・LLMのどれかも付いていたのは13.4%で、Python(16.3%)やAPI・OpenAI(16.5%)と同じくらいでした。最後の6か月では、ChatGPTの記事の58.7%に、AI・生成AI・LLMのどれかが付いています。
伸びたタグ、縮んだタグ
最初の半年と最後の半年の平均を比べて、いちばん伸びたのは「AI」(1.5% → 17.1%)でした。
「ClaudeCode」のタグで書いた人は、各月8〜14日の1週間で数えると、2025年5月の1人から、2025年6月には20人(1.6%)に増えました。いちばん多かったのは2026年4月の10.7%で、2026年9月は8.0%です。
縮んだほうの先頭は「JavaScript」(最初の半年6.6% → 最後の半年3.9%)、続いて「Ruby」「Rails」でした。グラフの右端が少し上がっているのは、2026年9月の1か月が5.0%だったためです。
毎年の上位10
その月に、そのタグで書いた人の割合の上位10です。
| 順位 | 2022年10月 | 2023年9月 | 2024年9月 | 2025年9月 | 2026年9月 |
|---|---|---|---|---|---|
| 1 | Python(11.4%) | Python(11.2%) | Python(10.1%) | 初心者(9.0%) | AI(17.5%) |
| 2 | JavaScript(7.7%) | AWS(6.5%) | AWS(8.1%) | Python(8.8%) | Python(10.4%) |
| 3 | 初心者(6.9%) | 初心者(5.0%) | 初心者(8.0%) | AWS(7.2%) | 生成AI(10.2%) |
| 4 | AWS(6.1%) | JavaScript(4.8%) | JavaScript(5.9%) | AI(5.9%) | 個人開発(8.4%) |
| 5 | Ruby(4.0%) | ChatGPT(4.3%) | TypeScript(4.4%) | 生成AI(4.2%) | ClaudeCode(8.0%) |
| 6 | Rails(3.9%) | Docker(3.7%) | React(3.5%) | JavaScript(4.1%) | AWS(7.5%) |
| 7 | TypeScript(3.7%) | TypeScript(3.3%) | Docker(3.5%) | Docker(3.4%) | AIエージェント(7.1%) |
| 8 | Docker(3.5%) | Android(2.7%) | ChatGPT(2.8%) | TypeScript(2.9%) | 初心者(7.0%) |
| 9 | PHP(3.4%) | iOS(2.6%) | Windows(2.5%) | React(2.9%) | LLM(7.0%) |
| 10 | React(3.3%) | React(2.5%) | Linux(2.4%) | LLM(2.7%) | Security(6.0%) |
作り方
データの集め方
Qiita API v2の /api/v2/items を、投稿日で区切って呼んでいます。4年分の全記事を集めると数十万件になるので、各月の8日〜14日の1週間を、その月の代表として全部集めました(月の頭だと年末年始や大型連休に当たるため、8日からにしています)。
import json, math, os, time, urllib.parse, urllib.request
TOKEN = os.environ["QIITA_TOKEN"] # 読み取り専用のトークン
def week(y, m):
"""y年m月の8日〜14日に投稿された記事を全部取る"""
q = urllib.parse.quote(f"created:>={y}-{m:02d}-08 created:<={y}-{m:02d}-14")
url = f"https://qiita.com/api/v2/items?per_page=100&query={q}"
head = {"Authorization": f"Bearer {TOKEN}"}
items, page = [], 1
while True:
res = urllib.request.urlopen(urllib.request.Request(f"{url}&page={page}", headers=head))
total = int(res.headers["Total-Count"])
items += json.loads(res.read())
if int(res.headers["Rate-Remaining"]) <= 1: # 上限の手前なら、リセットまで待つ
time.sleep(max(0, int(res.headers["Rate-Reset"]) - time.time()) + 5)
if page >= math.ceil(total / 100):
return items
page += 1
time.sleep(0.6)
大きさの物差し:「書いた人の割合」
記事の数で比べると、ひとりが同じタグで何十本も書いた週に大きく見えてしまいます。そこで、その週にそのタグで書いた人の数を、その週に書いた人の数で割った割合を使いました。Qiitaのトップに出る「タグランキング(週間)」の値も、記事の数より書いた人の数に近い値でした(9月26日〜10月2日の記事で数えると、Pythonは168人でトップの値は169、LLMは123人でトップの値は124でした)。
from collections import defaultdict
def shares(items):
"""タグごとの「書いた人の割合」。タグは大文字・小文字をまとめる"""
writers = defaultdict(set)
everyone = set()
for it in items:
tags = {t["name"].strip().lower() for t in it["tags"]}
if tags == {"tech"}: # タグが「tech」だけの短い記事の群れは外す(理由は本文)
continue
everyone.add(it["user"]["id"])
for t in tags:
writers[t].add(it["user"]["id"])
return {t: len(u) / len(everyone) for t, u in writers.items()}
地図の作り方
-
国:48か月分を合わせて、同じ記事に一緒に付いた回数からタグどうしの近さ(コサイン)を出し、Louvain法でまとまりに分けました(
networkx.community.louvain_communities、乱数の種は固定)。国の名前は、中のタグを見て私が付けています。 - 配置:D3.jsの力学モデル(d3-force)で、よく一緒に付くタグを近くに置き、文字の箱どうしが重ならないところまで押し分けました。配置は4年分で一度だけ決めて固定しているので、月を動かしても町の位置は変わりません。
- 陸と国境:タグごとに、その月の割合に応じた大きさの円を置き(名前が読めるように、最低の大きさと名前の幅のぶんを足しています)、円を合わせた形を陸にしました。国境は「パワー図」(円の大きさを考えたボロノイ図)の線です。パワー図の区画の中では、陸かどうかがその区画の円だけで決まるので、区画ごとに「円を塗る・円の縁を描く」だけで、なめらかな海岸線とまっすぐな国境が描けます。
// 区画 i(円 i が一番「近い」範囲)を、ほかの円との境目の直線で切り出す
function powerCell(i, nodes, R) {
const a = nodes[i], h = R[i] + 30;
let poly = [[a.x - h, a.y - h], [a.x + h, a.y - h], [a.x + h, a.y + h], [a.x - h, a.y + h]];
nodes.forEach((b, j) => {
if (j === i || !R[j]) return;
// |p-a|^2 - Ra^2 <= |p-b|^2 - Rb^2 ⇔ (b-a)・p <= c
const c = (b.x * b.x + b.y * b.y - a.x * a.x - a.y * a.y - R[j] ** 2 + R[i] ** 2) / 2;
poly = clipHalfPlane(poly, b.x - a.x, b.y - a.y, c);
});
return poly;
}
// 区画で切り抜いてから、円 i を塗る(=陸)・縁を描く(=海岸線)
ctx.save(); pathOf(cell); ctx.clip();
ctx.beginPath(); ctx.arc(a.x, a.y, R[i], 0, Math.PI * 2);
ctx.fill(); ctx.stroke();
ctx.restore();
限界
- 1か月を、その月の8日〜14日の1週間で代表させています。
- 12月はアドベントカレンダーの時期なので、話題が偏ります。AdventCalendar2024のような、Qiitaのイベント名のタグは地図から外しました。ただし「記事投稿キャンペーン_ChatGPT」のような、記事投稿キャンペーンのタグは地図に残っています。
- タグが「tech」1つだけの記事(ほかのタグと一度も一緒に付かない短い記事の群れ)は外しました。
- 国の分け方は、タグが同じ記事に一緒に付いた回数から機械的に決めています。ChatGPTがPython・データの国に入ったように、名前から思い浮かべる分け方とずれることがあります。
- タグは書いた人が自分で付けたものです。同じ技術でも、付け方は人によって違います。
4年で変わったこと
2022年10月、Qiitaの地図の真ん中には、AIの小さな島がいくつか浮かんでいるだけでした。4年後の2026年9月、AIのタグを付けて書いた人は1.2%から34.9%になり、その島は地図のいちばん大きな大陸になっています。そのあいだ、入門・Git、Python・データ、Webフロントエンドの国は、ほとんど同じ大きさのままでした。
記事の図では、記事の幅で読める大きさの町の名前だけを出しています。地図を拡大したり、自分の分野のタグを選んで4年分の推移を見たりできる版を、私のサイトに置きました。
48か月の動きは、サイトの再生ボタンか、43秒の動画(YouTube)で見られます。
書いている人
ViewsEngineer という名前で、AIと一緒に動画やゲーム、調べものの記録を作り切り、作り方と測った数字を公開している。完成させきることが、いちばん速い学習だと考えている。
ひとりぶんの棚|AIで作る物語とゲーム、その作り方|Views Engineer
X では、新しい記事と、AIを使った制作の途中経過を流している。感想も、ここで受け付けている。





