「Windows Terminal」を使いこなす
はじめに
基本的にWSLはキーボードからコマンドを入力する「CLI(Command Line Interface)」で操作します。そのために必要なのが「ターミナル」です。WSL自体の使いこなし方法を紹介する前に、WSLへの「窓口」となる「Windows Terminal」について解説します。
ターミナルとは
「ターミナル」あるいは「端末」とは、コンピューターに接続して入出力を行う専用機器の名称です。と言ってもピンとこない方もいるでしょうから、少し歴史的な部分から解説しましょう。
大昔のコンピューターは非常に大きく、専用の部屋に設置されていました。こうしたコンピューターまでわざわざ出向いて操作するのは面倒で不便です。そこで入力に使うキーボードと結果を表示するディスプレイだけを備えた、専用の装置が登場しました。これがターミナルです。ターミナルはシリアルケーブルなどでコンピューターと接続され、コンピューターを別室から遠隔操作できるようになっていました。人間が操作する入出力装置と実際に計算するCPUを分離していたわけです。
パーソナルコンピューター(PC)が登場すると、コンピューター本体と入出力装置の一式を机上に設置できるようになり、コンピューターを設置するための別室や遠隔操作用の端末はもはや必要なくなりました。とはいえコンピューターを操作するには命令を与え、結果を受け取る「窓口」となる仕組みは当時と同様に必要でした。
そこで現在では、ハードウェアのターミナルをソフトウェア的に再現した「ターミナルエミュレーター」が使われています。従来のターミナルをアプリにして、OSの内部で同じことをしてしまおうというわけです。PCのキーボードはそのままターミナルのキーボードとして使われ、コンピューターに命令を送ることができます。また、結果を表示するターミナルのディスプレイは、GUIのウィンドウとして一般的なデスクトップアプリと同様に表示されます。
現在では物理的なターミナルが使われることはほとんどなく、ターミナルとターミナルエミュレーターを混同する恐れはないでしょう。そのため、ターミナルエミュレーターを指して単に「ターミナル」や「端末」と呼ぶことも一般的です。本連載でもターミナルと呼称することにします。
Windowsにおけるターミナル
もともとWindowsでは、標準で「Windows Console Host(conhost.exe)」というターミナルが利用されていました。Windowsで「コマンドプロンプト(cmd.exe)」を使ったことがある人であれば、このどこか野暮ったいウィンドウに見覚えがあるのではないでしょうか。そう、映画やドラマでハッカーがキーボードから呪文を入力している、あの「黒い画面」のことです。
Windows Console Hostは見ての通り、単純にコマンドを実行するくらいしかできない、非常にプリミティブなターミナルです。GUIアプリではあるものの、メニューがないため、どんな操作ができるかも一目ではよく分かりません。もちろん今どきのアプリでは当然と言える、タブ表示もサポートしていません。そこでWindows 11のバージョン22H2以降、より現代的なWindows Terminalが標準のターミナルとして変更されました。
前述の通り、ターミナルは人間がコンピューターとやり取りするための窓口に過ぎません。ターミナルはフォントや画面の色、タブ表示やスクロールバックといった「見た目」や「GUI的な使い勝手」の部分のみを担っており、実際に入力されたコマンドを処理しているのは別のプログラムです。このコマンドを解釈して処理するプログラムを「シェル」と呼びます。WindowsのコマンドプロンプトやPowerShell、そしてUbuntuをはじめとするLinuxで標準的に使われているBashはシェルの一種です。
窓口であるターミナルと、処理を行うシェルが別であるという構造上、ユーザーはターミナルとシェルを自由に組み合わせられます。例えば、ターミナルがWindows Console Hostであっても、Windows Terminalであっても、あるいは他のサードパーティ製のターミナルであっても、実行しているシェルが同じであれば、コマンドの実行結果はどれも同じになります。また、逆に同じターミナル上で異なるシェルを実行できます。後述しますが、Windows Terminalはタブ機能を備えているため、PowerShellとBashを並べて起動できるのです。異なるシェルでも同じ操作感で利用できます。
Linuxには複数のシェルが用意されているため、より高機能なシェルに切り替える上級者もいます。言うまでもありませんが、後からインストールした別のシェルでも同じターミナル内で実行できます。なお、高機能な別のシェルについては、本連載内でいずれ紹介する予定です。
Windows Terminalの機能
それでは、Windows Terminalの主な機能とその使い方を見ていきましょう。まずWindows Terminalを起動してください。前回でも紹介しましたが、スタートメニューから「ターミナル」を探して実行してください。「すべてのアプリ」の「た」行にありますが「terminal」で検索するほうが簡単でしょう。
タブ
Windows Terminalはタブ機能に対応しています。タブについての説明はもはや不要でしょうが、複数のウィンドウを1つのウィンドウ内にまとめ、タブを使って切り替えられるようにする機能です。複数のウィンドウを散らかすことなく整理できるため、Webブラウザーのような複数のウィンドウを開くことの多いアプリには、もはや実装されていない方が珍しいくらいの定番機能です。
タブバー右側にある「+」ボタンをクリックするか、キーボードから[CTRL]+[SHIFT]+[T]キーを押すことで、新しいタブを開けます。
単に新しいタブを開くと、規定のプロファイル(後述)が起動します。そこでタブバーの一番右側にある、下向きの矢印ボタンをクリックするか、[CTRL]+[SHIFT]+[SPACE]キーを押してください。タブドロップダウンが開き「PowerShell」や「コマンドプロンプト」といったプロファイルの一覧が表示されます。ここからプロファイルを選択すると、そのプロファイルで新しいタブを開けます。また各プロファイルには「[CTRL]+[SHIFT]+[数字]キー」というショートカットが割り当てられています。このプロファイルの番号を覚えておけば、もっと簡単に好みのプロファイルでタブを開くことができるでしょう。
タブ表示はウィンドウをシンプルにまとめられて便利ですが、複数のターミナルを並べて操作したいこともあるでしょう。当然ですが、複数のウィンドウとタブは併用できます。[CTRL]+[SHIFT]+[N]キーを押すと、規定のプロファイルを新しいウィンドウで開きます。またタブバー右側の「+」ボタンや、タブドロップダウンのプロファイルを[SHIFT]キーを押しながらクリックすることでも、新しいウィンドウを開けます。
タブはドラッグすることで位置を入れ替えられます。またタブをウィンドウの外側へドラッグすると、そのタブをウィンドウから切り離して、新しいウィンドウを作れます。逆に、タブを別のウィンドウにドラッグすれば、2つのウィンドウを1つにマージできます。こうした挙動はFirefoxなどのWebブラウザーと同じなので違和感なく操作できるのではないでしょうか。
現在のタブを閉じるには[CTRL]+[SHIFT]+[W]キーを押します。
ペイン
別のウィンドウを並べるのではなく、1つのタブの内部を複数に分割したいという場面もよくあります。例えば、サーバーのログファイルや負荷を監視しながらコマンドを入力したいようなケースです。「ペイン」を作成することでタブの中身を分割し、複数のシェルを同時に動かすことができます。
[ALT]+[SHIFT]+[+]キーを押すと、現在のペインを左右に分割します。[ALT]+[SHIFT]+[-]キーを押すと、現在のペインを上下に分割します。アクティブなペインは対象の領域をマウスでクリックするか[ALT]+[カーソル]キーで切り替えられます。[ALT]+[SHIFT]+[カーソル]キーを押すと、アクティブなペインのサイズを調整できます。
タブと同様に[CTRL]+[SHIT]+[W]キーで現在アクティブなペインを閉じることができます。
コピー&ペースト
CLIは文字でコンピューターに命令を与え、その結果も文字で受け取るインターフェイスです。言い換えると、実行する処理を文字だけで正確に表現できるわけです。そして、同じコマンドを入力すれば何度でも同じ作業を再現できます。これはGUIアプリにはないメリットだと言えるでしょう。そのため技術系の記事やブログ(もちろん本連載もです!)では、あえて手順をコマンドで解説することも珍しくありません。ここではテキストベースであるがゆえに、コピー&ペーストが大活躍します。
もちろん、Windows Terminalもコピー&ペーストに対応しています。コマンドの出力をコピーして保存したり、作業手順書から実行するコマンドをペーストしたりといった使い方ができるため非常に便利ですが、一般的なアプリケーションとはコピーに使うショートカットキーが異なる点に注意しましょう。一般的なコピーのショートカットは[CTRL]+[C]キーですが、Windows Terminalで選択したテキストをコピーするには[CTRL]+[SHIFT]+[C]キーを押す必要があります。[CTRL]+[C]はシェルにおいて実行中のコマンドを終了させる機能で使われており、キーの衝突を防ぐためコピーには異なるショートカットキーが割り当てられているというわけです。
一方のペーストは[CTRL]+[SHIFT]+[V]でも[CTRL]+[V]でも行えます。さらに言えば、マウスを右クリックするだけでもペーストできます。
また、後述する設定画面で「選択範囲をクリップボードに自動でコピーする」をオンにすると、テキストをドラッグするだけでコピーができます。「ドラッグでコピー」→「右クリックでペースト」とマウスだけでコピペ操作を行えるようになるため、これも慣れると便利です。
ちなみに、選択範囲の自動コピーをオンにすると、ちょっとしたマウス操作ミスでクリップボードの内容が上書きされてしまうため、逆に不便だと感じることもあるでしょう。そんなときはWindowsのクリップボード履歴を有効にしてみましょう。[Win]+[V]キーを押すとクリップボードが起動するので「オンにする」をクリックします。
これで、以後はコピーした内容の履歴が保存されるようになります。ペーストしたい場合は[Win]+[V]キーを押してペーストしたい項目を選択してください。
Quakeモード
CLIの操作に慣れてくるとターミナルは手放せなくなります。常に起動しておきたいアプリの1つですが、デスクトップの一角を常に黒い画面が占有しているのは、ちょっと邪魔に感じることもあるでしょう。そんなときに便利なのがQuakeモードです。これはWindows Terminalのウィンドウ名を「_quake」と設定すると入る特殊モードです。ウィンドウはデスクトップの1/2のサイズに調整され、デスクトップ上部にスナップされます。このウィンドウの位置は変更できません。また上下のサイズは変更できますが、水平方向のサイズは変更できません。
Windows Terminalが起動している状態で[Win]+[`(バッククオート)]キーを押してください。Quakeモードのウィンドウが画面上部に表示されます。
以後は[Win]+[`]キーを押す度に、ウィンドウがアクティブと最小化をトグルします。
Quakeモードを利用すれば、普段はターミナルを隠しつつも一瞬でターミナルを開いてコマンドを実行できます。
ちなみに、このようにホットキー1つで画面上部からウィンドウを呼び出せるインターフェイスは、名作FPSゲーム「Quake」が元祖とされており、このモードの名前もそれに由来します。
Windows Terminalのカスタマイズ
Windows Terminalは「設定」タブから、好みに応じて見た目や挙動を細かくカスタマイズできます。タブドロップダウンをクリックして「設定」をクリックするか、キーボードから[CTRL]+[,]キーを押してください。設定のための新しいタブが開きます。
設定項目は多岐に渡るため、すべてについて説明はできません。そこでオススメのカスタマイズを中心に、いくつかをピックアップして紹介します。
ウィンドウの大きさ
Windows Terminalはデフォルトで120文字x30行のサイズで起動します。1行あたり120文字はともかく、1画面が30行というのは少し心もとないように筆者は感じています。コマンドが少し長い出力をしたら、それだけでもうスクロールバックする必要が出てきます。最近のデスクトップの解像度は4Kも珍しくなくなりました。こうした十分に広いデスクトップを使っているのであれば、ターミナルのウィンドウも大きくしておいた方が作業効率的には有利です。
設定の「スタートアップ」を開いてください。下から2番目にある「起動サイズ」をクリックすると、Windows Terminalを起動したときや、新しいウィンドウを開いたときのサイズを指定できます。ちなみに筆者は144列x72行の設定が好みです。
設定を変更したら「保存」をクリックしてください。
背景の透明度
設定タブの左側にある「プロファイル」から「既定値」を選択てください。これは、個々のプロファイルで上書きされない限り、すべてのプロファイルに適用されるデフォルト値の設定です。この中の「外観」をクリックします。ウィンドウを下方向にスクロールしていくと「透明度」の項目の中に「背景の不透明度」という設定があります。デフォルトでは100%となっていますが、このスライダーを動かして数値を小さくするとウィンドウの背景を透明にできます。
ドキュメントを読みながらコマンドを実行したり、複数のウィンドウを並べて出力を見比べたりするような場合に、半透明にしたウィンドウを重ね合わせると便利なこともあるため、覚えておくとよいでしょう。
常に手前に表示する
Quakeモードのように、必要に応じてターミナルを呼び出すのではなく、常にデスクトップ上に表示しておきたいこともあるでしょう。例えば、作業中にサーバーログを常に見えようにしておきたい、といったケースです。そういう場合は「外観」の「常に手前に表示」をオンにしてください。他のウィンドウがオーバーラップしても、常にWindows Termianlが最前面に表示されるようになります。
自動的に起動する
「スタートアップ」の「コンピューターのスタートアップ時に起動」をオンにすると、Windowsの起動時にWindows Terminalも自動的に起動するようになります。特にインフラ寄りのエンジニアには「PCで作業するときは必ずターミナルを使う」という人も多いでしょう。必ず使うのであれば、自動的に起動させてしまうのが便利です。
プロファイルとは
ここまでも何度か言及していますが、Windows Terminalには「プロファイル」という概念があります。これは実行するコマンド(シェル)やターミナルの色、フォント、挙動といった設定のセットに名前を付け、切り替えを簡単にしたものです。プロファイルごとに実行するコマンドが異なるため、WSL(Ubuntu)やPowerShellを同じウィンドウ内に同居できるというわけです。またPowerShellが真っ黒な背景なのに対し、Ubuntuはやや紫がかっていることに気づいたでしょうか。これもプロファイルに指定されているカラースキームがPowerShellとUbuntuで異なるためです。
Windows Terminalは、新しいウィンドウやタブを開くとデフォルトでPowerShellを起動します。これは「スタートアップ」の「規定のプロファイル」にPowerShellのプロファイルが指定されているためです。本連載ではWSLをメインに使っていくので、規定のプロファイルをUbuntuに切り替えてしまいましょう。これで、以後はWindows Terminalの起動時や新しいタブを開いたときにはUbuntuのBashが起動するようになります。
プロファイルはWSLのディストリビューションをインストールすると自動で追加されますが、それとは別に自分で作成もできます。設定タブの左下にある「新しいプロファイルを追加します」をクリックすると、プロファイルの作成画面に遷移します。新たにプロファイルを作るか、既に存在するプロファイルを複製するかを選択できます。
CLIで作業をしていると、どうしても発生してしまうミスの1つが「ターミナルの取り違え」です。ターミナルはどれも変わりばえのない黒い画面なので、複数のターミナルを開いていると、どうしても取り違えミスが起きてしまうのです。手元の開発環境を操作しているつもりが、本番サーバーで破壊的なコマンドを実行してしまった、というようなミスもよく聞きます。
先ほどのカラースキームの例のように、プロファイルではターミナルの外観を大きくカスタマイズできます。そこで本番アクセス用のプロファイルを別に作成し、まったく違うカラースキームや壁紙を設定することで目立たせ、取り違えを防止するというのもよい考えです。
ターミナル内の壁紙は、設定したいプロファイルを選択した上で「外観」をクリックし、その中の「背景画像のパス」で指定できます。なお、普通の画像を指定すると明るすぎて文字が読めなくなってしまいます。そこで「背景画像の不透明度」を40%程度まで下げ、視認性を上げるのがコツです。
おわりに
今回は、CLIの使い勝手を決めるターミナルの操作方法について解説しました。昔のコマンドプロンプトを経験していた人からすると、Windows Terminalの高機能ぶりに驚いたのではないでしょうか。まだまだ紹介しきれなった高度な機能も存在するので、ぜひマニュアルを一読してみてください。
次回は、いよいよWSL上でUbuntuを起動し、Linux環境を構築していきます。その第一歩として、Ubuntu上でのアプリケーションの管理方法を解説する予定です。ご期待ください。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「WSL2」をインストールしよう
- Windows Subsystem for Linux 2 でDocker を使用する(その2)
- Windows 11でLinuxを使う:Windows Subsystem for Linux 2の設定
- Windows Subsystem for Linux 2 でDocker を使用する(その1)
- Microsoft、「Windows Terminal 1.7」リリース
- Microsoft、「Windows Terminal 1.7」リリース
- Microsoft、「Windows Terminal 1.4」リリース
- 今さらながらのVim!
- de:code 2019開催。自動運転車からMicrosoft 365、Azure、HoloLens 2までの基調講演まとめ
- グラフィカルユーザインタフェースとコマンドラインインタフェース