Skip to content

okamyuji/devpulse

Repository files navigation

DevPulse

DevPulseは、ローカル開発環境の状態をひとつのターミナル画面で把握・管理できるTUIツールです。ポート、Dockerコンテナ、プロセス、ログの4領域を統合し、表示だけでなくkillやstopなどの操作もその場で実行できます。

なぜDevPulseが必要なのか

開発中はポートの確認にlsof、コンテナの確認にdocker ps、プロセスの監視にhtop、ログの確認にtail -fと、複数のツールを行き来する必要があります。DevPulseはこれらを1画面に統合することで、ツール間のコンテキストスイッチをなくします。

インストール

Rustのツールチェインが必要です。

cargo install --path .

使い方

設定なしでそのまま起動できます。

devpulse

オプションを指定して起動することもできます。

devpulse --config ./config.toml    # 設定ファイルを指定します
devpulse --filter node             # 起動時にフィルタを適用します
devpulse --refresh 5000            # 更新間隔をミリ秒で指定します
devpulse --no-docker               # Dockerパネルを無効にします

画面構成

起動すると4つのパネルが均等に分割表示されます。

+------------------+------------------+
|   Ports          |   Docker         |
|                  |                  |
+------------------+------------------+
|   Processes      |   Logs           |
|                  |                  |
+------------------+------------------+

各パネルの役割は以下のとおりです。

  • Portsパネルは、リスニング中のTCP/UDPポートとそれに紐づくプロセス情報を表示します
  • Dockerパネルは、コンテナの一覧と状態、リソース使用量を表示します。各行の先頭に死活インジケータ(緑=Running、赤=Stopped/Exited、黄=Created)が表示されます
  • Processesパネルは、実行中のプロセスの一覧とCPU/メモリ使用量を表示します
  • Logsパネルは、Dockerコンテナとファイルからのログを統合して時系列で表示します

Logsパネルについて

Logsパネルは、Dockerコンテナのログとファイルシステム上のログを統合して時系列で表示します。ソースごとに色分けされたプレフィックスが付くため、どのログがどこから来ているかをひと目で判別できます。

ログソースの設定

デフォルトではDockerの全コンテナのログを収集します。ファイルからのログも収集したい場合は、設定ファイルでソースを追加します。

# Dockerコンテナのログを収集します
[[logs.sources]]
type = "docker"
containers = "all"

# ファイルからのログを収集します(globパターンに対応しています)
[[logs.sources]]
type = "file"
path = "/tmp/myapp/server.log"

# 複数のファイルパターンを指定できます
[[logs.sources]]
type = "file"
path = "/var/log/app/*.log"

Dockerが動いていない環境では、ファイルソースのみを設定すればLogsパネルを活用できます。

フィルタの動作

Logsパネルのフィルタは、画面に表示されている行だけでなく、メモリ内のバッファに蓄積されたログ全体を対象にします。バッファの上限はデフォルトで10,000行で、設定ファイルのbuffer_linesで変更できます。上限を超えた古いログは破棄されるため、それより前のログは検索対象に含まれません。

フィルタにスペース区切りで複数の語句を入力すると、すべての語句を含む行だけが表示されるAND条件として動作します。大文字と小文字は区別しません。

テール追従

起動時はテール追従がオンになっており、新しいログが入るたびに自動的に最新行までスクロールします。手動でスクロールすると追従は自動的に停止し、Fキーで再開できます。

キー操作

ナビゲーション

キー 動作
j / k 上下に移動します
g / G 先頭/末尾に移動します
Tab / Shift+Tab 次/前のパネルに移動します
1 - 4 各パネルに直接移動します。もう一度押すとフルスクリーン表示に切り替わります

フィルタ

キー 動作
/ 全パネル横断でフィルタをかけます
f アクティブなパネル内でフィルタをかけます
Esc フィルタを解除します

パネルごとの操作

キー 動作
K プロセスまたはポートに紐づくプロセスを終了します(確認あり)
u 停止中のDockerコンテナを起動します(Up・確認あり)。失敗時は直近のdocker logsを表示します
d Dockerコンテナを停止します(Down・確認あり)
R Dockerコンテナを再起動します(Shift+R・確認あり)
r Dockerコンテナを削除します(確認あり)
F ログのテール追従をオン/オフします
, / . ソートするカラムを切り替えます

その他

キー 動作
? ヘルプを表示します
q 終了します

設定

設定ファイルは~/.config/devpulse/config.tomlに配置します。サンプルファイルがリポジトリのルートにconfig.sample.tomlとして含まれています。

設定ファイルがなくても、すべての項目にデフォルト値が設定されているため、そのまま動作します。

主な設定項目は以下のとおりです。

[general]
refresh_rate_ms = 2000       # データの更新間隔をミリ秒で指定します(1000〜30000)
confirm_destructive = true   # falseにすると破壊的操作の確認ダイアログを省略します

[docker]
socket_path = "auto"         # Dockerソケットのパスを指定します
show_stopped = true          # 停止済みのコンテナも表示します

[logs]
buffer_lines = 10000         # メモリ内に保持するログの最大行数を指定します
tail_follow = true           # 起動時にテール追従を有効にします

[[logs.sources]]
type = "docker"
containers = "all"           # 対象コンテナを指定します

[[logs.sources]]
type = "file"
path = "/var/log/app/*.log"  # globパターンでログファイルを指定します

Dockerが使えない環境での動作

Dockerがインストールされていない環境やデーモンが停止している場合でも、DevPulseはクラッシュしません。Dockerパネルにはその旨が表示され、残りの3つのパネルは通常どおり動作します。

対応環境

現在はLinuxとmacOSに対応しています。Windows対応は今後のバージョンで予定しています。

技術構成

DevPulseはRustで書かれており、以下のライブラリを使用しています。

  • ratatuiとcrosstermをTUIの描画に使用しています
  • tokioを非同期処理のランタイムとして使用しています
  • bollardでDocker Engine APIに接続しています
  • sysinfoでプロセス情報を取得しています
  • notifyでファイルの変更を監視しています

開発

cargo build                    # ビルドします
cargo test                     # テストを実行します
cargo clippy -- -D warnings    # lintを実行します
cargo fmt --check              # フォーマットを確認します

ライセンス

MIT

About

Unified developer environment TUI — monitor ports, Docker, processes, and logs in one terminal screen

Topics

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages