selfish
| 分類 | Unix系の対話型シェル(拡張系) |
|---|---|
| 系譜 | bash/zsh系統の変種 |
| 主な用途 | ログ最適化・環境復元・補助入力支援 |
| 標準動作 | ターミナルセッションごとの「自己優先キャッシュ」を保持 |
| 初期実装者(伝承) | 北海道大学出身の開発者グループ「澄川計算工房」 |
| 登場時期(推定) | 1990年代後半 |
| 代表的機能 | 自己参照バインドと“反省遅延”プロンプト |
| ライセンス(当時) | 研究用クローズド仕様→後年に部分公開 |
selfish(セルフィッシュ)は、対話型シェルの一種として分類されることがあるである。主にターミナル上でのコマンド実行に際し、ユーザの入力履歴や環境変数を「優先的に自分のために」扱う機構が特徴とされる[1]。その由来は、言葉としての「利己性」の比喩が技術仕様に混入した結果だと説明されてきた[2]。
概要[編集]
selfishは、やが採用してきた対話制御や補完の設計思想を踏まえつつ、ユーザの意図を「システム全体ではなく、まずその場の自分」に寄せて扱う発想を追加したシェルであるとされる[1]。
特徴として、入力履歴や環境変数の読み出し順を固定化する「自己優先キャッシュ」が挙げられる。これにより、同一端末で連続して実行したコマンドに対してレスポンスが安定する一方、他セッションや他ユーザの状態を参照しにくくなる傾向があったとされる[2]。
なお「利己性(selfish)」という一般語が持つ倫理的ニュアンスは本来シェル仕様と無関係であるが、当時の仕様書には比喩的な文言が混入していたと回想されている。編集者の間では、命名が先行し機能が後追いになったため“嘘っぽい動作”が残ったのではないかという指摘もある[3]。
歴史[編集]
生まれた経緯:反省遅延の発明[編集]
伝承によれば、selfishは札幌市の倉庫で行われていた深夜の計算実験の途中で生まれたとされる。研究チームは北海道大学の学内ネットワークが夜間に不安定になる問題を抱え、毎回セッション開始時に環境変数を読み直す必要があったという[4]。
そこで澄川計算工房は、起動時に読み込む変数のうち「直近で参照したもの」だけを先に確定し、その他を“反省遅延”としてプロンプト表示の後ろに回す方式を提案した。この方式では、ユーザが次に打つコマンドを当てずに、せめてプロンプト体験を先に良くすることが目標になっていたとされる[5]。
この反省遅延のルールが、比喩的に「自分のために先に準備をする=selfish」と呼ばれ、開発日誌に残った。結果として、比喩がそのまま機能名の上位概念になり、のちに“selfish”というシェル名が定着したとされる。ただし、原資料が断片化しており、命名と仕様の対応関係には複数説がある[6]。
発展:ログ収集税と自己優先キャッシュ[編集]
2001年頃、東京の総務省系会合で“端末ログの標準化”が議論され、各研究室は独自実装のログ形式を統一する必要に迫られたとされる[7]。澄川計算工房は、ログを単に書き出すのではなく、取りこぼしを減らすために「自己優先キャッシュ」を導入した。
自己優先キャッシュは、セッション内で参照されたキーを優先順に並べ替え、次のコマンド実行時にその順で候補を試す方式であると説明された。この並べ替えに用いられるスコアは、単純な回数ではなく「直近の打鍵速度」「改行前の猶予時間(ms)」「キャンセルの頻度(%)」を合成した推定値であるとされた[8]。
当時の仕様草案では、更新頻度に関して「1秒あたり最大3回」「ただしアイドル時は0.2回/秒まで減衰」「減衰が働いた場合は最後に成功したキーのみを残す」という細則まで書かれていたとされる。この“細かすぎる数字”が後年、異様な実装の根拠として語られることになった[9]。
仕組み[編集]
selfishのコアとなる概念は、ユーザの入力に対する応答を「自分の内部状態の整合性」に寄せる点にある。具体的には、起動直後から「自己参照バインド」と呼ばれる機構が有効化され、環境変数の参照先をセッション内の優先リストへ固定するとされる[10]。
また、プロンプトは通常の文字列表示に加え、“反省遅延”の結果をメタ情報として一瞬だけ点滅させる。たとえば、遅延していた変数が次のコマンドに必要だった場合、プロンプトの末尾に“.”が一つだけ出る仕様が噂されている。仕様が曖昧である一方、ユーザが「今の遅延が当たった」と体感できる設計になっていたと説明される[11]。
さらに、自己優先キャッシュの更新は、ユーザ操作のログを配下に複製し、セキュリティ監査のために別経路で保存されるとされた。これにより、性能と監査の両立を狙ったとされるが、実装の都合で監査用ログの方が“新しい振る舞いを先に学習してしまう”逆転現象が起きたという報告もある[12]。
社会的影響[編集]
selfishは研究者コミュニティで「端末体験の最適化」という文脈として受け止められた。しかし実際には、“自分のために最適化される”という設計思想が、チーム開発の文化にも影響したとされる[13]。
札幌のある演算センターでは、セッション開始スクリプトを統一していたにもかかわらず、selfishが自己参照バインドの履歴を優先するため、統一スクリプトが意図どおりに効かない現象が報告された。これがきっかけで、環境変数の命名規約が見直され、変数に“共有目的”ラベルを付ける慣行が広まったとされる[14]。
一方で、ログ最適化が進むにつれ「監査ログが先に学習してしまう」問題は、監査部門に不信感を生む材料にもなった。結果として、相当の内部ガイドラインに“シェルの学習禁止時間帯”が追加されたと語られている[15]。もっとも、このガイドラインの条文は議事録に残っている一方、当該シェル名が明記されていないため、誰が対象に含めたかは定かでない[16]。
批判と論争[編集]
批判の中心は、自己優先キャッシュがユーザ体験を改善する一方で、共有環境や共同実行の前提を崩す点にあった。たとえば、研究室の共通ジョブスクリプトを走らせるとき、想定外の環境変数が優先されることがあり、「再現性の欠如」として問題視されたとされる[17]。
また、命名が倫理語を含むため、教育機関では“技術的中立性”の観点から教材への採用に慎重になったとされる。ある教育担当者は「selfishという名前が、学生に『自分だけが正しい』という価値観を植える」と述べたというが、記録の真偽は揺れている[18]。
このほか、仕様が一部だけ公開され、残りが研究メモに閉じたままだったことから、性能改善が実際にどの程度再現可能か疑問視する声もあった。要出典とされるものの、当時のベンチマークでは“初回応答が平均42ms短縮”“2回目以降は平均17%高速化”と報告されており、過大評価との指摘もある[19]。
脚注[編集]
関連項目[編集]
脚注
- ^ 澄川 真一郎『自己優先キャッシュの設計と応用』澄川技術叢書, 2002.
- ^ Margaret A. Thornton『Interactive Shell Behavior and Human Perception』Journal of Terminal Ergonomics, Vol.12 No.3, 2003.
- ^ 北海 道人『反省遅延プロンプトの統計的妥当性』北海道計算会報, 第7巻第2号, 2001.
- ^ 田辺 礼司『共有環境における再現性の破れ:シェル変種の検証』情報処理技術報告, Vol.98 No.41, 2004.
- ^ 文部 技術監『教育用途における倫理語命名の影響に関する考察』学習環境評価研究, 第3巻第1号, 2006.
- ^ K. Yamashita『Secure Audit Trails in Adaptive Consoles』Proceedings of the Symposium on System Diaries, pp.113-129, 2005.
- ^ 高橋 由紀『端末ログの標準化と監査導線設計』総務政策技術レビュー, Vol.21 No.8, 2002.
- ^ M. Dupont『Caching Order Effects in Command Interpreters』ACM SIGOPS Letters, Vol.19 No.2, pp.55-66, 2003.
- ^ 澄川 計算工房『札幌倉庫夜間実験ノート(抄録)』澄川計算工房内部資料, 1999.
- ^ R. Smith『Selfish Naming in Systems Tools』International Journal of Naming Studies, Vol.2 No.9, pp.1-9, 1998.
外部リンク
- 澄川計算工房 アーカイブ
- 端末ログ標準化フォーラム
- 反省遅延プロンプト研究会
- 共有ジョブスクリプト互換性談話
- シェル変種ベンチマーク倉庫