💨
obsidian plugin のサンプルチュートリアルを試す
はじめに
obsidianをどんな感じで拡張するのか興味があったため、obsidian pluginのサンプルからチュートリアルを参考に動きを調べてみた。
まずは環境作成からであるが、お手軽な順に並べると以下のパターンがありそう。
- obsidianの保管庫に直接ソースを展開してビルドする
- 別途ビルド環境を作って、obsidianの保管庫にリンクを貼る
- 別途ビルド環境を作って、obsidianの保管庫に更新分を自動コピーしていく
1,2だと余計なファイルが保管庫に混ざるのがいやだったので、今回は3で進める。
obsidian pluginの作成環境を作る
- チュートリアル
- https://github.com/obsidianmd/obsidian-sample-plugin
- やったこと
- 上記の「obsidian-sample-plugin」のビルドを行い、obsidianに反映されることを確認する
- サンプルの内容をざっと確認する
- 前提
- wslでdevboxを使用してビルド環境を作る
- 解説サイト
-
https://minerva.mamansoft.net/Notes/📕Obsidianプラグイン開発チュートリアル
- こちらの手順を主に参考にしました。
- 本記事ではdevbox周りと、ポイントのみの言及となります
-
https://zenn.dev/estra/articles/obsidian-plugin-dev_1
- 基本から解説されています
-
https://minerva.mamansoft.net/Notes/📕Obsidianプラグイン開発チュートリアル
- ビルド環境(wslのdevboxシェル)の作成
- devboxで必要環境をインストール
- devboxを未インストールの場合はこちら
devboxの環境設定
devbox init devbox add git nodePackages.npm watchexec go-task devbox shell
- devboxを未インストールの場合はこちら
- sampleのリポジトリを取得
git clone https://github.com/obsidianmd/obsidian-sample-plugin.git cd obsidian-sample-plugin
- ライブラリを初期化
npm i
- ビルド設定
task --init
-
Taskfile.yaml を編集
- obsidian側のプラグインフォルダを指定(<vault>箇所)
Taskfile.ymlversion: "3" tasks: dev: deps: - build:dev - watch build:dev: npm run dev watch: watchexec --no-vcs-ignore --exts "js,json,css" cp main.js styles.css manifest.json <vault>/.obsidian/plugins/obsidian-sample-plugin/
-
obsidian側にプラグインフォルダを作成
- obsidianの保管庫フォルダから「./.obsidian/plugins/obsidian-sample-plugin/」にフォルダを作成
- obsidian側のプラグインフォルダに「.hotreload」ファイルを配置
-
- ビルドの実行
task dev -w
- devboxで必要環境をインストール
- 実行環境(obsidian)への反映
- obsidianのプラグイン一覧を手動でリロード後、有効に設定
- obsidianの画面左にリボンアイコン(サイコロマーク)が追加されていれば、サンプルプラグインはobsidianに反映済です。
- プラグインフォルダの更新自動反映については後述
- 開発環境(Windowsのvscode)の用意
- 上記フォルダをWindowsからvscodeで開く
- ファイルの編集等はvscodeで行う
- 「プラグインフォルダの更新自動反映」が有効な場合、ファイルを編集すると、リアルタイムでobsidianに反映される
チュートリアルでプラグインの作り方を学ぶ
一般的なプラグイン開発の流れ
- サンプルのダウンロード
- ビルド環境構築
- npm i
- ビルド
- npm run dev
- obsidianへの反映
- 反映方法
- obcidianの保管庫フォルダから
- 「./.obsidian/plugins/[プラグイン名]/」に以下を配置
- main.js
- manifest.json
- 配置後、obsidianのプラグイン一覧を手動でリロード後、有効に設定
- 反映方法
プラグインフォルダの更新自動反映の仕組み
- hot-reload プラグイン
- プラグインフォルダの更新を監視し、実行中のobsidianに反映するプラグイン
- https://github.com/pjeby/hot-reload
- 開発用途のプラグインのため、ダウンロード適用ではなくZipファイルを手動で配置してね、とのこと
- 配置後、obsidianのプラグイン一覧を手動でリロード後、有効に設定
- プラグインディレクトリ配下に
.git
ディレクトリ、もしくは.hotreload
ファイルがある対象プラグインのみを監視対象となる - 開発が終わったら設定を無効にすること
リポジトリのビルド結果の自動反映の仕組み
- watchexec
- リポジトリのビルド出力フォルダを監視し、プラグインフォルダに反映する
- go-task
- task --init
- Taskfile.yml を更新
- task dev -w
- 課題
- cssだけを更新した場合、リポジトリ側には変更が自動反映されなかった。tsをいじるかtaskの再実行で反映された
チュートリアル課題
- gitのヒストリから変更内容を確認可能
- コメントでの修正内容の説明あり
- styles.css
- スタイルの変更(フォントをredに)
- main.ts
- 画面左にリボンアイコンの追加('dice')
- 画面下ステータスバーに文字追加('Status Bar Text')
- モーダルウィンドウを開く('Open sample modal (simple)')
- 設定ページにタブ追加('Settings for my awesome plugin.')
- コンソール出力(obsidianからctrl+shift+i で確認可能)
- clickイベント登録(registerDomEvent)
- インターバルイベントの登録(registerInterval)
Discussion