はじめに
正直なところ、APIのレスポンスやログファイルのJSONを確認するのって、結構面倒だったんですよ。
catで出力したら横に長くて読めないし、jqは便利だけど構文を覚えるのが面倒だし...そんな悩みを解決してくれるのがfxというコマンドラインツールです。
fxはGitHubで20,000スター以上を獲得している、ターミナル用のJSON閲覧・処理ツール。Go言語で開発されており、単一バイナリで動作する手軽さが魅力ですね。
名前の由来は「Function eXecution」から来ているようで、JSONに対して関数を適用していくというコンセプトが名前に表れています。
fxとは
fxは、Terminal JSON viewer & processorとして位置づけられる、コマンドラインでJSONを効率的に扱うためのツールです。バージョン39.2.0(2025年11月時点)がリリースされており、35人のコントリビューターによって活発に開発が続いています。
最大の特徴は2つの動作モードを持っていること。インタラクティブなTUIモードでJSONを視覚的に探索できる一方、パイプライン処理でデータを加工することもできます。
「見るだけ」も「加工する」もこれ一本でOKという話。jqと違って新しい構文を覚える必要がなく、JavaScript構文がそのまま使えるのが個人的には刺さりました。
公式サイト: https://fx.wtf GitHub: https://github.com/antonmedv/fx
特徴・メリット
1. インタラクティブなTUIモード
これ、意外と他のJSONツールにはない強みなんですよ。
fxを引数なしで実行すると、ターミナル上でJSONを視覚的に探索できるモードが起動します。ツリー構造で表示されて、キーボードで展開・折りたたみができる。大きなJSONファイルを眺めるときに重宝します。
# インタラクティブモードで開く
cat data.json | fx
# ファイルを直接指定もOK
fx data.json
30代になって思うのは、GUIがなくてもTUIで十分ということ。SSHでリモートサーバーに入っている時でも使えるのは大きいですね。
2. JavaScript構文でデータ処理
jqの独自構文を覚えるのが面倒という人には朗報です。fxでは馴染みのあるJavaScript構文でJSONを加工できます。
# 特定のプロパティを取得
echo '{"name": "John", "age": 30}' | fx '.name'
# 出力: "John"
# 配列の操作
echo '[1, 2, 3, 4, 5]' | fx '.filter(x => x > 2)'
# 出力: [3, 4, 5]
# mapで変換
echo '[{"id": 1}, {"id": 2}]' | fx '.map(x => x.id)'
# 出力: [1, 2]
新しいドメイン固有言語を学ばなくていいというのは、時短になるんですよね。
3. 実用的な追加機能
fxには開発者が嬉しい機能が詰まっています。
- JSONストリーミング対応: 1行1JSONの形式やNDJSONに対応
- 大整数サポート: JavaScriptの精度限界を超える整数も正確に処理
- コメント・末尾カンマ許容: 厳密でないJSONも読み込める
- YAML・TOML対応: JSON以外の形式も扱える
- シェル補完: bash、zsh、fishに対応
4. 軽量で高速
Go言語で書かれた単一バイナリなので、依存関係の心配がありません。インストールしたらすぐ使えるというのは、環境構築でハマりたくない身としてはありがたいですね。
インストール方法
環境に応じて好きな方法でインストールできます。
Homebrew(macOS / Linux)
brew install fx
npm(Node.js環境がある場合)
npm install -g fx
※ npm版はJavaScript実装で、TUIモードは非対応です。
Go
go install github.com/antonmedv/fx@latest
その他のパッケージマネージャー
# Snap
snap install fx
# Scoop (Windows)
scoop install fx
# Arch Linux
pacman -S fx
# FreeBSD
pkg install fx
ワンライナーインストール
curl https://fx.wtf/install.sh | sh
個人的にはHomebrewかGoでのインストールが楽だと思います。
基本的な使い方
TUIモードで探索
# ファイルを開く
fx package.json
# パイプで渡す
curl -s https://api.github.com/users/octocat | fx
TUIモードのキーバインド:
j/k: 上下移動h/l: 折りたたみ / 展開e: 全展開E: 全折りたたみ/: 検索q: 終了
データ加工
# プロパティアクセス
fx data.json '.users[0].name'
# 複数の処理をチェーン
fx data.json '.users' '.filter(u => u.active)' '.length'
# オブジェクトの再構築
fx data.json '{name: .name, count: .items.length}'
複数ファイルの処理
# 複数JSONファイルを連結
fx file1.json file2.json
# globパターンで一括処理
fx logs/*.json '.error'
実践的なユースケース
1. APIレスポンスの確認
# GitHubのAPIを叩いて整形表示
curl -s https://api.github.com/repos/antonmedv/fx | fx
# 特定の情報だけ抽出
curl -s https://api.github.com/repos/antonmedv/fx | fx '{stars: .stargazers_count, forks: .forks_count}'
2. ログファイルの解析
# NDJSONログからエラーだけ抽出
cat app.log | fx '.filter(x => x.level === "error")'
# 特定の時間帯のログを抽出
cat app.log | fx '.filter(x => x.timestamp > "2025-01-01")'
3. package.jsonの操作
# 依存関係の一覧を取得
fx package.json '.dependencies' 'Object.keys(.)'
# スクリプト名だけ一覧表示
fx package.json '.scripts' 'Object.keys(.)'
4. 設定ファイルの確認
# tsconfig.jsonのcompilerOptionsを確認
fx tsconfig.json '.compilerOptions'
# 深いネストのプロパティにアクセス
fx config.json '.database.connections.primary.host'
jqとの比較
正直なところ、jqも素晴らしいツールです。ただ、fxには以下の違いがあります。
| 機能 | fx | jq |
|---|---|---|
| 構文 | JavaScript | 独自DSL |
| TUIモード | あり | なし |
| 学習コスト | 低い(JS知ってれば) | やや高い |
| 処理速度 | 高速 | 高速 |
| YAML対応 | あり | プラグイン必要 |
jqの構文に慣れている人はそのまま使えばいいと思いますが、「JavaScriptなら分かる」という人にはfxの方が取っつきやすいはずです。
まとめ
fxは、ターミナルでJSONを扱う作業を劇的に効率化してくれるツールです。
個人的に気に入っているポイントは:
- TUIモードの視認性: 大きなJSONでも迷子にならない
- JavaScript構文: 新しい言語を覚えなくていい
- 単一バイナリ: 依存関係の心配なし
- YAML/TOML対応: JSON以外もいける
API開発やログ解析をする機会が多い人には、QOL上がること間違いなしです。jqに挫折した経験がある人にもおすすめですね。
まずはbrew install fxで試してみてください。一度使い始めると、なしでは生きていけなくなります。
公式リンク
- 公式サイト: https://fx.wtf
- GitHub: https://github.com/antonmedv/fx
- npm: https://www.npmjs.com/package/fx
