---
title: 「UNIXという考え方」再考
tags: 
author: [Masayuki Matsuki](https://docswell.com/user/Songmu)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/4EZL2K4X73.jpg?width=480
description: 「UNIXという考え方」再考 by Masayuki Matsuki
published: October 15, 26
canonical: https://docswell.com/s/Songmu/5WR64J-unix-philosophy
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/4EZL2K4X73.jpg)

「UNIXという考え方」再考
Terminal Night #3 @ 2026-10-15


# Page. 2

![Page Image](https://bcdn.docswell.com/page/Y76WVQ3P7V.jpg)

自己紹介
松木 雅幸 (@songmu)
●
●
●
●
●
Senior Solutions Engineer @ GitHub
200+ OSS Developer / 3 Times ISUCON Winner
入門監視 付録C 執筆
「みんなのGo言語」共著者
Podcaster:
○
趣味でOSSをやっている者だ


# Page. 3

![Page Image](https://bcdn.docswell.com/page/G75MDRLP74.jpg)

開発環境
●
●
●
●
●
●
●
●
キーボード: MD770 JIS (分割キーボード)
OS: macOS
ターミナル: Ghostty
ターミナルマルチプレクサ: herdr
シェル: zsh
エディタ: vim
AI Agent: GitHub Copilot
ノートテイキング: Obsidian


# Page. 4

![Page Image](https://bcdn.docswell.com/page/9J298DLZER.jpg)

Ghostty + herder + GitHub Copilot


# Page. 5

![Page Image](https://bcdn.docswell.com/page/DEY462QNJM.jpg)

代表的なOSS
●
ghq (メンテナ)
○
○
●
tagpr (オリジナル作者)
○
○
●
ローカルリポジトリ管理を便利にするCLI
https://github.com/x-motemen/ghq
■ 3.6k stars
■ Homebrew上で累計数万DL
GitHub上でタグベースのリリース管理を便利にするカスタムGitHub Actions
https://github.com/Songmu/tagpr
■ 1000を超えるOSSリポジトリでの利用
■ さくらインターネット社を始め、多くの企業のプロダクションでも利用いただいています
k1LoW/deck (共同メンテナ)
○
○
MarkdownからGoogle Slideを生成するツール
https://github.com/k1LoW/deck


# Page. 6

![Page Image](https://bcdn.docswell.com/page/VJNYZ8KV78.jpg)

sagepipe (最近の新作OSS)
https://github.com/Songmu/sagepipe
●
Agentの入出力をJSONスキーマで指定したJSONに強制する
○
○
●
自動化に組み込みやすくする
Claude Code, Codex, GitHub Copilot, ACP(Agent Client Protocol) 対応Agentをサポート
以下の例
○
○
○
入力は記事情報一覧
Agentの出力は記事要約
それを描画スクリプトに流し込んで出力を得る


# Page. 7

![Page Image](https://bcdn.docswell.com/page/YE9PZKVVJ3.jpg)

設定の実例


# Page. 8

![Page Image](https://bcdn.docswell.com/page/GE8D1RP4ED.jpg)

Agenda
●
●
●
●
●
●
UNIXという考え方
思想が強い本
拘束的ユーザーインターフェースを避ける
沈黙は金
man再評価
まとめ


# Page. 9

![Page Image](https://bcdn.docswell.com/page/LELMQK1V7R.jpg)

UNIXという考え方:
その設計思想と哲学


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4JMY12WNJW.jpg)

UNIXという考え方
●
●
●
●
●
●
Mike Gancarz 著
2001年 (原著: The UNIX Philosophy; 1994)
名著ではある
思想が強い本
原理としては参考になる
本資料では 平成23年 第1版第15刷を引用元とします


# Page. 11

![Page Image](https://bcdn.docswell.com/page/PJR9LMY479.jpg)

好きな言葉
●
劣るほうが優れている (p. 119)
○
●
Worse is better
第三のシステム (p. 40)


# Page. 12

![Page Image](https://bcdn.docswell.com/page/PEXQWVGZJX.jpg)

思想が強い本
ls 批判


# Page. 13

![Page Image](https://bcdn.docswell.com/page/3EK9VQ4VED.jpg)

定理2 一つのプログラムには一つのことを
うまくやらせる (p. 23)
●
&quot;creeping featurism&quot;
ソフトウェア開発者は、業界でいうところの「しのびよる多機能主義」の
犠牲になってしまう


# Page. 14

![Page Image](https://bcdn.docswell.com/page/L73WMPDQ75.jpg)

百徳ナイフを作らない
https://www.guinnessworldrecords.com/world-records/85961-most-tools-onone-penknife
●
ギネスワールドレコード
○
●
87ツール・141機能
Swiss Army Giant Knife 2007
○
Wenger S.A. 製


# Page. 15

![Page Image](https://bcdn.docswell.com/page/87DK6LPWJG.jpg)

道を踏み外したls (p. 24)
思想が強いシリーズ
ls は愚直に行指向で出力すれば良く、段組みは別のプログラムと分離されて
いるべきだという主張。
道を踏み外したUNIXアプリケーションの例として、lsコマンドを挙げ
よう。20以上ものオプションをもち、一画面に収まっていない。
(中略)
ファイル名を複数の列に整理させて表示することは、一見、気の効い
たやりかたに思える。しかし、この機能は、ディレクトリの内容を表
示するという本来の機能とはほとんど関係がない。


# Page. 16

![Page Image](https://bcdn.docswell.com/page/VJPKY2NXE8.jpg)

原理主義的なplan9


# Page. 17

![Page Image](https://bcdn.docswell.com/page/2EVVGDK3EQ.jpg)

plan9のlc コマンド


# Page. 18

![Page Image](https://bcdn.docswell.com/page/57GL8YQYEL.jpg)

(宣伝) 趣味でOSSをやっているものだ ep.83


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4EQY9MK6JP.jpg)

近代的な(普通の) ls は出力先によってフォーマットを変える
●
●
出力先がターミナルであれば段組み
出力先がパイプやリダイレクトであれば行指向


# Page. 20

![Page Image](https://bcdn.docswell.com/page/KJ4WXVPM71.jpg)

シェルスクリプトでの簡単な分岐例
●
●
ターミナル出力であれば色付けなどの制御も
ただ、そういう余計な分岐は無駄だという考え方も
○
○
○
●
パフォーマンスオーバーヘッド
似た処理を各コマンド毎に実装する無駄
複雑度の増大
「一つのことを上手くやっているか」


# Page. 21

![Page Image](https://bcdn.docswell.com/page/LE1YN39Y7G.jpg)

github.com/Songmu/prompter
●
●
ターミナル上でプロンプトを出すためのGoライブラリ
標準入力がターミナルか否かを判定して、プロンプト表示を制御する
○
○
ターミナルではなかったら、処理をブロックさせずデフォルト入力で進む
github.com/mattn/go-isatty が便利


# Page. 22

![Page Image](https://bcdn.docswell.com/page/GEWG4PQ1J2.jpg)

所感
●
ls が段組み機能を内包するくらいは良いのではないか
○
●
ls | mc とか小さいコマンドを組み合わせるのは綺麗だが逆に認知負荷
が高くなるとも
○
●
それが多数派だったから生き残ったという話もある
自由度の高さと組み合わせ爆発
逆にAIに対しては単機能なパーツをたくさん用意して自由に組み合わせて
もらった方が良いかも
○
彼らの認知能力は高い


# Page. 23

![Page Image](https://bcdn.docswell.com/page/47ZL2KWXJ3.jpg)

UNIXプログラミング環境
●
UNIX作者 ブライアン・カーニハン氏、ロブ・パイク氏 著
○
●
●
まさにバイブル
対話環境が実はプログラミング環境であるという、UNIXの革命的な設計思想
原著1984年、邦訳1985年
○
流石にちょっと古い記述も


# Page. 24

![Page Image](https://bcdn.docswell.com/page/YJ6WVQGPJV.jpg)

拘束的ユーザーインターフェース
を避ける
TUI的なものに対する否定論


# Page. 25

![Page Image](https://bcdn.docswell.com/page/GJ5MDRVPJ4.jpg)

CUIとGUI, そしてCLI, TUI
CUIとGUIは対比で理解して構わないが、CLIとTUIはやや複雑
●
CUI
○
●
GUI
○
●
Graphical User Interface
CLI
○
●
Character User Interface
Command Line Interface
TUI
○
Terminal (Text-based) User Interface


# Page. 26

![Page Image](https://bcdn.docswell.com/page/LE3WMPD6E5.jpg)

関係 (私的解釈)


# Page. 27

![Page Image](https://bcdn.docswell.com/page/8EDK6LPM7G.jpg)

ターミナルルネサンス
TUIの発展
近年のTUIはターミナル上でのGUI実装という側面も
●
ターミナル上でグラフィカルな表現が可能に
○
○
○
○
●
各種エスケープシーケンスでの拡張
sixelなどのグラフィック拡張
AI Agent普及による再評価
モダンなターミナル
私はTUIを作ったことが無い
○
○
単純なCLIしか作ってこなかった
作ってみたい気持ちはある


# Page. 28

![Page Image](https://bcdn.docswell.com/page/V7PKY2NQJ8.jpg)

第6章 対話的プログラムの危険性 (p. 87)
TUI的なものに対する否定論
●
●
●
●
●
シェルを離れて独自プロンプトに入ることのネガ
mail コマンドを例に上げている
psql シェルなどの対話的インターフェース
ターミナルエディタも
TUI のAI Agentはまさしくそれ


# Page. 29

![Page Image](https://bcdn.docswell.com/page/2JVVGDKPJQ.jpg)

定理8 過度の対話的インターフェースを避
ける (p. 90)
「拘束的ユーザーインターフェース」
●
●
●
ユーザーを人間と想定している
他のプログラムと結合するのが難しい
スケーラビリティに欠ける
→ ソフトウェアの梃子の効果を利用できない
拘束的ユーザーインターフェースとは、システムに存在するあ
るアプリケーションが、最上位のコマンドインタープリタの範
囲外にあって、ユーザーと対話するスタイルをいう。


# Page. 30

![Page Image](https://bcdn.docswell.com/page/5EGL8YQQJL.jpg)

対話的インターフェースの問題点
●
独自のプロンプトの中では、シェルのパワーを活かせない
○
●
パイプ等を使って他のコマンドとの連携が行えない
人間の入力待ちでブロックしてしまう
○
自動化に不向き


# Page. 31

![Page Image](https://bcdn.docswell.com/page/4JQY9MKW7P.jpg)

(脇道) 入力待ちブロックを発生させないセオリー
●
これはあくまで psuedo code
○
●
シェルに限らず、プロンプトを促すプログラムでは必須
値が未設定で、かつ標準入力がターミナルであれば、ユーザーに入力を促す
○
ターミナルに接続されていない場合は、入力待ちでブロックするのではなく、エラー終了する


# Page. 32

![Page Image](https://bcdn.docswell.com/page/K74WXVP1E1.jpg)

定理9 全てのプログラムをフィルタにする
(p. 100)
対話的インターフェースではなく、パイプで繋いで使えるフィルタとしてCLI
を設計することが望ましい。
1. データ入力にはstdinを使用する
2. データ出力にはstdoutを使用する
第一等地としての標準入出力を汚さない


# Page. 33

![Page Image](https://bcdn.docswell.com/page/LJ1YN395EG.jpg)

3. 帯域外情報にはstderrを使用する (p. 102)
●
パイプ・フィルタとは関係ない情報はstderr(標準エラー出力)に出す
○
○
○
●
迷ったら標準エラー出力に出す
人間が読むための途中経過などのinfoログも
標準「エラー」出力という名前はやや直感的ではない
常駐プロセスは構造化ログを標準出力に
○
雑多なログは標準エラー出力に


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GJWG4PQW72.jpg)

JSONLを入出力に使う近年の発明
Structured Inputs/Outputs
https://jsonlines.org/
●
●
CLIが標準出力1行に1つのJSONオブジェクトを出力する
UNIXの行指向の思想とも親和性が高い
○
○
●
JSONは必ず1行にシリアライズできる点が優れている
ref. JSONにケツカンマを求めるのは間違っているだろうか - An Epicurean
スキーマ情報も定義できる
○
○
jq も多くの場所に入るようになった
クエリもAgentに書いてもらえる


# Page. 35

![Page Image](https://bcdn.docswell.com/page/4EZL2KW273.jpg)

PowerShell: オブジェクトをパイプで渡す
●
●
Windows発祥のシェル
時代を先取りしていたとも言える


# Page. 36

![Page Image](https://bcdn.docswell.com/page/Y76WVQX67V.jpg)

沈黙は金
雄弁は銀


# Page. 37

![Page Image](https://bcdn.docswell.com/page/G75MDRX574.jpg)

7.5 (5) 沈黙は金 (p. 112)
●
成功したら何も言わなくて良い
○
○
●
「頼りがないのは良い知らせ」
硬派なとっつきづらさ
カラフルなアウトプットとか要らない (?)
ユーザーに会話調で話しかけることがユーザーを助けることだ、と考えて
いるプログラマが多すぎる。UNIXは一般に「ドライ」で、ただ「事実」だ
けを伝える。


# Page. 38

![Page Image](https://bcdn.docswell.com/page/9J298DXGER.jpg)

余計な情報は出力しない
●
●
補足情報などを出すにしても標準エラー出力に出す
--verbose オプションで「冗舌」モードにする
○
○
短縮形を -v で提供する
■ -vv とか重ねてさらに冗舌に出来るツールも (ssh等)
--version と短縮形が被って困ることも…
■ 個人的には -v は --verbose に取っておきたい
■ --version は -V


# Page. 39

![Page Image](https://bcdn.docswell.com/page/DEY4628GJM.jpg)

カラフルなアウトプットの是非
キラキラした最近のCLI
●
色や絵文字は自動化に不向き
○
○
●
標準出力に色を出したい場合
○
○
○
●
noisyなエスケープシーケンス
環境依存・Windowsへの移植の難しさ
■ Goだと github.com/mattn/go-colorable が便利
パイプで繋いだ場合は色を消す
--color=auto オプション等を設ける
NO_COLOR 環境変数
→ これらも分岐のために余計なコストを払うかどうか


# Page. 40

![Page Image](https://bcdn.docswell.com/page/VJNYZ8Q878.jpg)

NO_COLOR 環境変数
https://no-color.org/
●
●
●
●
「このカラフルなトレンドを逆転させようとすることが無駄であることを受け入
れ、2017年に非公式の標準が提案された」
NO_COLOR=1 でプレーンな出力を得られるように実装するお約束
出力をカラフルにしたい人がいることは受け入れざるを得ないが、せめてプレー
ンな出力のための共通手段が欲しいということ
このページも思想が強めで面白い
Accepting the futility of trying to reverse this trend, an
informal standard was proposed in 2017:


# Page. 41

![Page Image](https://bcdn.docswell.com/page/YE9PZKDXJ3.jpg)

(余談) 環境変数文字列のtruthy/falsy
●
環境変数は文字列しか入れられないため、真偽値の表現が曖昧になりがち
○
○
○
○
○
○
●
&quot;true&quot; / &quot;false&quot;
&quot;1&quot; / &quot;0&quot;
&quot;yes&quot; / &quot;no&quot;
&quot;on&quot; / &quot;oﬀ&quot;
&quot;enabled&quot; / &quot;disabled&quot;
&quot;enable&quot; / &quot;disable&quot;
NO_COLOR は空文字列以外は全部 truthy として扱うと明記されている
○
○
&quot;0&quot; も &quot;false&quot; も true
これは明確で良いと思う
a NO_COLOR environment variable that, when present and not
an empty string (regardless of its value)


# Page. 42

![Page Image](https://bcdn.docswell.com/page/GE8D1R39ED.jpg)

man (マニュアル表示コマンド)
再評価
有用でありながら余り使われなくなってしまった


# Page. 43

![Page Image](https://bcdn.docswell.com/page/LELMQKVM7R.jpg)

$ man ascii, $ man 7 ascii を打ってみよう


# Page. 44

![Page Image](https://bcdn.docswell.com/page/4JMY12G6JW.jpg)

「manを読め」は遠くになりにけり
●
昔はマニュアルを読むことが必須だった
○
○
●
インターネットが無い時代
インターネットにろくな情報がなかった時代
最近はCLIを開発してもmanページを作る人は少ない
○
○
私も書いたことはない…
github.com/spf13/cobra はmanページを作ってくれる機能がある


# Page. 45

![Page Image](https://bcdn.docswell.com/page/PJR9LMZN79.jpg)

man は本来は積極的に使うべき
●
man はマニュアルを読むためのコマンド
○
●
「一つのことをうまくやっている」
mycmd --help の問題点
○
○
--help が実装されているとは限らない
出処不明な実行ファイルを実行する危険性


# Page. 46

![Page Image](https://bcdn.docswell.com/page/PEXQWV98JX.jpg)

man は何故下火になったか
●
roﬀ記法のとっつきづさ
○
●
配置ルールの複雑さ
○
●
pandoc などでMarkdown等から変換する手もあるが
/usr/share/man/man1/hoge.1
OS, distribution提供者は今でもmanページをメンテナンスしてくれている


# Page. 47

![Page Image](https://bcdn.docswell.com/page/3EK9VQPLED.jpg)

まとめ


# Page. 48

![Page Image](https://bcdn.docswell.com/page/L73WMPX675.jpg)

書籍「UNIXという考え方」とは何なのか
●
●
●
●
変化を受け入れながらも、原理主義的なところに立ち返る価値はある
「一つのことを上手くやる」無数の決定的なツールを組み合わせる考え方
はAgent時代にも即しているように感じる
「テキストかバイナリか」みたいな話もあって、これも時代によって揺り
戻しがあるのが面白い
著者のMike GancarzはイチUNIX思想家である点は留意
○
DEC社にいて、初期X Window Systemの開発に関わるなどしていた


# Page. 49

![Page Image](https://bcdn.docswell.com/page/87DK6L2MJG.jpg)

カーニハンのUNIX回顧録
本物のレジェンドによる最新書籍
●
●
ブライアン・カーニハン著
2025年出版
○
●
原著: Unix: A History and a Memoir (2019)
パイプを発明した際のメモ書きの記載がアツい (p. 73)


# Page. 50

![Page Image](https://bcdn.docswell.com/page/VJPKY21QE8.jpg)

(宣伝)このスライドは
k1LoW/deckで作られました
●
k1LoW/deck
○
○
○
MarkdownからGoogle Slideを生成するツール
私もメンテナとして開発に関わっています
ぜひご利用ください！


# Page. 51

![Page Image](https://bcdn.docswell.com/page/2EVVGDYPEQ.jpg)

(宣伝) Slidownもよろしく
●
Songmu/slidown
○
○
●
MarkdownからPowerPointを生成するツール
k1LoW/deck のフォークで兄弟プロジェクト
pptxは実はzipで包まれたxmlの塊なのでAIに調整させやすい
○
Slidown自体はAIを使わずにMarkdownからpptxを生成するツール


# Page. 52

![Page Image](https://bcdn.docswell.com/page/57GL8Y9QEL.jpg)

参考
●
●
●
UNIXという考え方: その設計思想と哲学 : Mike Gancarz, 桂, 芳尾
UNIXプログラミング環境 : Brian W. Kernighan, Rob Pike, 石田 晴久, 野中 浩一
カーニハンのUNIX回顧録 eBook : ブライアン・カーニハン, 井上尚司


