Kobito が起動しなくなった場合の対処(読み込み中のままハング)


TL;DR

色々切り分けてみたところ、最後に保存したデータが原因で Kobito が起動しなくなった場合、バックアップから復旧してみてください。

Kobitoの自動バックアップ先
$ cd ~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/Backups
  1. 壊れたDBにあって、正常に起動する DB にないデータを SQLite3 の DB から直接コピー
  2. 正常に起動するDBで Kobito を起動し、新規作成アイテムにコピーを貼り付ける

TS;DR

Kobito を起動すると読み込み中のままハングしている場合、恐らく以下の切り分けをすでに試されていると思います。

  • アプリを再インストールをすると起動する(データは空)
  • バックアップした最後のデータを復旧させると NG
  • 1つ古いデータだと起動する(しかし、大事な直近のデータが消えたまま)

その上で、最後に編集したデータが原因でハングしていると思われる場合は、SQLite3 で保存されている Kobito のデータベースを直接編集してデータを復旧させます。

※ macOS(OSX) をベースに記事を書いていますが、Windows でも基本的に流れは同じだと思います。

Kobito のデータが保存されているパス(バックアップ/復元先のファイル)

~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/

以下はディレクトリ構造を treeコマンドで表示した例です。

Kobitoフォルダのディレクトリ構造
$ cd ~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/
$ tree
.
├── Kobito.db
├── Kobito.db-shm
├── Kobito.db-wal
├── CSS
│   └── custom-style.css
│
└── Backups
    ├── Kobito 2.3.8 2018-05-07 175832.db-backup
    │   ├── Kobito.db
    │   ├── Kobito.db-shm
    │   └── Kobito.db-wal
    ├── Kobito 2.3.8 2018-05-08 210550.db-backup
    │   ├── Kobito.db
    │   ├── Kobito.db-shm
    │   └── Kobito.db-wal
    │
    (以下同文)

Kobito のバックアップ・ディレクトリ

~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/Backups

バックアップ・ディレクトリの構造
$ cd ~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/
$ cd Backups
$ tree
.
├── Kobito 2.3.8 2018-05-07 175832.db-backup
│   ├── Kobito.db
│   ├── Kobito.db-shm
│   └── Kobito.db-wal
├── Kobito 2.3.8 2018-05-08 210550.db-backup
│   ├── Kobito.db
│   ├── Kobito.db-shm
│   └── Kobito.db-wal
│
(以下同文)
バックアップ・ディレクトリ名のフォーマット
Kobito x.x.x yyyy-yy-yy yyyyyy.db-backup

x = Kobito のバージョン
y = バックアップの日付

バックアップからの復元

バックアップ・ディレクトリ内の各日付ごとのディレクトリにある下記3つのファイルを差し替えると、バックアップから復元できます。

  • /Kobito.db
  • /Kobito-shm.db
  • /Kobito-wal.db

SQLite コマンドで DB 内を手動でデータ検索

$ cd ~/Library/Containers/com.qiita.Kobito/Data/Library/Kobito/
$ cd Backups
$ ls
$ cd "Kobito x.x.x yyyy-yy-yy yyyyyy.db-backup"
$ 
$ sqlite3 Kobito.db
sqlite> .help
<略>
sqlite> .version
SQLite 3.16.0 2016-11-04 19:09:39 0e5ffd9123d6d2d2b8f3701e8a73cc98a3a7ff5f
sqlite> .dumb %ZITEM%
<略>
sqlite> .quit

上記のようにコマンドラインを利用してもいいのですが該当データを探すのが大変です。やはり GUI で探しコピペした方が楽で間違いもないため SQLite 用の DB ブラウザ・アプリを利用します。(もちろんコマンドに慣れている方はコマンドで)

「DB Browser for SQLite」(Mac, Win, PortableApp版あり)
http://sqlitebrowser.org/

  1. 「DB Brower for SQLite」アプリを開き「Open Database」から壊れた方の DB(Kobito.db)を開く。
    Kobito のフォルダを Finder の「よく使う項目」に登録しておくと開くのが楽になります。
  2. 「Browse Data」タブを選び、ドロップダウンから「ZITEM」を選ぶと記事一覧が表示されます。
  3. 左側ペインの表で「ZRAW_BODY」列と「ZTITLE」列を見ながら復旧したいアイテムを探します。
  4. 選択すると右上のペインに内容が表示されるので、コピーしてどこかに避難しておきます。
  5. アプリを終了し、Kobito のDB(3つのファイル)を正常に起動するものに差し替えます。
  6. Kobito を起動し、新しいアイテムを作成後、先に避難したコピーデータを貼り付け、問題がありそうな箇所がないか確認して保存します。
  7. Kobito を再起動して問題がないようであれば、急ぎの作業を続けます。

検証環境

Kobito OS Hard
v.2.3.8 macOS Sierra
(OSX 10.12.6)
MacBookPro Early 2015, Mem 8GB