HaRuuuBlog
DATE:2026/4/5

データから導き出す「確実な努力値稼ぎ」のエビデンス

データから導き出す「確実な努力値稼ぎ」のエビデンス

Pixelmon(ポケモンMod)において、効率的な育成に欠かせないのが「努力値(EVs)」の管理です。ネット上には多くの攻略サイトが存在しますが、Modのバージョンアップによって数値が変更されたり、独自の仕様が追加されたりすることも珍しくありません。

そこで今回、外部の情報に頼るのではなく、サーバー内に配置されているModの本体ファイル(.jar)から直接データを抽出し、「倒すべきポケモンの確定リスト」を自前で生成してみました。これをAIに読み込ませることで、育成効率を向上させることができます。

抽出プロセスの正当性と検証

エビデンスの起点として、実際にサーバーで稼働している Pixelmon-1.21.1-9.3.14-universal.jar を使用. 内部の data/pixelmon/species/ 配下に格納されたJSONファイルを全件走査しました。

// フォルム重複と空データの排除

調査の結果、1つのポケモン(JSONファイル)に対し、複数のフォルムデータが存在することが判明. これら全ての forms[].evYields を再帰的にチェックすることで、リージョンフォーム等の特殊個体も漏らさず抽出するロジックを採用。努力値を持たないノイズデータを完全に排除しました。

// エビデンスとしての定量的裏付け

最新世代(1.21.1対応版)の解析の結果、全国図鑑 No.0001〜No.1025 に加え、Mod独自の系統を含む 1,026系統 のJSONファイルを確認しました。ここから有効なデータのみをフィルタリングすることで、真に倒すべきターゲットが浮き彫りになります。

エビデンス・ログの生成

Linux環境(Rocky Linux)にて、Modが配置されているディレクトリ /opt/minecraft/server/mods へ移動し、Pythonスクリプトを実行。後の検証性を高めるため、標準出力ではなく、ファイル(.txt)へリダイレクトし、物理的なエビデンス・ログとして保存しました。

[ 証拠ログの生成 ]
ev_evidence_log.txt (36KB / 1,107 lines)
[ 抽出条件 / Filtering ]
forms[].evYields が存在する要素のみ

// 実行コマンドとディレクトリ構造

Modディレクトリにて以下のワンライナーを実行し、全ポケモンの努力値データを ev_evidence_log.txt に書き出します。

[minecraft@localhost mods]$ pwd
/opt/minecraft/server/mods

python3 -c ”
import zipfile, json
z = zipfile.ZipFile(‘Pixelmon-1.21.1-9.3.14-universal.jar’)
for f in z.namelist():
if f.startswith(‘data/pixelmon/species/’) and f.endswith(‘.json’):
try:
data = json.loads(z.read(f))
for form in data.get(‘forms’, []):
evs = form.get(‘evYields’)
if evs:
print(f’{data[“name”]}({form.get(“name”, “base”)}): {evs}’)
except: continue
” > ev_evidence_log.txt

// 生成結果の検証

ls -l コマンドでファイル生成を確認し、head コマンドでデータ内容の一部を表示して整合性を確認します。

ls -l ev_evidence_log.txt
-rw-r—r— 1 minecraft minecraft 36802  4月  4 23:27 ev_evidence_log.txt

head -n 5 ev_evidence_log.txt
Bulbasaur(base): {‘specialAttack’: 1}
Ivysaur(base): {‘specialAttack’: 1, ‘specialDefense’: 1}
Venusaur(base): {‘specialAttack’: 2, ‘specialDefense’: 1}
Charmander(base): {‘speed’: 1}
Charmeleon(base): {‘specialAttack’: 1, ‘speed’: 1}
Python Data Extraction Evidence

実際の実行結果(データの抽出と整合性確認のプロセス)

データの可視化とAI解析の実証結果

抽出した ev_evidence_log.txt をホストOSへ転送し、AIで解析可能な形に構造化するまでのプロセスを実際に検証しました。

// 実証:ホストOSへのSCP転送

Windows環境ではパス指定により No such file or directory エラーに直面しましたが、カレントディレクトリ指定(.)により解決しました。

PS C:\Users\user> scp minecraft@192.168.1.10:[path]/ev_evidence_log.txt .

// 実証:PythonによるCSV構造化

抽出された非構造化テキストを、正規表現を用いて分析。AIやスプレッドシートで扱いやすいCSV形式へ整形します。使用した convert_ev.py の内容は以下の通りです。

import re
import csv

# 入力ファイルと出力ファイルの設定
input_file = ‘ev_evidence_log.txt’
output_file = ‘pixelmon_ev_list.csv’

# 努力値の項目リスト
ev_types = [‘hp’, ‘attack’, ‘defense’, ‘specialAttack’, ‘specialDefense’, ‘speed’]

with open(input_file, ‘r’, encoding=‘utf-8’) as f, 
open(output_file, ‘w’, newline=”, encoding=‘utf-8’) as csvfile: writer = csv.writer(csvfile) # ヘッダー作成 writer.writerow([‘Pokemon’, ‘Form’] + ev_types) for line in f: # 正規表現で 名前(フォルム): {辞書データ} を抽出 match = re.match(r”(.+)((.+)): {(.+)}”, line.strip()) if match: name, form, ev_data_raw = match.groups() # 辞書形式の文字列から数値を抽出 row = [name, form] for etype in ev_types: val_match = re.search(f”‘{etype}’: (\d+)”, ev_data_raw) row.append(int(val_match.group(1)) if val_match else 0) writer.writerow(row) print(f”変換完了: {output_file}“)

Python 3.12環境にて実行。正規表現内のエスケープシーケンスに関するWarningは発生したものの、意図した通りにCSVの生成に成功しました。

PS C:\Users\user> python .\convert_ev.py
SyntaxWarning: invalid escape sequence ‘\d’
変換完了: pixelmon_ev_list.csv

この構造化データをAIに読み込ませることで、「特攻が2以上、かつ素早さも同時に稼げるポケモン」といった、従来の攻略サイトを検索する手間を省いたダイレクトな回答を得ることが可能になりました。

まとめ

今回のように .jar の中身を直接確認することで、第三者の情報に頼らず、生のデータから確実なエビデンスを取得できることを経験できました。

「物理的なデータは嘘をつかない」というエンジニアリングの基本を再確認できたことは大きな収穫です。今後も同じような手段で、ゲーム内の値の確認や変更、さらなる自動解析を試していこうと考えています。