今更more.comを使うのか!? Windowsでのページングを考える
ASCII.jp / 2024年7月10日 12時0分
ページング(Paging)とは、コンソールなどで、画面の大きさに合わせて1画面分でスクロールを止め、キー入力などを使って、表示をさせるものだ。Windowsには、MS-DOS時代からのコマンドとしてmore.comがある。こうしたプログラムを「ページャー(Pager)」ともいう。
しかし、このmore.comは、日本語表示はシフトJISしか対応しておらず、UTF-8エンコードやPowerShell標準のUnicodeエンコード(UTF-16 LE)にも対応していない。このため、渡される文字エンコードによっては文字化けしてしまう。2024年にもなって、文字化けとはなんとも情けない話だ。そこで、この問題を考えてみることにした。
cmd.exeとmore.comの関係
MS-DOS時代からあるmore.comは、「C:\Windows\System32\more.com」が実体である。拡張子がcomになっているが、中身は、EXE(PE)形式である。MS-DOSでは、ファイルサイズが64KB以下に限定されるが、簡易な実行ファイル形式があり、それがCOM形式と呼ばれていて、拡張子が.comだった。
WindowsになりCOM実行ファイル形式はなくなり、そのうちCOMは、Component Object Modelのことを指すようになった。Microsoftはいつも略語を再利用する。その結果、古くからのユーザーほど混乱しやすくなるのは、なんとかしてほしいところだ。
more.comは、そもそもcmd.exeで使うことを想定しており、日本語はシフトJISしか表示できない。しかし、cmd.exe用に作られたWindowsに付属する多くのコンソールコマンドは、大抵の場合、シフトJISしか出力しないので、これでも問題はなかったのだ。
なお、Windowsのコンソールでは、実行ファイルの拡張子である「.exe」「.com」「.bat」は省略可能で、「more.com」は「more」で実行できる。
moreではなくlessを使う
そんなmore.comだが、後戻りできないし、内部で検索することもできない。仕様としてはMS-DOS時代のままである。実際には、MS-DOS初期のmore.comは、ファイルパスを引数にすることができない純粋なフィルタコマンドだった。このため、typeコマンドなどと合わせてページングしていた。
その点、現在のmore.comは、引数にファイルを指定することで、ファイル内容のページング表示ができる。この点では少しUnixのmoreに近づいた。
UnixやLinuxでは、moreではなくlessを使うことが多い。個人の好みにもよるが、多くのユーザーがページャーにlessを指定するのが一般的だろう。
lessは、moreという名前に「インスパイア」されて作られたコマンドである。多数のキー割当や設定項目があり、高性能なmoreとして動作する。現在Linuxで広く使われているのはGNUで開発されたlessである。
GNU lessはオープンソースであり、Windowsにも移植されている。wingetコマンドで入手が可能だ。wingetなら安心というわけではないが、少なくともよく分からない「無料プログラム」サイトからダウンロードするよりはマシと思う。とはいえ、インストールをするのは素性を確認してからだ。Windows用のGNU lessに関しては、GitHubの「jftuga/less」(https://github.com/jftuga/less-Windows)にページがあり、リリースノートなどは「Less」(https://greenwoodsoftware.com/less/)にある。これは、
winget show jftuga.less
で得られる情報である。インストールは、
winget install jftuga.less
でできる。
ただし、wingetで取得したパッケージには実行ファイル(less.exeとlesskey.exe)だけがある。前記のGitHubのreleaseからzipファイル(less-x64.zip)をダウンロードして、中にあるmanページ(*.manファイル)を取り出しておくといいだろう。拡張子はmanになっているが、整形されたテキストファイルになっている。
より簡易に、WSLのmanコマンド(man less)を使う方法もある。GNU lessは、比較的アップデートが頻繁である。しかし、LinuxディとスリビューションのLTS(Long Term Support)版では、重大なバグがない限り、開発時点で選択されたバージョンのlessに止まり続ける。
このため、WSLのUbuntuなどでもlessのバージョンが、wingetで導入したlessよりも古いバージョンになることがある。wingetでは、常に最新版のlessをインストールするからだ。
Windowsでlessを使う場合に注意が必要なのは、文字エンコードだ。less.exeの文字エンコードは、環境変数LESSCHARSETで指定する。シフトJISの場合には、「DOS」を指定する。
UTF-8がデフォルトの文字エンコードだが、LESSCHARSETに「utf-8」を指定することもできる。cmd.exeでも使うのであれば、環境変数の設定(「設定」→「システム」→「バージョン情報」→「システムの詳細設定」)で「DOS」を指定しておき、PowerShellのプロファイルで「utf-8」を指定する。
lessは、設定や起動オプションでさまざまな機能を利用できる。「--help」で簡易なオプションを表示でき、「man less」をインターネット検索すると、日本語man pageなどが見つかる。
行番号の表示(-Nオプション)や、表示対象が画面サイズ以下だった場合にページングしないで終了(-Fオプション)、UNIXのmoreのような詳しいプロンプト(-mオプション)などを指定すると便利。環境変数LESSで指定しておくことも可能だ。
PowerShellには組み込みのページャーがある
PowerShell/Windows PowerShellには組み込みのページャーがある。パイプラインの最後に「Out-Host -Paging」付けることでページングがなされる。ただし、筆者の環境では、コマンド実行時のEnterキーを取ってしまうのか、最初のページのみ、1回Enterキーが入力された状態になり、ちょっとバグっぽい(最新版でも、言語を英語にしても同じ)。
とはいえ、ちょっと見にくいだけであり、なんと言っても標準機能なのでインストールしないで利用でき、PowerShell/Windows PowerShell文字エンコード(Unicode)に対応している。トラブル対策に覚えておきたい。
また、以前にも以下の記事で解説したが(「コマンドの出力が長いとき、PowerShellではとりあえずselect-objectでなんとかする」)、Out-GridViewを使うと、別ウィンドウにパイプラインを出力できる。ファイルを表示させる場合には、
Get-Content .\less.man | Out-GridView
などとして、ファイル内容をGet-Contentコマンドで取り出して、Out-GridViewに入れてやる。
PowerShellとWindows PowerShellでは、「more」の扱いが異なる。Windows PowerShell(Ver.5.1.22621.3672)では、「more」は、組み込みの関数になっているが、内部でmore.comを呼んでいる。
PowerShell(ここでは、Ver.7.4.3を使った)では、「more」は、more.comを意味する。これは、「get-command more」で調べるとわかる。
どちらの場合でも、more.comと指定することで、「C:\Windows\System32\more.com」が起動する。
PowerShellでは、HELPコマンド(HELP関数)が内部的にmore.comを利用している。内部をみると、環境変数PAGERにコマンドを指定すれば、これをページャーとして利用するようだ。
more.comの場合にless.exeを使いたい場合、手っ取り早いのは、「more」のエイリアスとしてless.exeを指定することだ。また、HELPコマンド向けとして環境変数PAGERにもless.exeを指定する。どちらの場合もless.exeに対するPATH設定は行われていると仮定している。以下の2行をプロファイルで指定しておくといいだろう。
set-alias -Name more -Value less.exe $env:PAGER=less.exe
これで、「dir | more」などとすると、lessでページングされる。なお、moreの後ろにオプションを付けることもできる。たとえば行番号をつけたいなら「dir | more -n」などとする。
moreやlessは、テキストファイルの中身をのぞくのに使うため、利用頻度も低くない。1回less.exeを使うように環境整備しておくと、作業効率が改善する。ファイルパスの補完と組み合わせて、短時間で確認できる。いちいちメモ帳を開くことも必要なくなる。
この記事に関連するニュース
-
窓辺の小石 第191回 リンクの冒険
マイナビニュース / 2024年11月8日 17時3分
-
Windows Subsystem for Linuxガイド 第41回 WSL GUI設定
マイナビニュース / 2024年11月7日 15時31分
-
あらためてIPv6基本のキ
ASCII.jp / 2024年11月3日 10時0分
-
「消えない8.63GB」のファイルが消えた - 阿久津良和のWindows Weekly Report
マイナビニュース / 2024年10月27日 16時0分
-
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法
ASCII.jp / 2024年10月27日 10時0分
ランキング
-
1あれ、意外とイイかも? 電車派必見なiPhone「マップ」アプリの便利機能3選
&GP / 2024年11月16日 7時0分
-
2Arm版Windows 11のISOイメージ配布開始 インストールがより手軽に
ASCII.jp / 2024年11月15日 13時20分
-
3極薄な折りたたみスマホ「Galaxy Z Fold Special Edition」が登場 日本投入はある?
ITmedia Mobile / 2024年11月16日 10時5分
-
4郵便局で「ゆうゆうポイント」始動 あえて「共通ポイントを狙わない」ワケ
ITmedia Mobile / 2024年11月15日 21時15分
-
5TikTokで「麻辣湯に幼虫が混入」投稿が拡散 若者に人気の飲食チェーンが謝罪 見解を発表 「防犯カメラの映像によると……」
ねとらぼ / 2024年11月15日 19時49分
記事ミッション中・・・
記事にリアクションする
記事ミッション中・・・
記事にリアクションする
エラーが発生しました
ページを再読み込みして
ください