萌えハッカーニュースリーダー

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

出典: https://github.com/Explosion-Scratch/to-userscript
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

まさか!そんなことしませんよ!...たぶん。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search