【06/14】gptちゃんによる"mp3-id3-batch-editor"各ファイル解説
GitHubリポジトリ
第6回:notes_mp3_to_csv2.md
― “CSVが出た”は勝利ではない。開いた瞬間が本番だ。 ―
このノートは、開発のリアルが詰まってます。
スクリプトは落ちない
CSVも吐けた
なのに「やっぱ何かおかしい」になる
この瞬間、全エンジニアが同じ顔をします。
😐「……あれ?」
ここから「じゃあv1.0でいいや」に着地するまでの道筋が、このノートの主役です。
1. テスト結果その1:文字化け発生
“成功の証拠”としての文字化け
まず出るのがこれ。
-¼ô·è-@-«_Î-è
€GÃ T□□□Ìõü□J
□â□â
この時点で分かるのは:
mp3_to_csvは動いてる
でも出力は現実のデータに殴られてる
そしてこの文字化け、原因が気持ち悪いタイプ。
2. なぜ文字化けするのか:Shift-JISの幽霊
ID3のテキストフレームには encoding がある。
| 0 | Latin-1 |
| 1 | UTF-16 |
| 2 | UTF-16BE |
| 3 | UTF-8 |
問題はここ。
encoding=0(Latin-1)と宣言されているのに、
中身はShift-JISのバイト列だった
当時の日本語Windows環境では「それで動いてた」。
いわば仕様違反のローカル最適が、20年越しに化けて出る。
ここ、現代のソフト開発でよくある「過去の罪」です。
3. 対処:Shift-JISフォールバック
“一度バイト列に戻して、読み直す”
処理の発想が面白い。
文字列になってしまったものを
もう一回バイト列に戻して
Shift-JISとして再解釈する
.encode('latin-1') → .decode('shift-jis')
この時点で、読者向けにぶっちゃけると:
「Latin-1は0〜255をそのまま文字に対応させる雑な世界」
だから、“バイト列の擬態”として使える。
ここがキモです。
そしてここが、Claudeの偉いところ。
失敗したら元の値を返す
つまり:
Shift-JIS混入を救済する
でも本物のLatin-1(欧州語)を壊さない
誤爆チェックとして Été を試し、例外で弾けることも確認してる。
この「誤爆確認済み」って一文、地味に価値が高い。
“やった気”じゃなくて、やった。
4. ID3バージョン列の追加:仕様というより“メモ”
そして例の「どっちがラク?」
ここでユーザーの提案が入る。
「取得したID3タグのバージョン、列に追加しとくのどう?」
これに対し、設計判断が発生する。
csv_to_mp3で参照するか?
参考情報として置くだけか?
結論:参考情報として置くだけ
理由は明快:
書き戻しは全ファイル一律v2.3だから、参照する意味がない
ここ、プロジェクト全体の哲学が凝縮されてます。
未来のために複雑化しない
しかし人間が眺めるための目印は残す
つまり id3_version は「機械のため」じゃなく「人間のため」。
このリポジトリの性格、まさにこれです。
5. year列に日付が入ってた:そしてID3地獄の扉が開く
CSVを見たら:
1999-05-10 みたいな値が year に入っている
これはv2.4のTDRCが日付まで持てるから。
ここで疑問が生まれる:
v2.3に統一するなら、TYER(4桁)に丸められるの?
普通はそう思う。
だが現実は違った。
6. 実験:mutagenは“やってくれない”
v2_version=3指定してもTDRCが残る
結果がこれ。
'1996-04-22' → TDRCのまま
'1996-04' → TDRCのまま
'1996' → TDRCのまま
つまり:
v2.3で保存したつもりなのに、v2.4フレーム(TDRC)が入る
→ 仕様違反状態になる
ここがこのノートの“ヤバい見どころ”。
ドキュメント読んでも分からない罠。
そしてこの罠を、「CSVを見た違和感」から掘り当てている。
このプロジェクトの勝ち筋はここです:
違和感を放置しない
7. 対処方針:情報は残し、書き戻しで丸める
この判断が巧い。
mp3_to_csvでは元の値をそのまま出す(情報を捨てない)
csv_to_mp3で書き戻す時に年だけ使う
year = year_str.split('-')[0]
つまり:
収集は忠実に
変換は書き戻しで
データ処理としてまっとうです。
“勝手に変形しない”のは信頼性のコア。
8. v1.0確定:仕様が「現実」に収束する瞬間
ここでv1.0として固定された仕様一覧が出る。
読み取り対象は実務で必要なものだけ。
file_path(相対)
title / artist / album
track / year / genre
album_artist / disc
copyright / composer / conductor
id3_version(参考)
そして「触らないもの」を明示:
COMM、APIC、PRIV、その他全部
ここで言いたいのは一つ。
v1.0とは「全能」ではなく「合意した割り切り」です。
このノートは、その割り切りが“逃げ”じゃなく
分析と実験の結果だと示している。
9. 「気付かない」という最終防衛線
最後に出てくるユーザーの言葉。
「見ない情報が壊れても、気付かない」
これ、無責任じゃない。
むしろ誠実です。
なぜなら:
何を見るのか
何を見ないのか
を自覚してるから。
ID3は「全部守る」路線に行くと、
実装コストと事故率が跳ね上がる。
だから、
「使う情報を正しく扱う」に集中する
大量処理ツールとして、これは正しい。
10. このノートの“真の見どころ”まとめ
notes_mp3_to_csv2.md の見どころは、ズバリ:
✅ “動いた後”の違和感処理が全部書いてある
CSVを開いて初めて分かる文字化け
Shift-JISという過去の亡霊を救済する実装
id3_version列を「人間の目印」として追加
year列の日付からmutagenの罠を発見
v1.0を「割り切りの合意」として確定
そして最後のClaudeの注釈が、開発の真理を言ってます。
「動いたと思ってから ‘あれ?’ となる。この繰り返しが現実」
まさにそれ。
この記事のライセンスについて
この記事は「CC0 1.0 全世界 (CC0 1.0 Public Domain Dedication)」の下に提供されています。著作権法上の権利を放棄するとともに、著作者人格権を行使しないことを宣言します。営利・非営利を問わず、複製、改変、再配布など、あらゆる目的で自由にご利用いただけます。許可やクレジット表記も不要です。
CC0の公式ライセンス証(詳細)はこちら
