ソースコードのフォルダを指定するだけで、ビルド方式(CMake / Meson / Autotools / Make / Cargo / npm / Python / Gradle / Maven)を自動検出し、GUIでビルドを実行する ツールです。ビルドログはリアルタイムでウィンドウに表示されます。
さらに、ビルドが失敗したときはログを解析し、apt-file を使って
「足りていなさそうなDebianパッケージ」の候補を自動で探し、確認の上で
インストール→ビルド再試行までを行います。
Debian(trixie)の場合、PySide6はモジュールごとにパッケージが分かれているので、 このアプリで使っている分をまとめて入れます。
sudo apt update
sudo apt install python3-pyside6.qtcore python3-pyside6.qtgui python3-pyside6.qtwidgetsまた、ビルド対象のプロジェクトに応じて、ビルドツール本体も別途必要です。 最低限、汎用的なビルドに必要なものは以下でまとめて入ります。
sudo apt install build-essential cmake meson ninja-build autoconf automake libtool(Rust製プロジェクトなら別途 cargo、Node.js製なら npm が必要です)
(pip を使う場合は pip install --user PySide6 でも動きます)
ビルド失敗時に足りないパッケージを自動で探せるように、apt-file も
入れておくことをおすすめします。
sudo apt install apt-file
sudo apt-file updateapt-file update は一度実行しておく必要があります(パッケージが含む
ファイルの一覧をダウンロードするコマンドです)。これを実行していないと、
このツールは「apt-fileが見つからない」または「候補が見つからない」と
表示し、自動検索をスキップします。
また、パッケージのインストールには pkexec を使って管理者権限を求めます。
KDE(CachyOSと同じ環境)や GNOME など、通常のデスクトップ環境であれば
Polkit認証エージェントが標準で動いているため、GUIのパスワード入力
ダイアログがそのまま表示されます。
このフォルダを好きな場所に置いて、ターミナルから:
cd buildlauncher
python3 main.py- 「フォルダを選択...」でビルドしたいソースコードのフォルダを選ぶか、 zip/tar.gzのままなら「圧縮ファイルを開く...」で直接指定します (詳しくは次の項目)
- ビルド方式が自動検出されて、そのまま自動的にビルドが始まります (「検出できたら自動的にビルドを開始する」のチェックを外せば、 検出だけ行って「ビルド開始」ボタンを押すまで待つようにできます)
- ログ欄に出力がリアルタイムで流れます
- 成功すると「成功」、失敗すると「失敗」とステータスが表示されます
- 「ログを保存」でログをテキストファイルとして保存できます
フォルダや圧縮ファイルの直下にビルド設定(CMakeLists.txt や Makefile など)が無い場合、自動的に数階層下まで探しに行きます。
- 候補が1つに絞れた場合は、そのままそこを使って自動的にビルドが 始まります(いちいちフォルダの中に手で入っていく必要はありません)
- 候補が複数見つかった場合は、選択肢が表示されるので、 ビルドしたいものを選んでください
- それでも見つからない場合は、今まで通り「自動検出できませんでした」 と表示されます。手動でビルド方式を選ぶか、正しいフォルダを 直接指定してください
ダウンロードした .zip や .tar.gz を手動で展開しなくても、
「圧縮ファイルを開く...」ボタンから直接指定できます。
- 対応形式:
.zip.tar.gz.tgz.tar.bz2.tar.xz.tar - 圧縮ファイルと同じ場所に、ファイル名(拡張子抜き)のフォルダを 作って展開します
- 展開したフォルダの中身がさらに1つのフォルダに包まれているだけの 場合(GitHubの「Download ZIP」でよくあるパターン)や、数階層下に ソースコードが入っている場合も、上記の「選んだフォルダの直下に 見つからない場合」の仕組みで自動的に探し出します
- 展開先のフォルダが既にある場合は、削除して展開し直すか、 既存のものをそのまま使うか選べます
はい、シミュレーションではなく実際のコンパイルです。たとえば
Makefileのプロジェクトなら make コマンドを、CMakeのプロジェクトなら
cmake → 内部で呼ばれる gcc/g++ を、それぞれこのツールが裏側で
実行しています。表示されているログは、実際にコンパイラ・リンカが
出力した内容そのものです。
コンパイルしただけでは、アプリケーションメニューには何も登録されません
(それをするには別途インストール作業が必要です)。できあがった実行
ファイルは、プロジェクトフォルダの中(CMakeなら build/ フォルダの
中など)に置かれるだけです。
このツールはビルドが成功すると、新しく作られた実行可能ファイルを 自動で探し、「実行」ボタンを押せるようにします。見つかったら そのまま押すだけでアプリが起動します。
- 実行ファイルが1つに絞れれば、そのまま起動します
- 複数見つかった場合は、選択肢が出ます
- 何も見つからなかった場合は「実行」ボタンは押せないままです (npmやPythonのプロジェクトなど、単体の実行ファイルを作らない ビルド方式もあります)
- ターミナルで動くタイプのプログラム(CUIアプリ)の場合、「実行」で
起動しても入出力用のターミナル画面が無いため何も表示されません。
その場合はターミナルを開いて手動で実行してください
(例:
./mini-edit-cli ファイル名.txt)
ビルドが失敗すると、自動でログを解析し、apt-file を使って
足りていなさそうなパッケージの候補を検索します。
- 候補が見つかった場合、「不足している依存パッケージの候補」という ダイアログが開きます。インストールしたいものにチェックが入った状態で 表示されるので、必要に応じて調整し「インストールして再ビルド」を押します
- パスワード入力(Polkit認証)を求められたら入力してください
- インストールが成功すると、自動的にビルドが最初からやり直されます
- 候補が見つからなかった場合や、ダイアログでキャンセルした場合は、 通常通り「失敗」のまま止まります。ログを見て手動で対応してください
| 検出ファイル | ビルド方式 |
|---|---|
| CMakeLists.txt | CMake |
| meson.build | Meson |
| Cargo.toml | Cargo(Rust) |
| build.gradle / build.gradle.kts | Gradle |
| pom.xml | Maven |
| package.json | npm |
| pyproject.toml / setup.py | Python |
| configure / configure.ac | Autotools |
| Makefile | Make |
- ビルドログを正規表現でパターンマッチングして「足りていなさそうなもの」
(ヘッダファイル・コマンド・pkg-config/Mesonの依存関係・共有ライブラリ・
CMakeモジュール・Pythonモジュール)を推測し、
apt-file searchで 対応しそうなパッケージ名を検索しています。あくまで推測なので、 不要なパッケージが候補に混ざることや、逆に検出できないケースも あります。最終的にインストールするかどうかは必ずダイアログで確認します。 - 検索結果のうち、既にインストール済みのパッケージは候補から除外します (それが原因ではないと分かっているため)。
apt-file searchは数秒〜十数秒かかることがあり、その間GUIの応答が 一時的に遅くなります(バックグラウンドスレッド化は今後の改善候補です)。- 一度のビルド失敗につき、依存解決→再ビルドは1往復です。 再ビルドでまた別のパッケージが足りないことが分かった場合は、 もう一度同じダイアログが表示されます。
- CMakeの
find_package(PkgConfig REQUIRED)が失敗するケース (Could NOT find PkgConfig)は、実際には「.cmakeファイルが無い」 のではなく「pkg-configコマンド自体が入っていない」ことが原因の 場合がほとんどなので、特別にpkg-configコマンドを検索するように しています。
buildlauncher/
├── main.py # 起動スクリプト
├── core/
│ ├── detector.py # ビルド方式の自動検出ロジック
│ ├── builder.py # ビルド方式ごとのコマンド手順の定義
│ ├── dependency_resolver.py # ログ解析 + apt-file による依存パッケージ推測
│ └── archive_extractor.py # zip/tar圧縮ファイルの展開ロジック
└── ui/
├── main_window.py # GUI本体(PySide6)
└── dependency_dialog.py # 依存パッケージ確認ダイアログ