cfgd について
cfgdは、マシン全体の設定を宣言的に管理するコマンドラインツールです。複数のマシンやプラットフォームで設定を再利用する開発者やプラットフォームチーム向けに、プロファイル、共有モジュール、継続的な調整機能を備えています。
主な機能
- 01パッケージ・ファイル・システム設定の宣言
- 02継承によるプロファイルの構成
- 03クロスプラットフォーム対応モジュールの作成と共有
- 04設定のずれの継続的な検出と修正
- 05MCPサーバー経由でCLI操作を提供
活用シーン
- 01新しいマシンでの開発環境の構築
- 02仕事用と個人用マシンの設定同期
- 03ポリシー付き設定のチーム配布
- 04AIエージェントによるマシン状態の調整
MCP 対応
cfgdはCLI操作をツールとしてAIエージェントやエディターに公開するMCPサーバーを提供します。設定作成向けの別のMCPサーバーもあります。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/tj-smith47/cfgd:0.12.0ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/tj-smith47/cfgd:0.12.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
cfgd
構成可能なプロファイルと共有可能なクロスプラットフォームモジュールを使って、パッケージ、ドットファイル、システム設定、シークレットなど、マシン全体を宣言的に管理できます。
Neovim も Homebrew も設定もない、素の ubuntu:24.04 コンテナーです。cfgd init を実行すると、nvim で完全に設定された LazyVim が開きます。VHS で録画しました。
ステータス: アルファ版です。API は変更される場合があります。
cfgd とは
ほとんどのドットファイル管理ツールはファイルを追跡します。cfgd はマシン全体を管理します。バージョン管理された YAML で、パッケージ、ファイル、シークレット、システム設定を宣言します。cfgd は望ましい状態と現在の状態を比較し、計画を作成して、継続的に調整します。設定にずれが生じた場合は検出し、修正します。
仕組み
プロファイルでは、パッケージ、ファイル、システム設定など、マシンの望ましい状態を宣言します。継承によってプロファイルを組み合わせられるため、複数のマシンで共通のベースを共有し、用途ごとに調整できます。docs/profiles.md をご覧ください。
base
╱ ╲
work personal
╱ ╲
laptop devcontainer
モジュールは、共有可能で独立した設定パッケージです。他の人の開発環境をインストールしたり、自分の環境を公開したりできます。クロスプラットフォームのパッケージ解決により、適切なパッケージマネージャーが自動で選択されます。docs/modules.md をご覧ください。
調整によって、マシンが宣言された状態と一致するよう継続的に保ちます。ずれは検出され、報告され、必要に応じて自動修正されます。アクションが失敗しても処理は中断されず、ログに記録してスキップされます。docs/reconciliation.md をご覧いただくか、デーモンを通じて2台のマシンが収束する様子をご覧ください。
クイックスタート
# Install via Homebrew
brew install tj-smith47/tap/cfgd
# Or via install script
curl -fsSL https://github.com/tj-smith47/cfgd/releases/latest/download/install.sh | sh
# Or via cargo
cargo install cfgd
# Bring your config to a new machine in seconds
cfgd init --from [email protected]:you/machine-config.git
# Or start fresh
cfgd init
# Or let AI scan your system and generate config for you
export ANTHROPIC_API_KEY=sk-...
cfgd generate
# Set up shell completions (add to your shell's rc file)
source <(cfgd completion bash) # .bashrc
source <(cfgd completion zsh) # .zshrc
cfgd completion fish | source # config.fish
cfgd が存在する理由
最近転職し、前の職場での最終週は、スクリプトや dotfiles をバックアップし、会社固有の情報を取り除いて、引き継ぎ用の tarball を作成して過ごしました。新しい職場では、新しいマシンを再設定するのにさらに数日かかりました。その後も、忘れていたものや、バックアップ対象に含めておけばよかったと思うもの(たとえば「システム設定」)が次々と見つかりました。すべて手作業で、不完全に感じました。リポジトリをクローンするだけで、ワークステーション全体(パッケージ、スクリプト、dotfiles、システム設定)を以前と同じように使えるようにしたいのです。さらに、自宅と職場のノート PC 間で、その状態の一部を同期できると理想的です。
もう一つのきっかけは devcontainers でした。前の会社では、ユーザーがシェルに入った後で開発環境を再現できるよう、dotfiles を devcontainer に注入するカスタムスクリプトを設定していました。最低限、チームの各リポジトリの devcontainer 設定を変更して対応しなくても、あらゆる一時的なコンテナで Neovim の環境一式を使えるようにしたいと思っていました。作業対象がどのリポジトリであっても、外部からあらゆる環境に自分の設定をブートストラップできるものが必要でした。それに、vim のモーションの優位性について教える必要がある同僚もいたので、エイリアスまで含めて自分とまったく同じ設定を手軽に共有する方法がほしかったのです。
cfgd は、さまざまな手法から優れたアイデアを取り入れています。
- Kubernetes:宣言的な調整ループ、KRM リソースモデル
- Terraform:計画/適用のワークフロー、状態の追跡、ドリフト検出
- Puppet:デーモンによる継続的な適用、モジュールのエコシステム
- Nix:単一の信頼できる情報源から再現可能なマシンの状態を構築
- Ansible:YAML 駆動の構成管理、冪等なタスク実行
- Kustomize:階層化されたオーバーライドとパッチ
- chezmoi:dotfiles 管理
共有可能なモジュール
これが一番気に入っている機能です。どこでも使える、ツール用の単一パッケージ化設定です。
cfgd module create my-dev-env
cfgd profile update --module community/nvim
モジュールでは、クロスプラットフォームで解決されるパッケージ、設定ファイル、シェル環境変数とエイリアス、ライフサイクルスクリプトを宣言します。
apiVersion: cfgd.io/v1alpha1
kind: Module
metadata:
name: nvim
description: Neovim editor configuration
spec:
depends: [node, python]
packages:
- name: neovim
minVersion: "0.10"
prefer: [brew, snap]
deny: [apt]
- name: ripgrep
- name: fd
aliases:
apt: fd-find
dnf: fd-find
- name: gcc
aliases:
apt: build-essential
dnf: "@development-tools"
platforms: [linux]
files:
- source: files/init.lua
target: ~/.config/nvim/init.lua
- source: files/lua
target: ~/.config/nvim/lua
env:
- name: EDITOR
value: nvim
aliases:
- name: v
command: nvim
scripts:
postApply:
- nvim --headless '+Lazy! sync' '+MasonToolsInstallSync' +qa
git のファイルソース、レジストリ、依存関係の解決を含む完全な仕様については、docs/modules.md をご覧ください。
cfgd の比較
| cfgd | chezmoi | Nix Home Manager | Ansible | Puppet | |
|---|---|---|---|---|---|
| 対象 | マシン全体の状態 | dotfiles | dotfiles+パッケージ(Nix) | 汎用的な自動化 | サーバー/インフラの状態 |
| パッケージ | 18 種類のマネージャー | なし | Nix のみ | 任意(タスク経由) | 任意(プロバイダー経由) |
| ドリフト検出 | 継続的(デーモン) | 手動 | 再ビルド時 | 手動 | 継続的(エージェント) |
| クロスプラットフォームでの解決 | パッケージマネージャーごとのマッピング | 該当なし | Nix のみ | タスクごとの条件分岐 | OS ごとの Hiera データ |
| 共有可能なモジュール | 標準機能 | テンプレートのみ | Flakes | ロール(Galaxy) | Forge(サーバー向け) |
| チーム設定 | ポリシー階層+Crossplane | 該当なし | Flake 入力 | 該当なし | Puppet Enterprise |
| インフラ | 単一バイナリ、サーバー不要 | 単一バイナリ | Nix デーモン | SSH(または AWX) | PuppetServer+PuppetDB+CA |
| 学習曲線 | YAML+CLI | Go テンプレート | Nix 言語 | YAML+Jinja2 | Puppet DSL(Ruby) |
思想面で最も近いのは Puppet です。宣言的な状態、継続的な適用、モジュールのエコシステムを備えています。このモデルに共感する一方で、JVM サーバーを立ち上げたり、2026 年に dotfiles を管理するために Ruby 時代の DSL を書いたりする気にはなれないなら、cfgd はそのアイデアを開発者のワークステーション向けにゼロから作り直したものです。
cfgd は、クロスプラットフォームのマシンをワンライナーでブートストラップしたい場合、共有可能な開発環境モジュールが必要な場合、マシン間または登録済みソースとの継続的な調整を行いたい場合、あるいはポリシー適用を伴うチーム設定の配布をしたい場合に適しています。
特長
開発者向け:
- ワンコマンドでの初期セットアップ:新しいマシンで
cfgd init --from <repo> --applyを実行します - AI によるガイド付き生成:
cfgd generateがシステムをスキャンしてプロファイル/モジュールを作成します。AI エディター連携用の MCP サーバーも利用できます - MCP サーバー:
cfgd mcpは CLI 自体をツールとして提供するため、アシスタントはマシンの設定を書くだけでなく、マシンの状態を望ましい状態に調整できます - オーサリングスキル:
cfgd skill installでコーディングエージェント(Claude Code、Gemini、Copilot、Codex、Cursor)に高品質な cfgd リソースの作成方法を習得させます - 共有可能なモジュール:依存関係の解決とレジストリに対応した、クロスプラットフォームの開発環境パッケージ
- 18 種類のパッケージマネージャー:brew、apt、dnf、pacman、cargo、npm、pipx、snap などに対応し、プラットフォームを自動判別して解決します
- シークレット:SOPS/age による暗号化と、1Password、Bitwarden、HashiCorp Vault に対応。シークレットを使用した環境変数も扱えます
- Tera テンプレート:変数、OS の検出、カスタム関数を使ってドットファイルをレンダリングします
- 継続的なドリフト検出:デーモンが変更を監視し、自動同期、通知、自動修正を行います
プラットフォーム/インフラエンジニア向け:
- 複数ソースの設定:ポリシー階層(ロック/必須/推奨/任意)を設定して、チームのベースラインを公開します
- Kubernetes オペレーター:MachineConfig、ConfigPolicy、ClusterConfigPolicy、DriftAlert、BackupPolicy、Module 用の CRD、アドミッション Webhook、フリートダッシュボードを備えたデバイスゲートウェイを提供します
- ノード設定:sysctl、カーネルモジュール、containerd、kubelet、AppArmor、seccomp、証明書に対応します
- CSI ドライバー:OCI ベースのモジュールをボリューム経由で Pod に注入します
- Crossplane 連携:セルフサービスによるチーム環境の配布に使用する TeamConfig XR
- kubectl プラグイン:ノードの検査に使える
kubectl cfgd debug/exec/inject/status
セキュリティ/コンプライアンス向け:
- コンプライアンススナップショット:マシンの状態を継続的に記録し、Vanta、Drata、またはカスタム連携向けに JSON/YAML でエクスポートします
- 鍵のプロビジョニング:SSH 鍵の宣言的な生成、GPG 鍵の管理、git 署名の設定に対応します
- 暗号化の適用:ファイルごとに暗号化要件を設定し、SOPS/age バックエンドを検証します
- ポリシーの適用:対象パスに対するファイルのロック、必須パッケージ、暗号化制約に対応します
- ドリフトの修正:デーモンが設定ドリフトを検出し、モジュールごとのポリシーに従って自動修正します
- フリートの可視化:デバイスゲートウェイが登録済みマシン全体のコンプライアンススコアを集約します
ドキュメント
| ドキュメント | 説明 |
|---|---|
| 設定 | ルート設定(cfgd.yaml)、ファイル戦略、エイリアス、テーマ |
| プロファイル | プロファイル YAML、継承、マージルール、変数 |
| モジュール | モジュール仕様、クロスプラットフォームパッケージ、依存関係、Git ファイルソース、レジストリ |
| 調整 | フェーズの順序、障害処理、状態ストア |
| パッケージ | すべてのパッケージマネージャー、スキップ動作、ドライラン |
| テンプレート | Tera テンプレートシステム、コンテキスト変数、カスタム関数 |
| シークレット | SOPS/age バックエンド、1Password、Bitwarden、Vault |
| システム設定ツール | シェル、macOS のデフォルト設定、systemd、sysctl、kubelet など |
| ソース | 複数ソースの設定、ポリシー階層、構成、サブスクリプション |
| デーモン | ファイル監視、調整ループ、同期、通知、サービスのインストール |
| オペレーター | CRD ベースのマシン管理、デバイスゲートウェイ、DaemonSet ノードエージェント |
| チーム設定 | Crossplane を利用したチーム設定の配布 |
| 安全性 | アトミック書き込み、バックアップ、ロールバック、適用時のロック、パスの安全性 |
| 宣言型バックアップ | spec.backups[] スナップショット、フックの順序、保持、復元 |
| バックアップポリシー | フリート全体のバックアップスケジュール、優先順位テーブル、scheduleOwner |
| CLI リファレンス | フラグと使用例を含むコマンドの完全なリファレンス |
| インストール | すべてのインストール方法、署名済みダウンロードの検証、セルフアップグレード |
| ブートストラップ | cfgd init の手順、適用オプション、インストールスクリプト |
| AI 生成 | AI による設定生成のガイド、両方の MCP サーバー(作成用の mcp-server、CLI 操作用の mcp) |
| 作成スキル | cfgd skill インストーラー、対応するエージェントプロバイダー、生成とスキルの使い分け |
| リリース | CI によるリリースパイプライン、リリース前チェックリスト、障害からの復旧 |
| イメージパック | ディレクトリの OCI イメージボリュームへのパッキング、署名、デプロイの固定 |
| マルチテナンシー | オペレーターの名前空間分離とテナント境界 |
| ライフサイクルスクリプト | run: の解決、フックフェーズ、タイムアウト、対話型スクリプト |
配布
GitHub Releases でバイナリを公開する(amd64 + arm64 の Linux、macOS、Windows、amd64 の FreeBSD)ほか、各リリースは以下にも公開されます。
| チャネル | 成果物 |
|---|---|
| Homebrew | brew install tj-smith47/tap/cfgd |
| crates.io | cargo install cfgd(または、ビルド済みバイナリの場合は cargo binstall cfgd) |
| AUR | yay -S cfgd(Arch Linux。ソースからビルド) |
| winget | winget install --id TJSmith.cfgd |
| Scoop | scoop bucket add tj-smith47 https://github.com/tj-smith47/scoop-bucket; scoop install cfgd |
| Chocolatey | choco install cfgd |
| Nix | nix profile install github:tj-smith47/nix-pkgs#cfgd |
| deb / rpm / apk | 静的バイナリのネイティブパッケージ。CloudSmith にもミラーされています |
| GHCR | Docker イメージ:cfgd、cfgd-operator、cfgd-csi |
| Helm | helm install cfgd oci://ghcr.io/tj-smith47/charts/cfgd |
| Krew | kubectl krew install cfgd(ノードのデバッグやクラスター全体の調査に使う kubectl プラグイン) |
| OLM | OLM 管理クラスター向けのオペレーターバンドル |
| Crossplane | チーム設定の配布用の function-cfgd コンポジション関数 |
| MCP Registry | io.github.tj-smith47/cfgd:AI エージェントとエディター向けの cfgd mcp-server 標準入出力サーバー |
CI/CD 連携:
| 連携 | 説明 |
|---|---|
| cfgd Setup | GitHub Action:設定リポジトリのモジュールを使ってランナーを初期化します |
| cfgd Plan | GitHub Action:PR で cfgd plan を実行し、差分をコメントとして投稿します |
| GitLab CI | .cfgd-plan および .cfgd-apply ジョブを含む、インクルード可能な .cfgd-ci.yml テンプレート |
| Tekton | Tekton Pipelines 用の cfgd-apply Task |
# Example: set up your dev tools on a GitHub Actions runner
- uses: tj-smith47/cfgd/ecosystem/github-actions/setup@master
with:
source: [email protected]:you/machine-config.git
module: dev-tools
# Example: plan config changes on every PR, comment the diff, gate the merge
- uses: tj-smith47/cfgd/ecosystem/github-actions/plan@master
with:
config-dir: .
fail-on-error: true
モジュールは、devcontainer に組み込むための DevContainer Features としてエクスポートすることもできます。
cfgd module export my-tool --as devcontainer
ソースからのビルド:
git clone https://github.com/tj-smith47/cfgd.git && cd cfgd
cargo build --release
ライセンス
以下のいずれかのライセンスの下でライセンスされています。
- Apache License, Version 2.0(LICENSE-APACHE または http://www.apache.org/licenses/LICENSE-2.0)
- MIT license(LICENSE-MIT または http://opensource.org/licenses/MIT)
お好きな方を選択できます。
コントリビューション
お客様が明示的に別段の定めをしない限り、Apache-2.0 ライセンスで定義される本作品への収録を目的としてお客様が意図的に提出したコントリビューションは、追加の条件や制約なしに、上記の両方のライセンスの下でライセンスされます。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。