Procler 注目
開発者向けLLMファーストプロセスマネージャー。JSON出力CLI、ローカル/Docker両対応、ヘルスプローブ付き依存順序、レプリカ、cronスケジューリング、Vue 3ダッシュボード — 320テスト。
Procler
開発者向けLLMファーストプロセスマネージャー。YAMLでプロセスを定義し、JSON出力CLIまたはVue 3ダッシュボードで管理。ローカルシェルとDockerコンテナを同じコマンドで操作。全出力が構造化JSON。
なぜProcler?
docker compose up と本格的なプロセスマネージャーの間にギャップがある。Composeはコンテナには最適だがローカルシェルプロセスを管理できない。pm2はNode中心。supervisordはroot権限とXML設定が必要。いずれもAIエージェントが消費する設計になっていない。
Proclerはそのギャップを埋める。1つの設定ファイル、1つのCLI、1つのAPI — ローカルプロセスとDockerコンテナの両方に対応。全コマンドが {success, data?, error?, error_code?, suggestion?} 形式の一貫したJSONを返す。LLMエージェントは procler capabilities で全コマンドを発見し、procler config explain で現在の設定を理解し、全てをプログラム的に操作できる。
向いている場面: 開発環境のオーケストレーション、ローカルとコンテナが混在するマルチサービスプロジェクト、AI支援運用、構造化出力がテーブル整形より重要な全ての場面。
クイックスタート
pip install procler # または: uv add procler
# プロジェクト設定を初期化
procler config init
# プロセスを定義して実行
procler define --name api --command "uvicorn main:app --reload"
procler start api
procler status api
procler logs api --tail 20
# または設定ベースのグループ
procler group start backend
設定は .procler/config.yaml — バージョン管理可能、ポータブル、人間が読める。
アーキテクチャ
YAML設定 ──→ ProcessManager ──→ ExecutionContext ──→ Shell / Docker
│
┌──────────┼──────────┐
│ │ │
グループ レシピ ヘルス
(順序付き (マルチ (プローブ +
起動) ステップ) 依存)
│ │ │
└──────────┼──────────┘
│
┌──────┴──────┐
│ │
CLI (Click) API (FastAPI)
JSON stdout REST + WebSocket
Vue 3ダッシュボード
ProcessManager が唯一のコーディネーター。CLIとAPIは同じコアの薄いレイヤー。ExecutionContext は抽象インターフェース — LocalContext はサブプロセスを起動し、DockerContext はDocker SDKを使用。切り替えは設定1行の変更。
機能
JSON出力CLI
全コマンドが構造化JSONを返す。stdoutのパースもテーブル出力の正規表現も不要:
# 全コマンドを発見(LLMエージェントのエントリーポイント)
procler capabilities
# Linux カーネル状態付きの構造化ステータス
procler status api
# {"success": true, "data": {"name": "api", "status": "running", "pid": 12345, ...}}
# 平文での設定説明
procler config explain
ヘルスプローブ&依存関係
プロセスはヘルスチェックを宣言し、他プロセスの特定状態に依存できる:
processes:
api:
command: uvicorn main:app
healthcheck:
test: "curl -f http://localhost:8000/health"
interval: 10s
timeout: 5s
retries: 3
start_period: 30s
worker:
command: celery worker
depends_on:
- name: api
condition: healthy # ヘルスチェック通過を待機
グループ起動は依存順序を尊重。procler group start backend はまずredisを起動し、待機し、apiを起動し、healthyを待ち、それからworkerを起動する。
グループ&レシピ
グループは順序付きプロセス集合。レシピはマルチステップ操作:
groups:
backend:
processes: [redis, api, worker]
stop_order: [worker, api, redis]
recipes:
deploy:
on_error: stop
steps:
- stop: worker
- stop: api
- wait: 2s
- exec: "alembic upgrade head"
- start: api
- start: worker
procler recipe run deploy --dry-run # ステップをプレビュー
procler recipe run deploy # 実行
レプリカ&ネームスペース
プロセスを水平スケール。ネームスペースで環境を分離:
processes:
worker:
command: celery worker
replicas: 3 # worker-1, worker-2, worker-3
namespace: staging
cronスケジューリング
cron式でプロセスをスケジュール:
processes:
cleanup:
command: python cleanup.py
schedule: "0 */6 * * *" # 6時間ごと
エクスポート&インポート
マシン間で設定を移動、チームメイトと共有:
procler config export --output my-stack.json
procler config import my-stack.json
procler config import Procfile # Heroku Procfileからインポート
デュアルコンテキスト: ローカル + Docker
同じコマンド、異なる実行ターゲット:
processes:
api:
command: python main.py
context: local
postgres:
command: postgres
context: docker
container: my-postgres
procler start api はサブプロセスを起動。procler start postgres はDocker SDKを使用。status、logs、start、stopコマンドは両方で同一に動作する。
Linuxプロセス状態
ステータス出力に /proc/[pid]/stat からのカーネルレベル状態を含む:
{
"linux_state": {
"state_code": "D",
"state_name": "disk_sleep",
"is_killable": false
},
"warning": "D状態のプロセスはkillできない"
}
Webダッシュボード
Vue 3 + Naive UIダッシュボード(Cyberpunkテーマ):
| ビュー | 目的 |
|---|---|
| ダッシュボード | 統計、クイックアクション、最近のアクティビティ |
| プロセス | CRUD、ステータスインジケーター、アクション別ローディング |
| プロセス詳細 | ライブログ(検索/フィルター、ストリーム別) |
| グループ | カード型、ワンクリック全起動/停止 |
| レシピ | ステッププレビュー、ドライラン、実行進捗 |
| スニペット | 再利用可能なコマンド管理 |
| 設定 | ステータス、統計、チェンジログビューアー |
キーボードショートカット(? でヘルプ)、WebSocket状態表示、ステータス変更時のトースト通知、ARIAラベルによるアクセシビリティ。
TUIモード
SSH接続やヘッドレスサーバー向けのTextual製ターミナルUI:
pip install procler[tui]
procler tui
分割ペインレイアウト:左にプロセスリスト、右にライブログ。キーボード操作:矢印キーでナビ、s/x/r で起動/停止/再起動、F5 でリフレッシュ、q で終了。
リアルタイム更新
WebSocketでライブログストリーミングとステータス変更通知:
{"action": "subscribe_logs", "process_id": 1}
{"action": "subscribe_status"}
EventBusアーキテクチャ — CLI、API、TUI、ダッシュボード全てが同じイベントを受信。
正直な制限事項
- シングルマシン — 分散プロセス管理はない。1ホスト上のプロセスを管理する。マルチマシンにはKubernetesを使う。
- 自動再起動なし — クラッシュしたプロセスはクラッシュしたまま。ヘルスプローブは検出するが、自動再起動ポリシーは未実装。
- SQLite状態 — ランタイム状態はSQLite。高速でシンプルだが、ホスト間で状態ファイルを共有できない。
- Docker SDK限定 — コンテナ管理はdocker-pyを使用。PodmanやcontainerdではなくDockerのインストールが必要。
- TUIはv1 — 起動/停止/再起動アクション、エラー状態、リフレッシュループは完全にテストされていない。監視には使えるが、操作にはまだ粗い部分がある。
はじめる
pip install procler # または: uv add procler
pip install procler[tui] # オプションのTUIモード
Python 3.12+ · Dockerはオプション(コンテナコンテキストのみ必要)。
uv run pytest tests/ -v # 320テスト
procler capabilities # 全コマンドを発見
procler config init # プロジェクトを初期化
English: Read this project in English