前回に続き、最新OS「El Capitan」をCUIを通じて見るというテーマでお届けする。変わっていないようでしっかり変わっているのがこの世界、よく見ればYosemite以前との違いがわかるはず。今回は、シェルの「セッション再開機能」と新コマンド2つを取りあげてみよう。

Terminalが変わった?

Terminalを使い終えたとき、どのようにしてウインドウを閉じているだろうか? ログアウトしてセッションを終了してからアプリケーションとしてのTerminalを終了するか、いきなりTerminalを終了してしまうか。いずれにせよ、次回利用するときにはディレクトリの移動からやり直しになる。

しかし、El CapitanのTerminalはそうならない。Control-Dでログアウトするとなにやらメッセージが表示されるし、いきなり終了しても次回起動したときには「復元日時」などと文字列が現れ、前回終了時のディレクトリから作業が始まる。そう、"前回からの続き"になるのだ(仮に「セッション再開機能」と呼ぶ)。

そのからくりは「/etc/bashrc」を見ればわかる。最終行に、「/etc/bashrc_$TERM_PROGRAM」を実行する仕掛けがあり、結果として「/etc/bashrc_Apple_Terminal」が実行される。なお、「/etc/bashrc」はbashのシステムワイドな初期化ファイルであり、「~/.bashrc」などユーザ個別のファイルには影響しない。

このスクリプトにより、カレントディレクトリやシェルの状態がシェルの終了時(Terminal終了時)に自動保存される。対象のディレクトリは「~/.bash_sessions」、そこにコマンドヒストリーなどの情報が記録される仕組みだ。どのような情報がどのファイルに記録されるかは、コメントの形で詳しく記載されているため、興味があればチェックしてほしい。

このセッション再開機能が不要な場合には、以下のコマンドを実行しよう。これで、次回からログアウト時のメッセージは表示されなくなる。やはりセッション再開機能を使いたいというのであれば、rmコマンドで削除すると初期設定に戻すことができる。

$ touch ~/.bash_sessions_disable

El Capitanの「/etc/bashrc」。デフォルトシェルにbashを選択している場合に実行される

bashの終了時にセッションの保存がトリガー処理されることにより、次回シェルを起動したときに前回の状態を復元してくれる

新登場のコマンド

大まかな傾向として、OS Xがメジャーアップデートされてもコマンドの数・機能に大きな違いは見られない。それはEl Capitanも同様だが、注意深く見れば変化はある。以下に挙げる「assetutil」と「nscurl」は、明らかにアプリ開発者向けのコマンドだが、お世話になる場面もありそうだ。

assetutil

拡張子が「.car」のファイルをご存知だろうか? iOSアプリに利用される画像ファイルの一種で、ボタンやアイコンなどUIの構成要素を寄せ集めたものだ。iOS 7から利用されはじめ、OS Xでもシステムアプリケーションや各種フレームワークに見つけることができる。

この画像ファイルを閲覧/編集するツールは標準装備されていないため、「Crunch」などのサードパーティー製アプリに頼るしかないが、内容の確認程度ならばEl Capitanに追加されたコマンド「assetutil」で対応できる。以下のとおり「-I」オプションに続けてcarファイルを指定すれば、そこに含まれる内容がJSON形式で標準出力に書き出されるはずだ。

$ assetutil -I Assets.car

「assetutil」コマンドを利用すると、carファイルの収録物をJSON形式で書き出すことができる

nscurl

OSにおける「セキュリティ対策」は、実際のところユーザの目に触れない部分で強化/進化が進んでいる。Apple製品の場合、アプリ開発にあたり最新のセキュリティ対応を義務付けることにより、OSベンダー単独では難しい安全性を実現している。

iOS 9から導入された「ATS(App Transport Security)」はそのひとつで、アプリ/サーバ間のネットワーク接続をSSLにすることを推奨する。デフォルトの設定では、HTTPSでない通信はブロックされ、HTTPSでもサーバ側がATSの要件を満たしていない場合は接続に失敗する。この原則は、El CapitanおよびMac App Store経由で配布されるアプリ、およびサーバサイドにも適用される。

その判定に利用できるツールが、El Capitanで追加されたコマンド「nscurl」だ。名前のとおり、HTTPサーバなどと通信しファイル/データを取得するcurlコマンドと基本的な働きは似ているが、ATSの要件を満たすかどうかのチェックツールに利用できる点が異なる。たとえば、以下の要領でコマンドを実行すると、ドメインレベルでのATSの対応状況(この例ではAppleのWEBサイト)を確認できる。

$ nscurl --ats-diagnostics https://www.apple.com

「nscurl」コマンドを使うと、サーバ側がATSに対応しているかどうかチェックできる