【Qiita Tags】Qiitaユーザー必見！人気の関連タグを調べるツール

## はじめに
　Qiitaにはトレンドやタイムラインがあるおかげで、ある程度最新の情報とか、人気なタグとかを把握することができると思います。しかし、タグごとに絞って表示できるとはいえ、この言語の、この分野に関する人気なものが知りたいんじゃ！というような需要は満たせていないんじゃないかなと思います。そこで、Qiitaが提供してくれているAPIを使って、どんな関連タグが多く使われているのか、タグごとに調べられたら面白そうだなと思ったので、思い付きでやってみました。

## こちらから使えます
https://prosamo.github.io/qiita-tags/

<img width="200" alt="IMG_1792.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922095/7296d005-2506-bf6a-ed08-5705e4ed986e.jpeg">


検索窓にタグを入れて、検索件数を指定するだけです。検索結果の中で、気になるタグがあれば、リンクになっているので直接飛べます。検索タグと気になったタグの組み合わせで、自動検索したページに飛ぶので、そのまま記事をご覧になれます。

## 方法について
　QiitaAPIをつかって、指定したタグを含む記事をn個取ってきて、一緒につけられているタグを数える。やることとしてはこれだけです。（APIのおかげでこれだけで済むというべきか）これをJavaScriptで実装して、HTMLに埋め込んでいます。
　特定分野のトレンドが知りたいというのが発端なので、最初はテキストマイニングをすることも考えたのですが、普通にテキストマイニングをするだけではなく、プログラミングに関連する用語だけにしないと、あまり意味がないですよね。それなら本文よりタグを使った方が、最初から単語を絞り込めると思い、タグを活用するに至りました。タグを使えば英単語とか日本語とか、固有名詞とかいろいろ気にしなくていいから楽でした。結果的にシンプルで使いやすくなったと思うので、筆者としては満足です。

:::note warn
 同一人物が複数回投稿しているものでも、毎回カウントしているため、そういったものが検索上位に入ってくることもあります。しかし、それだけ推している人がいるコンテンツは、それはそれで一定の評価に値すると思うので、この仕様のままで行く予定です。
:::

### おまけ

最初Pythonで書いていたのですが、リンクから使えるようにした方が便利だろうという事で、JavaScriptに移植して、色々機能を拡張しました。移植前のプロトタイプも勿体ないので、ここに置いておきます。
<details><summary>コードを見る</summary>

```python
import requests
from collections import Counter

def get_qiita_tags(tag):
    url = f"https://qiita.com/api/v2/tags/{tag}/items"
    params = {"per_page": 100}

    # APIリクエスト
    response = requests.get(url, params=params)
    if response.status_code == 200:
        items = response.json()
        tags = [item['tags'] for item in items]
        return tags
    else:
        return []

def count_tags(tag_list):
    tag_counter = Counter()
    for page_tags in tag_list:
        for tag in page_tags:
            tag_name = tag['name']
            tag_counter[tag_name] += 1
    return tag_counter

# 検索ワードを決める
all_tags = get_qiita_tags('pygame')

# タグを数える
tag_count = count_tags(all_tags)

# 上位20個のタグを表示(検索ワード以外で２０個)
top_twenty_tags = tag_count.most_common(21)
for tag, count in top_twenty_tags:
    print(f"{tag}: {count}")
```

</details>

このコードをコピペして、検索ワードを好きなものに変えていただければ使えます。ただし`requests`はpipが必要だったと思うので以下の通りにpipしましょう
```sh
pip install requests
```

#### 実行結果

<details><summary>Pyxelでやってみた</summary>

```
Pyxel: 72
Python: 65
ゲーム制作: 26
初心者: 10
Python3: 5
遊び: 4
短いコード: 4
game: 3
GithubPages: 3
アルゴリズム: 3
メガデモ: 2
ゲーム開発: 2
シューティングゲーム: 2
ブロック崩し: 2
PyxelUniversalFont: 2
入力: 1
gamepad: 1
Webアプリケーション: 1
リソース: 1
小技: 1
Linux: 1
```

</details>

<details><summary>pygameでやってみた</summary>

```
pygame: 100
Python: 87
RPG: 23
テトリス: 13
Tiled: 12
Python3: 10
ゲーム制作: 8
Tkinter: 5
ゲーム: 5
game: 5
初心者: 4
Windows: 3
gamedev: 3
RaspberryPi: 3
ゲーム開発: 3
OpenCV: 3
SDL2: 2
アルゴリズム: 2
レトロゲーム: 2
Thread: 2
ブロック崩し: 2
```

</details>

<details><summary>Pythonでやってみた</summary>

```
Python: 100
AI: 7
ChatGPT: 6
Python3: 5
数値計算: 5
補間: 5
関数近似: 5
AtCoder: 5
競技プログラミング: 5
LLM: 5
AdventCalendar2024: 4
機械学習: 4
rag: 4
生成AI: 3
CloudRun: 3
numpy: 3
アルゴリズム: 3
Kaggle: 3
初心者: 3
paiza: 3
paizaラーニング: 3
```

</details>

記事の執筆からちょっと経っているので、今やるとまた違った結果が得られると思います。

## 最後に
　ここまで読んで下さりありがとうございました。筆者は普段ゲームばかり作っていて、この手のことには詳しくないのですが、APIとAIが優秀なおかげで、さくっと作れました。
 　Rで検索すると統計関連ばっかり出てきたり、Rubyで検索すると初心者が上位だったり、言語で検索すると特色がはっきり出て面白いですね。Pythonで検索した結果を見ると、PythonってやっぱりAIに強いんだな～って改めて思います。ゲームばっかりやってないで、せっかくだからAIもやるべきなんでしょうかね。