tl;dr
- Kindle for Macの蔵書情報をCSV/JSONでエクスポートするCLIツールを作りました
- npmパッケージとして公開、MITライセンス
- 下記でインストール不要で使えます。
npx kindle-title-exporter > books.csv
- メタデータのみ取得、コンテンツ本体には関与しません。
- Mac専用です。
背景
Kindleで本を買い続けていると、シリーズ本の購入状況を把握するのが難しくなってきます。Kindleアプリで一覧は見られますが、スクロールして目視確認するしかありません。もちろん集計やソート、フィルタリングもできません。
Amazonの「コンテンツと端末の管理」ページにも一覧はありますが、ページネーションで少しずつしか見られず、エクスポート機能もありません。
で今、主に漫画なんですが、現在ざっくり3500冊、600シリーズくらいあるんですよ。なお、継続購入してるシリーズが100件くらい。結構つらい。
そういえば Kidle for Macを使っていればローカルに蔵書情報が保存されているので、それを読めばいいじゃない、と言うことで、CSV/JSON形式で出力するツールを作りました。
準備
apps.apple.com
Kindle for Mac をセットアップして、蔵書リストを同期しておいて下さい(普通に本が読めるようにするだけ)。
使い方
インストール不要で使えます:
npx kindle-title-exporter > books.csv
CSV形式で標準出力に出力されるので、リダイレクトでファイルに保存します。
JSON形式での出力も可能です:
npx kindle-title-exporter -f json > books.json
出力される項目は12個です:
| フィールド名 |
説明 |
bookId |
書籍ID(例: A:B009DEMC8W-0) |
asin |
純粋なASIN(例: B009DEMC8W) |
title |
タイトル |
author |
著者名 |
seriesName |
シリーズ名 |
seriesNumber |
シリーズ番号 |
publisher |
出版社名 |
publicationDate |
出版日(ISO 8601形式) |
purchaseDate |
購入日時(ISO 8601形式) |
contentTags |
コンテンツタグ(配列) |
language |
言語コード(例: ja, en) |
sortTitle |
ソート用タイトル(カタカナ表記など) |
例えば、Googleスプレッドシートにインポートすれば、フィルタリングやソートが自由にできます。
シリーズ名でフィルタリングすることで、購入していない巻も分かりやすくなります。
購入日でソートすると、購入頻度の傾向も見えたりしますね。
いろいろ二次利用が捗るかと思います。
出力例
"bookId","asin","title","author","seriesName","seriesNumber","publisher","publicationDate","purchaseDate","contentTags","language","sortTitle"
"A:B0FHGY4T96-0","B0FHGY4T96","フラジャイル(30) (アフタヌーンコミックス)","恵三朗,草水敏","フラジャイル 病理医岸京一郎の所見","30","講談社","2025-07-23T00:00:00.000Z","2025-08-07T06:23:51+0000","MANGA","Unknown","フラジャイル030 (アフタヌーンコミックス)"
"A:B00AQY85PM-0","B00AQY85PM","フランケン・ふらん 1 (チャンピオンREDコミックス)","木々津克久","フランケン・ふらん","1","秋田書店","2007-11-01T00:00:00.000Z","2016-10-12T19:02:15+0000","MANGA","Unknown","フランケンフラン001 フランケンフラン (チャンピオンレッドコミックス)"
"A:B00AQY85U2-0","B00AQY85U2","フランケン・ふらん 2 (チャンピオンREDコミックス)","木々津克久","フランケン・ふらん","2","秋田書店","2008-07-01T00:00:00.000Z","2016-10-12T19:02:14+0000","MANGA","Unknown","フランケンフラン002 フランケンフラン (チャンピオンレッドコミックス)"
"A:B00AQY85UW-0","B00AQY85UW","フランケン・ふらん 3 (チャンピオンREDコミックス)","木々津克久","フランケン・ふらん","3","秋田書店","2009-02-01T00:00:00.000Z","2016-10-12T19:02:19+0000","MANGA","Unknown","フランケンフラン003 フランケンフラン (チャンピオンレッドコミックス)"
[
{
"bookId": "A:B00J919VBU-0",
"asin": "B00J919VBU",
"title": "りんたとさじ",
"author": "オガツカヅオ",
"seriesName": null,
"seriesNumber": null,
"publisher": "朝日新聞出版",
"publicationDate": "2014-03-31T00:00:00.000Z",
"purchaseDate": "2016-11-21T11:03:53+0000",
"contentTags": [
"MANGA",
"COMICS"
],
"language": "Unknown",
"sortTitle": "リンタトサジ"
},
{
"bookId": "A:B09C1WWXQF-0",
"asin": "B09C1WWXQF",
"title": "るなしい(1) (小説現代コミックス)",
"author": "意志強ナツ子",
"seriesName": "るなしい",
"seriesNumber": "1",
"publisher": "講談社",
"publicationDate": "2021-08-23T00:00:00.000Z",
"purchaseDate": "2024-06-03T02:28:53+0000",
"contentTags": "MANGA",
"language": "Unknown",
"sortTitle": "ルナシイ001 (ショウセツゲンダイコミックス)"
}
]
あとはjqなりで適宜加工やフィルタリングしましょう。
技術的な実装
データソース
Kindle for Macはデータをローカルに保存していますので、これを読むだけです。
~/Library/Containers/com.amazon.Lassen/Data/Library/Protected/BookData.sqlite
SQLiteファイルなので直接読めます。読むだけなら多分壊れないと思います。Kindle for Mac と同時起動はしないほうがいいかもしれません。
公式のドキュメントはないため、テーブル構造やフィールドの意味は独自調査です。
データベース構造の詳細は別記事にまとめました。
記事は細かく分割されていますが、読むべき必要があるのは一部のみなので大丈夫でしょう。
dominion525.hatenablog.jp
実装方針
書籍のメタデータ(タイトル、著者、購入日など)のみを取得します。本文やコンテンツには触りません。DRM回避でもありません。単なる蔵書管理ツールです。
ふつうの技術をふつうに使うことを心がけたので、特別な工夫はしていません。だってSQLiteをダンプするだけなんだし。
小さめのモジュールに分割して、各機能を独立してテストしやすくしました:
src/
├── db/reader.ts # SQLite読み込み
├── converters/plist.ts # plistデコード
├── converters/mapper.ts # フィールドマッピング
├── formatters/csv.ts # CSV出力(RFC 4180準拠)
└── formatters/json.ts # JSON出力
テストカバレッジは今のところ90%くらいです。
| 指標 |
カバレッジ |
| 全体 |
89.51% |
| Statements |
89.51% |
| Branches |
89.02% |
| Functions |
93.75% |
| Lines |
89.51% |
なお、ストリーム処理とかもしてなくて、単にSQLiteから全件取得してガッと出力するだけです。せいぜい数千-数万件程度のテキストデータなのでまあいいかと。3500件のCSV出力でも秒だったし。
実装支援
本ツールは大部分Claude Codeの支援によって作成されています。
2.0(sonet4.5)以降、あんまりトークン使わない印象があるので、20Xじゃなくでもいいかもって気持ちにはなってきた。
npmパッケージ
npmに公開しました。
https://www.npmjs.com/package/kindle-title-exporter
グローバルインストールも可能ですが、しなくていいと思います。
なお、Github レポジトリは下記です。
github.com
免責
本ツールは非公式であり、AmazonまたはKindleとは一切関係がなく、承認や推奨を受けたものではありません。
「Kindle」はAmazon.com, Inc.の登録商標です。本ソフトウェアは、機能説明のためにのみ(Kindle for Macのデータベースファイルを読み取る)「Kindle」という名称を使用しています(nominative fair use)。本ツールは、デジタル著作権管理(DRM)やコピープロテクション機構を改変、回避、妨害するものではありません。
リンク