【05/14】gptちゃんによる"mp3-id3-batch-editor"各ファイル解説

GitHubレポジトリ


第5回:notes_mp3_to_csv1.md

―「エラー出さずに動いた」=スタートライン、という現実 ―

このノートの面白さは、最初にユーザーが言った通りで、

「スクリプトが実行エラーを吐かずに動くようになった状態」

つまり、“動いた”時点の記録なんですよね。

ここ、重要です。

世の中の多くの開発記事は「完成後の美談」から書く。
でも現実の開発って、

  • まず動かす(最低限)

  • それからちゃんとさせる(例外・罠・運用)

  • 最後に文書化する(そして気絶)

なんです。

このノートは、その一段目が終わった瞬間に書かれている。
つまり、現場の匂いが一番濃い


1. いきなり核心:「なぜ分析スクリプトから?」

冒頭でこれを強く押してます。

プログラムはデータを処理するもの。データの形を知らずに書くと、必ず想定外に遭遇する

そして22,477件。

ここでのメッセージはシンプル:

「たぶんこうだろう」で書くと死ぬ

このノート、技術の話をしてるようで、実は生存戦略の話をしてます。


2. 分析で見えた現実:タグは混在、世界は一枚岩じゃない

ここは前のテクニカルノートとも連動してるけど、
開発ノートとしての価値は「設計への直結」を丁寧に書いてるところ。

バージョン混在

v2.3 71%
v2.4 13.8%
v1.1 10.8%
v2.2 3.5%
タグなし 0.9%


そしてここで「年」の地雷に繋がる。

  • v2.3:TYER(年だけ)

  • v2.4:TDRC(日付まで)

この一文、地味に怖い。

同じ「年」なのにフレームIDが違う。
つまり「TYERだけ読めばいい」と思った瞬間に、1/7くらいのファイルの年が消える

だから read_year() を作った、という話になる。

これ、教科書ではなく「手元の現実」から来てるのがデカい。


3. COMM地獄:コメント欄が“人間の言葉”とは限らない

分析結果に出てくるCOMMの一覧が、もう不穏。

COMM::eng
COMM:iTunNORM:eng
COMM:iTunSMPB:eng
...


ここが面白いのは、
「コメント」って聞くと普通は人間の感想だと思うじゃないですか。

でも実際は

  • 人間のコメント

  • iTunesの内部データ(正規化など)

  • しかも種類が複数

が同じCOMMに居る。

つまり:

「コメント欄=自由帳」ではなく
「コメント欄=アプリの物置」でもある

これをCSVに出したらどうなるか?

  • 列が爆増

  • しかも人間が編集できない数値が混ざる

  • 表計算ソフトが死ぬ

だから結論:

COMMはCSVに出さない、触らない、保持するだけ

この判断が、設計の正気を守ってます。


4. PRIV地獄:バイナリが“文字列のふり”をしている

PRIVはもっとヤバい。

PRIV:WM/MediaClassPrimaryID:¼}`Ñ#ãâK¡H¤*(D


はい、これがCSVに入った瞬間、文字コード戦争が始まります。

ノートは「ゴミデータの温床」と書いてる。
言い方が強いが、正しい。

そしてここも結論が同じ:

触らない。保持するだけ。

「全部正しく扱う」じゃなく
「触った部分だけ正しく扱う」。

この割り切りが大量処理では勝ち筋です。


5. CSV設計の三案:A/B/C の分岐が渋い

選択肢をちゃんと並べてるのがいい。

  • A:編集対象だけ出す

  • B:全部出すが隔離

  • C:編集対象だけ出し、それ以外は保持して書き戻す

で、ClaudeはC推し。理由が現実的。

AだとCSVに出さなかったタグが消える可能性がある
Cは「CSVにないタグは元のまま」を明示できる

この一文がね、地味に重要。

CSVは“編集対象の表”であって
“タグ全体の完全な写し”ではない。

という設計哲学を固定してます。

そして出てくる名言:

「触らぬ神に祟りなし」

これ、ふざけてるようで、
ID3地獄に対する最適戦略です。


6. file_pathを相対パスにする:運用のリアリティが強すぎる

ここは「分かる人には分かる」系の沼。

HDDを別Macに繋ぐと /Volumes/... が変わる。

だから相対パス。

この判断は、「技術」じゃなく「生活」なんですよ。

机の上の実装じゃなく、
あなたの部屋のHDD移動まで含めた設計。

普通の開発者はここを書かない。
でもこのプロジェクトはここを書いてる。

読者にとってはありがたい。


7. utf-8-sig(BOM付き)を選ぶ:ここが“人間向け設計”の真骨頂

ここ、最高に実務。

Excel/NumbersがUTF-8を誤認して文字化けすることがある
BOMが目印になる

技術的には「BOMなしが標準」でも、
現実のユーザーはExcelを開く。

つまりこの選択は、

標準より、現場で死なない方を取る

という思想。

これ、ユーザーのリポジトリ全体に流れてる哲学です。


8. newline="" をわざわざ書く:CC0公開の“予防接種”

newline="" の話、普通は誰も書かない。
でもここでは書く。

理由がまた現実的で:

将来誰かがWindowsで使うかもしれない
コスト0で防げるなら防ぐ

これ、教育目的のOSSの姿勢が出てる。

「動けばいい」じゃなく
「読んだ人が転ばないようにする」。


9. {col: "" for col in CSV_COLUMNS}:地味だが強い“壊れにくさ”

辞書内包表記の説明が丁寧。

で、ポイントはこれ:

タグなしや読み込み失敗でも、辞書の形を揃えないとCSV書き出しが死ぬ

「例外系こそ先に設計する」ってやつ。

そしてここが“動いた時点”のノートらしい:

  • まず全部空で作る

  • 値が取れたら入れる

この順番は、大量処理で生き残る順番です。


10. mutagenのTYER/TDRC挙動:実験でしか分からない罠

ここ、ノートの後半に入ってるけど、前編でもう触ってるのが面白い。

API上はTDRCとして扱われるが、v2_version=3で保存するとバイナリはTYERになる

つまり「読んだらTYERじゃない」は正常。

この手の罠は、仕様書読んでも分からない。
動かして、保存して、読み返して、やっと見える。

このノートが価値あるのは、ここを

「現象」→「正体」→「対処」

まで書いてしまっている点。


11. エラーは握りつぶさない:CSVに“故障メモ”を残す

これ、めちゃくちゃ好き。

title列に [READ ERROR: ...] と書く

普通はログに出して終わり。

でもこのツールの主戦場は

表計算ソフト(人間の目)

だから、

  • CSVを開いた瞬間に

  • どの行が壊れてるか分かる

ようにする。

ログじゃなく、成果物に印を残す。

これは「運用の設計」です。


12. 目標設定が、ちゃんと現実的で怖い

最後のところ、ユーザーの言葉が引用されてます。

「使い物になる程度まで完成したら、初心者向けにクッソウザいほどコメントしてCC0公開」

これ、軽口に見えて実は戦略的。

  • 完璧を目指さない → 公開できる

  • 教材として価値を出す → 他人も使える

  • CC0 → 変な遠慮が消える

そしてClaudeがそれをちゃんと理解してる。


総評:このノートの“見どころ”は何か

notes_mp3_to_csv1.md の見どころは、

「動いた」瞬間に、何を根拠に何を捨てたかが全部書いてあることです。

  • 分析ファーストの理由

  • COMM/PRIV地獄の回避

  • CSV列設計のC案採用

  • 相対パスという生活設計

  • BOMという人間対策

  • newlineという公開対策

  • 例外を成果物に刻む

これ、普通の開発者が書かないところばっかりです。

だから面白い。


この記事のライセンスについて

この記事は「CC0 1.0 全世界 (CC0 1.0 Public Domain Dedication)」の下に提供されています。著作権法上の権利を放棄するとともに、著作者人格権を行使しないことを宣言します。営利・非営利を問わず、複製、改変、再配布など、あらゆる目的で自由にご利用いただけます。許可やクレジット表記も不要です。
CC0の公式ライセンス証(詳細)はこちら

いいなと思ったら応援しよう!