9年前に書いて下書きのまま埋もれてた、用語集をyamlで書くというエントリがあります。(このエントリと一緒に公開しました)
YAML で用語集を書くと索引付きの HTML が1枚出てくる、ygloss という小さいツールの話です。
で、ツールの方もその後どうなったかというと、放置してました😃
中身は Python 2 で、テンプレートは CDN から jQuery を読んでいて、旧エントリには pip install ygloss と書いてあるけど、 PyPI には公開してなかったみたい。
というわけで、コンセプトは変えずに Claude Code に全部任せて書き直してみた、というエントリ。
ygloss のおさらい
用語集ツールって、探してもあんまり流行ってるのが無いんですよね。(9年前の時点での話ですが)
なので、テキストで書けるやつを自分で作ったのが ygloss です。
こんな YAML を書くと、
---
lang: ja
title: 用語集のタイトル
description: タイトルの下に表示される説明。
---
用語: |
説明文。ほかの用語や URL は自動でリンクになり、
改行はそのまま表示されます。
別の用語: 1 行だけの説明。
索引付きの HTML が1枚出てきます。仕様は9年前と同じで、
- frontmatter に用語集自体のメタデータ
- 本文は YAML のハッシュ。用語がキーで、説明が値
- 説明文の中に他の用語が出てきたら、ページ内リンクになる
- http(s) で始まる文字列は外部リンクになる
- 出力は1枚の HTML
これだけ。
Claude に頼んだこと
ローカルに clone して、Claude Code にこう投げました。
ygloss は9年前から放置してたリポジトリです。
コンセプトは変えずに現在の最新pythonに書き直したいです。
コンセプトは「読める範囲の小さい実装」です。
できたもの
https://github.com/yosiopp/ygloss
ygloss.py の先頭はこうなりました。
#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.13"
# dependencies = ["pyyaml>=6"]
# ///
これは PEP 723 のインラインスクリプトメタデータというやつで、必要な Python のバージョンと依存をスクリプト自身に書いておくと、uv が初回実行時に環境を用意してくれる仕組み。
なので使い方はこう。
uv run ygloss.py example/glossary.yaml > glossary.html
shebang が uv run を呼んでいるので ./ygloss.py example/glossary.yaml でも同じです。pip も venv も出てこない。
実装で変わったところは、ざっくりこんな感じでした。
- Python 2 → 3.13 以上。91行が75行になった
- frontmatter を自前で
---で切り出していたのが、YAML の複数ドキュメントとしてyaml.safe_load_allで読むだけになった - テンプレートの置換は自作の replace から
string.Templateに - 説明文は HTML エスケープするようになった(旧版は素通し)
- 用語の自動リンクは長い用語が優先。英数字の途中にはマッチしないので
uvがuvicornに反応したりしない
tmpl.html の方は jQuery が消えて、絞り込みは素の JavaScript で 18行。
CSS は 71行から 145行に増えて、ダークモードは prefers-color-scheme で OS に追従、印刷時は索引と検索欄が消えてタイトルと本文だけになります。
おしまい
9年放置したリポジトリが、プロンプトと選択肢を選んだだけで、現代化されました。
次にまた9年放置しても、また Claude に頼めば良いですね。
ちなみに、このエントリも Claude に下書きしてもらってます 😉