Rust GUIアプリケーション開発・パッケージ化 作業手順書

1. 概要

本手順書は、macOS環境においてRust言語および eframe (egui) ツールキットを使用したGUIアプリケーション(Pitch Perfect Player)の開発環境構築から、Mac標準の .app バンドル作成、独自アイコンの設定までの全工程を記載したものです。

2. 前提条件・環境

  • OS: macOS

  • ツール: ターミナル (Terminal)

3. Rust開発環境のセットアップ

3.1 RustコンパイラおよびCargoのインストール

ターミナルを開き、公式インストーラーを実行します。

Bash

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

画面の指示に従い、1(デフォルト設定)を選択して進めます。

3.2 環境変数の反映と動作確認

現在のシェルに設定を反映させるか、ターミナルを再起動します。

Bash

source "$HOME/.cargo/env"

正常にインストールされたかバージョンを確認します。

Bash

rustc --version
cargo --version

4. プロジェクトの作成と構成

4.1 新規プロジェクトの作成

作業用ディレクトリで以下のコマンドを実行し、新規プロジェクトを生成します。

Bash

cargo new pitch_perfect_player
cd pitch_perfect_player

4.2 ディレクトリ構成

最終的なディレクトリ構成は以下のようになります。

Plaintext

pitch_perfect_player/
 ├─ Cargo.toml
 ├─ player_config.json   (実行時に自動生成される設定ファイル)
 ├─ assets/
 │   └─ icon.icns        (独自アイコンファイル)
 ├─ src/
 │   └─ main.rs          (メインソースコード)
 └─ target/              (コンパイル生成物)

5. 依存ライブラリ(Cargo.toml)の設定

Cargo.toml を開き、必要なパッケージおよびMacアプリ化用の設定を記述します。

Cargo.toml 全文

Ini, TOML

[package]
name = "pitch_perfect_player"
version = "0.1.0"
edition = "2021"

[dependencies]
rodio = { version = "0.19", features = ["mp3"] }
soundtouch = "0.5.4"
eframe = "0.29.1"
rfd = "0.15"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

[package.metadata.bundle]
name = "Pitch Perfect Player"
identifier = "com.tsm_tester.pitchperfect"
version = "1.0.0"
icon = ["assets/icon.icns"]

※ macOSの仕様変更に伴うパニックエラーを避けるため、eframe は 0.29.1 以上を指定します。

6. アプリケーションの実装

src/main.rs を編集し、プログラム本体を実装します。

主な機能仕様:

  • SoundTouch を用いた音程変更のない速度変更(タイムストレッチ)

  • rodio を用いた音声再生とオンメモリデコードによる遅延なしシーク

  • eframe (egui) によるGUI構築

  • rfd によるファイル選択ダイアログ

  • serde による前回開いたファイル・フォルダ・設定の自動保存

7. 動作確認とビルド手順

7.1 デバッグ実行(開発時)

依存パッケージを取得し、テスト実行します。

Bash

cargo update
cargo run

7.2 リリースビルド(最適化実行ファイルの作成)

処理速度を最適化した単体の実行ファイルを生成します。

Bash

cargo build --release
  • 生成物: target/release/pitch_perfect_player

8. Mac用 .app バンドル化(ターミナル非表示化)

Finderから実行した際にターミナルが同時に起動するのを防ぐため、Mac標準の .app 形式に変換します。

8.1 バンドルツールのインストール(初回のみ)

Bash

cargo install cargo-bundle

8.2 アイコンファイル(.icns)の準備

  1. 正方形の画像(1024×1024推奨、透過PNG)を用意します。

  2. 画像変換サービス等を利用して、.icns 形式に変換し、ファイル名を icon.icns にします。

  3. プロジェクト直下に assets フォルダを作成し、配置します。

    Bash

    mkdir -p assets
    # assets/icon.icns としてファイルを配置
    

8.3 バンドルビルドの実行

Bash

cargo bundle --release
  • 最終生成物: target/release/bundle/osx/Pitch Perfect Player.app

9. 運用・配備

  1. target/release/bundle/osx/ に生成された Pitch Perfect Player.app を、「アプリケーション」フォルダやデスクトップなど任意の場所に移動します。

  2. ダブルクリックで起動し、ターミナルが開かずに単体アプリとして動作することを確認します。

※ アイコンが反映されない場合の対応(macOSのキャッシュ対策)

ビルド後にFinder上でアイコンが更新されない場合は、.app ファイルを別のフォルダ(例: ディレクトリ間を移動させる)へ動かすと、OSのアイコンキャッシュが更新されて即座に反映されます。

10. トラブルシューティング

症状 原因 対策
invalid message send ... NSScreen countByEnumeratingWithState でパニック終了する macOSアップデートによる内部型情報(objc2/winit)の不一致 Cargo.toml の eframe バージョンを 0.29.1 以上に上げて cargo update を実行する
warning: use of deprecated method ... の警告が出る APIの名称変更(例: drag_released から drag_stopped への変更) 警告の指示に従いコード内のメソッド名を更新するか、cargo fix --bin "pitch_perfect_player" --allow-dirty を実行する

コメント

タイトルとURLをコピーしました