PR

PowerShellでファイルをリアルタイム監視する方法【tail -f相当を実現】

PowerShellのアイキャッチ PowerShell
PowerShell

Windowsでログファイルの更新をリアルタイムで追いかけたいこと、ありますよね。LinuxやmacOSではtail -fコマンドが当たり前のように使えるのに、Windowsのコマンドプロンプトではその機能が見当たらない……。開発やシステム運用の現場でログ監視をしたいとき、少し困ってしまいます。

でも大丈夫です。PowerShellのGet-Contentコマンドレットを使えばtail -fとほぼ同じことができるようになります。この記事では、PowerShellでファイルの変更をリアルタイムに表示する方法を、初心者の方にも分かりやすく解説します。

Windowsで「tail -f」相当の機能が必要になる場面

開発中のアプリケーションのログをリアルタイムで確認したり、サーバーのエラーログを監視したりする場面でファイルの末尾に追記される内容を即座に確認できると便利ですよね。特に以下のような場面では必須の機能といえます。

  • Webサーバーのアクセスログやエラーログの監視。
  • アプリケーションの動作確認やデバッグ時のログ追跡。
  • バッチ処理の進行状況を記録したログファイルの監視。
  • データベースのクエリログやスロークエリの確認。

Linuxならtail -f、macOSでも同様にtail -fコマンドで実現できるこの機能。Windows環境でも同じことができたら……という願いは、PowerShellのGet-Contentコマンドレットで実現できるようです。

PowerShellの「Get-Content」コマンドレットとは

Get-ContentはPowerShellに標準で搭載されているコマンドレットで、ファイルの内容を読み取るための基本的なツールです。単にファイルの中身を表示するだけでなく、-Waitオプションを組み合わせることで、ファイルへの追記をリアルタイムで監視し続けることができます。

Microsoft公式ドキュメントでも詳しく解説されていますのでより深く知りたい方はこちらもご参照ください。

Get-Content (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn

基本的なコマンド構文

PowerShellでtail -f相当の動作を実現する基本的なコマンドは以下の通りです。

PowerShell

このコマンドを実行すると指定したファイルの末尾から指定行数を表示し、その後ファイルへの追記を監視し続けます。それぞれのオプションについて、詳しく見ていきましょう。

各オプションの詳しい解説

-Path [ファイルパス]

監視したいファイルのパスを指定します。ファイルパスにスペースが含まれる場合は、ダブルクォーテーション(””)で囲む必要があります。

記述例:

PowerShell

ちなみに、エクスプローラーで開いているフォルダをカレントディレクトリとしてPowerShellを起動する方法については、こちらの記事でも紹介しています。

フォルダーを指定してPowerShellを開く | ちゅんろぐ

-Tail [末尾行数]

コマンド実行時点で画面に表示するファイル末尾からの行数を指定します。

  • 10を指定すれば、ファイルの最後の10行が表示されます
  • 0を指定すると、実行時点では何も出力されず、-Waitと併用することで以降の追記分だけが表示されます

使用例:

PowerShell

-Encoding [文字コード]

ファイルの文字コードを指定します。日本語を含むログファイルでは、このオプションを正しく指定しないと文字化けが発生することがあります。

主な指定値:

  • utf8: UTF-8(BOM付き)
  • utf8NoBOM: UTF-8(BOMなし)
  • utf8BOM: UTF-8(BOM付き、明示的に指定)
  • shift_jis: Shift-JIS(日本語の古いシステムで使われることが多い)

デフォルトではutf8NoBOMが使用されるようですが、環境によってはUTF-8(BOMなし)のファイルを開いたときに文字化けが発生することがあります。その場合は明示的に-Encoding utf8を指定してみてください。

指定できる文字コードの全リストについてはMicrosoft公式ドキュメントを参照ください。

Get-Content の -Encoding パラメーター | Microsoft Learn

使用例:

PowerShell

-Wait(リアルタイム監視の要)

今回の記事の本題となる重要なオプションです。Linux等で使用できるtailコマンドの-fオプションに相当します。

このオプションを指定することでコマンド実行後に待機状態となり、ファイルに追記された内容がほぼリアルタイム(約1秒ごとにチェックしているようです)で出力されます。

監視を停止したい場合はCtrl + Cキーで中断できます。

実践的な使用例

ケース1: Webサーバーのアクセスログを監視

PowerShell

末尾20行を表示してから以降のアクセスをリアルタイムで追跡できます。

ケース2: アプリケーションのエラーログを監視(新規追記のみ)

PowerShell

実行時点では何も表示せず以降に発生したエラーだけを表示します。

ケース3: パスにスペースが含まれるファイルを監視

PowerShell

パスにスペースが含まれる場合は必ずダブルクォーテーションで囲んでください。

Q&A

Q
コマンドプロンプト(cmd.exe)では同じことができないの?
A

残念ながらコマンドプロンプトにはtail -fに相当する標準コマンドがありません。PowerShellを使用することで実現できます。

Q
複数のファイルを同時に監視できる?
A

Get-Contentコマンドは1つのファイルパスしか指定できないため、複数ファイルを同時に監視したい場合は、PowerShellのウィンドウを複数開いてそれぞれで監視するか、ログ統合ツール(Tail for Windows、Baretailなど)を使用する方法があります。

Q
ファイルが大きすぎて表示が遅い場合は?
A

-Tailオプションで表示する行数を少なくすることで初回読み込みの負荷を下げられます。-Tail 0を指定すれば初回は何も読み込まず追記分のみを監視するため、非常に大きなファイルでも快適に監視できます。

Q
文字化けが発生する場合の対処法は?
A

-Encodingオプションでファイルの文字コードを正しく指定してください。UTF-8の場合は-Encoding utf8、Shift-JISの場合は-Encoding shift_jisを試してみてください。

まとめ

この記事ではPowerShellのGet-Contentコマンドレットを使って、Windowsでファイルの変更をリアルタイムに監視する方法を解説しました。要点をまとめておきますね。

  • Windowsでtail -f相当の機能はPowerShellのGet-Contentコマンドで実現できるよ。
  • -Waitオプションを指定することでファイルの追記をリアルタイムで監視できるよ。
  • -Tailオプションで初回表示する行数を制御できるよ。
  • -Encodingオプションで文字コードを指定すれば文字化けを防げるよ。
  • ログ監視やデバッグ作業でLinux環境と同じように作業できるようになるよ。

ログファイルの監視は開発・運用の現場で頻繁に行う作業です。PowerShellのこのコマンドを覚えておくと、作業効率が格段に上がります。ぜひ実際に試してみてくださいね。

当ブログの内容はできる限り正確な情報を提供するよう努めていますが、利用にあたっては自己責任でお願いいたします。
掲載内容に基づく操作・設定などによって生じたトラブルや損害について、当サイトは一切の責任を負いません。
タイトルとURLをコピーしました