mcpField
O
obsidian-plugin

obsidian-plugin

github.com/akillness開発53221 回インストール4 日前に更新
リポジトリ

obsidian-plugin について

obsidian-pluginは、Obsidianプラグインの開発と公開準備を支援するスキルです。プロジェクトのひな形生成に加え、ESLintチェック、APIとライフサイクルの指針、アクセシビリティ、提出前の検証を扱います。

主な機能

  1. 01プラグインのひな形を生成
  2. 02Obsidian ESLintの27ルールを確認
  3. 03プラグインのメタデータと命名を検証
  4. 04メモリー安全なライフサイクルパターン
  5. 05アクセシブルなUIとテーマ対応CSSの指針
  6. 06コミュニティディレクトリへの提出準備

活用シーン

  1. 01新しいObsidianプラグインの開発開始
  2. 02lint違反の確認と修正
  3. 03提出前のメタデータ検証
  4. 04アクセシビリティとライフサイクル管理の改善

インストール

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

$npx skills add https://github.com/akillness/jeo-skills --skill obsidian-plugin

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

同梱ファイル

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

SKILL.toon
evals/
evals.json
references/
accessibility.md
code-quality.md
css-styling.md
file-operations.md
memory-management.md
submission.md
type-safety.md
ui-ux.md
scripts/
create-plugin.js
install.sh

詳細

obsidian-plugin — Obsidian プラグイン開発スキル

キーワード:obsidian plugin · create obsidian plugin · obsidian eslint · obsidian submission

コミュニティレビューに初回で合格する、高品質な Obsidian プラグインを構築します。 eslint-plugin-obsidianmd v0.1.9 の全 27 ルール、ボイラープレートの生成、 Vault API のパターン、アクセシビリティ要件、提出時の検証を網羅しています。

このスキルを使用する場面

  • クリーンなボイラープレート(サンプルコードで肥大化していないもの)を備えた Obsidian プラグインの新規プロジェクトを生成する
  • eslint-plugin-obsidianmd による ESLint 違反をレビューして修正する
  • Obsidian コミュニティディレクトリへの提出に向けてプラグインを準備する
  • メモリ安全なライフサイクルパターン(registerEvent、ビュー参照を保存しない)を適用する
  • 適切な型安全性を実装する(安全でない as TFile キャストや any を使わない)
  • アクセシビリティ要件を徹底する(キーボード操作、ARIA ラベル、フォーカス管理)
  • Obsidian CSS 変数を適用して、テーマに対応したスタイルを設定する
  • プラグインのメタデータ(manifest.json、プラグイン ID/名前/説明のルール)を検証する

手順

ステップ 1:新しいプラグインプロジェクトを生成する
# Interactive boilerplate generator — validates metadata against submission rules
node scripts/create-plugin.js

# Or use npx directly from the source repo
npx github:gapmiss/obsidian-plugin-skill create-plugin

生成されるもの:

  • src/main.ts — 設定連携を備えたプラグインクラス
  • src/settings.ts — 設定インターフェースと PluginSettingTab
  • manifest.json — 検証済みプラグインメタデータ
  • styles.css — Obsidian 変数のコメントを含む CSS のひな型
  • tsconfig.json、package.json、esbuild.config.mjs — ビルドツールチェーン
  • version-bump.mjs、versions.json — バージョン管理
  • LICENSE — 年と著者が自動入力される MIT ライセンス
ステップ 2:ESLint 検証をインストールする
npm install --save-dev eslint eslint-plugin-obsidianmd
// eslint.config.mjs
import pluginObsidianmd from "eslint-plugin-obsidianmd";
export default [
  pluginObsidianmd.configs.recommended,
  // For locale string checking:
  // pluginObsidianmd.configs.recommendedWithLocalesEn,
];

検証を実行します:

npx eslint src/
npx eslint src/ --fix   # auto-fix where possible
ステップ 3:提出時の検証ワークフローに従う
  1. bash scripts/install.sh を実行して、開発環境をセットアップします
  2. 命名ルール(下記参照)に照らして、プラグイン ID と名前を検証します
  3. ESLint を実行します — 全 27 ルールに合格する必要があります
  4. コードレビューチェックリスト(「参考資料」を参照)を完了します
  5. obsidianmd/obsidian-releases に PR を提出します

プラグインの命名ルール

フィールドルール
プラグイン ID小文字の英数字とハイフン/アンダースコアを使用。「obsidian」は不可。「plugin」で終わらないこと
プラグイン名「Obsidian」を含めないこと。「Plugin」で終わらないこと。「Obsi」で始まらず、「dian」で終わらないこと
説明「Obsidian」を含めないこと。「This plugin」は不可。., ?, !, ) のいずれかで終わること
# Validate your manifest.json
node scripts/create-plugin.js --validate-only

ESLint ルールの概要(27 ルール)

提出と命名
ルール自動修正説明
no-obsidian-in-idいいえプラグイン ID に「obsidian」を含めないこと
no-plugin-suffix-in-idいいえプラグイン ID を「-plugin」で終わらせないこと
no-obsidian-in-nameいいえプラグイン名に「Obsidian」を含めないこと
no-plugin-suffix-in-nameいいえプラグイン名を「Plugin」で終わらせないこと
valid-descriptionいいえ説明の形式を検証する
メモリとライフサイクル
ルール自動修正説明
prefer-register-eventいいえ自動クリーンアップには this.registerEvent() を使用すること
no-view-referenceいいえビューへの直接参照を保存しないこと(メモリリークの原因になります)
型安全性
ルール自動修正説明
no-tfile-castいいえas TFile/as TFolder を避けること(instanceof を使用)
UI/UX(文の形式に関するルール — ほとんどは自動修正可能)
ルール自動修正説明
sentence-caseはいUI のテキストはすべて文の形式にすること
no-plugin-name-in-commandいいえコマンド名にプラグイン名を繰り返し含めないこと
no-command-in-commandいいえコマンド名に「command」という単語を含めないこと
no-default-hotkeyいいえデフォルトのホットキーを定義しないこと
no-manual-headingsいいえ設定 UI では手動の HTML ではなく setHeading() を使用すること
API のベストプラクティス
ルール自動修正説明
no-global-appいいえグローバルの app ではなく、this.app を使用します
prefer-request-urlいいえfetch() ではなく、requestUrl() を使用します
no-console-logいいえ提出前に console.log を削除します
prefer-abstract-input-suggestいいえ候補表示には AbstractInputSuggest を使用します
スタイリング
ルール自動修正説明
no-inline-stylesいいえCSS クラスを使用し、インラインの style 属性は使用しません
prefer-css-variablesいいえハードコードした色ではなく、Obsidian の CSS 変数を使用します
scope-plugin-stylesいいえすべての CSS をプラグイン ID セレクターのスコープ内にします
アクセシビリティ(必須)
ルール自動修正説明
require-aria-labelいいえアイコンボタンには aria-label が必要です
require-keyboard-navいいえすべての操作をキーボードで利用できるようにします
require-focus-visibleいいえフォーカスインジケーターには :focus-visible CSS を使用します

主要なコードパターン

メモリ安全なイベント登録
// ✅ Correct — auto-cleaned on plugin unload
this.registerEvent(
  this.app.vault.on('create', (file) => this.handleCreate(file))
);

// ❌ Wrong — leaks memory
this.app.vault.on('create', (file) => this.handleCreate(file));
型安全なファイルアクセス
// ✅ Correct — instanceof narrowing
const file = this.app.workspace.getActiveFile();
if (file instanceof TFile) {
  await this.app.vault.read(file);
}

// ❌ Wrong — unsafe cast
const file = this.app.workspace.getActiveFile() as TFile;
アクセシビリティ — アイコンボタンの ARIA
// ✅ Correct
const btn = containerEl.createEl('button', { cls: 'clickable-icon' });
btn.setAttribute('aria-label', 'Delete note');
setIcon(btn, 'trash');

// ❌ Wrong — no aria-label
const btn = containerEl.createEl('button', { cls: 'clickable-icon' });
setIcon(btn, 'trash');
Obsidian の変数を使った CSS
/* ✅ Correct — theme-compatible */
.my-plugin-button {
  background-color: var(--interactive-accent);
  color: var(--text-on-accent);
  border-radius: var(--radius-m);
}

/* ❌ Wrong — hardcoded colors */
.my-plugin-button {
  background-color: #7c3aed;
  color: white;
}

クイックリファレンス

タスクコマンド
ボイラープレートの生成node scripts/create-plugin.js
ESLint のインストールnpm install --save-dev eslint eslint-plugin-obsidianmd
ESLint の実行npx eslint src/
ESLint の自動修正npx eslint src/ --fix
プラグインのビルドnpm run build
開発用ウォッチモードnpm run dev
バージョンの更新npm run version

参考資料

コメント