mcpField
C
cfgd

cfgd

ローカル
github.comクラウド・インフラ72 週間前に更新

cfgd について

cfgdは、マシン全体の設定を宣言的に管理するコマンドラインツールです。複数のマシンやプラットフォームで設定を再利用する開発者やプラットフォームチーム向けに、プロファイル、共有モジュール、継続的な調整機能を備えています。

主な機能

  1. 01パッケージ・ファイル・システム設定の宣言
  2. 02継承によるプロファイルの構成
  3. 03クロスプラットフォーム対応モジュールの作成と共有
  4. 04設定のずれの継続的な検出と修正
  5. 05MCPサーバー経由でCLI操作を提供

活用シーン

  1. 01新しいマシンでの開発環境の構築
  2. 02仕事用と個人用マシンの設定同期
  3. 03ポリシー付き設定のチーム配布
  4. 04AIエージェントによるマシン状態の調整

MCP 対応

cfgdはCLI操作をツールとしてAIエージェントやエディターに公開するMCPサーバーを提供します。設定作成向けの別のMCPサーバーもあります。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"tj-smith47-cfgd": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/tj-smith47/cfgd:0.12.0"
]
}
}
}
起動コマンドdocker run -i --rm ghcr.io/tj-smith47/cfgd:0.12.0

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/tj-smith47/cfgd:0.12.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

cfgd の歯車アイコン

cfgd

構成可能なプロファイルと共有可能なクロスプラットフォームモジュールを使って、パッケージ、ドットファイル、システム設定、シークレットなど、マシン全体を宣言的に管理できます。

CI E2E Release Coverage License: MIT OR Apache-2.0

何もない Ubuntu コンテナーに cfgd がワンコマンドで Neovim 環境をインストール

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台のマシンが収束する様子をご覧ください。

cfgd が改変されたファイルを cfgd status で検出し、cfgd diff で説明し、cfgd apply で修復する様子

クイックスタート

# 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 の比較

cfgdchezmoiNix Home ManagerAnsiblePuppet
対象マシン全体の状態dotfilesdotfiles+パッケージ(Nix)汎用的な自動化サーバー/インフラの状態
パッケージ18 種類のマネージャーなしNix のみ任意(タスク経由)任意(プロバイダー経由)
ドリフト検出継続的(デーモン)手動再ビルド時手動継続的(エージェント)
クロスプラットフォームでの解決パッケージマネージャーごとのマッピング該当なしNix のみタスクごとの条件分岐OS ごとの Hiera データ
共有可能なモジュール標準機能テンプレートのみFlakesロール(Galaxy)Forge(サーバー向け)
チーム設定ポリシー階層+Crossplane該当なしFlake 入力該当なしPuppet Enterprise
インフラ単一バイナリ、サーバー不要単一バイナリNix デーモンSSH(または AWX)PuppetServer+PuppetDB+CA
学習曲線YAML+CLIGo テンプレートNix 言語YAML+Jinja2Puppet 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)ほか、各リリースは以下にも公開されます。

チャネル成果物
Homebrewbrew install tj-smith47/tap/cfgd
crates.iocargo install cfgd(または、ビルド済みバイナリの場合は cargo binstall cfgd)
AURyay -S cfgd(Arch Linux。ソースからビルド)
wingetwinget install --id TJSmith.cfgd
Scoopscoop bucket add tj-smith47 https://github.com/tj-smith47/scoop-bucket; scoop install cfgd
Chocolateychoco install cfgd
Nixnix profile install github:tj-smith47/nix-pkgs#cfgd
deb / rpm / apk静的バイナリのネイティブパッケージ。CloudSmith にもミラーされています
GHCRDocker イメージ:cfgd、cfgd-operator、cfgd-csi
Helmhelm install cfgd oci://ghcr.io/tj-smith47/charts/cfgd
Krewkubectl krew install cfgd(ノードのデバッグやクラスター全体の調査に使う kubectl プラグイン)
OLMOLM 管理クラスター向けのオペレーターバンドル
Crossplaneチーム設定の配布用の function-cfgd コンポジション関数
MCP Registryio.github.tj-smith47/cfgd:AI エージェントとエディター向けの cfgd mcp-server 標準入出力サーバー

CI/CD 連携:

連携説明
cfgd SetupGitHub Action:設定リポジトリのモジュールを使ってランナーを初期化します
cfgd PlanGitHub Action:PR で cfgd plan を実行し、差分をコメントとして投稿します
GitLab CI.cfgd-plan および .cfgd-apply ジョブを含む、インクルード可能な .cfgd-ci.yml テンプレート
TektonTekton 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-2.0 ライセンスで定義される本作品への収録を目的としてお客様が意図的に提出したコントリビューションは、追加の条件や制約なしに、上記の両方のライセンスの下でライセンスされます。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。