さとまたwiki
検討可

Rust + egui + FFmpeg

単一バイナリ配布が必要な場合の選択肢

このアプローチを選ぶべき場合

単一の実行ファイル(.exe)として配布したい場合に検討してください。 ユーザーにPythonをインストールさせたくない場合に有効です。

メリット

  • ・ 単一バイナリで配布可能
  • ・ 依存関係なし(FFmpeg以外)
  • ・ 高パフォーマンス
  • ・ Windows/Linux/macOS対応
  • NEW: コンパイラ = 自動レビュー

デメリット

  • ・ Claude Code処理がPythonより遅い(85.4% vs 92.3%)
  • ・ コード量が多くなりがち
  • ・ Rustコンパイル時間が長い(初回2-5分)
  • ・ Rust学習コスト

2025年の新しい見解

Anthropic社の研究者は「Rustは大規模タスクでAIを監視なしで動作させるのに適している」と述べています。 Rustのコンパイラが自動的にエラーを検出するため、AIが生成したコードの品質保証が自動化されます。

Pythonでは「見た目は正しいが本番で失敗する」コードをAIが生成するリスクがありますが、 Rustでは「コンパイルが通れば大抵動く」という安心感があります。

eguiとは

egui(イーグイ)は、Rust用の即時モードGUIライブラリです。 DearPyGuiと同じく、シンプルなAPIで高速なUIを構築できます。

即時モードGUI

毎フレームUIを再描画する方式。状態管理がシンプル。

クロスプラットフォーム

Windows, Linux, macOS, Webに対応。

Pure Rust

C/C++依存なし。Rustのみで動作。

参考プロジェクト

ffmpeg_gui

egui + RustでFFmpeg GUIを実装した例。学習用に最適。

door_player

egui + FFmpegで動画プレーヤーを実装。動画表示の参考に。

最小構成の例

// Cargo.toml
[dependencies]
eframe = "0.24"
egui = "0.24"

// main.rs
use eframe::egui;
use std::process::Command;

fn main() {
    let options = eframe::NativeOptions::default();
    eframe::run_native(
        "Video Editor",
        options,
        Box::new(|_cc| Box::new(MyApp::default())),
    );
}

struct MyApp {
    input: String,
    output: String,
    start: f32,
    end: f32,
}

impl Default for MyApp {
    fn default() -> Self {
        Self {
            input: "input.mp4".to_string(),
            output: "output.mp4".to_string(),
            start: 0.0,
            end: 10.0,
        }
    }
}

impl eframe::App for MyApp {
    fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
        egui::CentralPanel::default().show(ctx, |ui| {
            ui.heading("Video Editor");
            ui.text_edit_singleline(&mut self.input);
            ui.add(egui::Slider::new(&mut self.start, 0.0..=100.0).text("Start"));
            ui.add(egui::Slider::new(&mut self.end, 0.0..=100.0).text("End"));

            if ui.button("Cut").clicked() {
                Command::new("ffmpeg")
                    .args(["-i", &self.input, "-ss", &self.start.to_string(),
                           "-to", &self.end.to_string(), "-c", "copy", &self.output])
                    .spawn()
                    .expect("FFmpeg failed");
            }
        });
    }
}

Claude Codeでの開発上の注意

コンパイル時間を考慮

Rustは初回ビルドに2-5分かかる。増分ビルドでも30秒-2分。 小さな変更を試すサイクルが遅くなる。

ファイルを分割

main.rsが大きくなりすぎないよう、モジュールに分割。 Claude Codeは小さなファイルの方が処理しやすい。

Pythonより遅くなる覚悟

Claude Codeの処理速度はPythonの半分程度になる可能性がある。 本当に単一バイナリが必要か再検討を。

この記事はClaude Opus 4.6によって作成されました