DeepSeek Harness: プラグインインストールと設定読み込み順序

最終更新:2026-08-31

「プラグインを書く」から「プラグインを使う」へ——このレッスンではプラグインのインストールと設定管理の実践に焦点を当てます。4つのインストール方法がすべてのシナリオをカバーし、設定読み込み優先度が「ローカル優先」を保証し、ホットパッチが本番環境の緊急変更を安全かつコントロール可能にします。

💡 ヒント:プラグインインストール後の最も重要なステップは --dump-config ——プラグインが実際に最終設定に現れることを確認することです。「プラグインが効かない」問題の多くは、設定優先度の間違いです。

📋 前提知識12-local-plugin.md26-bundle-profile.md の完了

1. 学習内容

設定読み込み順序


2. npm プラグインインストール

▶ サンプル 1:

BASH
# 最新版をインストール
pnpm add @dsh-plugin/database

# 特定バージョンをインストール
pnpm add @dsh-plugin/database@1.2.0

# devDependency としてインストール
pnpm add -D @dsh-plugin/debug-tools

(2) インストール後の登録

npm でインストールしたプラグインは cordis.yml に登録が必要:

YAML
# cordis.yml
plugins:
  '@dsh-plugin/database':
    config:
      connection:'postgresql://localhost/mydb'

(3) dsh plugin add の使用

DSH はより便利なインストールコマンドを提供:

BASH
# インストールして自動登録
dsh plugin add @dsh-plugin/database

# 設定付きでインストール
dsh plugin add @dsh-plugin/database --config.connection='postgresql://localhost/mydb'

# インストール出力
📦 Installing @dsh-plugin/database@1.2.0...
✅ Plugin installed and registered!

▶ サンプル 4:

JSON
// package.json
{
  "dependencies":{
    "@dsh-plugin/database":"^1.2.0",
    "@dsh-plugin/redis":"~2.1.0"
  }
}
記号 意味 更新範囲
^1.2.0 1.x 互換 1.2.0 ~ 1.9.9
~2.1.0 2.1.x 互換 2.1.0 ~ 2.1.9
1.2.0 正確なバージョン 1.2.0 のみ

3. GitHub リポジトリ直接インストール

(1) インストール方法

BASH
# デフォルトブランチをインストール
pnpm add github:alice/dsh-plugin-redis

# 特定ブランチをインストール
pnpm add github:alice/dsh-plugin-redis#feature/cluster

# 特定タグをインストール
pnpm add github:alice/dsh-plugin-redis#v2.1.0

# 特定コミットをインストール
pnpm add github:alice/dsh-plugin-redis#abc1234

(2) dsh plugin add の使用

BASH
dsh plugin add github:alice/dsh-plugin-redis

(3) GitHub インストールの注意点

注意点 説明
Git が必要 マシンに Git がインストールされていること
リポジトリ構造 有効な Node.js パッケージであること(package.json がある)
ビルドステップ リポジトリが先にビルドが必要な場合がある
ネットワーク GitHub へのアクセスが必要
バージョンロック ブランチ名よりコミットハッシュを推奨

(4) package.json での表記

JSON
{
  "dependencies":{
    "@dsh-plugin/redis":"github:alice/dsh-plugin-redis#v2.1.0"
  }
}

4. tarball インストール

(1) URL からインストール

BASH
# リモート tarball からインストール
pnpm add https://example.com/dsh-plugin-custom-1.0.0.tgz

# ローカル tarball からインストール
pnpm add ./packages/dsh-plugin-custom-1.0.0.tgz

(2) npm pack で tarball を作成

BASH
# プラグインプロジェクト内
cd dsh-plugin-my-tool
npm pack
# 生成:dsh-plugin-my-tool-1.0.0.tgz

# DSH プロジェクト内
pnpm add ../dsh-plugin-my-tool/dsh-plugin-my-tool-1.0.0.tgz

(3) tarball のユースケース

シナリオ 説明
プライベートプラグイン npm に公開せず、tgz を直接配布
オフラインインストール npm や GitHub にアクセスできない環境
CI/CD ビルド成果物を直接インストール
プレリリーステスト 候補バージョンをテスト用にインストール

(4) 3つのインストール方法の比較

方法 コマンド ネットワーク バージョン管理 最適な用途
npm pnpm add @dsh-plugin/xxx npm レジストリ ✅ semver 公開プラグイン
GitHub pnpm add github:user/repo GitHub ⚠️ branch/tag 開発中プラグイン
tarball pnpm add ./xxx.tgz なし ❌ 手動 プライベート/オフライン

5. 設定読み込み優先度

(1) 5つの優先レイヤー

100%
graph TB
    L5["Layer 5:CLI パラメータ<br/>(最優先)"]
    L4["Layer 4:cordis.patch.yml"]
    L3["Layer 3:プロジェクト cordis.yml"]
    L2["Layer 2:Profile 設定"]
    L1["Layer 1:Bundle デフォルト<br/>(最低優先)"]
    L5 --> L4 --> L3 --> L2 --> L1

▶ サンプル 2:

TEXT 📖 参照専用
Bundle デフォルト:  plugins:[core, llm, tools], port:5173
Profile (web):     plugins:[+web-ui]
プロジェクト設定:  plugins:[+my-tool], port:8080
Patch:            plugins:[+debug-tools], debug:true
CLI:              port:3000

最終結果:         plugins:[core, llm, tools, web-ui, my-tool, debug-tools]
                   port:3000, debug:true

(3) 同名プラグインの処理

複数レイヤーで同じプラグイン名が登録された場合、優先度の高いレイヤーが低いものを上書き:

TEXT 📖 参照専用
Bundle:       llm → deepseek-adapter
プロジェクト設定: llm → openai-adapter(上書き)
Patch:        llm → custom-adapter(さらに上書き)

最終:llm → custom-adapter

(4) 読み込み順序の確認

BASH
pnpm dsh web --patch --dump-config

出力には各設定値のソースレイヤーがマークされます。


6. cordis.patch.yml ホットパッチ

(1) ホットパッチの目的

ホットパッチはベース設定を変更せずに一時的に設定を調整:

YAML
# cordis.patch.yml
plugins:
  debug-tools:
    $insert:./dev-plugins/debug-tools
  llm:
    config:
      debug:true

(2) ホットパッチの有効化

BASH
# --patch を追加してパッチファイルをロード
pnpm dsh web --patch

(3) 本番環境ホットパッチ

本番で緊急問題に遭遇した場合、パッチで迅速修正:

YAML
# cordis.patch.prod.yml — 問題のあるプラグインを緊急無効化
plugins:
  problematic-plugin:
    enabled:false
  llm:
    config:
      maxRetries:5  # 一時的にリトライ回数を増やす

(4) ホットパッチのロールバック

BASH
# ホットパッチを適用
cp cordis.patch.prod.yml cordis.patch.yml
pnpm dsh web --patch

# ホットパッチをロールバック(パッチファイルを削除)
rm cordis.patch.yml
pnpm dsh web

(5) ホットパッチと Git

TEXT 📖 参照専用
# .gitignore
cordis.patch.yml           # 現在のパッチを除外
cordis.patch.prod.yml      # 本番パッチを除外
# cordis.patch.dev.yml    # 開発パッチはコミット(チーム共有)

7. プラグイン競合解決

(1) 一般的な競合タイプ

競合タイプ 表れ方 原因
同名ツール 後の登録が前を上書き 2つのプラグインが同じツール名を登録
同名サービス 後の登録が前を上書き 2つの Provider が同じサービス名を登録
設定競合 設定値が反映されない 優先レイヤーの間違い
バージョン非互換 実行時エラー プラグインバージョンが DSH コアと非互換

(2) 同名ツール競合

TEXT 📖 参照専用
Plugin A:register tool 'search'
Plugin B:register tool 'search'
→ 最終:Plugin B の search が有効

解決策:

YAML
# 片方を無効化
plugins:
  plugin-a:
    config:
      tools:
        disabled:['search']

または Realm 分離を使用。

(3) 設定競合のトラブルシューティング

BASH
# 1. 最終設定を確認
pnpm dsh web --patch --dump-config > dump.yml

# 2. 競合する設定項目を検索
grep "my-plugin" dump.yml

# 3. パッチで上書きされていないか確認
diff cordis.yml cordis.patch.yml

(4) バージョン互換性

BASH
# プラグインの互換性を確認
dsh plugin check @dsh-plugin/database

# 出力
✅ @dsh-plugin/database@1.2.0 is compatible with dsh@0.5.0
⚠️ Requires:dsh >= 0.4.0

(5) 競合解決の判定ツリー

100%
graph TD
    CONFLICT{競合タイプ?}
    CONFLICT -->|同名ツール/サービス| SCOPE{両方必要?}
    SCOPE -->|いいえ| DISABLE[片方を無効化]
    SCOPE -->|はい| REALM[Realm で分離]
    CONFLICT -->|設定が反映されない| DUMP[--dump-config で調査]
    DUMP --> FIX[設定優先度を修正]
    CONFLICT -->|バージョン非互換| UPDATE[プラグインバージョンを更新]
    UPDATE --> CHECK[互換性を確認]

❓ よくある質問

Q プラグインインストール後に再起動は必要?
A はい。インストールされたプラグインは DSH の再起動が必要です。HMR は既存プラグインのコード変更のみをホットアップデートし、新規インストールはロードできません。
Q プライベート npm レジストリからインストールできますか?
A はい。.npmrc を設定:text @dsh-plugin:registry=https://my-registry.com/
Q 複数のパッチファイルをレイヤー化できますか?
A 現在は cordis.patch.yml 1つのみサポート。複数パッチが必要な場合は1ファイルにマージしてください。
Q インストール済みプラグインの全バージョンを確認するには?
A bash dsh plugin list # または pnpm list | grep dsh-plugin
Q プラグインのインストールに失敗した場合は?
A ネットワーク接続、npm レジストリのアクセス、パッケージ名の正確性を確認。pnpm-error.log で詳細なエラー情報を確認。
Q プラグインを完全にアンインストールするには?
A bash # 1. cordis.yml からプラグインエントリを削除 # 2. npm パッケージをアンインストール pnpm remove @dsh-plugin/database # 3. DSH を再起動

📖 まとめ


📝 練習問題

1. ⭐ 基礎:コミュニティプラグインを npm からインストールし(例:@dsh-plugin/database)、cordis.yml に登録・設定し、--dump-config で設定が反映されていることを確認。

2. ⭐⭐ 応用:cordis.patch.yml を作成し、patch レイヤーでプラグイン設定をオーバーライドしてください(例:LLM のデフォルトモデルを変更)。--dump-config でパッチあり/なしの設定差分を比較。

3. ⭐⭐⭐ チャレンジ:プラグイン競合シナリオをシミュレーション——同名ツールを登録する2つのプラグインをインストールし、後のものが前を上書きすることを観察。その後、Realm 分離で両プラグインが独立したツール空間を持つように設定。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%