はじめに
AniList は、アニメやマンガの作品情報、放送スケジュール、声優、ユーザー評価などを網羅した大規模なデータベースサイトです。同サイトが提供する「AniList API」は、クエリ言語に GraphQL を採用しており、プログラムから必要なデータのみを効率的に抽出できる特徴があります。本記事では、Python を利用して「2026年放送予定のアニメ」や「人気キャラクター」の情報を取得し、グラフ化して分析する手順を解説します。
2026年のアニメ情報や人気キャラクターのデータを今すぐ視覚的に確認したい方向けに、専用の Web ダッシュボード「anitap ダッシュボード」を公開しています。情報収集のみを目的とされる場合は、以下のリンクよりご活用ください。
- AniList API の仕組み: 従来の REST API とは異なる GraphQL の基本的な使い方
- 未来のトレンド予測: Python を使って「2026年放送予定」のアニメ情報を先取りする方法
- キャラ情報の取得: 作品だけでなく、人気キャラクターや声優のデータを抽出するテクニック
- データの可視化: 取得したデータを Matplotlib でグラフ化し、視覚的に分析する方法
AniList API の特徴と GraphQL の基礎
AniList API は、Facebook(現 Meta)が開発したクエリ言語 GraphQL を採用しています。 従来の REST API との違いを簡単に言うと、「定食(セットメニュー)」か「ビュッフェ(好きなものを好きなだけ)」かの違いです。

なぜ AniList は使いやすいのか
AniList API が個人開発者や学習用に推奨される理由は、その手軽さにあります。
- 登録不要(APIキーなし)
-
多くの API は利用開始前にアカウント登録や API キーの発行が必要ですが、AniList の公開データ(作品情報やキャラ情報など)を取得するだけであれば、認証なしですぐにリクエストを投げることができます。
- 商用利用と制限
-
個人利用の範囲であれば、1分間に90リクエストという十分なレートリミットが設けられています。商用利用も可能ですが、その場合はレートリミットが厳しくなる場合があるため、規約の確認が必要です。
- ドキュメントが充実
-
公式のドキュメントが非常に整理されており、ブラウザ上でクエリを試せる「GraphiQL(インタラクティブエディタ)」も提供されています。
独特なクエリ構造(GraphQL)の基本
GraphQL では、「欲しいデータ」をリクエスト時に定義します。 例えば、「アニメのタイトル」と「人気度」だけが欲しい場合、以下のようなクエリを投げます。
query {
Media (id: 1) {
title {
romaji # ローマ字タイトルだけください
}
popularity # 人気度だけください
}
}
REST API だと、「作品 ID:1」のエンドポイントを叩くと、放送日やあらすじ、スタッフ情報など全部入りのデータが返ってきてしまいます(オーバーフェッチ)しかし GraphQL なら、必要なフィールドだけを指定するため、通信量が減り、レスポンスも高速になります。
2026年放送予定のアニメ情報を先取りする
Googleトレンドなどの検索データを見ると、「2026 アニメ」のような未来のキーワードは、情報解禁のタイミングで急上昇する傾向があります。 AniList API のすごいところは、まだ放送されていない数年先の作品情報(制作決定済みのアニメなど)もデータベースに登録されている点です。
これを活用すれば、ブログやSNSで「2026年の注目アニメまとめ」といった記事を早く、しかも正確なデータに基づいて作成することができます。
Python スクリプトの解説(requests によるデータ取得)
では、実際に Python を使って「2026年に放送予定のアニメ」の中で、すでに期待度(人気度)が高い作品トップ5を取得してみましょう。
以下のコードは、API のエンドポイント(URL)にリクエストを送り、結果を JSON 形式で受け取るシンプルな構成です。
import requests
import json
# AniList APIのエンドポイント
url = "https://graphql.anilist.co"
# 取得したい年を動的に指定(ここを変えるだけで2025年や2027年も取得可能)
target_year = 2026
# GraphQLクエリの定義
# $seasonYear(年)を引数として受け取り、人気順(POPULARITY_DESC)で並べ替えます
query = '''
query ($seasonYear: Int, $page: Int, $perPage: Int, $sort: [MediaSort]) {
Page (page: $page, perPage: $perPage) {
media (seasonYear: $seasonYear, sort: $sort, type: ANIME) {
id
title {
romaji
english
native
}
popularity
status
}
}
}
'''
# クエリに渡す変数
variables = {
"seasonYear": target_year, # ここに2026が入る
"page": 1,
"perPage": 5, # 上位5件を取得
"sort": "POPULARITY_DESC" # 人気順(期待度順)
}
# APIリクエストを実行
response = requests.post(url, json={'query': query, 'variables': variables})
# 結果をJSONとして整形
data = response.json()
# 結果の表示
if 'errors' in data:
print(data['errors'])
else:
print(f"--- {target_year}年 放送予定・期待度ランキング ---")
for i, anime in enumerate(data['data']['Page']['media'], 1):
title = anime['title']['native'] or anime['title']['romaji']
print(f"{i}位: {title} (期待度: {anime['popularity']})")【コード解説】seasonYear を動的に指定する
このスクリプトの肝は、variables 辞書の中で定義している "seasonYear": target_year の部分です。
GraphQL クエリ側(query 変数の中身)では、$seasonYear: Int と記述して「あとで整数の年が入りますよ」と枠だけ作っておきます。そして、リクエストを投げる瞬間に Python の変数 target_year = 2026 を流し込んでいます。
これにより、クエリ自体を書き換えることなく、
target_year = 2025にすれば今年の覇権アニメを確認でき、target_year = 2010にすれば過去の名作を振り返る
ことができます。



この「変数の分離」こそが、GraphQL をプログラムから扱う際の最大のメリットです。
アニメキャラクターの人気データを抽出する
AniList API の真骨頂は、作品情報からさらに深く掘り下げて、「その作品に登場するキャラクター」や「演じている声優(Voice Actor)」のデータまで一括で取得できる点にあります。
これを使えば、「特定の作品内で一番愛されている(お気に入り登録が多い)キャラは誰か?」や「主役キャラと脇役キャラの人気差」などを数値で分析できるようになります。
作品だけでなく「キャラクター(Character)」情報を抜くクエリ
キャラクター情報を取得するには、Media(作品)クエリの中に characters というフィールドを入れ子(ネスト)にします。
ここで重要なのが、edges というキーワードです。 GraphQL では、作品とキャラクターの間にある「関係性(Edge)」を通じてデータにアクセスします。これにより、単にキャラ名を取得するだけでなく、「その作品における役割(主役/脇役)」や「その作品で演じている声優」という、文脈ごとの情報を紐づけて取得できます。
特定の作品に紐づく人気声優やキャラの取得方法
では、実際に Python コードで取得してみましょう。 今回は例として、世界的な人気作『SPY×FAMILY』(タイトル検索)のキャラクター人気ランキングを取得し、担当声優名と合わせて表示します。
以下のコードでは、sort: FAVOURITES_DESC を指定して、AniList ユーザーからのお気に入り登録数(ハートの数)が多い順にキャラクターを抽出しています。
import requests
import json
import matplotlib.pyplot as plt
# AniList APIのエンドポイント
url = "https://graphql.anilist.co"
# 検索したいアニメのタイトル(日本語でも英語でもOKですが、英語・ローマ字が確実です)
search_title = "SPY×FAMILY"
# GraphQLクエリの定義
# 作品(Media)を検索し、その中のキャラクター(characters)を人気順で取得します
query = '''
query ($search: String) {
Media (search: $search, type: ANIME) {
title {
romaji
native
}
# キャラクター情報を人気順(FAVOURITES_DESC)で取得
characters (sort: FAVOURITES_DESC, perPage: 10) {
edges {
role # 役割 (MAIN / SUPPORTING)
node {
name {
full
native
}
favourites # キャラクターの「お気に入り」登録数
}
# そのキャラを担当する声優(日本語)を取得
voiceActors (language: JAPANESE, sort: FAVOURITES_DESC) {
name {
full
native
}
}
}
}
}
}
'''
# 変数の定義
variables = {
"search": search_title
}
# APIリクエスト
response = requests.post(url, json={'query': query, 'variables': variables})
data = response.json()
# エラーハンドリング
if 'errors' in data:
print(data['errors'])
else:
media = data['data']['Media']
title = media['title']['native'] or media['title']['romaji']
print(f"--- 『{title}』 キャラクター人気ランキング ---")
# グラフ用データのリスト
char_names = []
char_favs = []
for i, edge in enumerate(media['characters']['edges'], 1):
char_node = edge['node']
role = edge['role']
favs = char_node['favourites']
# 名前(英語表記があればそちらを優先、なければネイティブ)
name = char_node['name']['full']
# 声優情報(リストで返るため、最初の1人を取得)
va_name = "情報なし"
if edge['voiceActors']:
va_name = edge['voiceActors'][0]['name']['native']
print(f"{i}位: {name} (CV: {va_name}) - ❤️ {favs} [{role}]")
# グラフ用にデータを格納
char_names.append(name)
char_favs.append(favs)
# ---------------------------------------------------------
# おまけ:取得したデータでグラフを作成
# ---------------------------------------------------------
plt.figure(figsize=(10, 6))
# 棒グラフ(横向き)
plt.barh(char_names, char_favs, color='skyblue')
plt.xlabel("Favorites (Hearts)")
plt.title(f"Top 10 Popular Characters in {title}")
plt.gca().invert_yaxis() # 1位を上に
plt.tight_layout()
plt.show()コードのポイント
edgesとnode-
edgesの中にあるroleで「MAIN(主役)」か「SUPPORTING(脇役)」かを取得し、nodeの中でキャラクター自身の名前や人気度を取得しています。 voiceActors-
キャラクターに紐づく声優情報を取得します。
language: JAPANESEでフィルタリングすることで、日本語の声優のみをピンポイントで抽出しています。 favourites-
これが「キャラクターの人気度」を示す数値です。作品自体の人気度(popularity)とは別に、キャラ単体への愛が数値化されたものです。
取得したデータを可視化する(Matplotlib)
データを取得できたら、最後はそれをグラフにして視覚的に分析しましょう。 数字の羅列だけでは見えてこない「人気度の差」や「圧倒的なシェア」も、グラフにすることで一目瞭然になります。


取得した JSON データを整形してグラフ描画
AniList API から返ってくるデータは JSON 形式(辞書とリストの入れ子構造)です。これを matplotlib でグラフ化するには、「X 軸のデータリスト」と「Y 軸のデータリスト」に分解する必要があります。
前のセクションで取得した data 変数から、リスト内包表記を使ってデータを抽出するのが最もスマートな方法です。
# JSONデータからリストを作成する(例:タイトルと人気度)
titles = [anime['title']['native'] for anime in data['data']['Page']['media']]
popularity = [anime['popularity'] for anime in data['data']['Page']['media']]
# グラフの作成
plt.barh(titles, popularity, color='cornflowerblue')
plt.xlabel("Popularity (Favorites)")
plt.title("2026 Anime Popularity Ranking")
plt.gca().invert_yaxis() # ランキング1位を上に表示
plt.tight_layout()
plt.show()日本語フォント対応などの注意点
Python の matplotlib は、標準設定のままでは日本語が「□□□(通称:豆腐)」のように文字化けしてしまいます。 これを防ぐには、フォントを指定するか、便利なライブラリ japanize-matplotlib を導入するのが一番の近道です。
pip install japanize-matplotlibスクリプトの冒頭でインポートするだけで、自動的に日本語フォントが適用されます。
import matplotlib.pyplot as plt
import japanize_matplotlib # これを入れるだけで文字化けが直ります
# ...グラフ描画コード...
plt.title("2026年アニメ 期待度ランキング") # 日本語が使えるようになるまとめ
本記事では、AniList API と Python を使って、最新および未来のアニメ情報を分析する方法を解説しました。
- AniList API とは
-
登録不要で利用でき、GraphQL によって「必要なデータだけ」を効率的に取得できます。
- トレンドの先取り
-
seasonYearを指定することで、2026年などの「未来の放送予定アニメ」も先取りしてチェックできます。 - 深掘り分析
-
作品だけでなく、キャラクターや声優のデータも紐づけて取得できるため、「推し分析」や「キャスティング傾向」の調査も可能です。
以上、最後までお読みいただきありがとうございました。



