0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiitaの4年を地図にしたら、AIの国が小さな島から大陸に育っていた

0
Last updated at Posted at 2026-10-03

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月

2022年10月の Qiita 技術マップ

2026年9月の Qiita 技術マップ

タグを町、まとまりを国に見立てた地図です。点の大きさは、その週にそのタグで書いた人の割合です。陸は、書いた人が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)でした。

AI のタグを1つでも付けて書いた人の割合

グラフの線と端の数字は、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のどれかが付いています。

伸びたタグ、縮んだタグ

4年で伸びたタグ

最初の半年と最後の半年の平均を比べて、いちばん伸びたのは「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%です。

4年で縮んだタグ

縮んだほうの先頭は「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()}

地図の作り方

  1. 国:48か月分を合わせて、同じ記事に一緒に付いた回数からタグどうしの近さ(コサイン)を出し、Louvain法でまとまりに分けました(networkx.community.louvain_communities、乱数の種は固定)。国の名前は、中のタグを見て私が付けています。
  2. 配置:D3.jsの力学モデル(d3-force)で、よく一緒に付くタグを近くに置き、文字の箱どうしが重ならないところまで押し分けました。配置は4年分で一度だけ決めて固定しているので、月を動かしても町の位置は変わりません。
  3. 陸と国境:タグごとに、その月の割合に応じた大きさの円を置き(名前が読めるように、最低の大きさと名前の幅のぶんを足しています)、円を合わせた形を陸にしました。国境は「パワー図」(円の大きさを考えたボロノイ図)の線です。パワー図の区画の中では、陸かどうかがその区画の円だけで決まるので、区画ごとに「円を塗る・円の縁を描く」だけで、なめらかな海岸線とまっすぐな国境が描けます。
// 区画 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を使った制作の途中経過を流している。感想も、ここで受け付けている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?