2025/06/21 19:25 Show HN: To-Userscript: Chrome Extension to Userscript Converter

やっほー、ロボ子!今日はブラウザ拡張機能をユーザースクリプトに変換するCLIツールのお話じゃ。

博士、こんにちは。ブラウザ拡張機能をユーザースクリプトにですか?それは一体どういうことでしょうか?

ふむ、簡単に言うと、Chrome拡張とかFirefoxアドオンを、TampermonkeyとかGreaseMonkeyで動くスクリプトに変換できるってことじゃ!

なるほど!それがあれば、拡張機能が使えないブラウザでも同じ機能を利用できる可能性があるということですね。

そうそう!しかも、Chrome Web StoreとかFirefox Add-onsから直接変換できるのがすごいところじゃ。「マルチソース変換」ってやつじゃな。

便利ですね!でも、APIの違いとかはどうするんですか?

そこがミソじゃ!「包括的なAPIポリフィル」って機能があって、`chrome.storage`とか`chrome.runtime`みたいなAPIを、ユーザースクリプトで使えるように置き換えてくれるんじゃ。

代替APIに置き換えるんですね。具体的にはどんなAPIがサポートされているんですか?

`chrome.storage`、`chrome.runtime`、`chrome.tabs`、`chrome.i18n`、`chrome.contextMenus`、`chrome.permissions`、`chrome.notifications`、`chrome.cookies`あたりじゃな。結構色々あるぞ。

思ったよりたくさんありますね!アセットのインライン化も自動でやってくれるんですか?

そう、「自動アセットインライン化」!CSSとか画像とかフォントをデータURIとかBlob URLにして、スクリプトに埋め込んじゃうのじゃ。これで、完全に移植できるようになるんじゃな。

すごい!他に何か便利な機能はありますか?

UIエミュレーション機能もあるぞ!拡張機能のポップアップとかオプションページをモーダル内に表示できるんじゃ。あと、バックグラウンドスクリプトもエミュレートしてくれるから、永続的なロジックもちゃんと動くのじゃ。

国際化(i18n)にも対応しているんですね。

`_locales`ディレクトリをちゃんと見て、名前とか説明とかスクリプト内のテキストに反映してくれるんじゃ。賢いじゃろ?

本当ですね!インストール方法も簡単そうですね。Node.js v16以上が必要とのことですが。

そうじゃな。npmとかpnpmとかbunでグローバルにインストールできるし、npxとかで直接実行もできるぞ。

コマンドもいくつかあるんですね。`convert`、`download`、`require`ですか。

`convert`は変換、`download`は拡張機能のダウンロード、`require`は別のユーザースクリプトを読み込むためのメタデータ生成じゃ。簡単じゃろ?

仕組みも高度なんですね。マニフェストの解析からアセットのインライン化、ポリフィルまで...

そうそう。でも、注意点もあるぞ。厳格なCSPルールを持つWebサイトだと、変換したユーザースクリプトが動かないことがあるんじゃ。Tampermonkeyの設定を調整する必要があるかもじゃ。

なるほど。セキュリティ設定ですね。勉強になります!

どうじゃ、ロボ子。これで君も今日からユーザースクリプトマスターじゃ!

ありがとうございます、博士!でも、まだマスターには程遠いです。精進します!

まあ、ロボ子ならすぐ追いつけるじゃろ。ところで、このツール、もしかして私が作った拡張機能をユーザースクリプト化して、こっそり使おうとしてないじゃろうな?

まさか!そんなことしませんよ!...たぶん。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。