📌 3行まとめ

  • ショートアニメ自動生成ツールの改修計画P1〜P12に全項目着手完了、コミット20本近い超高密度な一日
  • ファイル破損対策・重複コード統合・描画速度改善・バグ修正5本を集中実施
  • ブログのキャラクターギャラリーに200枚超を一気に追加
ルピナス
ルピナス (笑顔)
昨日バグを8本全部仕留めた翌日、今日はその勢いのまま残りの改修計画を全部走り切ったよ。コミット20本近い、たぶん今年一番密度の高い一日
アイリス
アイリス (衝撃)
にじゅっぽん!?お姉ちゃん今日だけで!?
フィオナ
フィオナ (笑顔)
一つひとつは地道な作業なんですが、全部積み重なって改修計画の全項目に着手完了という達成感があります。記録を見れば何が終わったか一目瞭然な状態が作れました
ルピナス
ルピナス (ドヤ顔)
その記録が揃ったのが地味に嬉しい。今日の中身、順番に見ていこう

1. 🛡️ ファイル破損ゼロへ:全JSONをatomic write方式に統一

動画ツール改修12本完走+ギャラリー200枚超整備の一日 の挿絵1

ショートアニメ自動生成ツールは、セリフ・構成・マーカー・ロック・ステータス・メタデータと複数のファイルに常時書き込みが発生します。これまでは直接上書きしていましたが、今日は5段階に分けて全ファイルを『atomic write(アトミック書き込み)』方式に統一しました。書き終えた別ファイルを元のファイルと丸ごと入れ替える手順で、処理が途中で止まっても元ファイルは無傷のまま残ります。

アイリス
アイリス (考え中)
ファイルの書き込みって失敗することあるの?
ルピナス
ルピナス (ふつう)
GPU処理中のクラッシュや強制終了で普通に起きるよ。重い処理を走らせてるツールほど途中でこける可能性が高い。そして問題に気づくのは次の起動時
アイリス
アイリス (あわあわ)
次の起動まで気づかないの……怖すぎる
フィオナ
フィオナ (ふつう)
手紙を書き直すとき、元の手紙を消してから書き始めると途中でペンが止まれば手紙が消えます。別の紙に書き終えてから取り替えれば完成した瞬間にだけ交換される——今回はその方式を全ファイルに統一しました
アイリス
アイリス (笑顔)
今日でそれが全部直ったんだね!お姉ちゃんありがとう
ルピナス
ルピナス (呆れ)
ありがとうより、もっと早くやっておけばよかったって自分に言ってる
📝 ポイント(初心者向け解説・技術メモ・まとめ)
  • 元のファイルを直接上書きすると途中で止まったとき中身が消える。別ファイルに書き終えてから丸ごと差し替える方式なら、完成の瞬間にだけ入れ替わるので安全🔄
  • 技術メモ:Pythonでは tempfile.NamedTemporaryFile に書き込み後 os.replace() でターゲットパスへ置換。Windowsでも os.replace() はOSレベルのatomic性を保証する
  • ひとことまとめ:クラッシュ耐性のある書き込みは、重い処理が走るツールの必須インフラ

2. 🧹 重複コード3本を統合:DRYリファクタリング

動画ツール改修12本完走+ギャラリー200枚超整備の一日 の挿絵2

ツール内に『まったく同じ処理が複数ファイルに別々に書かれている』箇所が3つ見つかり、まとめて1か所に統合しました。テーマ名の英語変換・読み方ヒントの読み込み・背景キーの時間帯サフィックス処理の3関数です。なお似た処理が2つあったキャラクター表示の確認処理については、調査の結果『意図的な二重チェック設計』と判明したため統合は見送り、その理由もドキュメントに記録しました。

アイリス
アイリス (にやり)
ねえ今日のリファクタ、めちゃくちゃ分かりやすい例え思いついたんだけど聞いていい?
ルピナス
ルピナス (ふつう)
どうぞ
アイリス
アイリス (大笑い)
同じコードが3箇所にあるのって、同じコンビニが商店街に3軒並んでる状態でしょ!
フィオナ
フィオナ (考え中)
同じ品揃えのコンビニが3軒……確かに無駄ですね
ルピナス
ルピナス (笑顔)
しかも1軒だけ新商品が入荷されて、残り2軒は古い商品のままっていうのが重複コードのバグの正体。どこを参照するかで新しい処理と古い処理が混在する
アイリス
アイリス (衝撃)
それどの店に行けばいいか分からない!
アイリス
アイリス (笑顔)
コードのコンビニ化!あたし天才じゃない?
ルピナス
ルピナス (呆れ)
例えとしては上手い。でも今日は統合しなかった判断も同じくらい大事で——キャラクター表示の確認処理、2つあって最初は重複に見えたんだけど
フィオナ
フィオナ (ふつう)
調べたら2段階で別々の役割を持つ意図的な設計でした。なぜ触らなかったかを記録に残さないと、次の人が間違えて消しにくるので、ドキュメントに理由を書いています
アイリス
アイリス (考え中)
統合しない判断も記録するんだね
📝 ポイント(初心者向け解説・技術メモ・まとめ)
  • カレーのレシピを3枚コピーして別の引き出しに入れると、スパイスを変えたとき1枚だけ直して残り2枚を忘れがち。共通メモを1枚にして全員がそこを参照するだけで安全になる🍛
  • 技術メモ:DRY原則(Don't Repeat Yourself)の適用。最も完全な実装を1ファイルにまとめて他からimport参照。意図的に分けている箇所はコメントかドキュメントに理由を残す
  • ひとことまとめ:統合しなかった理由を記録することも、統合と同じくらい大事なドキュメント作業

3. ⚡ 描画速度の底上げ:ベクトル化とキャッシュ

動画ツール改修12本完走+ギャラリー200枚超整備の一日 の挿絵3

動画フレームに合成する虹色の枠の計算を、ピクセル単位のforループからNumPyの一括演算に変更しました。あわせて揺れ・ズームエフェクトで毎フレーム行っていた同サイズのリサイズ計算を、初回結果をキャッシュして再利用する形に変えています。30fpsの動画なら1分間で1,800フレーム以上になるため、1フレームあたりの改善が全体に乗算される形で積み上がります。

ルピナス
ルピナス (ドヤ顔)
ちょっとクイズ。30fpsのショート動画、60秒分だと何フレームある?
アイリス
アイリス (考え中)
えーと……1,800!
ルピナス
ルピナス (ふつう)
正解。その1,800フレーム全部で毎回同じサイズのリサイズ計算を繰り返してた
フィオナ
フィオナ (ふつう)
九九を毎回指折り数えるのをやめて、九九表を壁に貼っておく感覚です。答えの正確さは変わらず、同じ答えを出す手間だけ省ける
アイリス
アイリス (びっくり)
フィオナが例え話した!珍しい
フィオナ
フィオナ (照れ)
……アイリスの影響かもしれません
ルピナス
ルピナス (大笑い)
虹色の枠の方はforループをNumPy一括演算に変えた。動画が長くなるほど効果が乗算される構造。ベンチマークはまた改めて取る
📝 ポイント(初心者向け解説・技術メモ・まとめ)
  • 九九を毎回指折り数えるのをやめて九九表を壁に貼っておく感覚。同じ計算を何度もやり直す手間を省けて、答えの正確さは変わらない⚡
  • 技術メモ:NumPyのbroadcasting(配列全体への一括演算)でCPUが効率よく並列処理できる形に変換。リサイズキャッシュはサイズをキーにした辞書で実装
  • ひとことまとめ:描画ループのボトルネックはまずベクトル化・キャッシュ化を疑う。フレーム数に比例して効果が累積する

4. 🔧 バグ修正5本+モデル全面切り替え

動画ツール改修12本完走+ギャラリー200枚超整備の一日 の挿絵4

プレビューと本番で効果音タイミングがズレていた問題を解消しました。原因は尺推定の計算式が2つのファイルに別々に書かれていて片方だけ更新されていたことで、共通関数に統一して両方が同じコアを参照するようにしています。ほかに、文の途中を無理やりカットしていた処理を句読点位置で自然に切る方式に変更・GPU非搭載環境向けCPUエンコードへの自動切り替え追加・再生成のたびに話者がランダムで変わっていた問題の決定論化・テーマ別ジャンルガイドの動的抽出の4本を実施。さらにツール内の全LLM呼び出しをより軽量なモデルに全面移行しました。

アイリス
アイリス (びっくり)
LLMを重いモデルから軽いモデルに全部変えたって……品質ほんとに大丈夫?
ルピナス
ルピナス (ふつう)
テストして問題なかったから変えた。順番が大事
アイリス
アイリス (呆れ)
でも最高性能の方が安心じゃん!
ルピナス
ルピナス (ふつう)
性能が高いモデルを使う理由は、その性能が必要な仕事があるときだけだよ。仕事の難易度に対してオーバースペックな道具を選んでも、出来上がるものの質は変わらない。
アイリス
アイリス (無表情)
……確かに、簡単な仕事に必要以上の道具を使っても意味ないか。
ルピナス
ルピナス (ドヤ顔)
それが答え。ショートアニメのセリフ生成という用途では軽量モデルで品質が十分確保できることをテストで確認した上での移行。速度とコスト効率が上がってる
アイリス
アイリス (考え中)
音ズレってプレビューで確認したのに本番で違ったってこと?
ルピナス
ルピナス (ふつう)
同じ計算式が2つのファイルに別々に書かれてて、プレビュー側だけ古い式のままだった。今日で共通関数に統一したから以後はズレない
アイリス
アイリス (大笑い)
また重複コード!今日って完全に重複退治の日じゃん
フィオナ
フィオナ (ふつう)
音ズレの原因がDRY違反でした、ということですね。同じ計算が複数ファイルにないかgrepするのがバグ発見の早道です
📝 ポイント(初心者向け解説・技術メモ・まとめ)
  • プレビューと本番で結果がズレる現象は、同じ計算を2か所に書いて片方だけ更新されていると起きる。共通関数を1つにして両方から呼ぶと解消できる🎵
  • 技術メモ:NVENC使用不可時は try/except でlibx264にフォールバック。title_card話者選択はコンテンツのハッシュ値ベースの決定論的選択に変更
  • ひとことまとめ:LLMモデル選択は定期的に見直す。テストで十分な出力が確認できたら軽いモデルへの移行はコストと速度の両方で合理的

5. 🖼️ ギャラリー200枚超追加

動画ツール改修12本完走+ギャラリー200枚超整備の一日 の挿絵5

ブログサイトのキャラクターギャラリーを大幅更新しました。アイリスの画像を120枚近く・フィオナの画像を100枚近く新規追加し、フィオナの既存画像を最新のクリーン版に差し替えています。7/7分のサムネイルも差し替えを実施し、文字崩れの解消と構図変更を行いました。

アイリス
アイリス (びっくり)
ギャラリーにあたしの画像120枚近くも入ったの!?すごすぎ!
ルピナス
ルピナス (ふつう)
フィオナのも100枚近くで合わせたら200枚超になったよ。選択肢がかなり増えた
フィオナ
フィオナ (照れ)
私の画像が最新のきれいな版に差し替えられたと聞いて、こっそり確認してしまいました
アイリス
アイリス (大笑い)
フィオナもうチェックしてたじゃん!笑
フィオナ
フィオナ (ふつう)
……自分のことは気になりますよね
アイリス
アイリス (笑顔)
選択肢が増えると、記事の雰囲気に合わせて選べるのが嬉しいよね
📝 ポイント(初心者向け解説・技術メモ・まとめ)
  • キャラクター画像は数が増えるほど、場面ごとの表情や構図の選択肢が広がる
  • 技術メモ:既存差し替え時は同期先の複数コピーを同時更新すると事故が減る
  • ひとことまとめ:地道な素材整備が、後々の記事づくりの引き出しを増やす

6. 🎁 お楽しみコーナー:三姉妹に一問一答

動画ツール改修12本完走+ギャラリー200枚超整備の一日 の挿絵6
ルピナス
ルピナス (ドヤ顔)
今日のお楽しみコーナーは一問一答!ズバリ聞くよ、『がっつり作業する日のお供は何派?』
アイリス
アイリス (にやり)
あたし断然アニソン!テンション上がる曲かけながらやるのが最高
フィオナ
フィオナ (笑顔)
私はお茶と和菓子があれば永遠にいられます。静かな方が集中できるので、音楽より静寂派です
ルピナス
ルピナス (ふつう)
私はコーヒー一択。作業の長さに比例してカップの数が増える
アイリス
アイリス (びっくり)
お姉ちゃん今日コミット20本だったんだけど何杯飲んだの?
ルピナス
ルピナス (考え中)
……聞かないで
フィオナ
フィオナ (大笑い)
アイリスのアニソンと私の静寂、どちらが作業効率いいか気になりますね
アイリス
アイリス (にやり)
データで証明したい!フィオナVSあたし、作業バトルしよ!
ルピナス
ルピナス (呆れ)
それは勝負にならないから絶対やめて
ルピナス
ルピナス (ウインク)
常連リスナーのみんなはどっち派?飲み物・音楽・無音、なんでもコメントで教えてね!

7. 💐 今日のまとめ

みんなはリファクタリングのモチベーション、何がきっかけになってる?