HN 日本語サマリー

← 一覧へ戻る
その他

KizunaShelfの紹介:愛するすべてを収めるためのシェルフ

Introduction to KizunaShelf: A shelf for everything you love (mudkip.me)

9 pointsby mudkipme1 コメント

要約

KizunaShelfは、書籍、映画、音楽など、人生に影響を与えたあらゆるものを記録・管理するためのツールです。Markdownファイルとフロントマターを基本とし、Obsidianなどのエディタと連携します。柔軟なスキーマ定義と豊富なメタデータプロバイダー連携により、ユーザーは自分だけのデータベースを構築できます。

全文翻訳

誰もが、本、映画、テレビ番組、アニメ、あるいは曲など、自分の人生に刻まれたものを追跡する方法を持っています。時には巨大なカタログを持つオンラインサービスもありますが、プラットフォームが何を残し何を残さないかを決定することに常に翻弄されます。あるいは、楽しくデザインされたオフラインのモバイルアプリもありますが、多様な興味が単一の定義済みカタログやデータモデルに収まることはめったにありません。さらに、それらのアプリやサービスは明日消えてしまうかもしれません。数え切れないほどのツールを試した後、私は本当に自分でコントロールできるものが欲しいと気づきました。Airtableでカスタムデータベースを構築し始め、次にNotionに移り、最終的にはNocoDBをセルフホストしてみました。結局、データベースを絶えず移行するのではなく、アプリよりもファイルという哲学を採用することにしました。Obsidian Vaultに落ち着き、私が気にするすべてがMarkdownファイルになり、フロントマターを備え、Dataview、そして後にObsidian Basesを使用して整理されるようになりました。しかし、2,000以上のMarkdownファイルを管理するデータベースを手動で管理することは、新たな種類の摩擦を生み出しました。メタデータを探し回ったり、ステータスを更新したり、日付を追跡したりすることです。司書のように振る舞うという退屈な作業が、次に楽しむものを発見するという本来の喜びを置き換えました。KizunaShelfは、それらすべてに対する答えです。 デザイン哲学 私が常に念頭に置いている原則の一つは、KizunaShelfが単なるメディアトラッカーではないということです。代わりに、Airtableのようなデータベースの動的な柔軟性をもたらし、ユーザーが自分のデータの意味を正確に定義できるようにします。スキーマは検査および変更可能であり、意味のソースオブトゥルースとして機能します。Vaultフォルダに保存された単一のKizunaShelf/config.yamlファイルが、タイプ、フィールド、および各フィールドの特定の役割を宣言します。それは以下を定義します。 どのフィールドがアイテムのタイトルを表し、そのタイトルがどの言語であるか。 どのフィールドが日付を表し、その日付が何を表すか(例:ゲームのリリース日、アニメを見始めた日、または特定のイベントが発生した日)。 どのフィールドがステータスを表し、そのカスタムオプションリストとともに。 オブジェクトが互いにどのように関連し、異なるタイプをどのように接続するか。 しかし、スキーマの複雑さに気後れする必要はありません。KizunaShelfは、従来のメディアトラッカーで期待されるすべてのデフォルトプリセットをすぐに提供します。アニメ、テレビ&ドラマ、映画、ゲーム、ボードゲーム、書籍、マンガ&コミック、音楽アルバム、ポッドキャスト、アーティスト&クリエイター、キャラクターなどの定義済みプリセットからすぐに選択できます。これらのタイプは、すでに知っている外部メタデータプロバイダー、例えばTMDB、TheTVDB、IGDB、Bangumi、Apple Music、MyAnimeList、Google Booksなどにも直接接続できます。 KizunaShelfにアイテムを追加するのは非常に迅速かつ簡単です。プラスボタンをタップし、探しているものを検索し、タップして追加するだけです。カバーはローカルにダウンロードでき、ステータスと日付は後で自分のペースで記録できます。KizunaShelfは、「サブアイテム」の概念も理解しており、アニメのエピソードやCDのトラックリストなどを、同じMarkdownファイル内でチェックリストまたは箇条書きリストとして個別に追跡できます。 エンジニアリングアーキテクチャ 内部では、これは興味深いエンジニアリング実験でした。このプロジェクトには非常に具体的で野心的なチェックリストがありました。 どこからでもアクセスできるセルフホスト型Webアプリ。 macOS、Linux、Windows上の軽量デスクトップアプリで、Obsidianと同じローカルフォルダを開きます。 楽しく、素早く、私の電話にネイティブな真のモバイルアプリ。 デスクトップアプリの答えはTauriでした。しかし、モバイルの解決は「もし〜だったら」という瞬間につながりました。RustコアをUniFFI経由でSwiftモジュールに直接ブリッジし、その周りにネイティブSwiftUIアプリを書いたらどうなるだろうか?これは別の課題を引き起こしました。実質的に「2.5クライアント」(TauriデスクトップアプリはWebアプリとほぼすべてのフロントエンドコードを共有しているため)間で、Rustコアを完全に一致させるにはどうすればよいでしょうか?私の解決策は、Rustバックエンドから直接OpenAPI(Swagger)仕様を生成し、その仕様を使用してTypeScriptとSwiftクライアントを自動生成することでした。結果は真にクロスプラットフォームなアーキテクチャです。iOSアプリは完全にネイティブなSwiftUIであり、デスクトップアプリはElectronの重さを回避しています。将来のAndroidアプリもこの全く同じアーキテクチャに従うことができ、プラットフォームに完全にネイティブでありながら他のクライアントと機能を一致させることができます。 アプリ構築中に遭遇した一つのつまずきは、異なるプラットフォームでのUnicode NFC対NFD正規化でした。これは解決され、ファイル名でPokémonまたはポケモンを使用しても安全です。ウィキリンクと関係マッチングは、NFC/NFDの違いを超えて正規化されます。 kizuna(絆):つながり続けるものの間の絆 アニメシリーズ、ビデオゲーム、またはこのアプリの名前の由来となった音楽プロジェクトなど、多くの作品が私にとって世界を意味します。それらは記憶する価値があり、私たちの人生の特定の瞬間と結びつけられるべきです。KizunaShelfは、まさにそれらのつながりをマッピングするように設計されています。カレンダーは、あなたが気にかけているものを言及した今後のリリース、計画、および日々のジャーナルエントリを追跡します。一方、アクティビティフィードは、これらの瞬間を、あなたが視聴、プレイ、読んだもののタイムラインにキュレーションし、それらがあなたの人生の一部になった正確な時期を記録します。 アイテム間のつながりはKizunaShelfの中心です。フロントマターの関係、ウィキリンク、バックリンク、リストを1つの詳細なビューに集めることで、アプリはすべてを1か所にまとめます。お気に入りのアニメキャラクター、その声優、あなたが参加した実際のイベント、そして棚に座っているフィギュアです。 2017年5月のある日、秋葉原のレトロゲーム店に入り、Ever17を含むPSPゲームのバンドルを購入しました。その正確な瞬間、LeMUの出来事がリアルタイムで展開していました。その記憶は、このアプリが存在する理由である絆そのものです。 永遠に、夢のために 数ヶ月間このアプリを構築し、数週間ドッグフーディングしてきました。KizunaShelfのiOSバージョンが現在TestFlightでベータテスト用に利用可能であり、オープンソースのデスクトップ版とセルフホスト型Web版もまもなく利用可能になります。Android版は今年後半または来年に予定されています。私は今後もこのアプリを維持していくつもりです。しかし、すべてのアプリはいずれ消えていきます。KizunaShelfは、それ自身の寿命を念頭に置いて設計されています。アプリにはデータを保存するサーバーも、独自のフォーマットもありません。KizunaShelfに保存されているすべては、プレーンなMarkdownと、人間が読めるフロントマターが少し含まれています。既存のエコシステムとよく統合されるように、いくつかのトリックも使用しました。アニメやテレビ番組のエピソードには、放送日の📅があり、そのエピソードをチェックすると、Obsidian Tasksで表現されているように、✅日付が追加されます。スマートリストはObsidian Basesフォーマットのサブセットを使用しているため、Obsidianで開いて全く同じアイテムを表示できます。あなたのデータは、このアプリがあってもなくても、永遠にあなたと共にあります。