こんにちは! ターミナルに関する詳細なブログ記事を何ヶ月も執筆した後、火曜日に新しいzine「The Secret Rules of the Terminal」をリリースしました!
こちらで$12で入手できます: https://wizardzines.com/zines/terminal、または こちらで全zineの15パックもご利用いただけます。
表紙はこちらです:
目次
目次はこちらです:
なぜターミナルなのか?
私は20年間毎日ターミナルを使ってきましたが、ターミナルにかなり自信があるにもかかわらず、いつも少し不安を感じていました。 通常はうまくいくのですが、時々何か問題が起きると、それを調査するのが不可能だったり、少なくとも巨大な問題の山を開くような気がしたりします。
そこで、ターミナルで遭遇した奇妙な問題のリストを書き始め、ターミナルには次のような小さな不整合がたくさんあることに気づきました:
- 矢印キーで移動できることもあるが、矢印キーを押すと単に
^[[Dと表示されることもある - マウスでテキストを選択できることもあるが、できないこともある
- コマンドを実行すると履歴に保存されることもあるが、保存されないこともある
- 前のコマンドを見るために上矢印を使えるシェルもあれば、使えないシェルもある
10年や20年毎日ターミナルを使っていれば、なぜこれらのことが起こるかを正確に理解していなくても、直感的に理解できるようになるでしょう。
しかし、これらに対する直感を持つことは、なぜ起こるのかを理解することとは同じではありません。このzineを書くにあたり、ターミナルで実際に何が起こっているかを正確に把握し、それをどう推論するかを説明するために、多くの作業が必要でした。
ルールはどこにも書かれていない
ターミナルの動作方法(入力したコマンドをどう編集するか、プログラムをどう終了するか、色をどう修正するか)の「ルール」は、非常に理解しにくいことがわかりました。なぜなら「ターミナル」は実際には、異なる人々が異なる考え方で書いた多くのソフトウェア(ターミナルエミュレータ、オペレーティングシステム、シェル、grepのようなコアユーティリティ、そしてインストールしたその他すべてのターミナルプログラム)で構成されているからです。
そこで、以下を説明するものを書きたいと思いました:
- ターミナルの4つの要素(シェル、ターミナルエミュレータ、プログラム、TTYドライバ)がどのように連携してすべてを動作させているか
- ターミナルでの動作の期待値に関するコアな慣習
- ターミナルプログラムの使い方に関する多くのTipsとコツ
このzineはターミナル内部の最も有用な部分を説明する
ターミナルの内部は混乱しています。その多くは、誰かが80年代に決めたことが今では変えられないからです。正直に言うと、ターミナルの内部についてすべてを学ぶ価値があるとは思いません。
しかし、理解しやすく、ターミナルの体験を本当に向上させる部分もあります:
- 自分のシェルが何を担当しているかを理解すれば、シェルを設定(または別のシェルを使う!)して、履歴に簡単にアクセスしたり、優れたタブ補完を得たり、その他多くのことが可能になります
- エスケープコードを理解していれば、バイナリをstdoutに
catしてターミナルを乱した場合でも怖くなく、resetと入力して次に進めます - 色の仕組みを理解していれば、ターミナル内の悪いコントラストを除去して、実際にテキストを読めるようになります
このzineを書いて驚くほど多くのことを学んだ
How Git Worksを書いたときは、Gitの仕組みを知っていると思っていましたが、それは正しかったです。しかしターミナルは違います。ターミナルに完全に自信があり、20年間毎日使っていても、ターミナルの仕組みについて多くの誤解がありました(tmuxの作者などでない限り)おそらくあなたもそうだと思います。
実際に役立つと学んだことのいくつか:
- ターミナルの構造をよりよく理解し、ターミナルで起こる奇妙な問題をデバッグする自信がついた(fishへの小さな改善提案もできました!)。ターミナルで奇妙なことを引き起こしているソフトウェアの正確な特定はまだ簡単ではありませんが、以前よりずっと上手になりました。
- シェルスクリプトで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月に出荷されることです – 印刷部数を決めるために注文が入るのを待つ必要があります。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.