🤖 AI運用ルール

font

最終更新 2026年08月24日 / 22_AI運用ルール/コマンド集/font/font.md

/font — フォントを「TERASU Lab フォント図鑑」+「mikke!」に追加

ユーザー入力: $ARGUMENTS

目的: 気になったフォントを、サイトURLとスクショから特定して、TERASU Lab のフォント図鑑と mikke! のフォントタブの両方に1件追加する。/section(実物から抽出)のフォント版。

2026-07-24 v2.0 でリポ分離に追従(それ以前の版は旧リポ ~/dev/lab-terasu に書き込んでおり、
本番のどちらにも反映されなかった)。フォントのデータとツールは core(terasu-web-core)が正本で、
Lab と mikke! の両方がこの1本を見る。必ず core を更新し、両方のリポに反映するところまでやる。

入口は2つある(2026-07-24 追加)。
A. 単体で使う(従来どおり): URL+スクショをもらってフォントを特定して入れる。
B. /mikke から流れてくる: 参考HPを足すと detect_fonts.mjs がそのサイトの書体を拾うので、
★が付いたものをここで登録する。このとき --company に参考HPの社名を必ず入れる
(大串「良いHPはフォントも良い。/mikke で自動で入ればフォント集がめっちゃ増える」)。

実行フロー

0. まずスクショ募集メッセージを返して待つ(コマンド単体で打つ運用)

  • コマンドが打たれたら、最初に必ず次のメッセージだけ返して一旦応答を終える(他の作業を先にやらない):

    入れ込みたいフォントのサイトURLと、そのフォントが使われている部分のスクショを送ってください(複数フォントまとめてOK)

  • URL+スクショが送られてきたらステップ1へ。※例外: $ARGUMENTS に最初から情報があればそのまま進む。

1. 現在地把握(3リポとも最新にする)

cd ~/dev/terasu-lab && git pull --ff-only && git submodule update --init --recursive
cd ~/dev/mikke      && git pull --ff-only && git submodule update --init --recursive
git -C ~/dev/terasu-lab/core status --short   # クリーンであること

旧リポ ~/dev/lab-terasu は使わない(自動デプロイ停止済みの参照用。ここに書いても本番に出ない)。

2. フォントを特定する(スクショ+実サイトから)

  • 送られたスクショで「どのフォントか」を見る。あわせて実サイトのCSSからフォント名を確定する:
    bash # 実サイトのCSSに使われているfont-family / Google Fonts読み込みを確認 curl -sL "<URL>" | grep -oiE "fonts.googleapis.com[^\"')]+|font-family:[^;}]+" | sort -u | head
  • 決める項目:
  • --id(一意slug・小文字例: albertsans)/--name(正式フォント名 例: Albert Sans)
  • --cat(下記語彙から1つ)/--jp(名前の右の短い説明)/--tags(カンマ区切り)
  • --desc(用途・雰囲気の説明1〜2文)
  • --css@import url(...)font-family: '...';。Google Fontsなら公式の埋め込みCSSをそのまま)
  • cat語彙: en-sans en-serif en-display en-mono jp-sans jp-serif jp-display jp-handwrite pairing
  • en- は英字プレビュー、jp- は日本語プレビューの既定文言が入る(--big/--mid で上書き可)。
  • 有料フォント(Adobe Fonts有料kit・モリサワ・フォントワークス等)は載せない。mikke!は一般公開なので
    「誰でも使える」=無料・商用可・自己ホストできるものに限る。有料しか無いときは近い代替を提案する。

無料の判定は「Google Fonts か」ではない(2026-07-27 大串FB「フォントは本当にゼロ件?」で根治)。
Google Fonts の外にも誰でも使える書体は大量にある(Fontshare・Font Squirrel・LINE Seed・OFL系)。
ここを「Google Fonts だけ」に狭めていたせいで、TSUKASA の主役 Aileron(使用304箇所・SIL OFL商用可)を
「自前配信」として捨てていた。判定は core/data/ の2つのカタログで行う:
- font-catalog-google.json … Google Fonts 全1,942件<link>が無くても名前一致で拾う)
- font-catalog-free.jsonGoogle外の無料フォント辞書。新しく無料と分かったら1件足す(次から自動で★になる)

判定ロジックやカタログを更新したら、必ず全件を棚卸しし直す:
cd ~/dev/mikke/core && node tools/rescan_fonts.mjs --jobs=4python3 tools/bulk_add_fonts.py--dryで下見)。
初回はこれで312サイトから53書体を回収し、図鑑が 87件→165件 になった。

3. カード生成(core に足す=ここが両方への入口)

cd ~/dev/terasu-lab/core
python3 tools/add_font.py --id <slug> --name "<正式名>" --cat <cat> \
  --jp "<短い説明>" --tags "<tag1,tag2>" --desc "<用途・雰囲気>" \
  --company "<どこで使われていたか。単体登録なら Googleフォント>" \
  --css "@import url('...');\nfont-family: '<正式名>', sans-serif;"
python3 build_core.py            # web-fonts-data.json に集約
python3 tools/extract_fonts.py   # mikke!用 data/mikke-fonts.json を更新(**マージ方式**)
  • 重複ガードで⛔(同id/同名)が出たら既登録=報告して停止(--force は大串指示がある時だけ)。

add_font.py を叩く前に data/mikke-fonts.json も名前で照合する(2026-08-24 の事故)。
mikke! のフォントは ①Lab の web-fonts から流れてきたもの②mikke! に直接登録されたもの
contributor: ogushi ・絞り込み軸 lang/shape/mood つき)の2系統あり、
add_font.py の重複ガードは data/web-fonts/ しか見ないので②は素通りする
bash cd ~/dev/terasu-lab/core && python3 - <<'"'"'EOF'"'"' import json names = ["<入れたいフォント名>", ...] mk = {f["name"]: f for f in json.load(open("data/mikke-fonts.json"))} for n in names: f = mk.get(n) print(n, "→ mikke!に既存:", {k: f.get(k) for k in ("id","sub","desc")} if f else "なし") EOF
既存があれば id をそのまま流用し、--jp/--desc も既存の文言に合わせる
id を変える(例 delagothiconedela-gothic-one)と mikke! に同じ書体が2枚出る。
文言を変えると大串が書いた説明を上書きしてしまう。
- extract_fonts.py件数が減ったら exit 1 で止まる。止まったら原因を確かめるまでコミットしない。

ver を採番する( 本番に出す修正はフォント追加でも必ず +1・2026-08-24 に漏らした)

cd ~/dev/terasu-lab/core && git fetch origin -q
python3 tools/bump_ver.py "フォント図鑑: <名前> を追加"   # MIKKE_VER と changelog を同時に更新

手打ちの +1 は禁止(origin/main を見て採番する=複数人が同じverを名乗る事故を防ぐ)。

core をコミットして push(これを忘れると両方に出ない)

cd ~/dev/terasu-lab/core
git add data/web-fonts/<slug>.json web-fonts-data.json data/mikke-fonts.json build_mikke.py
git commit -m "フォント図鑑: <名前> を追加(/font)" && git push origin main

~/dev/mikke/core 側で作業した時は detached HEAD なので git push origin main
! [rejected] (non-fast-forward) で弾かれる。その時は git push origin HEAD:main と書く。

4. 両方へ反映(2リポとも core のポインタを進める・直接prod OK)

# ① TERASU Lab(push で GitHub Actions が自動デプロイ・約1分)
cd ~/dev/terasu-lab && git submodule update --remote core && git add core \
  && git commit -m "core更新: フォント<名前>を追加" && git push origin main

# ② mikke!(ロック付きスクリプトでデプロイ。中で build_core.py → build_site.py の順に走る)
cd ~/dev/mikke && git submodule update --remote core && git add core \
  && git commit -m "core更新: フォント<名前>を追加" && git push origin main
bash tools/deploy_mikke.sh

npx: command not found で3回リトライして落ちるPCがある(node未導入機)。その時は前置きする:

export PATH="/Applications/ChatGPT.app/Contents/Resources/cua_node/bin:$PATH"

どちらか片方で止めない。core を push しただけでは、どちらのサイトにも出ない
(各リポが指している core のコミットを進めて初めて反映される)。

5. 本番検証(両方の実機で・wrangler出力を信じない)

curl -sL "https://lab.terasu.scale-group.co.jp/fonts/?cb=$RANDOM"  | grep -c "<正式名>"
curl -sL "https://mikke.scale-group.co.jp/fonts/?cb=$RANDOM"       | grep -c "<正式名>"
  • 両方とも1以上になるまで完了報告しない。0のままならCI/デプロイの完了を待って再確認。
  • あわせて総数が減っていないことも見る(フォントが消える事故の再発検知):
    bash # フォントカードの総数(2026-08-24 実測の基準=178・Lab と mikke! で必ず一致する) curl -sL "https://lab.terasu.scale-group.co.jp/fonts/?cb=$RANDOM" | grep -c 'data-mk-type="font"' curl -sL "https://mikke.scale-group.co.jp/fonts/?cb=$RANDOM" | grep -c 'data-mk-type="font"'

6. 完了報告(3行・事実だけ)

  • 追加したフォント名+カテゴリ
  • 本番URL2つ: https://lab.terasu.scale-group.co.jp/fonts/ / https://mikke.scale-group.co.jp/fonts/
  • 実機検証OKの旨

退化禁止・順守

  • HTML本体は手編集しない(1件=1ファイルのJSON追加=競合ゼロ方式)。カード生成は必ず add_font.py 経由。
  • 順番厳守: add_font.pybuild_core.pyextract_fonts.py(逆にすると集約前のデータを読む)。
  • data/mikke-fonts.json を作り直さない(2026-07-24 の事故の真因)。mikke! には web-fonts を通さず
    直接足した日本語フォント25件と、絞り込み用の軸(lang/shape/mood)があり、丸ごと再生成すると消える。
    いまの extract_fonts.pyマージ方式(既存は消さない・取れた項目だけ更新)なので、
    この挙動を変えないこと。件数が減ったら止まる安全弁も入っている。
  • 有料フォント(Adobe Fonts等のkit依存)は一般公開のmikke!に載せない=無料・自己ホスト可能なものに限る。

関連

  • 兄弟コマンド: /section(セクションを抽出)・/mikke(参考サイトを追加)
  • リポ: ~/dev/terasu-lab(Lab)/ ~/dev/mikke(mikke!)/ 共通は submodule core/terasu-web-core
    ※ 旧 ~/dev/lab-terasu は参照用。ここで作業しても本番に出ない
  • 主要ファイル(すべて core 側): tools/add_font.py(カード生成)・tools/extract_fonts.py(mikke!用抽出・マージ方式)
    ・データ data/web-fonts/<id>.jsonweb-fonts-data.json / data/mikke-fonts.json

変更履歴(★=大きな変化)

ver 日付 変更内容
v2.2 2026-08-24 フォントのデータ源が2系統ある件を明文化+3つめの退化を根治。①add_font.py の重複ガードは data/web-fonts/ しか見ず、mikke! に直接登録された書体を素通りする(実測: 送られた6書体は全部 mikke! に既存で、Lab に無いのは3件だけだった)→ 着手前に data/mikke-fonts.json を名前で照合し id と文言を既存に合わせる手順を追加 ②extract_fonts.pyblend() が Lab の和文プレビューを mikke! の英字サンプル欄に流し込んで日本語に化けさせていた("Build the future"→"美しい設計")→ 既存の sample_en/sample_jp は上書きしない保護を追加 ③検品コマンドを実カード数(data-mk-type="font")に修正・基準178件。あわせて node 未導入機の npx 対処を追記
v2.1 2026-07-24 会社名(--company)を追加(大串指示「今後は"ある会社のHPで見たフォント"を入れていく設計。絞り込みで会社名も見られるように」)。既存81件は「Googleフォント」で登録済み。/mikke から流れてくる入口Bを明記(参考HPの社名を入れる)。あわせて Lab のフォント図鑑に絞り込み4軸・検索・削除ボタンを実装(それまで絞り込みは中身が空で使えなかった)
v2.0 2026-07-24 リポ分離に追従+2つの退化を根治。①ツールを core へ移設(旧リポに書いていてどちらの本番にも出ない状態だった)②extract_fonts.py の丸ごと再生成をやめマージ方式に(mikke!の日本語フォント25件が消えていた・実測81→57件)③レコードごと差し替えると mikke! の絞り込み軸(lang/shape/mood)が消えるのでフィールド単位の重ね方に。両リポの core ポインタを進める手順と、両方の実機検証を必須化
v1.0 2026-06-30 新設(旧 ~/dev/lab-terasu 単一リポ時代)
- memory: project_terasu_lab / project_mikke