はじめに
無料で使えるAIツールを「やりたいこと」から探せる検索サイトを、GitHub Pagesで公開しています。
https://ma0531.github.io/ai-tools-search-guide/

340件以上のAIツールを載せているのですが、データが増えるにつれて更新作業がつらくなってきました。そこで、Excelを更新してアップロードするだけで、サイトのデータが自動で作り直される仕組みをGitHub Actionsで作りました。
この記事では、その仕組みと、実際につまずいた点を紹介します。
:::note info
このサイトと仕組みは、AnthropicのAI「Claude Opus 5.5」の支援を受けて作成しました。コードや構成の多くはClaudeと相談しながら作り、動作の確認と運用は自分で行っています。
:::
この記事で分かること
ExcelのデータをGitHub Actionsで自動的にJSONへ変換する方法
入力ミスがあったときに、何行目が間違っているか教えてくれる仕組み
GitHubをブラウザだけで操作していて、実際につまずいたこと
困っていたこと
サイトのデータは、ai-tools.json という1つのJSONファイルに入っています。1件分はこんな形です。
{
"name": "ChatGPT",
"url": "https://chatgpt.com",
"country": "アメリカ",
"category": ["パーソナルアシスタント", "情報検索・リサーチ"],
"strengths": ["会話・文章作成・要約・翻訳を1つで", "..."],
"pricing": "無料枠あり"
}
これが340件以上並んでいて、GitHubの画面上で直接編集していました。すると、次のような問題が起きます。
カンマを1つ忘れるだけで、サイト全体が表示されなくなる
長すぎて、どこを直しているのか分からなくなる
「料金タイプ」などに決まった言葉以外を入れても気づけない
ふだん事務の仕事でExcelを使っているので、「Excelで管理できれば楽なのに」と思ったのがきっかけです。
仕組みの全体像
ポイントは、入力ミスがあるときは変換を止めることです。JSONは書き換わらないので、間違えてもサイトが壊れることはありません。
① Excelの設計
Excelには3つのシートを用意しました。
シート 内容
使い方 入力ルールと反映手順のメモ
AIツール一覧 1行=1つのAI
カテゴリ一覧 使えるカテゴリ名の一覧

入力ミスを減らすために、Excelのデータの入力規則(▼で選べるリスト)を使っています。
料金タイプ:完全無料 / 無料枠あり / トライアルのみ
日本語対応:◯ / △ / ×
対応端末:PC+スマホ / PCのみ / スマホのみ
「強み」のように複数の項目がある列は、1つのセルの中で Alt+Enter で改行して入れています。
② ExcelをJSONに変換するPythonスクリプト
変換には、PythonのExcel用ライブラリ openpyxl を使いました。やっていることは次の3つです。
1行目の見出しから、どの列に何が入っているかを調べる
2行目以降を1行ずつ読み、入力ミスがないか確認する
ミスがなければJSONに書き出す
入力チェックの部分を抜粋します。
PRICING = {"完全無料", "無料枠あり", "トライアルのみ"}
for r, row in enumerate(ws.iter_rows(min_row=2, values_only=True), start=2):
values = {h: text(row[i]) for h, i in col.items()}
if not any(values.values()):
continue # 空の行は無視
where = f"{r}行目({values['AI名'] or '名前なし'})"
# 必須の項目が空になっていないか
for h in REQUIRED:
if not values[h]:
errors.append(f"{where}:「{h}」が空です")
# 決まった言葉が入っているか
pricing = values["料金タイプ"]
if pricing and pricing not in PRICING:
errors.append(f"{where}:料金タイプは「完全無料」「無料枠あり」「トライアルのみ」のどれかにしてください(今:{pricing})")
# ミスが1つでもあれば、JSONを書き換えずに終了
if errors:
print("❌ 入力ミスが見つかったため、JSONは更新しませんでした:")
for e in errors:
print(f" ・{e}")
sys.exit(1)
「何行目の・どの項目が・どう間違っているか」を日本語で表示するようにしたのがこだわりです。エラーの意味を調べなくても、そのままExcelを直せます。
ほかにも、次のようなチェックを入れています。
AI名の重複
URLが http で始まっているか
カテゴリがサイトに存在する名前か
「○」(まる)と「◯」(大きいまる)のような似た記号は、自動でそろえる
③ GitHub Actionsの設定
.github/workflows/excel-to-json.yml に、次の設定を置いています。
name: ExcelからJSONに変換
on:
push:
paths:
- "data/ai-tools.xlsx" # このファイルが更新されたときだけ動く
workflow_dispatch: # 手動実行もできる
permissions:
contents: write
jobs:
convert:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: pip install openpyxl
- name: ExcelをJSONに変換(入力ミスがあればここで止まります)
run: python scripts/excel_to_json.py
- name: 変換したJSONを保存
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add data/ai-tools.json
if git diff --cached --quiet; then
echo "JSONに変更はありませんでした"
else
git commit -m "ExcelからJSONを自動更新"
git push
fi
on.push.paths で Excelファイルが更新されたときだけ 動くようにしているので、ほかのファイルを直しただけでは実行されません。
④ 入力ミスがあるとどうなるか
試しにわざと間違えてアップロードすると、Actionsタブに赤い ✕ が付き、次のように表示されます。

❌ 入力ミスが見つかったため、JSONは更新しませんでした:
・3行目(Claude):カテゴリ「画像つくる」はサイトにありません
・4行目(Google Gemini):料金タイプは「完全無料」「無料枠あり」「トライアルのみ」のどれかにしてください(今:無料)
・6行目(ChatGPT):AI名が 2行目 と重複しています
GitHubから失敗のお知らせメールも届くので、気づき忘れもありません。
つまずいたこと
ここからは、実際にハマった点です。GitHubをブラウザだけで操作している人は、同じところでつまずくかもしれません。
- フォルダごとアップロードしたら、1段深い場所に入った
zipを展開したフォルダをそのままドラッグしたところ、管理用ファイル/scripts/excel_to_json.pyのように、余計なフォルダの中に入ってしまいました。Actionsでは次のエラーになります。
python: can't open file '.../scripts/check_links.py': [Errno 2] No such file or directory
解決策:展開したフォルダの中に入って、中身のフォルダだけをドラッグする。アップロード画面に表示されるファイルのパスを確認するのが確実です。
2. Excelをアップロードしたのに、変換が動かない
data フォルダに入れるつもりが、リポジトリのトップにアップロードしていました。設定で data/ai-tools.xlsx だけを見張っているので、場所が違うと動きません。
解決策:GitHubの「Upload files」は、今開いているフォルダに保存されます。画面上部の場所表示が リポジトリ名 / data / になっているか確認してからアップロードします。
3. スプレッドシートに貼り付けたら、下のセルが上書きされた
家にxlsx対応のExcelがないため、Googleスプレッドシートで編集しています。改行入りの文章をセルを選んだ状態で貼り付けたら、1行ずつ下のセルに分かれて入り、別のAIのデータを上書きしていました。
解決策:セルをダブルクリックして編集状態にしてから貼り付ける。
ちなみにこのミスは、変換時の「強みが1項目です(4項目がおすすめ)」という注意表示で気づけました。チェックを入れておいてよかったと思った瞬間です。
おまけ:リンク切れの自動チェック
同じGitHub Actionsで、週に1回、全AIサイトのURLを開いて確認する仕組みも作りました。結果はGitHubのIssuesに自動で書き込まれます。

実際に動かしてみると、サービス名が変わっていたAI(例:Formula Bot → Better Analyst)や、証明書が切れて危険な表示が出るサイトが見つかりました。AIツールは変化が速いので、自動で見張ってくれるのはかなり助かっています。
ただ、大手のサイトは自動チェックのアクセスを拒否する(403)ことが多く、毎週同じサイトが報告されて読みにくくなりました。そこで、「確認済みリスト」に登録したサイトは報告から外す工夫もしています。
まとめ
Excelで管理 → GitHub Actionsで自動変換 にしたことで、JSONを直接触ることがなくなりました
入力ミスがあれば変換を止めて、場所を日本語で教えてくれるので、サイトが壊れる心配がなくなりました
事務作業で使い慣れたExcelを入り口にできるので、プログラミングに詳しくなくても続けやすいと感じています
同じようにGitHub Pagesでデータの多いサイトを作っている方の参考になればうれしいです。
リンク
サイト:https://ma0531.github.io/ai-tools-search-guide/
リポジトリ:https://github.com/ma0531/ai-tools-search-guide