TeaTime - SQLite、IPFS、GitHubで動作する分散型ライブラリシステム
(github.com/bjesus)- IPFS、SQLite、GitHub を基盤とする完全な静的分散ライブラリシステム
- Netlify と GitHub Pages で自動更新されるインスタンスをホスティング可能
分散ライブラリ
- TeaTime の Web アプリケーションは、データベースおよび取得するファイルから完全に分離されている。
- 使用されるデータベースは、GitHub Pages に公開された
teatime-databaseトピック付きの GitHub リポジトリ。 - 各リポジトリには、SQLite データベースを指す
config.jsonファイルが含まれる。 - ユーザーは検索を実行する前に使用するデータベースを選択し、TeaTime は
sql.js-httpvfsを使って SQLite データベースにクエリを実行する。 - SQLite データベースの各行はライブラリ内の項目であり、ファイルハッシュ列は IPFS から項目を取得するために使われる。
- Web アプリケーションは静的サイトであり、データベースも静的ファイルで構成されているため、簡単にフォーク、複製、デプロイできる。
- フロントエンドのインスタンスは、
teatime-instanceトピック付きの GitHub リポジトリ。 - ファイルは IPFS から配信されるため、この分散アーキテクチャは TeaTime の耐障害性を高める。
機能
- タイトル、著者、年、または形式で検索可能
- 読書履歴を保持し、ファイルを再度開いたときにそのページへ戻れる
- ファイルをローカルにダウンロード
- IndexedDB にファイルをキャッシュして高速読み込み
- TeaTime にファイルをドロップしてレンダリング
- ダークモードおよび全画面モード
- クッキーなし、ログインなし
- 完全に分散化
フロントエンド開発
- TeaTime は Nuxt.js アプリケーション。
- ローカルで簡単に実行可能: リポジトリをクローンして次の手順を実行
- 依存関係をインストール:
npm install - サーバーを起動:
npm run dev http://localhost:3000に移動
- 依存関係をインストール:
- 追加情報は Nuxt のドキュメントを参照
データベース作成
- JSON ベースのデータベースリポジトリをフォークし、JSON ファイルを必要に応じて調整することでデータベースを作成できる。
- GitHub Actions が SQLite ファイルを生成し、GitHub Pages にアップロードする。
- TeaTime と連携できる SQLite データベースを手動で作成する場合は、データベースリポジトリの例に従う。
- 各 SQLite データベースには、以下のスキーマを持つテーブルが含まれる。列名は
config.jsonファイルで調整可能。CREATE TABLE "books" ( "id" INTEGER, "title" TEXT, "author" TEXT, "year" INTEGER, "lang" TEXT, "size" INTEGER, "ext" TEXT, "ipfs_cid" TEXT, PRIMARY KEY("id" AUTOINCREMENT) ); - SQLite ファイルが大きすぎる場合は分割可能。データベース最適化情報を参照する必要があり、FTS の利用を推奨。
- リポジトリを GitHub Pages に公開し、リポジトリに
teatime-databaseトピックを割り当てる
貢献
- コーディングができなくても、このリポジトリやお気に入りのデータベースリポジトリをフォークして貢献できる。
- リポジトリをフォークする際は、直接的に関連付けられないよう手動でフォークするのが望ましい(
git clone&&git remote add your-origin ...&&git push your-origin main)。 - 有用なデータベースリポジトリにスターを付けるのも良い方法。これは TeaTime ユーザーインターフェース上でデータベースの表示順を決め、他のユーザーが最良のデータベースを見つけやすくする。
1件のコメント
Hacker Newsのコメント
IPFSのコントリビューターが、IPFSで複数のゲートウェイからのダウンロード処理を改善する方法を提案している
@helia/verified-fetchを使えば、Fetchに似たAPIを通じてCIDを受け取り、コンテンツルーティングとP2P探索を処理できるPear P2Pフレームワークは、GitHubから離れて真に分散されたシステムへ移行する助けになるかもしれない
Heliaを使って、ユーザーがネットワークのノードとして貢献できるようにすることを検討している
特定のリソースにアクセスする際、CORSポリシーによってブロックされる問題が発生している
no-corsに設定すれば、CORSを無効化した状態でリソースを取得できるすべての処理はブラウザ上で行われ、ユーザー、Cookie、トラッキングが存在しない
TeaTimeで使われているデータベースは、GitHub Pagesに公開されたGitHubリポジトリである
データベースに何が入っているのかわからないため、何を検索すればよいのかわからない
サンプルインスタンスを利用できるかという質問がある
Pocketのブックマークを統合できるか気にしている