AIと一緒に、1週間分の写真と動画をまとめるCLIツールを作った話

こんにちは、yukiです。

今日は、ここしばらく取り組んでいた個人開発について振り返ってみます。
テーマは 「1週間分の写真・動画からスライドショー動画を自動生成するCLIツール」 です。

娘の写真や動画を毎日のように撮っていると、データは自然と溜まっていきます。
週末に見返すのは楽しい一方で、「毎週1本の動画にまとめたいけど、手作業は正直つらい」という気持ちもありました。
そこで、CLI一発で週次動画を生成できる仕組みを自分で作れないか、というのが今回の動機です。

あわせて、生成AIやコード補完ツールと一緒に、設計から実装、デバッグまでどこまで実用的なものが作れるのかを試したかった、というのも大きな理由でした。

この記事で書いているツールは、最終的に以下のリポジトリとして公開しました。

👉 https://github.com/yukimomo/weekly-slideshow-engine

コードを見たい方、READMEから全体像を把握したい方は、こちらもあわせて見てもらえると嬉しいです。


何を作ったのか(完成イメージ)

作ったのは、ざっくり言うと次のようなCLIツールです。

  • OneDrive上の写真・動画フォルダをスキャン

  • 指定したISO週(例: 2026-W04)に該当するデータを抽出

  • 撮影日時順にタイムラインを作成

  • 写真・動画を混在させたスライドショー動画を自動生成

「今週分まとめて動画にしたいな」と思ったら、

 
weekly-slideshow render 2026-W04 --preset youtube

のようなイメージで実行できるところまでをゴールにしました。


技術スタック

今回使った主な技術要素は以下です。

  • Python 3.11

  • venv による仮想環境

  • MoviePy + ffmpeg(動画生成)

  • EXIF 情報取得(撮影日時)

  • pytest(スモークテスト / E2E)

  • GitHub Actions(CI)

あくまで個人ツールですが、「壊れても直せる」「後から触っても思い出せる」構成を意識しました。


開発の進め方(AIとの協業)

進め方で特に意識したのは、Issue単位・タスク単位で指示することです。

いきなり「全部作って」ではなく、

  • CLIプロジェクトの雛形を作る

  • scan → timeline → render の責務を分ける

  • ISO週から日付範囲を計算する関数を作る

といった形で、かなり細かく区切りました。

その都度、
「この関数の責務はここまで」
「この入力と出力を保証したい」
と前提を明示して相談すると、設計レビュー役としてかなり頼りになります。

結果的に、一人で書いている感覚よりも、常に壁打ち相手がいる状態で進められました。


パイプライン設計の話

全体は、次の3ステップに分けました。

  • scan

    • OneDrive上の YYYY-MM-DD フォルダを走査

    • 写真・動画を列挙

    • EXIFから撮影日時を取得(なければmtimeでフォールバック)

  • timeline

    • ISO週から対象日付範囲を算出

    • 撮影日時順に並べる

    • 写真・動画を同じ構造体で扱う

  • render

    • MoviePyでクリップ生成

    • 解像度・レイアウトを指定して書き出し

この分割のおかげで、「スキャンだけ」「タイムラインだけ」を単体でテストしやすくなりました。


詰まったポイントと解決

MoviePy / ffmpeg 周りのトラブル

一番時間を使ったのは、正直ここです。

  • MoviePyのバージョン差でAPIが微妙に違う

  • ffmpegが部分インストール状態で謎エラー

  • Windows特有のパス問題

エラーを一つずつ切り分けていく中で、
「環境構築もコードの一部だな」と強く感じました。

最終的には、

  • 明示的なバージョン固定

  • 起動時にffmpegの存在チェック

  • CIで最低限の動画生成テスト

を入れて、かなり安定しました。


縦横混在レイアウト問題

写真と動画を混ぜると、どうしても表示が崩れます。

最初は単純に中央配置していましたが、縦写真が小さくなりすぎました。

そこで、

  • 背景に写真を拡大+ぼかしで敷く

  • 前面に元画像をアスペクト比維持で配置

というレイアウトに変更しました。

これだけで「それっぽさ」が一気に上がり、家族で見返す動画としてかなり満足度が高くなりました。


テストとCIを最初に入れてよかった話

最初期から pytest と GitHub Actions を入れていたのは、本当に正解でした。

  • レイアウト修正で既存処理を壊してもすぐ気づける

  • AIに「このテストを通す形で修正して」と頼める

  • 気軽にリファクタリングできる

精神的な負担がかなり減ります。
趣味開発でもテスト、大事ですね。


実際に動かしてみた感想

初めて 1週間分の写真と動画が1本の動画として書き出された瞬間は、素直に嬉しかったです。

「ちゃんと使えるものができたな」という感覚がありました。

それ以上に印象的だったのは、
これはもう一人で作ったとは言えないな、という不思議な感覚です。

設計も実装もデバッグも、常に対話しながら進めていました。
一人開発なのに、孤独感がほとんどなかったのが新鮮でした。


まとめ

今回の開発を通して感じたのは、

  • 小さく動くものを積み上げる重要性

  • テストとCIがあると本当に楽

  • 趣味 × 実用 × AI は相性がいい

ということでした。

自分や家族のために作ったツールが、
結果的に技術的にも学びの多いプロジェクトになりました。

もし、写真や動画が溜まりがちな人、
AIと一緒に何か作ってみたい人がいたら、
ぜひ「自分の生活に直結するツール」から作ってみてください。

今回のリポジトリも、その一例として置いておきます。

👉 https://github.com/yukimomo/weekly-slideshow-engine

それでは、また。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)