• #stream-deck
  • #node-js
  • #typescript
  • #開発環境
  • #ワークフロー自動化
  • #調査
開発mdx-playgroundメモ

Stream Deckプラグイン開発調査

ターミナルで pnpm deploy:cloudflare と打つたびに、「これ物理ボタンで一発にしたい」と手が止まった。Stream Deckの公式SDKを調べ始めたら、Node.js + TypeScriptに完全移行していて、普段の技術スタックとほぼ同じだった。調査結果をメモにまとめ、さらに自分の業務フローに当てはめて活用アイデアを洗い出した。


SDK調査のまとめ

アーキテクチャ

Stream Deck SDKは「ローカルファースト」設計で、Webアプリに似たFrontend/Backend構成だが全てローカルで動く。

  • Plugin(バックエンド): Node.jsランタイムでキー押下イベントを処理
  • Property Inspector(フロントエンド): Chromiumベースの設定UI
  • 両者はStream Deck Appを介してWebSocket通信

ランタイムはNode.js 20/24、Chromium 130。

セットアップ

CLIでプロジェクト雛形を生成し、npm run watch でホットリロード開発できる。Stream Deckアプリに自動インストールされるので、コードを書き換えると即座にキーの挙動が変わる。

npm install -g @elgato/cli@latest
streamdeck create    # 対話型ウィザード
npm run watch        # ホットリロード開発

アクション定義

@action() デコレータで宣言的に書く。SingletonAction を継承し、onKeyDown 等のライフサイクルメソッドをオーバーライドする形式。

@action({ UUID: "com.example.counter" })
export class CounterAction extends SingletonAction<{ count: number }> {
  override async onKeyDown(ev: KeyDownEvent<{ count: number }>) {
    const newCount = (ev.payload.settings.count ?? 0) + 1;
    await ev.action.setSettings({ count: newCount });
    await ev.action.setTitle(`${newCount}`);
  }
}

画像・フィードバック

setImage でSVG/PNG/Base64を動的に差し替えられる。showOk() で緑チェック、showAlert() で黄色警告を一時表示。ビルド進捗やサーバー状態をキーの色で視覚化するのに使える。


業務フローへの活用アイデア

mdx-playgroundのコンテンツと開発ログを分析し、自分の業務に当てはめた。6カテゴリに整理する。

1. 開発ワークフローの高速化

複数プロジェクトを並行で触っているため、コンテキストスイッチのたびにターミナルを探してコマンドを打ち直している。ここを物理ボタンに載せる。

devサーバー起動ボタン: プロジェクトごとにキーを割り当て、押すと該当ディレクトリで pnpm dev を実行。起動中はキー画像を緑に切り替え、稼働状態が目に入る。

Cloudflareデプロイボタン: pnpm deploy:cloudflare をワンボタン化。ビルド中はSVGスピナーを表示し、成功で showOk()、失敗で showAlert() を返す。ビルドが通ったかどうかを、ターミナルに戻らず確認できる。

Git操作パネル: Commit / Push / Statusをキーに並べる。Statusキーには変更ファイル数を動的表示し、Branchキーには現在のブランチ名を載せる。

2. Git Worktree運用との相性

Worktreeで複数ブランチを同時に開いていると、「今どのWorktreeにいるか」を意識し続ける必要がある。キーの色でWorktreeを色分けすれば、目線をターミナルに移さずに現在のコンテキストが分かる。プロファイル切替(SwitchToProfile API)と組み合わせると、Worktreeに応じたキー配置の自動切替も可能。

3. 確定申告・経理シーズン用

確定申告では定型的なアプリ遷移が多い。freee、e-Tax、eLTAX、Google Spreadsheet、PDF確認という流れを踏むたびにブラウザのブックマークを掘っている。Stream Deckに税務ツールランチャーを並べれば、アプリ切替のステップが消える。

SD+のダイヤルがあれば、回転で顧客を切り替え、押下でそのGoogle Driveフォルダを開くUIも組める。

4. コンテンツ作成の効率化

毎日の開発日記作成では、日付ディレクトリの作成 → テンプレート配置 → 記事編集 → プレビュー確認 → デプロイという定型フローがある。「日記開始」ボタンでディレクトリとテンプレートを自動生成し、「プレビュー」ボタンで localhost:3000/今日の日付/ をブラウザに開く、という流れを物理ボタン化できる。

5. AI連携

Claude Codeのスラッシュコマンドを直接実行する手段はないが、ターミナルにキーストロークを送ることで間接連携が可能。/make-diary/commit をワンボタンで流す使い方。

devサーバーの生死をポーリングで監視し、キーの色で常時表示するモニターも組める。5秒間隔で localhost:3000 にfetchし、応答があれば緑、なければ赤に切り替える。

6. 実装の優先度

すぐ使えるもの(既存プラグインの組み合わせ):

  • URLランチャー(税務サイト、各プロジェクトのlocalhost)
  • プロファイル切替(Dev / Tax / Content)
  • フォルダオープン(プロジェクトディレクトリ)

カスタムプラグインが必要なもの:

  • Cloudflareデプロイボタン(進捗表示付き)
  • Gitステータスモニター(ブランチ名・変更数の動的表示)
  • devサーバーの起動/停止トグル

振り返り

SDKのドキュメントを読み込んで、streamdeck create からアクション定義、Property Inspector、配布まで一通りの流れを頭に入れた。TypeScript + Node.jsという技術スタックが自分の普段使いと重なるので、新たに覚える概念は「WebSocketイベントモデル」と「manifest.json の定義体系」くらいに絞られた。

活用アイデアを書き出す過程で、自分の業務フローの中で「毎回同じ手順を踏んでいる場所」が目に見えるようになった。特にCloudflareデプロイとGit操作パネルは、明日にでもプロトタイプを組みたいところ。


関連ファイル

  • memo/2026-02-23/stream-deck-plugin-development.md - SDK調査の詳細メモ(APIリファレンス、manifest仕様、コード例を含む)