• 犬(ワン) ライナー

俗に「1行野郎」あるいは「ワンライナー」(One Liner)と呼ばれるものがある。コマンドラインの1行で意味のある処理を行わせるものだ。「1行でこんなことができるのか!」といった感じのものも発表されていて、パズル的に楽しむ人もいる。これはこれで楽しいのだが、実用としては、「ワンライナー」とは使い捨てのコマンドであり、プログラムを組まねばできないような処理をコマンドラインとして実現するものだ。あくまでもコマンドラインであり、スクリプト(プログラム)とは異なる。両者の違いは微妙だが、たとえば、関数や手続きにする、後で実行できるようにファイルにしてしまえば、間違いなくスクリプトである。

しかし、ワンライナーは、その場限りの実行ができればよく、スクリプトのようにいつでも実行できるように汎用的な記述にする必要はない。必要なパラメーターは、コマンドライン中にハードコードしてもよい。その場限りの「即興的」なものがワンライナーである。自然言語の学習でいえば、コマンドは単語であり、ワンライナーはイディオムや言い回しに相当する。

シェルを日常的に使い、文法を理解し、関数を覚え、記述方法に慣れると、コマンドラインとスクリプト(プログラミング)の境界が変わる。いままでスクリプトを書く必要がありそうだと判断していた処理がコマンドラインのみで書けるようになる。これを筆者は、「ワンライナー」力(りょく)と呼んでいる。

「ワンライナー」力を高めるには、ワンライナーにすることを意識してシェルを使うことだが、最初のうちは、シェルの変数を使って複数行で処理してもよい。結果が出てから、時間的余裕があるならワンライナーを考える。というのは、ワンライナーに固執しすぎると、仕事が進まなくなるからである。慣れると、変数を使わずに複数のコマンドをパイプでつないだり、引数にコマンドを埋め込んだりして、1行に詰め込む方法がわかってくる。

ワンライナーでは、汎用性や実行効率などは考える必要がない。ワンライナーをスクリプト化するかどうかは十分に考えたほうがよい。ワンライナーをスクリプト化しても、その存在を忘れてしまうことが少なくないからだ。日々の作業は、変わっていくのが普通である。そうなると、自然と使うコマンドなども変わっていく。このため、ワンライナーをスクリプト化した直後には利用頻度は高くとも、別の仕事を始めて、1週間もすると、スクリプト化したことは覚えていても、関数の名前も思い出せないことがある。一カ月、半年、1年と時間が経過すれば、スクリプト化したことさえ忘れてしまう。そうなると、シェルが起動時に読み込む「プロファイル」(通常ユーザーのスクリプトなどはこうしたファイルに記述する)などが、使いもしない関数などで膨れ起動時間が遅くなるだけの効果しか持たなくなる。別ファイルに保存すれば、そのフォルダーパスを忘れて、似たようなフォルダーがあちこちにできてしまう。また、一般的にプログラムを汎用化し、高い「環境変化」耐性を持たせることにはコストがかかる。そのコストを上回るメリットをスクリプトから得られるのであれば、コストを掛ける意味もあるが、作って忘れてしまうのでは、単なる時間の無駄でしかない。

たとえば、Windows PowerShellでは、コマンドによっては、大量の出力が出ることがある。そういうとき、コマンドの出力をGUIウィンドウに表示させるOut-GridViewコマンドを使うと、表示をコンソールとは別ウィンドウに出せる。LinuxのLessやmanコマンドが終了後にコンソールをコマンド起動前の状態に戻すのと同じ効果だ。ただし、PowerShellのコマンド出力には、オブジェクトごとの簡易表示フィルターが適用されていることがあり、すべてのプロパティを出力しない。このとき、


〈コマンド〉|select *|Out-GridView

とすることで、出力オブジェクトのすべてのプロパティを表示できる。Out-GridViewウィンドウには、検索機能やフィルター機能があるため、大量のデータが表示されてもその中をブラウズすることは難しくない。筆者はかつて、この機能をスクリプト化したが、しばらく使わなかったら、その名前を忘れてしまった。プロファイルをエディタで開けば思い出すが、ファイルを開いて関数を探すよりも、“|select *|Out-GridView”と打ったほうが速い。不思議なことに自分でつけたスクリプトの名前よりも、コマンド自体のほうが記憶に残りやすい。

スクリプト化する必要はないが、「ワンライナー」力を高めるには、複雑なものや、作成に苦労したものは記録しておくことをお勧めする。筆者は、ScrapBoxというクラウドサービス上にページを作って記録している。クラウドに記録しておけば、探すのも簡単だし、ハードウェアとは無関係になり、なくしてしまうことがない。作るのは簡単な説明(タイトル)とコマンドラインで、場合によっては実行結果などを記録しただけの「図鑑」のようなもの。ページをつくることで作成した記憶を確かにする効果がある。また、同じ処理の異なるワンライナーを書いたことにも気がつきやすく、新しいパターンを学んだあと見なおすこともできる。インターネットの記事などで気になるもの、感銘したワンライナーがあったら記録しておくのもいいだろう。

ScrapBoxは、URLを使ったページ登録やページ内のコードブロックをURLで抜き出すことができる。シェルのヒストリからScrapBoxのページを作る(認証処理のためスクリプトになってしまう)、コードを抜き出してローカルのクリップボードに入れる(ワンライナーで可能)、実行するといった処理も可能だ。

今回のタイトルの元ネタは、1972年の「魔犬ライナー0011変身せよ!」(東映動画)である。筆者は、すでに「マンガ映画」(当時はアニメとはいわなかった)には興味が薄れていた年齢だったが、小学校に入ったばかりの弟をつれて行くことになった。この映画は「東映まんがまつり」として、他の映画とあわせて、1セット3時間ぐらいある。弟が午後の回も見るといって聞かなかったので、朝から夕方までずっと映画館にいた。冷房がきつくサンダルで行ったことを後悔したことしか記憶がない。