ビルド手順
For the English version, please refer to the Build Instructions page.
このページの内容は開発者の方向けです。
本ページでは、アプリケーションのビルド手順について説明します。
本アプリケーションは PyInstaller を用いてビルドしています。
すでに spec ファイルを用意しているため、以下のコマンドを実行することでアプリケーションをビルドできます。
この処理には時間がかかる場合があります(目安:約10分)。
pyinstaller build.specPyInstaller の詳細な使用方法については、公式ドキュメントを参照してください。
- 現在、ビルドは Windows 環境のみで動作確認しています。将来的に他の OS への対応を検討しています。
- 提供している
specファイルはエラーのない状態ですが、リファクタリングや最適化の余地があります。今後のアップデートで改善していく予定です。 specファイルの詳細については、Using Spec FIles - PyInstaller を参照してください。
PyInstaller を実行する前に、以前のビルド成果物を削除することを推奨します。
Remove-Item -Recurse -Force build, distビルド後の構成
ビルドが成功すると、プロジェクトのルートディレクトリに以下のようなフォルダ構成が生成されます。
project/
├─ build/
└─ dist/
└─ LeafShapeTool/
├─ LeafShapeTool.exe
└─ _internal/
└─ (ライブラリ群)
実行ファイルは次の場所に生成されます。
dist/LeafShapeTool/LeafShapeTool.exeこのファイルをダブルクリックするか、コマンドプロンプトから以下のように実行することでアプリを起動できます。
cd dist/LeafShapeTool/
LeafShapeTool.exeダブルクリックで起動すると、ログやエラーメッセージを表示するためのコンソールウィンドウが開きます。 ただし、実行終了後に自動的に閉じてしまうため、メッセージを確認しづらい場合があります。 そのような場合は、コマンドプロンプトから実行することを推奨します。
安定性を重視し、onefile モードではなく onedir モードでビルドしています。 そのため、dist/LeafShapeTool/ フォルダ全体を配布する必要があります。
LeafShapeTool.exe のみを単体で配布しても、正しく動作しません。
spec ファイルからビルドした場合、Segment Anything Model 2 (SAM2) (Ravi ほか 2024) モジュールはデフォルトで含まれません。
spec ファイルからビルドをした場合、デフォルトでは Segment Anything Model 2 (SAM2) は使用できません。 SAM2 を有効化するには、次節の手順を実行してください。
SAM2 モジュールの有効化
ファイルサイズやビルド時間、依存関係の複雑さを軽減するため、SAM2 フォルダはデフォルトではビルド対象に含めていません。 ただし、Releases ページで配布している実行ファイルには、SAM2 モジュールがあらかじめ含まれています。
手動で SAM2 を有効化する場合は、以下の手順を実行してください。
1. SAM2 リポジトリのクローン
GitHub から SAM2 リポジトリをクローンします。
cd dist/LeafShapeTool/
git clone https://github.com/facebookresearch/sam2.git2. SAM2 チェックポイントのダウンロード
SAM2 モデルを使用するためには、複数のチェックポイントファイルが必要です。
以下のリンクから手動でダウンロードし、sam2/checkpoints/ ディレクトリに配置してください。
モデルの詳細については、次の公式ドキュメントを参照してください。
macOS / Linux、または Bash を使用可能な Windows 環境では、次のコマンドにより自動でチェックポイントを取得できます。
cd checkpoints && \
./download_ckpts.sh && \
cd ..これで、SAM2 モジュールが有効になります。
現状の課題
生成される実行ファイルのサイズが非常に大きくなります。これは、PyInstaller がすべての依存関係を含めるためです。
代替のビルドツールとして Nuitka の使用を検討していますが、Nuitka は PyQt との互換性に課題があり、現時点では正常に動作しませんでした。