スマホは使いこなせるけれどPCはイマイチ、という若者が近頃多いのだそう。PCからスマホに入った親世代はさておき、スマホは1人1台だがPCは家族で1台という家庭も珍しくなく、"スマホネイティブ"な子どもたちがPCとキーボードに親しみがないことはやむをえない。キーボードならではの操作性・利便性を彼らに伝えるとき、どうすればいいのか? そんなことを考えつつ、今回は「キーボードショートカット」をテーマにお届けしたい。
2系統ある「キーボードショートカット」
そもそもキーボードショートカットとは、かんたんにいえば「キーの組み合わせに割り当てた機能」のこと。複数のキーを同時に押すことで、1つのキーでは難しい(不可能ではないが文字入力と競合してしまう)機能を実現することが目的だ。
具体的には、CommandとC(Commandを押しながらC)が「コピー」、CommandとXが「カット」、CommandとVが「ペースト」がもっとも基本的な例として挙げられる。Command-SHIFT-3(デスクトップ全体のスクリーンショット)、Control-Command-Q(画面のロック)など、システム全体を通じて利用できるキーボードショートカットもある。
一方、Finderなど特定のアプリでのみ有効なキーボードショートカットも存在する。たとえば、Command-I(選択した項目の情報ウインドウの表示)、Command-D(選択したファイルの複製)、SHIFT-Command-N(新規フォルダの作成)はFinderでのみ動作可能だ。macOSでサポートされるキーボードショートカットはAppleのWEBサイトに網羅されているので、より多く知りたければ参照してほしい(リンク)。
これらのキーボードショートカットは、「Aqua」と呼ばれるmacOSのGUI(Finderを中心とした操作体系)専用のもの。macOSには「Darwin」と呼ばれるAquaの下位レイヤー -- わかりやすくいえばUNIXとしての地の部分が出ている動作モード -- が存在し、そこに直接働きかけることができるTerminal/シェルで使えるキーボードショートカットもあるのだ。
(複数の)キーボードが押されたという信号を受け取るとなんらかの反応があるのはAquaと同じだが、Terminal/シェルにおけるキーボードショートカットは「シグナル」を発する機能と理解したほうがいい。Aquaでは、シグナルは(システムおよびアプリに)隠ぺいされているが、Terminal/シェルではより生々しい形でユーザの前に現れる。見出しで「2系統」と表現したのは、この違いを強調するためだ。
ショートカットと似て非なる「Control-○」
ここでいうシグナルとは、あるプログラム(プロセス)と他のプログラムが通信するときに使う信号のこと。コマンドからコマンドへ送信されるときもあれば、システムの核であるカーネルから送信されることもあり、日常的に(というより気付かないうちに/頻繁に)使われる。Terminal/シェルで利用するキーボードショートカットは、このシグナルを送信するための手段のひとつなのだ。
シグナルには、UNIX登場以来の「標準シグナル」と付加情報の送信など機能が追加された「リアルタイムシグナル」の2種類が存在するが、Terminal/シェルで利用されるのは前者。ほとんどの場合、「シグナル番号」と呼ばれる整数のみが送信される。なお、macOSでサポートされるシグナルは1から32の範囲だ(「man signal」で確認できる)。
なにやら難しい話になってしまったが、ポイントは「特定のシグナルを送信するキーボードショートカットがある」ということ。その代表格が「Control-C」(Controlを押しながらC)で、SIGINTというシグナルを送信する。このシグナル(整数の「2」)をTerminal/シェルで実行中のプログラムへ送信すると、そのプログラムは割り込みが発生したと認識する。大半のプログラムはこれを終了の合図と認識するため、実行中のプログラムはただちに終了、シェルはプロンプトを表示し指示待ち状態になる、という流れだ。
たとえば、次のアクションを1万秒待機するという意味の「sleep 10000」を実行すると、sleepコマンドは実行状態となるが、その状態で「Control-C」を押すと1万秒を待たずにsleepコマンドは終了、シェルに制御が戻りプロンプトが表示される。
この「Control-C」はTerminal/シェルにおける基本ワザで、いろいろな場面で利用できる。実行中のプロセスを一覧する「top」、延々とパケットを送信することでネットワークの疎通を確認する「ping」など、コマンドを終了したい場合に役立つはずだ。「man」や「vi」など対応しないコマンドもあるが、終了したいときにはとりあえずControl-C、と覚えておこう。
Terminal/シェルにはもうひとつ、「Control-Z」という重用なキーボードショートカットがある。こちらはSIGTSTPシグナルを送信、フォアグラウンドで実行中のプログラムを一時停止するというものだ。前述した「man」と「vi」もControl-Zには対応しており、利用中に押せば「+Stopped」と表示されプロンプトが戻る(「fg」というシェルのビルトインコマンドを実行すれば再開できる)。コマンド実行中にほかの処理を行うときの手段として、覚えておいて損はないだろう。