概要
mbake はMakefileのフォーマットと検証を自動化するCLIツール。 .PHONY ターゲットの自動検出・挿入や、柔軟な設定ファイルに対応。 VSCode拡張 やCI/CDとの連携もサポート。 プラグインアーキテクチャ による拡張性。 最小限の変更 と一貫性重視の設計思想。
mbake 機能概要
- 設定ファイル(.bake.toml) によるルールの柔軟なカスタマイズ
- CI/CD連携 用のチェックモードを搭載
- プラグインによる拡張性、独自ルール追加が容易
- 進捗表示付きのリッチなターミナル出力
- フォーマット前後の構文検証 で安全性確保
- .PHONYターゲットの自動検出・挿入機能 (動的解析による高精度)
- 最小限の変更でファイル構造を維持
フォーマットルール
- インデント・空白
- レシピ行はタブインデント(tabs推奨)
- 代入演算子(:=, =, +=, ?=)の前後スペース統一
- ターゲット依存関係コロンの前後スペース統一
- 不要な末尾スペース削除
- 行継続
- バックスラッシュ前後のスペース正規化
- シンプルな継続行の結合、複雑なものは保持
- .PHONY宣言
- 複数宣言のグループ化
- 自動挿入(オプション)、既存宣言の強化
- コマンド解析による動的判定
- 既存の宣言のみ変更、ファイル構造保持
インストール方法
- PyPI(推奨)
pip install mbake
- VSCode拡張
- 拡張機能検索で「mbake Makefile Formatter」をインストール
- ソースから
git clone https://github.com/ebodshojaei/bake.gitcd mbakepip install -e .
- 開発用
pip install -e ".[dev]"
使い方
- サブコマンド形式のCLI (
bakeまたはmbakeどちらも可)- バージョン確認:
bake --version - 設定ファイル初期化:
bake init - Makefile整形:
bake format Makefile - 構文検証:
bake validate Makefile
- バージョン確認:
- 設定管理
- デフォルトで
~/.bake.tomlを利用 - カスタムパス指定や上書きも可能
- デフォルトで
- フォーマットオプション
- 複数ファイル対応、差分表示、バックアップ作成、詳細出力、CI/CDチェック
- シェル補完
bake --install-completionで自動インストール
設定例 (~/.bake.toml)
[formatter]
use_tabs = true
tab_width = 4
space_around_assignment = true
space_before_colon = false
space_after_colon = true
normalize_line_continuations = true
max_line_length = 120
group_phony_declarations = true
phony_at_top = true
auto_insert_phony_declarations = false
remove_trailing_whitespace = true
ensure_final_newline = true
normalize_empty_lines = true
max_consecutive_empty_lines = 2
debug = false
verbose = false
スマート.PHONY検出
- コマンド内容の動的解析 でファイル生成有無や頻出パターンを判定
- 例:
docker compose up/downやnpm testなどは phony - 例:
gcc -c myapp.c -o myapp.oは phonyではない
- 例:
- 自動挿入有効化 (
auto_insert_phony_declarations = true)で未記載ターゲットを自動追加
フォーマット前後の例
- 基本整形前
CC:=gcc CFLAGS= -Wall -g SOURCES=main.c \ utils.c \ helper.c .PHONY: clean all: $(TARGET) $(CC) $(CFLAGS) -o $@ $^ .PHONY: install clean: rm -f *.o - 整形後
CC := gcc CFLAGS = -Wall -g SOURCES = main.c utils.c helper.c .PHONY: all clean install all: $(TARGET) $(CC) $(CFLAGS) -o $@ $^ clean: rm -f *.o
CI/CD連携例
- GitHub Actions
- name: Check Makefile formatting run: | pip install mbake bake format --check Makefile - 終了コード
0: フォーマット済みまたは成功1: フォーマット必要または検証失敗2: エラー
開発・拡張
- モジュール・プラグイン構造
bake/cli.py: CLIbake/config.py: 設定管理bake/core/formatter.py: フォーマットエンジンbake/core/rules/: 各種ルールbake/plugins/base.py: プラグインインタフェース
- 独自ルール追加
FormatterPlugin継承でカスタムルール実装
コントリビュート手順
- リポジトリのForkとブランチ作成
- 機能追加や修正、テストの実装
- テスト実行(pytest)
- Pull Request作成
ライセンス・設計思想
- MITライセンス
- 最小限の変更とファイル構造維持
- 一貫性あるフォーマット
- 高速・信頼性重視
- 開発者に優しいCLIとエラーメッセージ