Catalina で zsh に適応するためのリソース

Catalina で zsh に適応するためのリソース

macOS 10.15 Catalinaでは、レガシー32ビットアプリのサポート終了など、Macに多くの大きな変更が加えられましたが、見落としがちなのが、デフォルトのターミナルシェルがbash(Bourne-again Shell)からzsh(Z Shell)に変更されたことです。ターミナルを使わない人にとっては見逃しやすい変更ですが、macOSの旧バージョンからアップグレードした場合、bashがデフォルトのまま(切り替えを促すプロンプトは表示されますが)となるため、注意が必要です。

Catalinaのbashに関する警告

ターミナルユーザーなら、この変更点に気づいておく必要があります。また、単にターミナルに興味があるというだけでも、Mac 向けのユーザーガイドが数多く公開されている今こそ、このシェルについてもっと深く学ぶ絶好の機会です。前回の読者アンケートでは、ターミナル関連の話題は、期待されるトピックの上位には入っていませんでした (「TidBITS 2019 読者アンケート結果」、2019 年 9 月 6 日)。そのため、ここでは zsh に多くのスペースを割くことはせず、代わりに zsh についてもっと学ぶのに役立つリソースをいくつかご紹介します。

「シェル」とは何ですか?

簡単に言えば、シェルとはオペレーティングシステムと対話するためのコマンドライン環境です。Appleは、ユーザーがmacOSを主にグラフィカルインターフェースを通して操作することを想定していますが、macOSはUnixをベースに構築されているため、堅牢なコマンドライン環境も提供しています。

zshのようなシェルとターミナルアプリ自体を混同しないでください。ターミナルはzshまたは任意のシェルを読み込み、そのシェルへのグラフィカルインターフェースとして機能します。シェルは、macOSのUnix基盤へのテキストベースのインターフェースです。

コマンドラインから、 や のようなUnixコマンドを実行できますcdlsこのように使用されるシェルは「対話型シェル」と呼ばれます。また、フロー制御などを用いてシェルコマンドを連結し、アクションを自動化するシェルスクリプトを作成することもできます。これらのスクリプトは、AppleScriptやKeyboard Maestroなどの他の自動化ツールに統合することもできます。このようなスクリプトでは、shのような開始行でシェル(通常は )を呼び出します#!/bin/sh。このようなシェルを使用する場合、それは非対話型シェルと呼ばれます。

bash とは何ですか? また、なぜ Apple は zsh に切り替えたのですか?

長年にわたり、プログラマーたちは様々な機能を持つ数多くのシェルを開発してきました。Mac OS X 10.3 Panther以降、MacのデフォルトシェルはBourne-again Shell(bash)です。多くのLinuxディストリビューションでもデフォルトとして採用されており、事実上の標準となっています。bashという名前は、ほぼ普遍的なBourne Shell(およびashなどの多くのクローン)にちなんで付けられており、そのコマンドでよく呼ばれます。Bourne shShellは1976年に開発されました。対話型で使われることはあまりありませんが、その普遍性から、今でもほとんどのUnixシェルスクリプトの基盤となっています。1989年には、shのより新しい、より現代的なバージョンとして、GNUプロジェクトからbashが登場しました。

bash自体には何の問題もありませんが、2007年にリリースされたバージョン3.2以降、GNUプロジェクトはGNU Public License 3.0の下でbashを再ライセンスしました。このライセンスは、Appleなどの企業に対し、特許訴訟の回避やユーザーが自由にコンピュータをいじれることを許可するといった制限を課しています。端的に言うと、macOSに同梱されているbashのバージョン3.2.57は、AppleがGNUの規約を受け入れていないため、既に時代遅れになっています。しかし、GNUは長年にわたり、Shellshock脆弱性などの問題に対処するための小さなアップデートをリリースしてきました。詳細は「Apple、Shellshock脆弱性に対処するためBashをアップデート」(2014年9月29日)をご覧ください。

対照的に、zshはより制限の少ないMITライセンスの派生版でライセンスされています。また、bashにはない高度な機能もいくつか提供しています。

zsh ができて bash ができないことは何でしょう?

How-To Geekでは、zshの利点について簡潔にまとめています。例えばcd、ディレクトリ名を入力するだけで移動できる自動設定や、スペルチェック機能などが挙げられます。zshはプラグインもサポートしており、人気の高いOh My Zshなど、さらに多くの機能を追加し、高度な設定を容易にするプラグインも利用できます。また、様々な質問に答えるzsh FAQも併せてご参照ください。

zsh の私のお気に入りの機能の 1 つは、メニューの自動補完です。ほとんどのシェルでは、 のようにコマンドまたはディレクトリ名を入力し始め/usr/bi、Tab キーを押すと自動補完されます。ほとんどのシェルでは、自動補完オプションが複数ある場合、シェルはオプションを一覧表示しますが、オプションが 1 つだけになるまで正しいパスを手動で入力し続け、その後 Tab キーを押して入力する必要があります。zsh では、代わりにオプションをメニューとして表示するように設定できます。メニューは矢印キーで移動して選択できます。または、もう少し設定を追加して、vi キーバインドや任意のキーを使用することもできます。下のスクリーンショットでは、/usr/local/と入力して Tab を押すと、サブフォルダのメニューが表示されています。

zshのオプションのオートコンプリートメニュー
オートコンプリートのために Tab キーを押すと、可能性のあるファイルとフォルダーの参照メニューが表示されるように zsh を設定できます。

どのシェルを使用しているかを知るにはどうすればいいですか?

ターミナルを開き、次のいずれかのコマンドを入力します。

  • echo $0— シェルの名前が表示されます。
  • echo $SHELL— シェルへのパスを表示します。

echoコマンドを使用してシェル名とパスを見つける

後者のコマンドは、Homebrew などを使用して、Apple の製品と並行して存在する異なるシェル バージョンを別のディレクトリにインストールする場合に特に役立ちます (詳細は後述)。

zsh について詳しく知るにはどこに行けばいいですか?

Zshへの移行の本の表紙macOSでzshを学ぶための最高の無料リソースの一つは、Armin Briegel氏による全8回にわたるブログシリーズ「Moving to zsh」です。Briegel氏はまた、Apple Book Storeで9.99ドルの電子書籍「Moving to zsh」もリリースしています。Catalinaでzshを本格的に学びたいなら、この本は良い投資になると思います。シェルとは何か、zshへの移行、zshの設定など、あらゆることを詳細にカバーしています。初心者から上級者へとすぐに成長できるでしょうが、網羅的なリファレンスではありません。そのため、公式のzshマニュアルをご覧ください。

zsh チームは、ユーザーフレンドリーな zsh 公式ガイドも提供しています。このガイドは Briegel ほどユーザーフレンドリーでも Mac 中心でもありませんが、より生の情報が満載です。

zsh をカスタマイズするにはどうすればいいですか?

zsh は、そのままでは少し質素です。zsh の設定ファイルについて詳しく解説されている Briegel の「Moving to zsh, part 2: Configuration Files」をお勧めします。ただし、設定のヒントについては、シリーズの残りの部分を読む必要があります。

前述のOh My Zshのようなプラグインシステムのインストールは、zshの仕組みとOh My Zshに何が必要なのかをしっかりと理解するまでは控えましょう。最初から複雑にする必要はありません。

zsh の設定を共有していただけますか?

Luke Smithのzshrcファイルを にコピーしました~/.zshrc。彼はviのキーバインドを使って、素敵な色使いとメニューの自動補完を設定しています。設定を詳しく説明したビデオはこちらです。

vi のキーバインディングが気に入らず、矢印キーを使用してメニューを移動したい場合は、 の下の 5 行を削除するかコメント アウトするだけです# Use vim keys in tab complete menu:

古いシェル スクリプトは壊れますか?

標準の でシェルスクリプトを開始していれば#!/bin/sh、問題はないはずです。Catalina には、sh をエミュレートする bash が引き続き付属しています。しかし、Apple が将来的に bash を完全に削除しても驚きません。Apple は、--emulate shzsh に のオプションを追加することで zsh に sh をエミュレートすることを提案しており、スクリプトを で開始できるようになります#!/bin/zsh --emulate sh。(ただし、これは Mojave に付属するバージョンの zsh では動作しません。) また、zsh を使ったスクリプトについて解説している Briegel の「Moving to zsh, part 8」も参照してください。

デフォルトのシェルはまだbashです。zshに切り替えるにはどうすればいいですか?

zshはmacOSの以前のバージョンではデフォルトではありませんでしたし、bashをデフォルトシェルとして作成された古いアカウントのCatalinaでもデフォルトではありませんでしたが、Appleは以前からmacOSにzshを組み込んできました。zshコマンドラインで入力するだけで、今すぐ試すことができます。zshexitを終了するには、次のように入力します。zshをデフォルトシェルに設定したい場合は、Appleはいくつかの方法を提供しています。また、アカウントのデフォルトシェルを変更せずにターミナルで使用するシェルを変更する方法もあります。

zshは好きじゃないんです。bashに戻してもいいですか?できれば新しいバージョンがいいです。

はい、簡単です。上記のAppleのハウツーページへのリンクに従って、/bin/zsh手順の を に置き換えてください/bin/bash

しかし、Appleの古いバージョンのbashを使い続けたくない場合もあるでしょう。そんな時にHomebrewが役立ちます。Homebrewをインストールしたら、 を実行するとbrew install bashHomebrewの最新バージョンにアップデートされ、 にインストールされます。 にはAppleのバージョンが、 にはHomebrewのバージョンがインストールさ/usr/local/bin/bashれていることに注意してください。Homebrewがインストールする新しいバージョンのbashの機能が必要な場合は、スクリプトを で始めるようにしてください。/bin/bash/usr/local/bin/bash#!/usr/local/bin/bash

Homebrew を使用しない、または使用できない場合は、Briegel が bash を手動でビルドしてインストールする手順を説明しています。

bash と zsh の代替はありますか?

世の中には途方もない数のシェルが存在しますが、bashとzshは最も一般的で、学ぶ価値のあるシェルです。しかし、Brett Terpstra氏はfishシェルを使った実験結果を次のように記録しています。

Fish は、高度な自動提案と拡張機能を備え、クールな構文強調表示を行い、「健全な」スクリプト ツールセットを提供し、既存のプラグインとテーマが豊富に用意されており、さらに非常に優れたブラウザベースの構成ツールも備えています。

私は試したことはありませんが、あなたの好み、いや、お気に召すかもしれません。

Idfte
Contributing writer at Idfte. Passionate about sharing knowledge and keeping readers informed.