マイクロサービスとコンテナ化の時代、アプリケーションは構造化ログ(JSON形式)を出力するようになりました。これは機械的に解析するには便利ですが、人間が読むのは苦痛です—すべてが1行に詰め込まれ、重要な情報は引用符やエスケープ文字の中に埋もれてしまいます。

今日紹介する fblog は、この問題を解決するためのツールです。Rustで書かれた軽量なコマンドラインツールで、JSONログを人間が読める形式に変換します。

プロジェクト概要

  • リポジトリ: brocode/fblog
  • 言語: Rust
  • Stars: 558
  • ライセンス: WTFPL(Do What The F*ck You Want To Public License)

fblogのコア機能はシンプルです:JSON形式のログストリームを読み取り、重要なフィールド(タイムスタンプ、ログレベル、メッセージ内容など)を抽出し、カラー付きのテーブル形式でターミナルに出力します。

インストール

# macOS/Linux は Homebrew を使用
brew install fblog

# または cargo を使用
cargo install fblog

# またはバイナリを直接ダウンロード
https://github.com/brocode/fblog/releases

使用例

アプリケーションが以下のようなログを出力すると仮定します:

{"timestamp": "2026-04-02T15:30:00Z", "level": "INFO", "message": "Server started", "port": 8080}
{"timestamp": "2026-04-02T15:31:12Z", "level": "ERROR", "message": "Database connection failed", "error": "timeout"}

直接読むのは苦痛ですが、fblogで処理すると:

cat app.log | fblog

出力は以下のようになります:

タイムスタンプ、ログレベル、メッセージ内容が明確に区切られ、異なるレベルが異なる色で表示されます(INFOは緑、ERRORは赤など)。問題を一目で特定できます。

高度な使い方

特定フィールドのフィルタリング

# ERRORレベル以上のログのみ表示
cat app.log | fblog -l ERROR

# カスタムフィールドでフィルタリング
cat app.log | fblog -f 'service=api'

出力形式のカスタマイズ

# 時間フィールド名を指定(ログが異なるフィールド名を使用する場合)
cat app.log | fblog --time-field="@timestamp"

# すべてのフィールドを表示(デフォルトのコアフィールドのみでなく)
cat app.log | fblog -a

Docker/Kubernetesとの連携

# コンテナログをリアルタイムで表示
docker logs -f myapp | fblog

# Kubernetes Podのログを表示
kubectl logs -f pod/myapp | fblog

fblogを選ぶ理由

特性fblog他のツール
サイズ単一の静的バイナリ(約2MB)通常、依存関係が多い
速度Rust実装、大きなログも高速処理Python/Nodeツールは相対的に遅い
設定ほぼゼロ設定、すぐに使える多くは設定ファイルが必要
互換性任意のJSONログ形式をサポート一部は特定の形式のみサポート

類似ツールとの比較

  • jq: 強力なJSONプロセッサーですが、学習曲線が急で、ログを素早く確認するには不向き
  • hl: 別のRust製ログビューアー。機能は豊富ですが重い(3031 stars)
  • lnav: 複数のログ形式をサポートしますが、サイズが大きい

シンプル、高速、依存関係なしのJSONログビューアーが必要な場合、fblogが最適な選択です。

まとめ

fblogはUnix哲学を完璧に体現しています:「一つのことを行い、それをうまくやる」。すべての機能を持つログ分析プラットフォームになろうとはせず、「JSONログの可読性」という一つの問題に焦点を当て、それを見事に解決しています。

コンテナログやマイクロサービスログを頻繁に確認する必要がある開発者にとって、ワークフローに | fblog を追加することで、多くの時間と目の疲労を節約できます。


プロジェクトリンク: https://github.com/brocode/fblog