MicrosoftEdgeのコレクションを他のブラウザにブックマークとしてエクスポートするツールを作ったから皆さんに使って欲しい記事

# はじめに
こんにちは　最近メインPCをWindows10からLinux(manjaro)に乗り換えました、中京大学の長谷川寛拓です。
Linuxデスクトップは良いですね、自由すぎるカスタマイズ性がオタク心をくすぐります。
思ってたよりセットアップも楽でしたしWindows11なんてもういらないですね(ちなみに私のPCはインストール要件満たしてませんでした)

しかしそう簡単にはうまく行かず、使っているうちに私にとって大きな問題が立ちはだかりました。

*MicrosoftEdgeの動作がガバガバ過ぎる*

ちょっと我慢できないレベルでおかしな動きをします。
ウィンドウを掴んで別のモニターに持ってったら制御効かなくなってウィンドウがどっか行きます。
これじゃ開発なんて出来たもんじゃありませんよ!
ChromeとFireFox使いの方は「別にさっさと他のブラウザ使えばいいじゃん」と思うかもしれません。
でも普段からEdgeを使っている自分にはなかなか他のブラウザに乗り換えられない理由があるんです...
![edge.png (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/f0ac851f-535d-65bb-2269-abd6ebb7f240.png)
*はい、大量のコレクションです*

これブックマークより手軽に追加できてサムネイルまで表示されるから技術記事を保存するのにメチャクチャ便利なんですよね。
ただ独自の機能なのでしょうがないのかもしれないですけどエクスポート機能が用意されていません...
とはいえこれを手動で移動させるなんて無駄な時間を過ごすのはプログラマーの端くれとして認められないのです

ということで、EdgeのコレクションをブックマークとしてエクスポートするコマンドラインツールをNode.jsで作ってnpmで公開してみました。
これで簡単に他のブラウザに乗り換えられますね。

https://github.com/KantaHasegawa/export-edge-collections-tool

https://www.npmjs.com/package/export-edge-collections

## 使い方

※非プログラマーの方がもしこの記事にたどり着いていたらコメント欄で連絡してください。
※連絡してくださればPC初心者でもわかるように説明を追加します。

出来るだけ簡単に使えるようにしました。
Node.jsとnpmの実行環境があればコマンド一発でOKです。
`npx export-edge-collections`
これだけでいけます。npxって便利ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/5c7fe08e-839c-1433-6876-015b466b35cd.png)
Edgeのコレクション情報はどのOSでも共通してcollectionSQLiteというファイルに保存されています。
そこから色々情報を抜き出して整形するので絶対パスを入力してやってください。
多分 `Example in OS:`の`{UserName}`部分を変えれば大丈夫だとは思うんですけど、もしファイルが見つかりません的なエラーを吐かれたら自分の環境のパスを調査して入力してください。
`sudo find /* -name collectionsSQLite`とかで見つかるんじゃないでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/04995c9d-d372-8368-2e2b-126f5c5d87c4.png)
ファイルのパスが正しければカレントディレクトリに`EdgeCollectionBookmarks.html`というファイルが生成されているはずです。
あとはこのファイルを好きなブラウザで読み込んでもらえば完了です。
一応手順を載せておきます。
### Chrome
![chrome1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/a116951d-02f1-858d-b071-074ad4388d69.png)
![chrome2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/91a2a3d6-a9f7-12b4-f34d-91141a1d4734.png)

![chrome3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/d588640e-ad9c-f19e-97bb-f8caf41ed740.png)
![chrome4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/ed89a40b-4e2b-2fdb-3e49-e370ad055ff8.png)

### FireFox
![firefox1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/99fb0bba-4d08-6c87-9e20-497a6889411b.png)
![firefox2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/f39f7e67-a858-07a7-e79b-fb4956747230.png)
![firefox3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662213/03217515-144c-f1fc-df7d-9ed67723f037.png)

ちゃんとブックマークとして登録されていますね。

## 技術的な話
ソースコード見てもらえばわかると思うんですけど難しいことは全然してないです。
SQLite接続してデータ取ってきて整形してるだけですね。

多分気になるところがあるとしたら「なんでhtmlファイルでブックマークのインポートエクスポートが出来るんだ？」ってところだと思います。
私も初めて見たんですけどこれはNetscape bookmarksという昔からあるブックマークの管理手法らしくて、すべてのブラウザで共通して読み込めるようになってるみたいです。
`<!DOCTYPE NETSCAPE-Bookmark-file-1>`で宣言してファイル構造とかを記述出来ます。
ちなみに私はツールを作り始めたときこの存在を知らなかったためFireFoxのブックマークSQLiteを開いて直接書き込むとかいうパワープレイ開発をしてました笑
途中でこの存在に気づいて良かったです。危うく貴重な時間をドブに捨てるところでした。

「とはいえNetscape-bookmark-file生成するのも面倒くさいな...」
とか思ってたらこんなのを見つけました。開発者さんありがとうございます...

https://www.npmjs.com/package/netscape-bookmarks

開発言語がNode.jsなのはこのパッケージが存在しているからです(正直Pythonで書きたかった)

はい、これで私がすることはもうSQLクエリを投げることと返ってきたデータをJSONにパースすることだけになりました。
一気に楽になりましたね。

ローカル環境で開発が終わり、さてどうやって公開しようと迷っていたのですが、どうやらnpmのコマンドラインツールパッケージにしてnpxで実行してもらうのが一番手軽という話を聞いたのでその方法を取りました。
npmライブラリを作って公開するやり方はたくさん記事があるのでここでは載せませんが、ライブラリを公開するというのは自分が思っていたより100倍くらいハードルが低かったです。特に審査とかないんですね...

# さいごに
同じ境遇で困ってる人がどれだけいるかはわかりませんが、その人たちがGoogle検索でこの記事にたどり着いてくれたら嬉しいですね。
こういったツールをライブラリとして公開するのは初めてなので改善点などがあればどんどん指摘してください。

長々と書いてしまいましたがここまで読んでくださってありがとうございました
皆さん良いプログラミングライフを!