ターミナルマルチプレクサの「Byobu」を導入して、WSLのターミナル生活をさらに快適にしよう

はじめに
第2回で解説した通り、Windows Terminalは非常に高機能なターミナルエミュレータです。複数タブやペイン分割、バックスクロール、コピー&ペーストなど、GUIのターミナルに求められる便利機能は大抵揃っています。
しかし、Windows TerminalはあくまでGUIのアプリです。CLIはキーボードで作業することが前提ですから、マウスなしですばやく操作できるに越したことはありません。また以前説明した通り、ターミナルはあくまでシェルを起動するための「ガワ」でしかありません。そのため内部セッションの管理には手が出せないという問題もあります。
そこで便利なのが「ターミナルマルチプレクサ」です。今回は「Byobu」を使って、WSLでのターミナル生活をさらに快適にする方法を解説します。
ターミナルマルチプレクサとは
ターミナルマルチプレクサとは、仮想ターミナルを管理するためのソフトウェアです。複数のターミナルを「セッション」という単位で管理し、それらを自由に切り替えたり、分割したりを可能にします。代表的な実装としては「GNU Screen」や「tmux」が有名です。しかし、これらのソフトウェアは非常に高機能である反面、設定や使いこなしが難しいという欠点があります。特に初心者にとっては、複雑なキーバインドや設定ファイルの記述が大きな障壁となるでしょう。
そこで登場したのがByobuです。ByobuはUbuntu開発者のDustin Kirklandによって開発された、Ubuntu発のソフトウェアです。もともとByobuは「screen-profiles」という名前で開発がスタートしました。その名の通り、最初は「GNU Screenの使いやすい設定セットを提供する」ためのものだったのです。これがGNU Screenだけでなくtmuxにも対応し、さらに進化を遂げたものが現在のByobuです。この名前はもちろん、日本語の「屏風」に由来しています。
Byobuのインストール
Byobuをインストールするには、以下のコマンドを実行してください。これだけで簡単にByobuをインストールできます。
$ sudo apt install -U -y byobu
なお、Ubuntu Serverの場合はデフォルトでインストール済みとなっています。
Byobuの設定
基本的な起動方法
Byobuは同名の「byobu」コマンドで起動します。
$ byobu
起動すると、ターミナルの最下部にカラフルなステータスラインが表示されます。このステータスラインには、システムの様々な情報(Ubuntuのバージョン、ロードアベレージ、CPU使用率、メモリ使用率、日時など)が表示されています。
エスケープキーの設定
Byobuでは様々な機能をキーボードショートカットで呼び出します。特に重要なのが「Prefixキー」と呼ばれるエスケープキーです。PrefixキーはByobuの使い勝手を決めるキーである上、どのキーを割り当てるかは個人の好みが強く反映されます。Byobuを使いはじめるには、まずPrefixキーの設定から行いましょう。
Byobuには「byobu-ctrl-a」というコマンドが用意されています。初めてByobuを起動した状態では、このコマンドは[Ctrl]キー+[A]キーに割り当てられています。そのため、初めて[Ctrl]キー+[A]キーを押すと、以下のような画面が表示されます。
byobu-ctrl-aは[Ctrl]キー+[A]キーを一般的なシェルと同様にカーソルの行頭移動として使うか、あるいはByobuのPrefixキーとして使うかの選択を行なうためのコマンドです。Screenモードを選択すると[Ctrl]キー+[A]キーがPrefixキーに設定されます。対してEmacsモードを選択すると[Ctrl]キー+[A]キーがカーソルの行頭移動になります。[Ctrl]キー+[A]キーでの行頭移動は頻繁に利用するため、筆者は「2」を入力してEmacsモードを選択しておく方が好みです。
Emacsモードを選択した場合、Prefixキーとして[F12]キーが設定されますが、[F12]キーは非常に押しにくく、またキーボードによってはファンクションキーが存在しないこともあるでしょう。そこで、より使いやすキーに変更することを推奨します。[F9]キーを押すか「byobu-config」コマンドを実行してByobuの設定画面を表示し、「Change escape sequence」を選択します。ここで自分にとって使いやすいキーを設定しましょう。筆者のお勧めは[Ctrl]キー+[Z]キーです。
なお、筆者が考える[Ctrl]キー[Z]キーをエスケープキーにするメリットは以下の通りです。
- 左手だけで押しやすい
- シェルの[Ctrl]キー+[Z]キーの機能(ジョブのサスペンド)は頻繁には使わないため、奪ってしまっても問題ない
- 本来の機能(サスペンド)を使いたいときは[Ctrl]キー+[Z]キーを2回続けて押せば良いため、サスペンドができなくなるわけではない
- むしろ誤って[Ctrl]キー+[Z]キーに触れてしまい、ジョブをサスペンドさせてしまうリスクが減るとも言える
ステータスラインの設定
Byobuのステータスラインにはシステムの様々な情報が表示されています。デフォルトでは、左から順に「Ubuntuロゴ」「Ubuntuのバージョン」「ウィンドウ一覧」「アップデートできるパッケージ数と再起動の要求」「起動時間」「ロードアベレージ」「CPUコア数×周波数」「メモリ容量と使用率」「ストレージ容量と使用率」「現在日時」が表示されています。これらの表示項目はByobuの設定画面から変更できます。必要な情報を追加、あるいは不要な情報を削除して、ステータスラインを自分好みにカスタマイズしてみましょう。
[F9]キーもしくはbyobu-configコマンドで設定画面を表示して「Toggle status notifications」を選択すると、ステータスラインに表示できる項目がリストアップされます。現在「*」が付いている項目が表示されています。表示したい項目をカーソルキーで選択したら[space]キーを押してください。また、再度[space]キーを押すことで「*」が消え、その項目を非表示にできます。
Byobuの機能
それでは、Byobuの具体的な機能を解説しましょう。
ウィンドウ管理
Byobuには「ウィンドウ」という概念があります。これはByobu内で開かれている独立したターミナルで、Windows Terminalのタブと同じようなものだと考えると分かりやすいでしょう。
新しいウィンドウを作成するには[F2]キー、もしくはPrefixキー+[C]キーを押します。これはPrefixキーを[Ctrl]キー+[Z]キーに設定しているのであれば、[Ctrl]キー+[Z]キーを押してから[C]キーを押す操作になります。これでステータスラインのウィンドウ一覧に新しいウィンドウが追加されます。[F3]/[F4]キーかPrefixキー+[N]/[P]キーを押すと前後のウィンドウに切り替えることができます。
ウィンドウには名前を付けることもできます。[F8]キーかPrefixキー+[,]キーを押すとステータスラインが「rename-window」というプロンプトに変化します。そこに任意のウィンドウ名を入力して[Enter]キーを押してください。ウィンドウに名前を付けると複数のウィンドウを区別しやすくなります。Byobuは複数のサーバーを並列操作するような際にもよく利用します。ウィンドウ名は「サーバーの取り違え」という重大インシデントを予防することにも役立ちます。
スプリット
Byobuでは1つのウィンドウを複数の領域に分割できます。これを「スプリット」と呼びます。同一の画面に複数のシェルを並べたい場合は、ウィンドウよりもスプリットが便利でしょう。
スプリットの主な操作は、以下の通りです。
キー操作 | 用途 |
---|---|
[Ctrl]キー+[F2]キー | ウィンドウを左右にスプリット |
[Shift]キー+[F2]キー | ウィンドウを上下にスプリット |
[Shift]キー+[Cursor]キー | スプリット間を移動 |
[Ctrl]キー+[F6]キー | 現在のスプリットを閉じる |
スプリットを使うと同じ画面内に複数のターミナルを並べて表示できるため、並行して作業したい際にはに非常に便利です。例えば、一方のスプリットでコードを編集しながらもう一方でコンパイルやデバッグを行ったり、一方のスプリットでコマンドを実行しながらもう一方でログを確認するといった使い方ができます。
コピー&ペースト
[F7]キーかPrefix+[ [ ]キーを押すとコピーモードに入ります。コピーモードでは[Cursor]キーやviライクなキーバインド([h][j][k][l]キー)でカーソルを移動し、画面外へ流れていった出力をスクロールバックして読むことができます。スクロールバックはGUIのターミナルエミュレーターでは当たり前の機能であるため、それほどありがたみはないでしょう。しかしサーバーの仮想コンソールを直接利用しているような場合は画面外に溢れたログを読むことができません。このような場合にはByobuの出番です。
コピーモードでは、その名の通りコピーとペーストができます。コピーしたい領域の始点にカーソルを合わせて[space]キーを押し、終点までカーソルを移動して[Enter]キーを押すと、その範囲がコピーされます。コピーした内容をペーストするには、Prefix+[ ] ]キーを押します。
セッションのアタッチとデタッチ
Byobuの最も重要な機能の1つがセッションの「デタッチ」と「アタッチ」です。デタッチとは、Byobuをバックグラウンドで動作させたまま、そのセッションをターミナルから切り離すことです。そしてアタッチとは、バックグラウンドで動作しているByobuセッションに再接続することです。
そのように聞いてもなかなかイメージしづらいと思いますので、実際に試してみましょう。まずByobuを起動してtopコマンドを実行してください。システムの状態やプロセス一覧が表示され続けます。
この状態で[F6]キーまたはPrefix+[D]キーを押します。デタッチすると一見Byobuを終了したように見えますが、実はバックグラウンドで動作し続けています。
この状態で再びbyobuコマンドを実行すると、自動的に前回のセッションにアタッチされます。ウィンドウやスプリットの状態も復元され、実行中のコマンドは動き続けます。実行に長時間がかかるコマンドを開始した後にデタッチし、後で再アタッチして結果を確認するといった使い方もできます。
簡単に言えば、Byobuという層を介することで、ターミナルとその中身を自由に切り離すことが可能になるわけです。例えば、コマンドの実行中にWindows Terminalのウィンドウを閉じてしまったことを考えてみましょう。通常であれば、そのウィンドウ内で実行中のプログラムは強制終了されてしまいますが、Byobu上で実行されているコマンドであれば、ターミナルとの接続は切れるもののByobuがセッションを保護しており終了されることはありません。そのため、Windows Terminalを再起動した後にセッションにアタッチすれば、作業に復帰できるわけです。
セッション保護が最も効果を発揮するのは、リモートサーバー上で作業をしているときです。SSH接続などでリモートサーバーに接続している場合、ネットワークトラブルで接続が切れてしまうと実行中のコマンドもすべて終了されてしまいます。もしシステムのアップデート中やデータベースのマイグレーションといったメンテナンス中にこれが起こると、サーバーが起動しないといった致命的な障害に繋がる可能性もあります。
Byobuを使えば、このような不意の接続断からもセッションを保護できます。Windows Terminalを閉じてもコマンドが継続して動き続けるのと同様に、SSH接続が切れてもByobuは動き続けるためです。ただし、リモートサーバー上のセッションを保護する際はローカルのWSL上ではなく、保護したいリモートサーバー上でByobuを起動する必要がある点に注意してください。
なお、複数のセッションを同時に起動することもできます。Byobuの実行中に[Ctrl]キー+[Shift]キー+[F2]キーを押すと、新しいセッションを作れます。また、セッションの一覧は「byobu list-sessions」コマンドで確認できます。
おわりに
Byobuはターミナルでの作業を格段に効率化してくれるツールです。シェル上で動作するプログラムのため、ターミナルの種類を問いません。一度その便利さを体験すれば、もう手放せなくなるでしょう。特にクラウドなどのサーバーを操作する必要がある場合は、サーバー側にByobuをインストールしておくことを強く推奨します。単に作業効率を向上させるだけでなく、不意の回線切断といったトラブルにも備えることができるためです。
また、Byobuの設定から「Byobu currently launches at login」を実行すると、シェルの起動時に自動的にByobuを起動させることができます。Byobuが気に入った場合はこの設定を有効にして、常用するようにしても良いでしょう。ぜひ試してみてください。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「Windows Terminal」を使いこなす
- 「WSLg」を使ってWindows上でLinuxのGUIアプリを動かしてみよう
- 今さらながらのVim!
- 「Bash」をカスタマイズして、Linuxをより便利に使いこなそう
- Windows Subsystem for Linux 2 でDocker を使用する(その2)
- あちこちをViモードにしていこう
- Windows 11でLinuxを使う:Windows Subsystem for Linux 2の設定
- Windows 10のスナップ機能
- Vimの基本操作をマスターしよう
- Windows Subsystem for Linux 2 でDocker を使用する(その1)