mcpField
G
go-process-cli

go-process-cli

github.com/pproenca開発218107 回インストール11 週間前に更新
リポジトリ

go-process-cli について

プロセスを管理する Go CLI の構築とレビューを支援するスキルです。シグナル、子プロセス、並行処理、コンテキスト、終了コードを扱い、プロセスを確実に起動・監督・終了する Go 開発者向けです。

主な機能

  1. 01SIGINTとSIGTERMの処理
  2. 02子プロセスとプロセスグループの管理
  3. 03並行数の制限とgoroutine漏れの防止
  4. 04コンテキストの伝播とキャンセル
  5. 05終了処理を保ったエラー集約
  6. 06CLIフラグとプロセス監督

活用シーン

  1. 01正常終了に対応するデーモンの実装
  2. 02ジョブランナーやプロセス監督ツールの構築
  3. 03外部コマンドを呼び出すテストハーネスの作成
  4. 04デプロイや移行用CLIの設計

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/pproenca/dot-skills --skill go-process-cli

インストール後、Claude Code で/go-process-cliを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

AGENTS.md
metadata.json
assets/templates/
_template.md
references/
_sections.md
cli-execute-context-wires-signals.md
cli-flag-vs-cobra-by-shape.md
cli-rune-return-errors.md
cli-stdlib-subcommand-pattern.md
ctx-cancellable-wait.md
ctx-defer-cancel.md
ctx-explicit-argument.md
err-join-aggregate-workloads.md
err-run-function-for-deferred-cleanup.md
exec-cancel-sigterm-before-kill.md
exec-commandcontext-binds-lifetime.md
exec-exit-code-from-exiterror.md
exec-kill-process-group.md
exec-pipes-without-deadlock.md
sig-notify-context-for-shutdown.md
sig-second-signal-force-quit.md
state-atomic-pidfile.md
state-reap-children-wait.md
state-signal-zero-liveness.md
state-structured-slog-transitions.md
work-bound-concurrency.md
work-errgroup-fan-out.md
work-every-goroutine-has-exit.md
work-sender-closes-channel.md

詳細

Go のプロセス管理 CLI

プロセスを正しく起動、監視、終了する Go のコマンドラインツールを作成します。標準ライブラリでは簡単に実装できる一方、細かな誤りが起きやすい部分です。

適用する場面

デーモン、プロセススーパーバイザー、ジョブ/ワーカー実行ツール、デプロイまたはマイグレーションツール、外部コマンドを実行するテストハーネスなど、他のプロセスや並行ワークロードを制御する Go CLI を構築またはレビューするときに、このスキルを活用してください。オーケストレーターから停止指示を受けたときに、クリーンに停止する必要があるプログラムも対象です。対象は Unix 系システム(Linux、macOS)上の Go 1.22+ です。いくつかのルールでは Windows との違いにも触れています。Go の知識があることを前提としており、この領域で誤りにつながる特定のデフォルトだけを修正します。

カテゴリ

#カテゴリプレフィックス対象範囲
1シグナルとグレースフルシャットダウンsigコンテキストと SIGINT/SIGTERM の紐付け、2 回目のシグナルによる強制終了
2子プロセスexecos/exec のライフタイム、グレースフルな終了、プロセスグループ、パイプ、終了コード
3並行処理とワークロードworkerrgroup によるファンアウト、並行数の制限、ゴルーチンリーク対策、チャネルの所有権
4コンテキストの伝播ctx明示的なコンテキスト引数、defer cancel()、キャンセル可能な待機
5エラーと終了コードerr遅延クリーンアップのための run() error、エラーの集約
6CLI フレームワークとフラグcli標準ライブラリの flag と cobra、ExecuteContext、RunE、サブコマンドのパターン
7プロセスの状態と監視state生存確認、アトミックな PID ファイル、ゾンビプロセスの回収、構造化ログ

クイックリファレンス

このスキルで修正するデフォルトの動作を示します。

  • signal.NotifyContext(ctx, SIGINT, SIGTERM) — Ctrl-C だけを監視するチャネルではなく、こちらを使います。オーケストレーターは SIGTERM を送信します。
  • exec.CommandContext + cmd.Cancel/cmd.WaitDelay — 通常の CommandContext はクリーンアップせずに子プロセスを SIGKILL で終了させます。
  • Setpgid + kill(-pgid) — 直接の子プロセスだけにシグナルを送ると、孫プロセス(sh -c、make、npm)が孤児になります。
  • キャプチャには cmd.Output() — Wait() の後にパイプを読み取るとデッドロックします。
  • errgroup.WithContext + SetLimit(n) — タスクごとにゴルーチンを作ると、タスクごとに プロセス が作られます。PID/FD が枯渇します。
  • 引数としての ctx — 構造体のフィールドにはしません。派生したすべてのコンテキストで defer cancel() を使います。
  • select { case <-ticker.C: case <-ctx.Done(): } — time.Sleep を使うと、シャットダウン時にインターバルが終わるまで待つことになります。
  • main → run() error → os.Exit(1) — コードの深い場所で log.Fatal/os.Exit を呼ぶと、すべての defer が実行されません。
  • proc.Signal(syscall.Signal(0)) — Unix では os.FindProcess は常に成功するため、プロセスが生存している証明にはなりません。
  • PID ファイルには os.OpenFile(O_CREATE|O_EXCL) — 確認してから作成する方法は競合状態になります。ゾンビ化を防ぐため、すべての子プロセスで cmd.Wait() を呼びます。

使い方

  1. タスクがどのカテゴリに該当するかを確認します(上の表を参照)。
  2. references/ にある該当ルールのファイルを読みます。それぞれのファイルでは、修正対象となる誤ったデフォルトの動作を示した、焦点を絞った自己完結型のパターンを説明しています。
  3. パターンを適用し、各ルールの Reference リンクから信頼できる情報源を確認します。

ルール同士は相互にリンクしています(たとえば、グレースフルシャットダウンはシグナル → コンテキスト → 子プロセスの終了 → クリーンアップと関連します)。複数のカテゴリにまたがるタスクでは、リンク先も確認してください。

このスキルを拡張するときは、assets/templates/_template.md をコピーします。まず WHY を説明し、現実的な名前を使った典型例を 1 つ示します。誤った方法が本当に危険な場合に限り、比較例も加えます。

情報源の信頼性

各ルールでは一次情報源を引用しています。pkg.go.dev の Go 標準ライブラリリファレンス、公式 Go ブログ(go.dev/blog)、および cobra のドキュメントです。いずれもメンテナーが作成した、バージョンが最新の情報源を選んでいます。コンテンツファーム、まとめ記事、日付の記載がないチュートリアルは使用していません。

関連スキル

  • radical-simplification — スーパーバイザーの設計に、意図しない複雑さが積み重なっている場合に使用します。
  • unix-cli/cli-for-agents — プロセス管理以外も含む、より幅広い CLI の使いやすさを扱います。

コメント