ライブラリ¶
ライブラリは Melanite のデータの単位です。<名前>.melanite という 1 つのフォルダに、
データベース・ファイル実体・サムネイルのすべてが入っています。
ライブラリの操作¶
| やりたいこと | 操作 |
|---|---|
| 新規作成 | ウェルカム画面の「新規ライブラリを作成…」→ 場所と名前を決める |
| 既存のライブラリを開く | ウェルカム画面の「ライブラリを開く…」→ .melanite フォルダを選ぶ |
| 最近のライブラリを開く | ウェルカム画面の「最近使ったライブラリ」の行をクリック |
| 一覧から消す | その行の右端の × |
| 閉じる | Sidebar 上部のライブラリ名の横の × |
同時に開けるライブラリは 1 つです。切り替えたいときは閉じてから別のライブラリを開きます。
「最近使ったライブラリ」から消してもライブラリは残ります
行の右端の × が消すのは、この一覧の記録だけです。.melanite フォルダも中身も
そのまま残ります。もう一度使いたくなったら「ライブラリを開く…」から選び直せます。
外付けドライブに置いたライブラリや、削除済みのライブラリが一覧に残って邪魔なときに 使ってください。
ライブラリを分けるべきか
基本は 1 つの大きなライブラリで構いません(10 万アイテムを想定した設計です)。 仕事とプライベートを完全に分離したい、といった明確な理由があるときだけ分けてください。 ライブラリをまたいだ検索やリンクはできません。
分け方を間違えても、アイテムはタグ・リンク・メモごと引っ越せます → 別のライブラリへ移動する
フォルダの中身¶
MyLibrary.melanite/
├── melanite.json # ライブラリの目印。フォーマットバージョンと作成日
├── melanite.db # SQLite。メタデータ + 全文検索インデックス
├── files/
│ └── <ULID>/<元のファイル名> # ファイルの実体
├── thumbs/
│ └── <ULID>.webp # サムネイルのキャッシュ
├── trash/
│ └── <ULID>/… # ゴミ箱に入れたファイルの実体
├── backups/
│ └── melanite-<日時>-<種別>.db # メタデータのバックアップ (下記)
└── .lock # 起動中プロセスの情報 (アプリ実行中のみ存在。下記)
ここが Melanite の設計の中心です。
- ファイルは元の形式のまま
files/<ULID>/<ファイル名>に保存されます。 独自形式への変換も、エンコードもしません - したがって、Melanite がなくてもファイルは Finder / エクスプローラーから取り出せます
melanite.jsonがあるフォルダが「ライブラリ」です。これが無いと Melanite は開けませんthumbs/は消しても良いキャッシュです(整合性チェックで再生成できます)
.lock が見当たらないとき
.lock は次の 2 つの理由で、普段は目に入りません。異常ではありません。
- アプリの実行中しか存在しません。 ライブラリを閉じると削除されます
- 先頭が
.の隠しファイルです。macOS の Finder では Cmd+Shift+.、 Windows のエクスプローラーでは「隠しファイル」の表示をオンにすると見えます
バックアップ¶
フォルダごとコピーする(いちばん確実)¶
フォルダをコピーするだけです。それで完全なバックアップになります。
引っ越しも同じで、.melanite フォルダを新しいマシンにコピーして開けばそのまま続きが使えます。
コピーするときはアプリを閉じてから
Melanite でライブラリを開いたままコピーすると、データベースの書き込み途中の状態を 拾ってしまう可能性があります。閉じてからコピーしてください。
メタデータのバックアップ(アプリが自動で取ります)¶
Melanite は melanite.db のスナップショットをライブラリ内の backups/ に世代で残します。
設定 →「バックアップ」タブで確認・変更できます。
melanite.db にはタグ・リンク・メモ・位置情報・お気に入り・日時が入っています。
ファイル本体は files/ に元の形式のまま残るので、再作成できないのはこのデータベースだけです。
バックアップの対象を melanite.db に絞っているのはそのためで、files/ は含まれません
(容量が何倍にもならないようにするためです)。
取られるタイミングは 3 つです。
| 種別 | いつ | 備考 |
|---|---|---|
| 自動 | ライブラリを開いたとき | 前回から設定した日数(既定 1 日)が経っていれば。開くたびには取りません |
| 更新前 | アプリの更新でデータベースの形式が変わる直前 | 必ず取られ、世代数に関係なく最新の 1 件が残ります |
| 手動 | 「今すぐバックアップ」を押したとき |
| 設定 | 既定 | 内容 |
|---|---|---|
| 残す世代数 | 5 | 古い世代から削除します |
| 自動取得の間隔 (日) | 1 | 0 にすると自動バックアップを止めます |
これは「フォルダごとのバックアップ」の代わりにはなりません
backups/ はライブラリフォルダの中にあります。ディスクごと失えば一緒に失われます。
ファイル本体まで守りたい場合は、フォルダごとのコピーを別の場所に取ってください。
クラウド同期はバックアップではありません
Dropbox 等はデータベースが壊れた状態もそのまま同期します。世代のあるバックアップと 同じ役割は果たしません。
中身を JSON で見たいとき
バックアップはデータベースの複製なので、開くには SQLite を扱えるツールが要ります。 タグ・リンク・メモ・位置情報などをアプリの外から読める形で取り出したいときは、 同じタブのメタデータの書き出しを使ってください (1 つの JSON ファイルになります。書き戻すことはできません)。
データベースが壊れたときの復旧¶
ライブラリを開くときにデータベースの破損を見つけると、復旧のダイアログが出ます。 戻したい時点を選ぶと、その世代でデータベースを差し替えて開き直します。
差し替える前のデータベースは melanite.db.replaced-<日時> としてライブラリに残ります
(新しいものから 3 本まで)。すぐに消えるわけではないので、選び直すこともできます。
復旧すると、バックアップを取った時点以降の変更は失われます。ただしファイル本体は
files/ にそのまま残っているので、失われるのはその間に付けたタグ・リンク・メモなどです。
復旧のあとに整合性チェックを実行すると、
バックアップ後に取り込んだファイルが「実体があるのに DB にない」として出るので、
取り込み直せます。
バックアップが 1 つも無いとき
ライブラリフォルダのコピーが手元にあれば、その中の melanite.db を
壊れたライブラリの melanite.db に上書きしてから開き直してください
(melanite.db-wal と melanite.db-shm が残っていたら、一緒に削除してください)。
クラウドストレージに置く場合¶
ライブラリを Dropbox / iCloud Drive / OneDrive に置くこと自体は妨げない設計ですが、 注意して使ってください。
- Melanite は単一プロセスからのアクセスを前提にしています
- 2 台のマシンで同時に同じライブラリを開くと、データベースが壊れる可能性があります
.lockファイルで多重起動を検出しますが、これは排他制御ではなく事故の検出です。 クラウド同期の伝播には数秒〜数十秒かかるため、その間の同時オープンは検出できません
安全に使うなら「同時に触るのは常に 1 台だけ」を守り、切り替えるときは必ずアプリを閉じてください。 さらに、同期が両方のマシンで完了してから次のマシンで開いてください。閉じた直後は まだ転送が終わっておらず、古い状態のまま開いてしまうことがあります。
「別のマシンで開かれているかもしれません」と出たら¶
他のマシンが開いたときの記録(.lock)が残っていると、この確認が出ます。Melanite には
相手が今も開いているのか、異常終了して記録だけが残っているのかを判別する手段がありません。
そのため自動では決めず、確認をお見せします。
- 相手のマシンでまだ開いているなら「キャンセル」を選び、そちらで閉じてください
- 相手のマシンですでに閉じている、またはクラッシュして記録だけ残っている場合は 「それでも開く」で開けます
「それでも開く」を選ぶと確認なしで開くため、本当に相手が閉じているかを必ず確かめてから 選んでください。同時に開くとデータベースが壊れることがあります。
「別のプロセスが開いています」と出たら¶
同じマシンで Melanite が二重に起動しています。もう一方のウィンドウを使ってください
(こちらはプロセスの生存を確認できるため、続行の選択肢は出ません)。
クラッシュ後に残った .lock は自動で回収されるので、手動削除は基本的に不要です。
整合性チェック¶
データベースの記録とファイル実体がズレていないかを確認できます。
Sidebar 下部の「⚙ 設定…」→「メンテナンス」タブから実行します。
チェックされるのは主に次の 2 方向のズレです。
- DB にあるのに実体がない — 外部から
files/を消してしまった場合など - 実体があるのに DB にない — 外部から
files/に置いた場合など
レポートの見かた¶
問題が無ければ 「ライブラリは健全です」、あれば 「要確認の項目があります」 が出ます。
その場で自動的に直るもの(結果が件数で報告されます)
| 項目 | 内容 |
|---|---|
| 外部での変更の反映 | 実体ファイルが外部で更新されていたら、サイズ・更新日時を取り込み直します |
| 名前の正規化 | macOS 由来の濁点分解(「が」が「か」+ 濁点の 2 文字に分かれる現象)を直します。タグ名も対象で、正規化した結果同じ名前になったタグは統合されます |
| 画像の寸法の補完 | 取り込みのときに寸法を読めなかった画像(HEIC など)の縦横を、実体から読み直して埋めます |
| 検索インデックスの再構築 | 全文検索の索引を作り直します |
| サムネイルの生成 | まだサムネイルが無いものだけを背景で生成します(過去に失敗したものは再試行しません → サムネイルを作り直す) |
こちらの判断が要るもの(レポートに一覧が出ます)
| 項目 | 対処 |
|---|---|
| 実体ファイルが見つからない登録 | 「登録を削除…」で、その登録(タグ・メモ・リンクなどの記録)を消します。元に戻せません |
| DB に登録がないフォルダ | ライブラリ内に残っているファイルです。必要ならそのフォルダの中身をドラッグ&ドロップで再取り込みしてください(勝手には登録しません) |
| 同じ内容のアイテム | 下記の「同じ内容のアイテムの整理」 |
「登録を削除…」の前に、実体が本当に無いか確かめてください
ファイルが一時的に見えていないだけでも「見つからない」に入ります。たとえば ライブラリをクラウドストレージに置いていて、実体がまだ端末に降りてきていない場合です (iCloud Drive の「ストレージを最適化」など → クラウドストレージに置く場合)。
「登録を削除…」は DB の行だけでなく、そのアイテムのフォルダごと消します。 後からファイルが降りてきても戻せません。心当たりがあるときは、 同期が完了してからもう一度チェックを実行してください。
同じ内容のアイテムの整理¶
チェックのレポートには、内容がまったく同じアイテムの組も出ます (別のライブラリから移行した、ゴミ箱から戻した、などで入り込んだ重複です)。
「N 件をゴミ箱へ送る」を押すと、各組の取り込みが最も古い 1 件を残して残りがゴミ箱へ移ります。
- ゴミ箱へ送る側に付いていたタグは、残す側へ引き継がれます
- 完全削除ではないので、取り違えてもゴミ箱から復元できます
テンプレートから作ったまま編集していないファイルに注意
テンプレートから新規作成した直後のファイルは、 雛形と中身が 1 バイトも違いません。中身を変えて保存する前にこの整理を実行すると、 先に取り込まれている雛形が残り、作ったばかりのファイルの方がゴミ箱へ入ります。 そのファイルに付けたタグも雛形の側へ移ります。
ゴミ箱から元に戻せます(付けたタグも一緒に戻ります)が、雛形の側に移ったタグは そのまま残ります。作ったファイルは先に開いて保存してからこの整理を実行してください。 保存すれば内容が変わるので、重複の一覧には出てこなくなります。
外部から files/ に直接ファイルを置かないでください
Melanite は「ファイル操作の成功 → DB 登録」の順で書き込みます。
files/ に手で置いたファイルは DB に登録されていないため、一覧にも検索にも出てきません。
取り込みは必ずアプリから行ってください。