新作ZINE『ターミナルの秘密のルール』
原文は Julia Evans により に公開されました。 このブログを購読する
こんにちは!ターミナルについて深掘りするブログ記事を何ヶ月も書いてきたのですが、火曜日に新作ZINE『The Secret Rules of the Terminal(ターミナルの秘密のルール)』をリリースしました!
こちらから12ドルで購入できます:https://wizardzines.com/zines/terminal、または全15冊セットはこちらからどうぞ。
表紙はこちらです:
目次
目次はこんな感じです:
なぜターミナルなのか?
私は20年間毎日ターミナルを使ってきました。ターミナルにはかなり自信があるのですが、ずっとどこか落ち着かない気持ちがありました。普段は問題なく動くのですが、たまに何かがおかしくなると、原因を調べるのは不可能に思えたり、少なくともパンドラの箱を開けるような気分になったりするのです。
そこで、ターミナルで遭遇した奇妙な問題をリストアップしてみたところ、ターミナルにはこんな小さな一貫性のなさがたくさんあることに気づきました:
- ときには矢印キーでカーソルを移動できるのに、ときには矢印キーを押すと
^[[Dと表示されるだけ - ときにはマウスでテキストを選択できるのに、ときにはできない
- ときには実行したコマンドが履歴に保存されるのに、ときには保存されない
- 上矢印キーで前のコマンドを呼び出せるシェルもあれば、呼び出せないシェルもある
もし10年、20年と毎日ターミナルを使っていれば、たとえなぜそうなるのか正確には理解していなくても、なんとなく勘が働くようにはなるでしょう。
でも、勘が働くのと、なぜそうなるのかを理解しているのは別物です。このZINEを書くとき、ターミナルで一体何が起きているのかを正確に把握し、それについてどう考えればいいのかを説明できるようにするために、実際かなり苦労しました。
ルールはどこにも書かれていない
ターミナルがどう動くかという「ルール」(入力したコマンドをどう編集するのか? プログラムをどう終了するのか? 色をどう直すのか?)を完全に理解するのが極めて難しいことがわかりました。というのも、「ターミナル」は実際には多くの異なるソフトウェア(ターミナルエミュレータ、OS、シェル、grepのようなコアユーティリティ、そしてインストールしたその他のあらゆるターミナルプログラム)が組み合わさってできており、それぞれ違う人たちが違う思想で作っているからです。
そこで、こんなことを解説するものが書きたくなりました:
- ターミナルの4つの構成要素(シェル、ターミナルエミュレータ、プログラム、TTYドライバ)がどう連携して全体を動かしているのか
- ターミナルで「こう動くはず」と期待できる基本的な慣習
- ターミナルプログラムを使いこなすためのたくさんのTipsとコツ
このZINEではターミナルの内部仕組みのうち最も役立つ部分を解説します
ターミナルの内部仕組みはごちゃごちゃです。その多くは、誰かが80年代に下した決定がそのまま残っていて、今さら変えられないというだけのものですし、正直なところ、すべてを学ぶ価値があるとは思いません。
でも、中にはそれほど難しくなく、理解すればターミナルでの体験がぐっと良くなる部分もあります。例えば:
- シェルが何を担っているのかを理解すれば、シェルを設定したり(あるいは別のシェルを使ったりして!)、履歴に簡単にアクセスしたり、素晴らしいタブ補完を手に入れたり、他にもいろいろできるようになります
- エスケープコードを理解していれば、バイナリを
catして標準出力に出したせいでターミナルがめちゃくちゃになっても、怖がる必要はありません。resetと打てば元通りです - 色の仕組みを理解すれば、ターミナル内の見づらい配色を解消して、テキストをちゃんと読めるようにできます
このZINEを書いて驚くほど多くのことを学びました
How Git Worksを書いたときは、Gitの仕組みをわかっているつもりで、実際その通りでした。でもターミナルは違います。ターミナルには完全に自信があるし、20年間毎日使ってきたにもかかわらず、ターミナルの仕組みについてたくさん誤解していました。そして(あなたがtmuxの作者でもない限り)あなたもきっとそうだと思います。
実際に役立った学びをいくつか挙げると:
- ターミナルの構造をよりよく理解できたので、変なことが起きたときのデバッグにもっと自信が持てるようになりました(fishへの小さな改善を提案することさえできました!)。ターミナルで起きた奇妙な現象の原因がどのソフトウェアにあるのかを正確に特定するのは、今でも簡単ではありませんが、以前よりずっと得意になりました。
- SSH越しにクリップボードにコピーするシェルスクリプトを書けること(SSH経由でクリップボードにコピーする)
resetが裏側でどう動いているか(stty sane; sleep 1; tput resetと同等のことをしている)——つまり、stty saneやtput resetを覚える必要はなく、ただresetを実行すればいいのだとわかりました- プログラムが出力している目に見えないエスケープコードを確認する方法(
unbuffer program > out; less outを実行する) - Macに標準で入っている
sqlite3のようなREPLがなぜあんなに使いにくいのか(readlineではなくlibeditを使っているから)
執筆の過程で書いたブログ記事
例によって、今回もいろいろな寄り道についてブログ記事をたくさん書きました:
- PATHにディレクトリを追加する方法
- ターミナルの問題が従う「ルール」
- パイプがときどき「詰まる」理由:バッファリング
- ターミナルでイライラすることあれこれ
- ターミナルにおけるASCII制御文字 —「Ctrl+A、Ctrl+B、Ctrl+Cなどは一体何なのか?」について
- ターミナルでのテキスト入力は複雑だ
- 「モダンな」ターミナル環境を整えるには何が必要か?
- シェルのジョブコントロールを使う理由
- ANSIエスケープコードの標準 — 本当は
terminfoデータベースが今でも役に立っているのかを考えてみた記事です
このZINEを手伝ってくれた人たち
昔はZINEをほとんど一人で書いていましたが、プロジェクトを重ねるごとに手伝ってくれる人が増えていきました。今回は9月から6月まで、毎平日Marie Claire LeBlanc Flanaganさんと一緒に作業しました。
表紙はVladimir Kašikovićさん、校正はLesley Tritesさん、技術監修は(PuTTYの作者である)Simon Tathamさん、文字起こしをはじめ数え切れないほどの業務をOperations ManagerのLeeさんが担当し、Jesse Luehrsさん(私の知る限り、ターミナルの呪われた内部仕組みを本当に理解している数少ない一人です)とは、ターミナルで何が起きているのかについて何度もとても有益な話をしました。
ZINEを手に入れる
改めて、ZINEを入手するためのリンクはこちらです:
いつものように、ご自宅で印刷できるPDF版と、ご自宅に配送される印刷版のどちらかを選べます。唯一の注意点は、印刷版の発送は8月になるということです——印刷所に送る前に、どれくらい刷るべきか注文数を見てから決める必要があるためです。
記事をランダムに読む


コメント
ログインしてコメントする