Yukari からエクスポートしたブックマークデータを、より一般的なデータ形式に変換するプログラムです。
- Deno 1.36以上がインストールされていること
あらかじめ、Yukariからエクスポートした bookmarks.json
を、denoを実行できるマシンにコピーしておきましょう。
本リポジトリをクローンして、以下のコマンドでブックマークデータを真のJSON形式に変換することができます。
変換結果は標準出力に書き込まれるので、ファイルに保存するならリダイレクト等してください。
deno run --allow-read bin/jsonize.ts <bookmarks.jsonのファイルパス>
Yukariのエクスポート機能で出力される bookmarks.json
は、あたかも自分がJSONであるかのように主張していますが、実際に中身を見てみると謎の数値の配列が延々と書き込まれていることはご存知でしょうか。
これ、実はJavaのオブジェクトをObjectOutputStreamでシリアライズしたデータのバイト配列なのです。おぞましいですね。
ブックマーク機能開発当時、Twitter4JのStatusオブジェクトを真面目に加工することをサボった開発者は、なんとそのオブジェクトをそのままシリアライズしてSQLiteに書き込んでしまいました。
そして、後にデータエクスポート機能を付けた際も、SQLite上のスキーマをほぼそのまま書き出す事にしたため、是正されることなくそのまま出力されることになってしまったのです。
仮に、将来Yukariが実行できなくなったり、データのデシリアライズに必要なクラスライブラリを依存関係から削除したバージョンがリリースされた場合、ブックマークにアクセスする手段が失われてしまいます。
その対策として、スタンドアロンで実行できるデータ変換ツールを作っておくことにしました。
これを見たプログラマーは Effective Java 第3版 項目85 "Javaのシリアライズよりも代替手段を選ぶ" を読み、もう少しまともなフォーマットでデータを永続化することをおすすめします。読まなくても、特に外部に出力するデータにSerializableを採用する人いないと思うけど。