Jegan - ターミナル用JSONエディター
( English / Japanese )

特徴
🛡️ 元の JSON を保ったまま最小限の変更
Jegan は、読み込んだ JSON の表現を可能な限りそのまま維持し、 ユーザが変更した部分だけを書き換えます。
- キーの順序を保持
- 空白、インデント、改行コードを保持
- 文字列の表現(
\uXXXXかそのままか)を保持 - JavaScript ラッパーなどの非JSON部分も含めて再現
- 変更された項目のみを書き換え
- 変更された項目はボールドで表示
- 新規追加時も周囲の書式に合わせて整形
- 保存時にはバックアップを作成
⚡ 大きな JSON でも即座に起動
Jegan は、大きな JSON ファイルでも起動時に待たされません。
ファイルの読み込みはバックグラウンドで行われ、読み込まれた部分から順次表示されます。
- 起動直後に画面が表示される
- 全体の読み込み完了を待たずに操作を開始できる
- 読み込み待ちの時間が操作不能な状態にならない
🔄 Undo による安全な編集
uキーで直前の変更を元に戻せる- 値の置換(
r,Rなど)を undo 可能 - 削除操作も undo 可能
削除された項目はすぐには消えず、<DEL> として表示されます:
<DEL>の項目はuで復元可能- 保存時には
<DEL>の項目は出力されず、削除が確定
🧩 折りたたみ表示
zキーでオブジェクト・配列の折りたたみ/展開を切り替え- 折りたたまれた要素は1行で表示される
📦 実務で使われる形式に対応
- JSON
- JSON Lines (JSONL)
- JSON を代入する形式の JavaScript(例:X/Twitter アーカイブ)
🧭 ターミナルでの構造的なナビゲーション
j/kで項目単位の移動- 長い行は左右スクロールで表示
- ステータス行に JSON パスと現在の値を表示
/,?,n,Nによる検索
🔌 CLI との親和性
- ファイル・標準入力の両方に対応
- ファイル・標準出力の両方に出力可能
- フィルタとして利用可能:
jegan < input.json > output.json
⌨️ 効率的な編集操作
- vi ライクな移動操作
- Emacs 風 readline による入力編集
インストール
Manual Installation
Releases よりバイナリパッケージをダウンロードして、実行ファイルを展開してください
⚠️ Note: macOS用バイナリは実験的ビルドで、検証できていません。 もし何らかの問題を確認されましたらお知らせください!
eget インストーラーを使う場合 (クロスプラットフォーム)
brew install eget # Unix-like systems
# or
scoop install eget # Windows
cd (YOUR-BIN-DIRECTORY)
eget hymkor/jegan
scoop インストーラーを使う場合 (Windowsのみ)
scoop install https://raw.githubusercontent.com/hymkor/jegan/master/jegan.json
もしくは
scoop bucket add hymkor https://github.com/hymkor/scoop-bucket
scoop install jegan
"go install" を使う場合 (要Go言語開発環境)
go install github.com/hymkor/jegan/cmd/jegan@latest
go install は $HOME/go/bin もしくは $GOPATH/bin へ実行ファイルを導入するので、jegan を実行するにはそのディレクトリを $PATH に追加する必要があります。
起動方法
jegan some.json
もしくは
jegan < some.json
キー操作
F1: ヘルプ (qで閉じる)j,↓,Ctrl-N: 次の項目へ移動k,↑,Ctrl-P: 前の項目へ移動l,→,Ctrl-F: 表示範囲を右にスクロールh,←,Ctrl-B: 表示範囲を左にスクロール0,^: 表示範囲をリセット(0 カラム目へ移動)Space,PageDown: 次のページへ移動b,PageUp: 前のページへ移動<: 最初の項目へ移動>: 最後の項目へ移動/: 前方検索?: 後方検索n: 同方向へ再検索N: 反対方向へ再検索- '@' : 指定した JSONPath の位置へ移動
[,{: 括弧上にいる場合は対応する括弧へ、さもなければ親レベルの最も近い括弧へ移動],}: 括弧上にいる場合は対応する括弧へ、さもなければ親レベルの最も近い括弧へ移動z: 折り畳み / 展開表示を切り替えo: カーソル行の下へ項目を追加。- オブジェクトの項目の場合はキーと値を入力する
- 配列の項目の場合は値のみを入力する
- キーは入力された文字列をそのまま使用する(二重引用符不要)
- 値の型は入力内容に応じて次のように解釈する
"..."→ 文字列(エスケープ文字を解釈)- 数値として解釈できるもの → 数値
null→ nulltrue/false→ 真偽値{}→ 空のオブジェクト[]→ 空の配列- 上記以外 → 文字列(そのまま解釈)
Ctrl+G押下で項目追加をキャンセルできます。- 空入力は空文字列(
"")として扱われる - オブジェクトのキーは重複できない
r: カーソル行の項目を変更する(入力方法はoと同じ)R: カーソル行の項目を変更する(値の型を明示的に指定する)d: カーソル行の項目を削除する。u: UNDOCtrl+C: JSONパスと値をクリップボードへコピーするw: ファイルへ保存q: 終了
非インタラクティブモード (-auto)
-auto オプションで、スクリプトを非インタラクティブに実行することができます。
入力は単一の文字列で、各ステップは | で区切ります。
各ステップは、1キー入力もしくは一行入力に対応します。
例:
jegan -auto "@|.architecture.\"32bit\".url|r|1|w|-|q|y" - < jegan.json > new-jegan.json
これは次のように評価されます。
@: 指定した JSON path へ移動.architecture."32bit".url: パスを入力r: 項目を修正1: 新しい値w: 保存-: 標準出力を指定q: アプリケーションを終了y: 確認は Yes
環境変数
RUNEWIDTH_EASTASIAN
Unicode で「曖昧幅」とされる文字の表示桁数を明示的に指定します。
- 2桁幅にする場合:
set RUNEWIDTH_EASTASIAN=1 - 1桁幅にする場合:
set RUNEWIDTH_EASTASIAN=0(1以外の任意の1文字以上で可)
GOREADLINESKK
環境変数 GOREADLINESKK に辞書ファイルを指定すると、go-readline-skk を利用した内蔵 SKK かな漢字変換1が有効になります。
- Windows
set GOREADLINESKK=SYSTEMJISYOPATH1;SYSTEMJISYOPATH2...;user=USERJISYOPATH- 例:
set GOREADLINESKK=~/Share/Etc/SKK-JISYO.L;~/Share/Etc/SKK-JISYO.emoji;user=~/.go-skk-jisyo
- Linux
export GOREADLINESKK=SYSTEMJISYOPATH1:SYSTEMJISYOPATH2...:user=USERJISYOPATH
(注)~ は Windows の cmd.exe 上でもアプリ側で %USERPROFILE% に自動展開されます。
Changelog
Acknowledgements
Author
-
Simple Kana to Kanji conversion program. One of the Japanese input method editors. ↩︎