|
| 1 | +# "Jet" Design Doc |
| 2 | + |
| 3 | +## 名称 |
| 4 | + |
| 5 | +Jet(仮名) |
| 6 | + |
| 7 | +いい名前募集中。 |
| 8 | + |
| 9 | +## 目的 |
| 10 | + |
| 11 | +大サイズの JSON データに対する「非定型なタスク」を補助すること。 |
| 12 | + |
| 13 | +「非定型なタスク」とは、スクリプトなどを使って定型的な形に押し込めることが難しい or そうする価値が低いタスク。 |
| 14 | + |
| 15 | +## 開発の背景 |
| 16 | + |
| 17 | +作者は日常業務において, そこそこ大きなサイズ(~数 MB)の JSON データを扱うことが多い。\ |
| 18 | +JSON データの閲覧には Firefox を利用することが常であった。\ |
| 19 | +Firefox はデフォルトで JSON を良い感じに表示してくれるのだが、いくつか難点がある: |
| 20 | + |
| 21 | +- 表示パフォーマンスが悪化しやすい |
| 22 | +- 検索機能が微妙に不親切 |
| 23 | +- URL を持たない JSON データが開きにくい |
| 24 | + |
| 25 | +そこで, これらの難点を解決したものを Web アプリとして実現しようとしている。 |
| 26 | + |
| 27 | +## 実現目標 |
| 28 | + |
| 29 | +Firefox の JSON 表示機能に対する不満を解決すること。つまりこんな感じ: |
| 30 | + |
| 31 | +- 巨大な JSON に対しても、**表示スピード・操作感を軽快に保つこと** |
| 32 | +- **詳細な検索**, たとえば JSON の構造に対する検索や値に対する検索ができるようにすること |
| 33 | +- **野良の JSON データ**を簡単にビジュアライズできること |
| 34 | + |
| 35 | +現在これらは*おおむね*クリアされている。が、これから先どうなるかはわからない。 |
| 36 | + |
| 37 | +## 目標としないもの |
| 38 | + |
| 39 | +- リッチなグラフィカル UI / UX |
| 40 | + - パフォーマンスを妨げない範囲で(主にテンションを上げる目的で)ならやって良いが、パフォーマンスとの二択になる場合は常にパフォーマンスを優先する。 |
| 41 | +- JSON lint / prettier |
| 42 | + - おまけとして付いているが, 必要なら切っていい |
| 43 | +- 超巨大(100MB~)な JSON の取り扱い |
| 44 | + - そんなもの直接見ようとしないでください・・・ |
| 45 | + |
| 46 | +## 実現形態 |
| 47 | + |
| 48 | +- NextJS による SPA |
| 49 | +- デプロイ先は Vercel |
| 50 | + |
| 51 | +## おおまかな処理 |
| 52 | + |
| 53 | +ユーザが入力した or ストレージから取得した文字列 を JSON に変換し(Parse),\ |
| 54 | +さらにそれを HTML 要素に変換して、リスト表示する(Visualize)。 |
| 55 | + |
| 56 | +この流れは今のところは逆転しない。つまり Visualize ステージから元の JSON 文字列を編集する手段は提供していない。 |
| 57 | + |
| 58 | +すべての処理はクライアントサイドで完結している。ただしこれも今のところ。 |
| 59 | + |
| 60 | +## 内部構造 |
| 61 | + |
| 62 | +上述の通り、データの流れは |
| 63 | + |
| 64 | +文字列 -> JSON データ -> HTML 要素 |
| 65 | + |
| 66 | +となっている。 |
| 67 | + |
| 68 | +記述を簡潔にするため、文字列と JSON データ はグローバルステート([`Jotai`](https://jotai.org/))として管理されている。\ |
| 69 | +HTML 要素も, JSON データ に依存する計算的(computed)グローバルステートとなっている。 |
| 70 | + |
| 71 | +原理的には JSON データも文字列に依存する計算的グローバルステートにできるが、UI の都合上あえてそうしていない。 |
0 commit comments