evernote-data-handling について
Evernote データの処理を支援するスキルで、ローカル保存、ENML 変換、添付ファイル、同期、エクスポートを扱います。Evernote コンテンツのデータ処理フローやローカルミラーを構築する開発者向けです。
主な機能
- 01Evernote データスキーマの設計
- 02ENML のテキスト・HTML 変換
- 03添付ファイルの保存とハッシュ検証
- 04USN による差分同期
- 05ENEX、JSON、Markdown へのエクスポート
活用シーン
- 01ノートのローカルデータベースへのミラーリング
- 02ENML コンテンツの変換
- 03ノートブックのノートを Markdown に出力
- 04添付ファイルとノート変更の同期
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jeremylongshore/ tons-of-skills-marketplace --skill evernote-data-handlingインストール後、Claude Code で/evernote-data-handlingを入力して読み込まれたか確認します。
同梱ファイルreferences/implementation-guide.md
詳細
Evernote データの取り扱い
概要
ENML コンテンツの処理、添付ファイルの管理、ローカルデータベースとの同期、ENEX のエクスポート/インポートなど、Evernote データを取り扱う際のベストプラクティスです。
前提条件
- Evernote のデータモデル(ノート、ノートブック、タグ、リソース)の理解
- ローカルストレージ用のデータベース(SQLite、PostgreSQL など)
- 添付ファイル用のファイルストレージ
手順
ステップ 1:データスキーマの設計
Evernote のデータモデルを反映したローカルデータベーススキーマを設計します。主なテーブルは、notes(guid、title、content、notebookGuid、created、updated、USN)、notebooks(guid、name、stack)、tags(guid、name)、resources(guid、noteGuid、mime、hash、size)です。差分同期のために、更新シーケンス番号(USN)を追跡します。
CREATE TABLE notes (
guid TEXT PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
notebook_guid TEXT REFERENCES notebooks(guid),
created BIGINT,
updated BIGINT,
usn INTEGER DEFAULT 0
);
ステップ 2:ENML コンテンツの処理
ENML を解析してプレーンテキストを抽出(タグを除去)したり、HTML に変換(<en-note>を<body>に置き換え、<en-media>を<img>/<a>タグに解決)したり、Markdown に変換したりします。API に送信する前に、必須宣言や禁止要素を確認して ENML を検証します。
function enmlToPlainText(enml) {
return enml
.replace(/<\?xml[^>]*\?>/g, '')
.replace(/<!DOCTYPE[^>]*>/g, '')
.replace(/<[^>]+>/g, ' ')
.replace(/\s+/g, ' ')
.trim();
}
ステップ 3:リソース(添付ファイル)の処理
noteStore.getResource(guid, withData, ...)を使ってリソースをダウンロードします。バイナリデータは、ファイル名に MD5 ハッシュを使用してローカルに保存します。適切なコンテンツタイプで配信できるよう、MIME タイプを記録します。整合性検証のためにハッシュを計算します。
ステップ 4:同期データマネージャー
getSyncState()を使って現在のサーバー USN を取得し、getSyncChunk()を使って前回の同期以降の変更を取得する、差分同期を実装します。チャンクはノートブック、タグ、ノート、リソースの順に処理します。
const syncState = await noteStore.getSyncState();
if (syncState.updateCount > lastSyncUSN) {
const chunk = await noteStore.getSyncChunk(lastSyncUSN, 100, true);
// Process chunk.notebooks, chunk.tags, chunk.notes, chunk.resources
}
ステップ 5:データのエクスポート
ノートを ENEX(Evernote の XML エクスポート形式)、JSON、または Markdown にエクスポートします。ENEX はリソースを含むノートの完全な構造を保持し、Evernote へのインポートにも対応しています。
完全なデータスキーマ、同期マネージャー、ENML プロセッサー、エクスポートの実装については、実装ガイドを参照してください。
出力
- ローカルの Evernote データストレージ用 SQL スキーマ
- ENML からテキストおよび HTML へのコンバーター
- リソースのダウンロードおよびローカルストレージマネージャー
- USN の追跡を利用する差分同期エンジン
- ENEX、JSON、Markdown のエクスポートユーティリティ
エラー処理
| エラー | 原因 | 解決策 |
|---|---|---|
BAD_DATA_FORMAT | 更新時の ENML 形式の不備 | API 呼び出しの前に DTD チェックで ENML を検証します |
QUOTA_REACHED | アップロード制限の超過 | ノートを作成する前にuser.accounting.uploadedを確認します |
DATA_CONFLICT | 前回の読み取り後にノートが変更された | GUID でノートを再取得し、変更をマージします |
| 同期チャンクの欠落 | USN 範囲の取りこぼし | USN 0 から全件同期をリクエストします |
リソース
- Evernote データモデル
- ENML リファレンス
- 同期
- ENEX エクスポート形式
次のステップ
エンタープライズ機能については、evernote-enterprise-rbacを参照してください。
例
ローカルミラー:差分同期を使って、すべてのノートをローカルの SQLite データベースに同期します。リソースは MD5 ハッシュをキーとしてディスクに保存します。ローカルミラーを使用すると、API を呼び出さずに全文検索できます。
Markdown エクスポート:ノートブック内のすべてのノートを Markdown ファイルに変換し、ノートブックスタックのフォルダー構造を保持して、添付ファイルをassets/ディレクトリに保存します。