2023年7月13日 (木曜日)

15:58:47 # Life chrome extension Manifest v2 からv3 への移行。 Chrome Extensionは以前はManifest v2だったのだが、v3に変更になったと。マイグレーションするには ここらへんをみればよいのか?。 ただマニフェストの形式が変わったというよりはどちらかというとBackground PagesがごっそりとService Workerになったというイメージなのかな。 Chrome extension専用だったAPI群がちょっとそれ以外に近づいたりしたんだろうか。かなりよくわかってないのでまだ試行錯誤中。

17:46:20 # Life chrome extension Manifest v2 からv3 への移行でハマったところ。

移行ガイドではbrowser_actionactionにmanifestで書き直すように指示されているのだが、ついでにbrowserActionをactionに書き換えれば良いというのが最初わかってなかった。それでだいぶ時間を溶かした。あとからわかってみれば当たり前だけど。

service_workerを全くわかってなかったので全然ロードされないのかと思っていたのだが結局感覚としてはbackground pagesとほぼ同じタイミングでロードされるようだった。何が違うのか結局よくわかっていない。

あと、chrome.tabs.executeScriptがdeprecateされていてchrome.scripting.executeScriptに変わっていた。従来のものでは文字列を渡したらそれをそのままJavascriptとして実行してくれたのだが、この変更により関数を渡すと関数をシリアライズして向こうに渡してそれを実行する、 ただしクロージャーが渡せるわけではないのでパラメータは明示的に関数パラメーターを渡せるように変わった。 関数を文字列として手動でシリアライズしていたときに仕込みやすいエスケープバグが潰せるだろうということらしい。 移行のついでに従来の自分の書いたスクリプトのバグを発見してしまった。 内容としては、文字列として`${こんな感じで}`渡していたパラメーターが、思っていた型ではなく展開されたので、文字列型が数字として関数では処理されていた。 関数に置き換えたことで正しく文字列型として処理され、値が変わってしまったというバグ。 あと、この書き方にしたら混乱するかなと思ったがコードを編集している感じでは以前の文字列をただ渡しているよりはちゃんと Emacsのコードのシンタックスハイライトもインデントも動くし、 Javascriptとしては書き心地が良い。

しかし、よくわからないところで二時間溶かしてしまった。 メインのマイグレーションに挑戦するまえにもうちょっとシンプルなやつに挑戦していたので初めて見るドキュメントというわけではなかった。 その準備があったからこそ挑戦する気にはなったのだが、 その準備があってもかかってしまった二時間なのでだいぶ辛い。 これも5年メンテしているスクリプトなのでたまに色々作業が発生するわけだが、 全く価値に直結しないのでこういう変更をさせられるのはつらい。

Junichi Uekawa