• E-XELS

メモリや処理能力など「リソース」がふんだんに使えるようになり、最近のプラットフォームは安定期にある。このため、アプリケーションも成熟したものが増えた。1990年台、高性能なUnixワークステーションでもX Window Systemのコンパイルには丸一日掛かり、Emacsもその配付サイズから「巨大」なアプリケーションだと認識されていたが、最近のプラットフォームから見れば、どちらも数10メガバイトとあっという間にダウンロードできる「たいしたことがない」サイズのアプリケーションでしかなく、emacsやvimは、スマートフォンや組み込みLinuxボードなどでも問題なく動く。

アプリケーションは成熟するとたいてい多機能化に向かう。しかし、その規模が大きくなると、使うのも大変になる。たとえば、エディタには多数の機能があり、それぞれにキーの割り当てがある。機能が多く、キー割り当てが多数になるようなアプリケーションを使うとき筆者は、自分で「チートシート」を作るようにしている。チートシートとは、コマンドやキー、設定項目名などをまとめた一覧表である。成熟したアプリケーションはドキュメントも豊富なことが多いが、自分でチートシートを作ることで、キー割り当ての全体象を理解でき、すぐに必要なキーを調べることができるようになる。

今回はサンプルとしてvimのチートシートを作って見る(写真01)。筆者は、1980年台にBSD版Unixの上でviを使っていたが、その後のLinux上のvimなどとは付き合いが薄く、40年前のviのコマンドでしか使っていなかった。そこで、一気にvimの40年分の進化に追いつこうと思ったわけだ。vimを選んだのは、文字キーがコマンドなので、ソートや前処理の例になりそう、という考えもある。

・VIMリファレンスマニュアル
https://vim-jp.org/vimdoc-ja/vimindex.html

  • 写真01: Webページからキー割り当ての情報をクリップボード経由でメモ帳(写真右上)に貼り付け、エディタ(もちろんvim。写真右中央)で置換などを行い、Excelに読み込む(写真左上)。「リボンのデータタブ ⇒ テーブルまたは範囲から」を使い、PowerQuery(写真左下)でタグ列で並べ替えて不要な列を削除してテーブルを作り、これをHTML(写真右下)として出力した

チートシートを作るには、アプリケーションのホームページなどからキーの一覧データを入手し、これをテキストとしてファイルを整形し、最後にExcelで仕上げる。Excelで読み込むことを考えると、最低でもデータはすべて1件1行(キー1つで1行)、列の区切りはタブにしておきたいところ。Excelとテキストファイル読み込みのためのPowerQuery(窓辺の小石(18) PowerQueryでソフト開発参照)では、テキスト読み込み時にASCIIコードのダブルクオートやカンマを特別扱いしてしまうので、テキストの段階で、これらを全角のものに置き換えておく。テキスト編集では、正規表現が利用できるエディタの置換機能で複数スペースをタブに置き換えるなど、一気に変換する操作だけを行い、1行1行、修正するような手作業は行わないようにする。文言や表現、書式などはあとでいくらでも直せる。

Excelに正しく読み込めたと判断してからExcel側での編集に入る。その判断は、読み込んだテキストがPowerQueryの「列の分割」で正しく分割できたかどうかで行うとよい。前述のvimのデータなら、1行のデータは、最大で4つの列(タグ、コマンド、注、動作)に分割できる。5つめの列がある、「注」と「動作」が混ざっているなんて場合は、テキスト側での整形にやり残しがある。

いったんExcelでセルの編集を開始してしまうと、もうテキストファイルの編集に後戻りすることができなくなる(Excel側での編集を全て捨てるのなら可能だが……)。なので、その判断は少し慎重に行う。なお、PowerQueryでの文字列置換などの編集操作は、エラーにならない限り、テキスト側での編集には影響を受けない。

Excelでチートシートを作成するときには、表示には使わないソート用の列を作ることを考えておく。上記のURLのデータであれば、「タグ」列をソート専用の列にできる。vimのキー割り当てにはコントロールキーを併用するものがあるが、データ中、タグ列、コマンド列では“CTRL-A”などと表記している。これをそのままソートしてしまうと“c”キーのそばにすべてのコントロールキーが並んでしまう。これを避けるために、タグ列の“CTRL-”を“コントロール”などソートを想定した文字列に置き換えていく。そのほか、特殊キーを“<”と“>”で囲って表記しているが、これもvimのノーマルモードのインデントコマンドと同じになってしまうので、タグ列では、全角文字に置き換えるなどの対応が必要になる。これは、テキスト段階でもできるし、読み込み時のPowerQueryの処理(値の置き換え)でも可能だ。

こうして、Excelでキー一覧のデータができたら、これを元にテーブルを作成する。Excelのテーブルは、オリジナルの変更が反映できるクローンのようなものだ。さまざまな表を作るなら、オリジナルのテーブルから、PowerQueryでソートし、フィルターをかける、不要な列を削除するなどして最終成果物となるテーブルを作成する。このようにしておくと、1つのデータから複数の一覧表を簡単に作ることができる。理解したコマンドかどうかを示す列を追加すれば、不慣れなコマンドだけのチートシートを作ることもできる。

チートシートの元になるオリジナルのテーブルは、Excelに手慣れたユーザーなら1~2時間というところ。初回は手間が掛かるが、慣れると比較的短時間で作成ができるようになる。オリジナルのテーブルができたら、コマンド(キー)と動作のみチートシートをテーブルとして作りPDFやHTMLなどにして自分で使う。このあと、キーに分類(たとえばカーソル移動、スクロールなど)を付ける、表現を手直しするなどして一覧表を更新する。これを繰り返し、分類や説明が洗練されていく過程でコマンドの全体象が頭に入る。全体象を掴むことができれば、細かいことを忘れても、キーや機能を探すのが簡単にできるようになる。最初はチートシートが必要でも大抵の機能は、数回使うと覚えてしまう。

今回のタイトルの元ネタは、2015年の映画“PIXELS”(邦題ピクセル)である。Star TrekネタのGalaxy Quest(1999)と同じく勘違いした宇宙人の話だが、ファミコンやアーケード版ドンキーコングなど1980年台のゲームの話を絡めてある。この映画の中で登場人物が「チート」を使ってゲームに勝つというエピソードがある。チートというと、いわゆる「ズル」なんだが、なぜかソフトウェアのキー割り当て一覧などはズルでもないのに「チートシート」と呼ぶ。「本物のプログラマ」は、キー割り当てを全部記憶していなければならない、ってことなのか?