Git/開発ツール

【地獄】Gitさん、標準の「--」を無視して「--end-of-options」とかいう独自仕様を作ってしまう…エンジニア激怒「UX終わってる」「Magit無しじゃ無理」

投稿日時: 2026/07/21 22:13

■ 概要・編集部サマリー

【背景・課題】Unix標準のコマンドライン慣習である「--」(オプション終了指定)をGitが独自拡張・改変した結果、特異で不整合なUXが生み出されている点が問題視されている。 【焦点・技術】Gitではパス分離に「--」が使われるため、コマンドライン引数のオプション解析を明確に打ち切るには「--end-of-options」が必要という複雑な仕様が存在する。 【評価・議論】開発者の間では「Git Koans(公案)」等のネタにされるほど不満が多く、Magitなどの優れた代替GUI/TUIツールやLLMに操作を任せる動きが広がっている。

1. UNIX標準『--』とGitの独自フラグ問題

POSIX標準のコマンドラインでは、`--`以降の引数を全てオプションではなく「ファイル名・引数」として扱う取り決めが存在する。

しかしGitの一部の内部サブコマンドでは、`--`の扱いが独自拡張されており、意図しないオプションとして解釈されるセキュリティバグの原因となっていた。

2. Command Injection防御と`--end-of-options`の導入

Webサービス(GitHub/GitLab等)のバックエンドスクリプトでGitコマンドを安全に呼び出す際、コマンド注入攻撃を防ぐために`--end-of-options`が必須とされた。

標準`--`との非互換性がスクリプト記述者を混乱させる一方、セキュリティ担保のための苦渋の設計変更であることが明かされた。

3. CLIツール設計とセキュリティの葛藤

長年愛されるツールの後方互換性と、現代のセキュリティ要求(インジェクション対策)の板挟みを示す好例だ。

CLIラッパーツールを自作するエンジニアにとって重要な知見が詰まっている。

海外掲示板の反応・まとめ

編集部サマリー:

■ 記事概要 Gitに存在する「--end-of-options」フラグをきっかけに、Hacker NewsでGitの不整合なCLI/UXデザインについての議論が噴出。 UNIX標準の「--」慣習を無視した経緯や、Git Koans(公案)に代表される不便さ、Magitなどのツールへの退避策について海外エンジニアたちが語り合っています。

名無しさん@インフラエンジニア:

なんでGitはPOSIX/UNIX昔からの大原則「--」でオプション終了にしないねん!なんで「--end-of-options」なんてアプリ独自のオレオレ仕様を覚えなきゃならんのだ…悪夢だろこれ

名無しさん@CLI難民:

Gitの内部データモデルは神がかって強力で柔軟なのに、CLIのUXだけはマジで「個性的」すぎるんだよなw 昔から「Git Koans(Git公案)」ってブログで散々皮肉られてるのほんとすき

名無しさん@Linux古参:

うろ覚えだけど、Linus自身も「Gitはユーザーが直接叩くツールじゃなくて、上に高級なツールを作るための配管(Plumbing)として設計した」って昔認めてたような気がするわ

名無しさん@Emacs信者:

ワイはCLIの不整合に耐えられなくなって、Git操作は全部EmacsのMagitでやってるわ。コード書くのは別エディタだけどGitのためだけにEmacs起動してる。GUI/TUI最高だぞ。なお人にGitの教え方がわからなくなる模様

名無しさん@規格原理主義者:

1997年の Single UNIX Specification(SUS)ですでに「-- 以降のハイフン始まりの文字列はフラグとして扱わない」って明記されてるのにな。2005年発祥のGitがそれ破ったのほんま謎。「設計が酷く見える時は、単に実際に設計が酷いだけ」は至言やね

名無しさん@AI生成依存症:

もう不規則なGitコマンド覚えるの嫌だから全部LLMに打たせてるわ コマンドの誤打率が一気に下がったぞ

名無しさん@プロンプトエンジニア:

>>7 なお今度はLLM側が勘で存在しないGitオプションを生み出して自爆する模様