最近 Firepit というモノレポ向けのタスクランナーを作っています。
こういう TUI (Terminal User Interface) を備えたCUIツールです。
- 複数タスクのログを分けて見れる
- 各タスクとは標準入力でインタラクション可能
- ヘルスチェックを備えたサービス管理(Docker Compose っぽい)
- マウス操作対応
などの機能をウリにしています。
モノレポ管理ツールを導入するにあたり Turborepo, Wireit, Taskfile などを検討していたんですがどうもしっくり来ず、自分で作るに至りました。
ちなみにTurborepoのソースコードをパクっているのでTUIがTurborepoっぽいのは仕様です。
設定ファイルはYAML形式で、こちらは Taskfile や Docker Compose っぽい感じです。
既存ツールとの比較
| Process Compose | Turborepo | Wireit | Moonrepo | Task | Firepit | |
|---|---|---|---|---|---|---|
| モノレポ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
| サービス管理 | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ |
| 多言語対応 | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ |
| イケてるTUI | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ |
| シンプル | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ |
| インタラクション | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ |
| Watchモード | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
- モノレポ
- モノレポに無理なく統合できるか
- ディレクトリをまたいでタスクの依存関係を定義できるか
- サービス管理
- サービス: devサーバーやDBコンテナのように動作しつづけるプロセス
- Readiness Checkを備え、依存タスクとして設定できるか
- 多言語対応
- 複数言語のパッケージを混在させることができるか
- JS/TS以外も扱えると良い
- イケてるTUI
- イケてるTUIがついてて気分がアガるか
- ログが見やすかったりタスクの停止・再起動などの操作ができると良い
- シンプル
- CLIのコマンドや設定ファイルは単純で理解しやすいか
- 複雑さを過度に隠蔽していないか
- インタラクション
- ユーザーのキー入力を求めるタスクに対応しているか
- Watchモード
- ファイルの変更を検知してタスクを再起動することはできるか
インストール
コマンド一発でインストールできます。
curl -LsSf https://github.com/kota65535/firepit/releases/latest/download/firepit-installer.sh | sh
Mise を使っている場合はGitHubバックエンドを使って入れるのがおすすめです。
[tools]
"github:kota65535/firepit"= "latest"
基本的な使い方
こういう風に設定ファイルを書いて
tasks:
# タスク名
hello:
# 実行したいコマンド
command: npx -y cowsay "hello,firepit"
以下のコマンドで hello タスクを実行します。
fire hello
こんな感じです。かわいいいですね。
q キーを押すとTUIから抜けて終了します。このとき各タスクのログがまとめて表示されます。
% #hello (Finished - Success, Restart: 0/0, Reload: 0, Elapsed: 1s)
_______________
< hello,firepit >
---------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
どういう使い方をしているか
例えば弊社のモノレポでフロントエンドのE2Eテストを実行しようとすると、少なくとも以下のタスクを実行する必要があります。
- Playwrightを含めたパッケージインストール
- MySQL DBコンテナの起動(サービス)
- Prisma Migrate によるDBマイグレーションの実行
- Prisma クライアントコード生成
- バックエンドdevサーバーの起動(サービス)
- バックエンドOpenAPIスキーマからクライアントコード生成
- フロントエンドdevサーバーの起動(サービス)
- Playwright実行
これらの一連のタスクをヘルスチェックで起動完了を確認しつつ順番に、時には並列に実行しなければなりません。
大抵のタスクランナーはタスクを「実行が完了するプロセス」という前提のため、動作し続けるサービスは単に「まだ完了していないタスク」と見なしてしまいます。
Firepitはタスクランナーである一方、Docker Composeのようなヘルスチェックを備えたサービス管理ツールでもあるため、このようなケースも問題なく扱うことができます。
まとめ
- Firepit というモノレポ向けのタスクランナーを作ったよ
- ドキュメントも充実してるよ
- 良かったら使ってみてね!

