DevPulseは、ローカル開発環境の状態をひとつのターミナル画面で把握・管理できるTUIツールです。ポート、Dockerコンテナ、プロセス、ログの4領域を統合し、表示だけでなくkillやstopなどの操作もその場で実行できます。
開発中はポートの確認に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パネルは、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がインストールされていない環境やデーモンが停止している場合でも、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