愛用していた拡張機能「ニコ動履歴」がEdgeで使えなくなってしまった。Google Chrome がWebSQLを廃止したためだが、同じChromiumを共有するEdgeでも使えなくなるばかりか、Chromeには残されたはずのWebSQLを再有効化する試験機能すら奪われてしまった。そのため、後継機能である「ニコ動アーカイブ」へデータの移行を行うことができなかったが、力技で解決できたので、記録として残す。
症状および原因
2023年11月上旬ごろから、「ニコ動履歴」という拡張機能が使えなくなった。具体的には、拡張機能アイコンをクリックしても設定画面を開くことができない。同拡張機能のレビューを引用するに、「WebSQLの強制廃止」により使用不可能になったとのことだった。
代替手段として、chrome://flags
から、[Allows access to WebSQL APIs] を [Enable]にすることが紹介されているが*1、実はEdgeのカウンターパートである edge://flags
にはそもそもWebSQLの文言すらない。
その後ほどなくして、「ニコ動アーカイブ」という後継の拡張機能が公開された。「履歴」に遜色なく、新仕様に対応したモダンなアドオンである。更には、「履歴」からのデータインポート機能が組み込まれており、こちらへの移住を促すものであった。
しかしながら、「履歴」拡張機能にはエクスポート機能が備わっているが、Edgeでは拡張機能の起動ができないために、ファイルをエクスポートすることができない。移住には、エクスポートすることが課題となった。
解析作業(読み飛ばしてよい)
Edgeから拡張機能が開かないのであれば、直接拡張機能のhtmlを開いてやればよい。Edgeの拡張機能フォルダをエクスプローラから開く。ディレクトリは次の通り*2:
%localappdata%\Microsoft\Edge\User Data\Default\Extensions
このうち hldgbliocaaomajmalgenbhheinjlhgm
が「ニコ動履歴」の拡張機能のフォルダである。さらにこのフォルダの配下にある config.html
が、データエクスポート画面のhtmlファイルである。これをダブルクリックしてやると、履歴データの管理画面が開く。
これでひと安心、「エクスポート」ボタンをクリックすれば履歴をサルベージできる...とはいかず、ボタンをクリックしても何の反応もない。
ボタン #export
をクリックすると、裏にある config.js
が動いて WebSQLでデータを持ってくる仕組みとなっている。そのデータをJSON形式で格納し、base64へエンコードして「ニコ動履歴_export.data」というファイルを、jQueryによりhtml上に表示し、ダウンロードさせるらしい*3。
今回、WebSQLが廃止されたため、動こうはずもない。そのため、かなりの力技で解決する。
対策①
履歴が保存されたファイルを発掘する
上述した拡張機能のフォルダは機能のファイルが格納されているにすぎず、拡張機能の履歴の保存は別のディレクトリにおいて行われている。通常、拡張機能の設定はExtension Status などのフォルダに設定ファイルが入るが、本件はWebSQLを採用している関係か、databases
フォルダに入っている。フルパスは下記*4:
%localappdata%\Microsoft\Edge\User Data\Default\databases\chrome-extension_hldgbliocaaomajmalgenbhheinjlhgm_0
この中に、自分は1つだけファイルを見つけた。更新日時が 2023-11-05 で止まっている。ちょうどWebSQLが廃止され、本件拡張機能が使えなくなったころである。
このファイルを作業フォルダにコピーして、次の処理に移る。
SQLiteの中身をぶっこぬく
この拡張子が謎のファイル「2」はsqlite format 3のファイルである。そのため、「2.sqlite」などと拡張子を入れてやる。
次に、これを「ニコ動アーカイブ」に読ませることのできる形式に変える。「アーカイブ」はニコ動履歴のdata形式に対応しているため、これに合わせる。中身はbase64になった、ただのJSONファイルである。
SQLite を読むためのソフトウェアとして、自分は下記を利用した*5。
操作は簡単で、先ほど命名したSQliteのファイルを読ませてから、Jsonへエクスポートする。「tagrank」と「vinfo」両方使うので、2つ選んでエクスポートする*6。
JSONの整形
そのままでも「アーカイブ」に読ませることができるらしいが、「ニコ動履歴」のエクスポート形式に合わせてJSONファイルを成型する。下記ような形式となればよいので、簡単に頭に[{"name": "vinfo","data": [
をつけて、}]
で囲んでやるだけでよい。また、vinfo.json の直後に同様に {"name": "tagrank","data": [
を入れて tagrank.json の内容をコピペしてやれば、1つでインポート可能なファイルができる。すなわち下記のようになればよい:
[
{
"name": "vinfo",
"data": [
{
"comment": ...
}
]
},
{
"name": "tagrank",
"data": [
{
"disptag": "hogehoge",
"rank": fugafuga,
"tag": "hoge",
"updated": piyopiyo
},
{
...
}
]
}
]
base64へエンコード
適当な手段でbase64へエンコードする(UTF-8)。自分は下記サイトを利用した。3万行ほどあったが、コピペでOKだった。
出力されたものを.data形式で保存する。
ニコ動アーカイブへの読み込み
「ニコ動アーカイブ」の「ニコ動履歴から履歴追加」機能を使い、上記で作成したdataファイルを読み込む。これで完了である。
なお、投稿者名については、「アーカイブ」の仕様により「ーーー」でインポートされるが、一度その動画を閲覧することで反映されるようである。
対策②
基本的な流れは一緒であるが、Chromeに同じ拡張機能を入れ、Web APIを有効化して、EdgeからChromeのdatabasesへ履歴ファイルを移し、フラグを有効化して「履歴」を使ってエクスポートしなおすことで、Sqliteのファイルを変換する手間が省ける。
ただし、chrome://flagsにWebAPIのフラグが残っている間しか行うことができないため、時限的であり、恒久的な対処法としては①の手法の方が優れている。
結語
以上の手法により、Edgeからデータをサルベージして「履歴」から「アーカイブ」へデータを全て移行することができる。
少し解決に時間がかかったので、同じ悩みを抱えている人の助けとなれば大いに幸いである。
以上。