プログラミング
Fileregister: ファイルのタグ付けと参照レイヤーをプレーンテキストで
Fileregister: Tagging and reference layer for your files, in plain text (github.com)
要約
Fileregisterは、ファイルに永続的なIDと自己文書化されたバインダーを付与するツールです。ファイルへの参照レイヤーをプレーンテキストで管理し、ファイル名変更や移動後も参照を維持します。JSONLインデックスとMarkdownサイドカーで構成され、Gitで管理可能です。
全文翻訳
fileregister ファイルにタグ付けと参照レイヤーをプレーンテキストで、永続的なIDと自己文書化されたバインダーを備え、マシン上でのリネームや移動を超えて、別のものにも引き継がれます。
何をするか
register は、あなたが渡したすべてのファイルに対してレコードを書き込みます。永続的なID、それが属するバインダー、および追加した任意のフィールドです。レコードは、ノートの隣にあるJSONLインデックスに格納されます。catで読み取り可能、grepで検索可能、gitで管理されます。インデックスが真実の情報源です。
各レコードは、Markdownサイドカーを運ぶことができます。ファイルごとのノートで、ハードファクトをYAMLフィールド(金額、支払い日、サプライヤー、キャプション)として保持し、自由な散文も併記します。フィールドは grubber と matterbase がクエリするもので、散文はあなたのためです。これが、プレーンなファイルのセットを自己文書化バインダーに変えるものです。プロジェクトのワークブック、フォトアルバム、説明するコレクションです。
ファイル自体に書き込まれるもの(xattrのID、macOSブックマーク、Finderタグ、Spotlightフィールド)は、インデックスから派生したキャッシュです。ファイルがリネーム、別のディスクへの移動、または2台目のMacへのコピーされても参照を維持し、register refresh は、ドリフトした場合やコピーが剥がされた場合にインデックスから再構築します。
register 自体はポータブルなGo製です。OS固有の作業は fileanchor エンジン(現在はmacOS用)の背後にあります。Linux fileanchor は、Linuxで実行するための唯一のピースです。
最初のセッション
GRUBBER_NOTES=~/notes # インデックスとノートの場所
register add ~/scans/scan_0043.pdf --binder insurance --aka car-policy
register list insurance
register resolve car-policy # パスを表示します(現在の名前に関わらず)
open "$(register resolve car-policy)"
ドキュメントを一時的な名前でスキャンしました。--aka car-policy は、実際に覚えているハンドルを与えます。6ヶ月後、ファイルは policy-2026.pdf となり、NASに置かれます。register resolve car-policy は依然としてそのパスを表示し、register of /Volumes/nas/policy-2026.pdf はファイルからIDを読み取り、どのバインダーに含まれているかを報告します。
何ができるか
プロジェクトのドキュメントを収集する。バインダーはレコードのセットであり、フォルダではありません。契約書、2つのスキャン、スプレッドシートは、いくつかの異なるフォルダにまたがっていても、セッションのために1つの作業セットを形成します。ファイルをバインダーに追加しても移動せず、同じファイルが複数のバインダーに同時に存在できます。
register list はバインダーとその数をすべて表示し、register list <binder> はそのメンバーを表示します。--paths はパイプ処理するための絶対パスを提供します。
ファイルにデータを添付する。
register promote は、バインダーの内容(金額、支払い日、サプライヤー、キャプション、散文)を記述したMarkdownノートをYAMLブロックごとに書き込みます。同じファイルが、異なるバインダーで異なるフィールドを持つことができます。
register annotate は、スクリプトまたはGUIからノートを開かずに、同じ編集を行います。
リンクを機能させるためにファイルにリンクする。
はい、Hookmarkのようなものですが、データベースではなくプレーンテキストです。--aka は、ファイル名とは無関係のハンドルをレコードに与えます。register resolve <handle> は、milan:// URL、ショートカット、またはシェルエイリアスでパスに戻します。ルックアップはレコードを経由するため、リンクはリネームや移動後も有効です。
ファイルを逆に検索する。
register of <file> は、ファイル上のIDから「これは何で、何の一部か?」と答えるため、リネームしても壊れません。
バインダーを順序付ける。
バインダーは順序付けられていないセットのままです。順序は、ノートのキーを編集する sort: register order move によって行われます。ORDERING.md を参照してください。
バインダーをフォトアルバムとしてレンダリングする。
register album <binder> --open は、サムネイル、キャプション、画像ごとのマップを備えた静的HTMLフォルダを生成します。JavaScriptは使用しません。キャプションはノートのフィールドです。--milan を使用すると、アルバムはLAN上に公開されます。ALBUM.md を参照してください。
別のマシンでバインダーを再構築する。
register marshal は、ファイル、ノート、マニフェストを tar.gz にパックします。register unmarshal は、反対側で解凍し、ファイルを元のパスにミラーリングし、レコードを再作成します。同じバインダー、ハンドル、および作業リンクが、2台目のMacで利用可能になります。collections/ 外のパスへのミラーリングはオプトインであり、明示的です(--scatter)。そのため、他人からのコンテナは好きな場所に書き込むことはできません。コンテナはOSニュートラルなので、exFAT、-Eなしのrsync、またはxattrを消費するクラウドフォルダを経由できます。
macOS側を同期させる。
register refresh は、レコードの状態をタグ、Spotlightフィールド、xattrにプッシュします。register audit は両方向のドリフトを報告し、register repair は移動したファイルを再バインドし、register cleanup は人間の判断が必要なものをすべてウォークスルーします。それらのいずれも、単独でレコードを削除することはありません。
全体をクエリする。
インデックスはJSONLで、ノートはMarkdownのYAMLなので、grubber は両方をクエリでき、matterbase はそれら over テーブルビューとクエリビルダーを提供します。WORKFLOWS.md を参照してください。「macOSにはすでにタグがある」という質問については、RATIONALE.md を参照してください。短いバージョン:fileregister はそれらを使用し、それらを再構築できます。
コマンド
register <subcommand> [args...]
サブコマンド
Purpose
add
レコードをインデックスに追加します(ブックマーク + xattr + レコード)。--binder を指定すると、ファイルはそのバインダーに参加します。指定しない場合は、ブックマーク(永続的なIDとオプションのaka、バインダーなし)を取得します。--md は注釈ノートも書き込みます
promote
バインダーのレコードのMarkdownブロックを書き込みます。--edit は $EDITOR でノートを開きます
annotate
コマンドラインから既存のブロックのフィールドまたは散文を編集します(--set、--unset、--prose)
remove
バインダーからファイルを取り除きます。バインダーセットが空になったレコードはブックマークとして残ります
refresh
レコードの状態をmacOSメタデータにプッシュします
audit
両方向の読み取り専用整合性レポート
repair
移動したファイルの壊れたブックマークを、変更されていないIDの下で再バインドします。Spotlight経由で検索します
rename
バインダーをすべてのレコードとxattrでリネームします。既存の名前へのリネームには --merge が必要です
cleanup
レイヤー間のドリフト(古いブロック、インデックス化されていない注釈、ブックマーク)を確認し、アイテムごとに決定します
write
標準入力からJSONLを読み取り、MarkdownまたはJSONLに参照レコードを書き込みます
list
すべてのバインダーとその数、または1つのバインダーのファイルを表示します。--inbox/--curated は注釈ステータスでフィルタリングします。--paths および --json はパイプ処理用です
resolve
IDまたはakaハンドルをパスに変換します。--record は完全なレコードを表示します。
ファイルを与えると、そのID、aka、およびバインダーを報告します
marshal
バインダーのファイル、ノート、マニフェストをポータブルなtar.gzにパックします
unmarshal
コンテナを解凍し、ファイルを元の場所にミラーリングし、レコードを再作成します。冪等性があり、競合は保留されます。collections/ 外のオリジンには --scatter が必要です
reindex
Markdown参照ブロックからインデックスを再構築します。--dry-run でプレビューします
order
バインダーをプレゼンテーション用に並べ替えます(set/show/move)
album
バインダーを静的HTMLアルバムとしてレンダリングします。--milan はLAN上に公開します
その他の例
# セッションバインダー。そのため、以下の --binder を省略できます
export REGISTER_BINDER=project-alpha
register add document.pdf --kind pdf
register add ~/scans/*.pdf --kind pdf
# 一括処理: 1つのブックマーク書き込み、1つの追加
register add document.pdf --aka alpha-brief # バインダーなし: ハンドル付きブックマーク
register add document.pdf --md # 注釈ノートも書き込む
register promote # バインダー全体にブロックを適用
register promote --id 482910337 # または単一レコードのみ
register annotate project-alpha alpha-brief --set amount=142.50 --set status=paid
register list --inbox # 注釈がまだないレコードを持つバインダー
register list project-alpha --paths
register order move project-alpha 482910337 --after 482910901
register album project-alpha --open
register marshal --binder project-alpha --out project-alpha.tar.gz
register unmarshal project-alpha.tar.gz # 別のマシンで
register refresh --dry-run
register audit --binder project-alpha
register repair --interactive
register reindex --dry-run
インストール
すでにPATHにfileanchorがある場合:
go install github.com/rhsev/fileregister/cmd/register@latest
そうでない場合は、チェックアウトから両方をビルドします:
make fileanchor # メタデータエンジン(Swiftツールチェーンが必要)
make install # デフォルトで ~/bin にインストール
make install PREFIX=/usr/local/bin
Go、