Kobito の markdown データをコマンドラインからダンプする


Kobito(とりあえずバージョン 1.9.2)は、データを ~/Library/Kobito/Kobito.db にある Sqlite3 のデータベースに格納しています。スキーマが今後変わる可能性もありますが、とりあえず現バージョンで、有効な(削除されていない)markdown データを単純にカレントディレクトリにダンプしてみます。

-
db=~/Library/Kobito/Kobito.db
echo "SELECT zkey FROM zitem WHERE zin_trash IS NULL;" |
  sqlite3 $db |
  while read key
  do
    echo "SELECT zraw_body FROM zitem WHERE zkey = '$key';" |
      sqlite3 $db > $key.md
  done

記事ごとのデータは zitem テーブルに入っています。書き出しのファイル名には zkey フィールドを用いています。zuuid は UUID なので ID としてはこちらの方が良いかと思ったのですが、これ、公開された記事に対してサーバが振るもののようで、非公開の記事では NULL なんですよね。公開されたデータのみのダンプであれば、こちらでも良いかも。

何となく、現時点のテーブル定義を載せておきます。

-
/* 記事を格納するテーブル */
CREATE TABLE ZITEM (
  Z_PK INTEGER PRIMARY KEY, /* DB 内での一意な ID */
  Z_ENT INTEGER,
  Z_OPT INTEGER,
  ZIN_TRASH INTEGER, /* 有効なデータは NULL, 捨てると 1 */
  ZPRIVATE INTEGER, /* ? */
  ZTEAM INTEGER,
  ZCREATED_AT TIMESTAMP,
  ZPOSTED_AT TIMESTAMP,
  ZUPDATED_AT TIMESTAMP, /* ローカルでの更新日時? */
  ZUPDATED_AT_ON_QIITA TIMESTAMP, /* QIITA 上での */
  ZBODY VARCHAR, /* HTML 化された body */
  ZKEY VARCHAR, /* 何か、ユニークそうなキー */
  ZLINKED_FILE VARCHAR,
  ZRAW_BODY VARCHAR, /* markdown の body */
  ZTITLE VARCHAR, /* タイトル */
  ZURL VARCHAR, /* 公開 URL */
  ZUUID VARCHAR /* 公開された記事に振られる UUID */
);

では。

追記

Kobito 2.0 で、データベースファイルは ~/Library/Containers/com.qiita.Kobito//Data/Library/Kobito/Kobito.db へ移された模様。