なんか普通に、Obsidianのプラグインとサービスを作ったほうが早そうと思った。
Obsidianのプラグイン・サービスを作りたい話
なにが必要なのか
- Web公開
- 公開してGoogleやBingのインデックスに登録されることで、他人から発見され知識の交流が行われる。自分の知識が他人とつながることで知識が進化する。
- 2-hop-link
- 2-hop-linkによって、リンク構造がわかりやすくなる。より簡単に関連性を表現できる。
- 非階層カード。水平化。
- 知識を分けずに一箇所に集めることによって、様々な知識と反応させやすくする。
- 長文を書く環境。Markdown。
-
長文をかく事ができ、思考の過程を記録しやすくなる。
-
機能
-
Webアプリ
- Obsidianにない
- アプリのインストールができない環境で使いにくい
-
Web公開
- Supernotesにない
- 公開してGoogleやBingのインデックスに登録されないと、他人との交流が難しい
-
2-hop-link
- Notionにない
- 2-hop-linkによって、リンク構造がわかりやすくなる。
-
Markdown
- Conenseにない
- 長文をかく事ができ、思考の過程を記録しやすくなる。
-
非階層ノート
- NotionやObsidianでもできるがデフォルトではない
-
リストビューとカードビュー
-
Webクリッパー
- Pocketみたいなやつほしい
-
公開部分と非公開部分を分ける
-
他のカードを引用する、カードの自動分解
優先順位が低いもの
- SEO
- めんどくさそう
- 更新通知とSNS機能
- なにかしら別なSNSにアップするとかでも良い
- Misskeyがいいのかな???
- 公開部分が更新されたときに通知
- タイムラインとコメント機能があれば良い。
- フォローしている人のBoxの更新通知が受け取れる機能
- コメント機能
- はてブみたいに、今週クリップが多かった機能があっても良い。
- 誰かがRefに入れたときに通知が行く機能とRefランキングと引用ランキングとかあっても良い。
- なにかしら別なSNSにアップするとかでも良い
- モバイルアプリ
- まずは、PWAで実装したい
- PWAだと若干遅いかなと思う。
- Webクリッパーで中身を保存するやつ
- pocketとか、Save to Notionとか、そういうやつ
- 音声読み上げ
- VoiceVoxとかと連携できたら良いなと思う。
- フラッシュカード
-
別アプリとして作ろうと思っていた。
-
作るかどうか
- OSS化
- Supabaseとか、FirebaseとかのSaaSへの開発段階からのロックインをするかどうか。
- 正直別にSupabaseにこだわりはないのでPostgreSQLとかでいい。
- SNS機能のプロトコル
- misskeyのActivityPubみたいな感じのやつ
- セルフホストできますよというのであれば、あってもいいけど、プロトコル開発するのは現実的ではない?
- アカウント同期APIでも良い。
- もしくはエクスポート。
- グラフビュー
-
作るのがめんどくさい
-
バカ重い上にほとんど役に立たない
-
2-hop-linkのほうが実用性が圧倒的に高い。
-
作らないもの
- ローカル信仰
-
OSSにするから自前で建設してくれ
-
ChatGPTが出してきた技術スタック
機能 | 技術スタック |
---|---|
フロントエンド | Next.js, |
バックエンド | Node.js, |
データベース | MongoDB, Neo4j, PostgreSQL |
Markdown対応 | remark, MDX |
クリッパー | ブラウザ拡張機能 (Chrome) |
SNS機能 | ActivityPub (Misskey参考) |
認証・認可 | Passport |
PWA | Next.js PWA Plugin |
2-hop-linkの実装(ChatGPT案)
意外と簡単そうだった。
1. リンク管理の基本構造
-
**links**
テーブル: 直接的なリンク(1-hopリンク)を記録。- 例: ノートA → ノートB、ノートB → ノートC
| source_note_id | target_note_id | |----------------|----------------| | A | B | | B | C |
-
**two_hop_links**
テーブル: 1-hopリンクを基に計算された2-hopリンクを記録。- 例: ノートA → ノートC(ノートA → ノートB → ノートC)
| source_note_id | target_note_id | |----------------|----------------| | A | C |
2. 新規リンク追加時の処理
- 新しいリンク(例: ノートA → ノートB)が追加されたとき:
links
テーブルに1-hopリンクを追加。- 1-hopリンクを辿って、2-hopリンク(ノートA → ノートC)を計算し、
two_hop_links
テーブルに追加。
3. リンク参照時の処理
- 1-hopリンク: 直接リンクされているノートを取得する。
- 例: ノートAから直接リンクされているノートB、ノートCなど。
- 2-hopリンク: 1-hopリンクを辿り、さらにリンクされたノートを取得する。
- 例: ノートAからリンクされたノートBを辿り、さらにノートBからリンクされたノートCを取得。
4. 動的なリンクの計算
- 参照時には、1-hopおよび2-hopリンクを動的に計算して取得。
- リンクの構造が常に最新の状態を反映するように更新されます。