Skip to content

feat(plugins): mfm-search-engine を追加 (MFM 検索ブロックの遷移先を好きな検索エンジンにする) - #99

Merged
hitalin merged 1 commit into
mainfrom
feat/mfm-search-engine
Nov 4, 2026
Merged

hitalin merged 1 commit into
mainfrom
feat/mfm-search-engine

Conversation

@hitalin

@hitalin hitalin commented Nov 4, 2026

Copy link
Copy Markdown
Collaborator

概要

MFM の検索ブロック「foo 検索」を押したときの遷移先を、DuckDuckGo などの好きな検索エンジンにするプラグイン。

Misskey Web (MkGoogle.vue) も NoteDeck (MkMfm.vue) も遷移先は Google 固定で、設定もプラグインのフックも無い。yamisskey はフロントの preference searchEngine で切り替えられる (nexkey からの cherry-pick) が、本家 API には出ない。

方式

Plugin:register_note_view_interruptor で表示時に検索行だけをサイレントリンクに書き換える。

foo 検索
→ ?[foo 検索 (duckduckgo.com)](https://duckduckgo.com/?q=foo)

投稿そのものは変更しない。本家 Misskey Web にも同じフックがあるので両対応 (runsOn: notedeck, misskey-web)。見た目は検索ボックスではなく通常のリンクになる。

安全側の設計

  • 遷移先はプリセット名 (duckduckgo / brave / startpage / searx / google / bing) か https:// の URL だけ。http / javascript / 未知の名前は書き換えを止めて起動時に警告ダイアログ
  • リンクのラベルに遷移先ホストを出すので、押す前にどこへ飛ぶか分かる
  • ( ) は %28 %29 に潰す (リンク構文と衝突する)。コードブロック内・引用行・検索語に [ ] を含む行は触らない

検証

  • 受け入れテスト 11 件 (4 記法 + 全角スペース + 大小無視・非検索行の不変・CRLF・コードブロック / 引用・括弧・プリセット・https 限定・リノート内側・3000 字 100 行で 9k steps) を @syuilo/aiscript@1.2.1 + mfm-js@0.27.0 で裏取り
  • pnpm contract:verify 158 / 158 合格

補足

AiScript の "\n" はエスケープにならない (\n → n) ので、改行・タブは Str:lf / Str:from_codepoint から作っている。

本筋は NoteDeck 側に設定を足すこと (別途 issue)。このプラグインはそれまでの暫定策と、本家 Web 向けの手段。

🤖 Generated with Claude Code

Misskey Web も NoteDeck も MFM の検索ブロック「foo 検索」の遷移先は Google 固定で、
設定もプラグインのフックも無い。note_view_interruptor で表示時に検索行だけを
サイレントリンク `?[foo 検索 (duckduckgo.com)](https://duckduckgo.com/?q=foo)` に
書き換える。投稿そのものは変更しない。本家 Misskey Web にも同じフックがあるので両対応。

安全側の設計:
- 遷移先はプリセット名 (duckduckgo / brave / startpage / searx / google / bing) か
  https:// の URL だけ。http / javascript / 未知の名前は書き換えを止めて起動時に警告
- リンクのラベルに遷移先ホストを出す
- コードブロック内・引用行・検索語に [ ] を含む行は触らない

AiScript の "\n" はエスケープにならない (`\n` → `n`) ので改行・タブは Str:lf /
Str:from_codepoint から作る。受け入れテスト 11 件 (4 記法・CRLF・コードブロック・
括弧・プリセット・https 限定・リノート・3000 字で 9k steps) を mfm-js 0.27 で裏取り。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Nov 4, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Caution

Review failed

The pull request is closed.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@hitalin hitalin self-assigned this Nov 4, 2026
@hitalin
hitalin merged commit 1587e17 into main Nov 4, 2026
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant