はじめに
今回は、「こんなコマンドがあったのか」という驚きから、記事を書いてみることにしました。
普段はping
コマンドばかり使っていましたが、最近、gping
という面白いコマンドを教えていただく機会がありました。
本記事は、私の個人的な備忘録として作成したものですが、どなたかの技術的な参考になれば幸いです。
書こうと思ったきっかけ
今月、受講しているスクールのLT会に参加する機会があり、そこでさまざまなコマンドを教えていただきました。
正直、あまり使ったことのないコマンドばかりで、「こんな便利なコマンドがあるんだ」と強く印象に残りました。
その中でも、特に興味を引かれたのがgping
コマンドです。実際にインストールして使ってみると、その美しいシェル表示に感動しました。
この体験を共有したいと思い、記事としてまとめることにしました。
gping
コマンドについて
gping
は、ネットワークの状態を視覚的にモニタリングできるツールです。
一般的なping
コマンドに似ていますが、リアルタイムでパケットの遅延時間(ラウンドトリップタイム)をグラフとして描画してくれる点が特徴です。
これにより、ネットワークの応答時間の変化を直感的に把握することができます。
gping
コマンドの特徴について
-
リアルタイムグラフ表示
グラフィカルにネットワークの応答時間をリアルタイムで描画します。 -
複数ホストの監視
複数のホストを同時に監視可能で、それぞれの応答時間を比較することができます。 -
シンプルな操作
通常のping
コマンドに似た操作感で、簡単に利用できます。 -
クロスプラットフォーム
Linux、macOS、Windowsで利用可能なため、さまざまな環境で活用できます。
gping
コマンドの主な使い道
-
ネットワーク監視
リアルタイムで応答時間の変化を監視し、問題を早期に発見できます。 -
トラブルシューティング
ネットワークの不安定な箇所や遅延の原因を特定するのに役立ちます。 -
複数サーバーの比較
同時に複数のサーバーを監視することで、どのサーバーに問題があるかを迅速に判断できます。
実際にコマンドをインストールしてみた
私の環境ではデフォルトでインストールされていなかったため、以下のエラーメッセージが表示されました。
➜ ~ gping google.com
zsh: command not found: gping
そこで、Homebrew
を使って手動でインストールしました。
Homebrewでのインストール(macOS, Linux)
brew install gping
実際のインストールログは以下の通りです。
➜ ~ brew install gping
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
fatal: bad boolean config value 'tru' for 'rebase.updaterefs'
fatal: bad boolean config value 'tru' for 'rebase.updaterefs'
fatal: bad boolean config value 'tru' for 'rebase.updaterefs'
fatal: bad boolean config value 'tru' for 'rebase.updaterefs'
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core and homebrew/cask).
==> New Formulae
beanquery cdncheck dpic html2markdown pnpm@9 rmtrash sshx
cargo-hack chaos-client guile-fibers perl-dbd-mysql prism-cli shepherd xtermcontrol
==> New Casks
display-pilot helpwire-operator mihomo-party tdr-molotok windowkeys
You have 28 outdated formulae and 2 outdated casks installed.
==> Downloading https://ghcr.io/v2/homebrew/core/gping/manifests/1.19.0
######################################################################################################## 100.0%
==> Fetching gping
==> Downloading https://ghcr.io/v2/homebrew/core/gping/blobs/sha256:94b2db03885d870c498358c65469c840a66884a4791
######################################################################################################## 100.0%
==> Pouring gping--1.19.0.sonoma.bottle.tar.gz
🍺 /usr/local/Cellar/gping/1.19.0: 9 files, 3MB
==> Running `brew cleanup gping`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
実際にgping
コマンドを使ってみた
ここでは、単一ホストを監視する方法と複数ホストを監視する方法をご紹介してみます。
単一ホストを監視
以下のコマンドで、google.com
の応答時間をリアルタイムで監視しました。
gping google.com
実際の出力例
google.com (2404:6800:400a:805::200e) last 6.092ms min 5.455ms max 9.849ms avg 6.653ms jtr 29µs p95 7.246ms t/o 0
9.985ms│
│
│
│
│
│
│
│ ⡀
9.139ms│ ⡇
│ ⡇
│ ⡇
│ ⢀⡇
│ ⢸⡇
│ ⢸⡇
│ ⢸⢱
│ ⢸⢸
8.293ms│ ⢸⢸
│ ⢸⢸
│ ⢸⢸
│ ⢰ ⡜⢸
│ ⢸ ⡇⢸
│ ⣸ ⡇⢸ ⢀
│ ⡏⡆ ⡇⢸ ⡀ ⢸
7.447ms│ ⡇⡇ ⡇⢸ ⡇ ⢸
│ ⡇⡇ ⡇⢸ ⢠⡇ ⡸⡀
│ ⡇⡇ ⡇⢸ ⢸⢇ ⡇⡇
│ ⢰⠁⡇ ⡇⠸⡀ ⢸⢸ ⡇⡇ ⢰
│ ⢸ ⡇ ⢸ ⡇ ⡜⢸ ⡇⡇ ⣰ ⢸
│ ⢸ ⢱ ⡀ ⢠ ⢸ ⡇ ⡇⢸ ⡇⡇ ⢠⠋⡆ ⡆ ⢀ ⡜⡆
│ ⢸ ⢸ ⡰⡇ ⢸⡄⢀ ⡖⢇ ⢸⣼ ⡇ ⡇⢸ ⡇⡇ ⢠ ⡜ ⢇ ⢠⢇ ⡀ ⢸⡄ ⡀ ⡇⡇
│ ⡇ ⢸ ⡀ ⡇⢱ ⡇⡇⡜⡆ ⢰⠁⢸ ⢠ ⡜⢻ ⡇⡄ ⢠⠃⢸ ⢰⠁⢱ ⣧ ⡜⢣ ⢀⠇ ⢸ ⢸⢸ ⡀ ⢀⢇ ⡎⡇⡰⡇ ⡄ ⡇⡇
6.601ms│ ⢸⡀ ⡇ ⢸ ⢀⣀⡀ ⡰⡇ ⢸ ⢸ ⡇⢸⠃⠘⡄ ⡇ ⢸ ⢇ ⡜⢣ ⡇ ⣷⢣ ⢰ ⡄ ⢀ ⢸ ⠈⡆ ⢸ ⢸⢀ ⢠⠃⢣ ⡇ ⠉⢆ ⢀ ⣧ ⢠ ⢸ ⢇⡸⢸ ⢠ ⣧ ⢸⢸ ⡇⠸⠁⢱ ⣧ ⢠⢣ ⡇⡇
│ ⡇⢇ ⡀ ⢀⠇ ⠈⡆ ⡄ ⡜ ⢸ ⡇⢸ ⡸ ⠸⡀ ⡇ ⡇ ⢰⢱ ⡸⡀⢀⡀⡎ ⠱⡀⡇ ⡇ ⡇ ⡏⢸ ⡼⡀ ⡸⠘⠔⢹ ⢸ ⡇⡀⢸ ⢸⠎⢆ ⢸ ⣧⠃ ⠘⡤⠃⢣ ⢠⠛⡴⢣ ⢸⡇ ⡇ ⠘⡇⠈⡆ ⡎⡆ ⢸⠸⡀⣴ ⢸⡄ ⡎⠈⡆ ⡇ ⢸ ⢀ ⣿ ⢠⠔⠃⠘⡄ ⢀⠇⢸
│ ⡇⠘⠉⢇ ⢸ ⡇ ⣷⢠⠃ ⠈⡆⢸ ⢸ ⣰ ⡇ ⡇⢸ ⢸ ⣰ ⢰⡀⢸⢸ ⡇⢇⡎⠈⠁ ⠹ ⢸ ⢠⢠⠃ ⠘⡄⡇⡇⢀⠇ ⠈⡆⡎ ⡷⡇⢸ ⠈ ⠈⡆⢸ ⠘ ⠈⡆ ⢸ ⠘⡄ ⡇⢸ ⢸ ⠧⣰⠁⢱ ⢸ ⠋ ⡇⡇⠱⠊ ⠱⣸ ⢸ ⡜⢆⢀⡆⢰⠉⡆ ⡸ ⡇ ⢠⢸ ⢸
│ ⢸ ⢸ ⢸ ⢣⢸⠘⡜ ⡇⡜ ⠈⣦⠋⡆⢰⠁ ⠉⠚ ⢸ ⢀⠟⡄⡜⢣⡜⠘⣼ ⠘ ⠘⡄ ⢸⢻ ⡇⡇⡇⢸ ⡇⡇ ⠁⢱⢸ ⢸⡇ ⢣ ⢸ ⢣ ⡇ ⡇ ⡇ ⢣⡇ ⢣⠃ ⠙ ⠈⡆ ⢀⠇⠈⠊⡇⢸ ⡇ ⡇ ⢸ ⡸⢻ ⢸
│⢀⠎ ⠈⡆⡎ ⢸⢸ ⠁ ⢇⡇ ⠃ ⢇⡜ ⠈⡆⡜ ⡇⡇⠈⠇ ⠇ ⡇ ⡇ ⢹ ⢣⡇ ⢇⠇ ⢸⡸ ⠃ ⢸ ⡇ ⠘⣄⠇ ⢸⢸ ⠁ ⠈ ⠧⠢⡀⡜ ⢱⢸ ⢸ ⡇ ⢸ ⢠⡀ ⡇ ⠘⡄
│⠊ ⠑⠇ ⠘⡜ ⢸ ⠘ ⠋ ⢣⠃ ⡇ ⡇ ⠈ ⢸⠁ ⢸ ⢸⡇ ⡇⡇ ⢻ ⠃ ⠈ ⢸⢸ ⠈⣶⠁ ⠘⡄ ⡎⠱⣀⡄ ⢀⠇ ⡇
│ ⠇ ⠘ ⢸ ⡇ ⠈⡇ ⣧⠃ ⠈ ⢸⢸ ⠘ ⡇⢠⠃ ⢣ ⢸ ⠃
│ ⢸⢸ ⠇ ⢸ ⠸⡎ ⢇⡜ ⢸ ⡇
5.755ms│ ⢸⢸ ⡇ ⢸⠃ ⠘⣼
│ ⠘⣼ ⠇ ⠃
│ ⡇
│ ⠃
│
│
│
4.909ms│
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
14:18:03 14:18:18 14:18:33
複数ホストを監視
複数ホストを監視する場合は、スペース区切りでホスト名を指定します。
gping google.com cloudflare.com
実際の出力例
google.com (2404:6800:400a:80a::200e) last 6.533ms min 5.159ms max 12.643ms avg 6.402ms jtr 50µs p95 7.131ms t/o 0
cloudflare.com (2606:4700::6810:85e5) last 6.973ms min 5.585ms max 12.114ms avg 7.044ms jtr 44µs p95 8.076ms t/o 0
12.581ms│
│
│
│
│
│
│ ⢸
│ ⢸
11.258ms│ ⢸ ⢀
│ ⢸ ⢸
│ ⢸ ⢸
│ ⢸ ⢸
│ ⢸ ⢸
│ ⡸⡄ ⢸
│ ⡇⡇ ⢸⡀
9.935ms │ ⡇⡇ ⡸⡇
│ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡇⡇
8.612ms │ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡇⡇
│ ⡇⡇ ⡀ ⡇⢣ ⢰
│ ⡇⡇ ⢀⡇ ⡇⢸ ⢰ ⡀ ⢰⠒⡆
│ ⡇⢸ ⢸⢸ ⡇⢸ ⢸⡀ ⡀ ⡇ ⢸⡇⡇
│ ⢸ ⢸ ⡸⢸ ⢰⠁⢸ ⡀ ⡇⡇ ⣇ ⢸⢣ ⢸⡇⢱
7.289ms │ ⢸ ⢸ ⡇⠈⡆ ⢸ ⢸ ⡀ ⢠⡇ ⡇⡇ ⢠⢻ ⢀ ⢸⢸ ⡇⡇⢸ ⡄
│ ⢸ ⢸ ⢸ ⡇ ⢠⢆ ⢸ ⢸ ⡰⢣ ⡀ ⢀⣀⣀ ⢠ ⢸⢸ ⡇⢱ ⢸⠸⡀ ⡜⢆⣀ ⡎⢸ ⡇⢸⢸⢀⠟⡄⡜⡄
│ ⢸ ⢸ ⣀ ⡔⠒⠃ ⢱⡠⠔⠢⠒⠁⠈⡆ ⢸ ⠘⠊⠁⠸⡀⢀ ⢀⠎⠈⢱ ⡜ ⠑⠤⢆ ⡜⢇⣀⠇⢸ ⢰⠁⠸⡀ ⡀ ⡠⡀⢀ ⢸ ⡇ ⢠⠃ ⠉⠃⠸⡀ ⢀ ⢠⡇⢸⢸⢸ ⠘ ⢣ ⡀ ⡀
│ ⢸ ⢸ ⡄ ⢠⠊ ⡇ ⡄ ⢰⡀⢸ ⠘⠁ ⠘⡄⢸⢰ ⠋⠁⠣⡀⢀⣀⡜ ⣇⠇ ⠸⡀⡇⠈ ⣇⣸⠇⡇⠱⡀⢠⠋⠘⡄⢀ ⡔⠁⠑⠁⠱⡀ ⡜ ⢣ ⢀⠔⠉⠢⡜ ⡇ ⡎⢆⢠⠋⢢ ⣰⢸⡇⢸⠈⣾ ⠈⢆⡜⠘⠤⡀ ⢠⡆ ⡆
│ ⢰⢢⢸ ⣷ ⢸⡀⡜ ⢇⡀ ⢠⡀⡜⢣ ⡇⢇⡜ ⡇ ⠘⣼⢸⡆ ⠈⠁ ⠘ ⢻ ⢸ ⡇ ⠱⡜ ⠈⠙⡄⢀⡀ ⢠⠃ ⢣ ⣀⢄⣠ ⢰⡇ ⢸ ⢠⠊⢠⡇ ⠓⢄ ⡰⠁⠈⠃ ⠑⠙⡄⡇ ⡇⡇ ⠈ ⢱ ⢸⢸ ⢠⠔⡄⢸⢠⢳ ⡜⢢ ⡸
│ ⡎⢸⠸⡀⢠⠋⡆ ⡎⡇⡇⢀⠎⢸⠈⢢⢀⠇⠈⢄⢸ ⢠⠃⢸⡇ ⢰⡇ ⢻⡎⢇ ⣴ ⢸ ⡇⢰ ⢣⣀⡠⡄⢸⡆ ⢸ ⠈⠞ ⠈⠢⠔⠢⣀⢠⠋⠁ ⡇⡎⠘⠎⢸ ⠑⠁ ⣧⠃ ⡇⠁ ⡸⡄ ⡀⢣⡀ ⡎⠈⣆⢠⠃⢀⢸⡎⢸⠸⡀⢰⠁ ⠣⡀ ⢠⠒⢢⢀⠇
│⢀⠇⠈⡆⠱⢸ ⡇ ⡇⢹⢱⠎ ⢸ ⢀⠎ ⡜ ⠈⡆⡸⣰ ⡇ ⢸⢸ ⢀ ⡰⡄ ⡇⢸ ⡄ ⡄ ⢀⡄ ⢸⠈⡆ ⡇ ⢇⡜⡇ ⡆ ⢸ ⠘⠇⢸ ⣿ ⡄⢰⠁ ⠁⠃⠘⡄⡔⢱⠁ ⢸ ⡸⡄⡰⡀ ⣿ ⢇ ⡰⡀⡇⢇ ⢀⠏⠢⠈⠑⣤⠃ ⡇⠁⢠⠛⠘⡄⡸⠃⠧⠃ ⠑⠊⠁⣀⣀⠙⠔
│⢸ ⡇ ⢸ ⢸⢠⠃ ⠸⡀⡎⠘⡄⡇ ⠱⡰⠁⣧⠃ ⡜⢸ ⡜⡆⢀⠇⠈⢆⢀⡆ ⡇ ⢣⢸⠘⡄ ⢰⢹ ⢠⠊⢸ ⡀ ⡇ ⢇ ⢰⠁ ⢸⡇⢱ ⢸⢸ ⡇ ⠈⡆⡇⡇ ⢠⢳⢸ ⠟ ⡇⢀⠇⠱⠁⢇ ⢀⢸ ⢸ ⡖⠒⠁⢳⠁⠸⡀⢸ ⢣⠈ ⢸⢠⠃ ⢳⡇⡇ ⡇ ⢀⡀ ⢰⠁
5.966ms │⡎ ⡇ ⢸ ⢸⢸ ⣷⠁ ⢧⠃ ⢹⢸ ⢀⠇⢸ ⡇⠘⠊ ⠈⠊⢸ ⡇ ⠃ ⠘⡄ ⡸ ⠣⢄⣀⠇ ⠋⠈⠑⣤⠃ ⢸ ⡎ ⢸⠃⠈⣆⡎⠈⡆⢠⠃ ⢹ ⡇ ⢸⠘⡎ ⢱⡸ ⠸⡀ ⢀⠴⡀⡜⢆ ⡀ ⢸⠈ ⢸⢰⠁ ⠣⡎ ⠃ ⠈⡇⡇ ⠸⡀⡎⠈⠉⠑⠃
│ ⢣ ⡇ ⠘⡜ ⠃ ⠘ ⠑⠁ ⠘⣼ ⡇⢸ ⠸⡀ ⢀⠇ ⠈ ⠈ ⠈⡶⠉ ⠘ ⢣⡜ ⡇ ⡜ ⠁ ⠃ ⢣⢀⠔⠁ ⢣⠃ ⠉⠉⢣ ⢸ ⠈⡾ ⢸ ⠱⠁
│ ⢸⣀⠇ ⠇ ⡟ ⠸⢼ ⢣ ⢠⠊ ⠈ ⢣ ⡇ ⠋ ⢸ ⡇ ⠃ ⠈
│ ⠈ ⠁ ⠑⠁ ⢸⢠⠃ ⡇⡇
│ ⠈⠙ ⢻
│ ⠈
│
4.643ms │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
14:16:55 14:17:10 14:17:25
gping
コマンドを使うことで、ネットワーク監視が視覚的に行えるようになり、直感的に問題を把握できるようになります。
興味のある方は、ぜひ試してみてください!
まとめ
最後までお読みいただきありがとうございました。
今回は、シンプルながらも便利なgpingコマンドをご紹介しましたが、私にとってはとても新鮮な発見となりました。
これからも、このような基礎的な内容を積極的にアウトプットし、自分の知識を整理しつつ、学びを深めるきっかけにしていきたいと思います。