CLIコマンドに名前をつけるとき、動詞から始めると直感的に見える。でも Docker や Azure CLI の設計はドメイン-操作の順になっている。この判断軸をまとめておきます。
「動詞から始めたい」衝動に気づいた
スキル(CLIから呼べる小さなコマンド)に名前をつけるとき、extract-til とか generate-draft みたいに動詞先にしたくなったんですよね。
なんとなく「CLIはコンピュータへの命令だから動詞が先のほうが文法的に正しい」って感覚があって。英語としてもそっちが自然だし、やっていることが一目でわかる気がして。
でも既存のスキルを見たら draft-to-note / neta-to-slides / neta-list みたいにドメイン-操作のパターンで揃ってた。
新しいコマンドを2件だけ動詞先で追加すると、一貫性が崩れる。
「なんで動詞先にしたかったんだろう」って考え直したら、命名規則の本質的な問いに辿り着いた気がしました。
命名の本質は「グループ化」
「文法的な正しさ」と「グループ化として機能するか」は別の問いです。
タブ補完で欲しいコマンドが見つからないとき、人間がどう探すかを考えてみると——たいてい「何を操作したいか(ドメイン)」から絞り込んでいる。
「コンテナ関連の操作を見たい」「リソースグループの操作を見たい」という入り口になってる。
Docker はトップレベル動詞コマンド(docker build, docker run)と、オブジェクト別サブコマンド群が共存する混在設計です。
docker container create docker container ls docker container rm docker image pull docker image ls docker image rm
create-container でも remove-container でもなく、container create / container rm。タブ補完で docker container まで打つと、コンテナ関連の操作が全部並ぶ。
Azure CLI も同じ。
az group create az group delete az group list
az create-group じゃなくて az group create。グループという文脈で束ねてから、具体的な操作を選ばせる設計になってる。
動詞先が機能するケース
OS/400(現IBM i)の CL コマンド(CRTDTAARA、DLTDTAARA)は逆に動詞先です。でも全コマンドが均一にその規則で揃っているから、「CRT で始まれば作成系」という別の文脈が成立してる。
つまり動詞先が機能するのは、操作の種類が少なく均一で、かつ全体が一貫しているときだと思う。
ドメイン先が向いてる状況: ドメインの種類が多い、同じドメインに複数の操作がある、「〇〇関連を全部見たい」場面が多い
操作先が向いてる状況: 操作の種類が2〜3種類に絞れる、ドメインより操作の切り口で探すことが多い、コマンド数が極端に少ない
参考として、clig.dev(CLI Guidelines)でも複数のオブジェクトを持つ複雑なソフトウェアではドメイン先のパターンが多いと書かれています。
判断フロー
命名に迷ったとき、この順で考えるようになりました。
- 既存のコマンドを全部書き出す
- タブ補完で「よく使う起点」はドメインか操作か
- 同じプレフィックスが何件並ぶか(5件以上なら意味がある、2件以下なら恩恵薄い)
- 既存の大多数のパターンに揃える(一貫性を優先)
自分のケースだと、既存が draft-to-note / neta-to-slides / url-summary とドメイン-操作で揃ってた。新しく extract-til / extract-seed を追加しても、extract- で始まるのは2件だけ。
補完の恩恵がほぼない。
そして既存コマンドが全部逆の並びに見えて、覚えにくくなる。現状維持が正解でした。
命名規則を変えたくなったら
「やっぱり全部動詞先に統一したい」という気持ちが出てくることもあると思う。そのときのポイントは「1件だけリネームしない」こと。
1件変えると二重管理になる。2件変えると既存の使い手が混乱する。
変えるなら全件一括でやる必要がある。だから「変えたくなった」タイミングで動くより、動機が十分に固まってから一括でやるほうが効率的だと思う。
この判断は命名の問題というより、変更コストのマネジメントなんじゃないかと。
まとめ
命名の良し悪しは「英語として自然か」より「グループ化として機能するか」で決まる、というのが今の考えです。
ドメイン-操作パターンが広く使われているのは、人間が「何を操作するか」を先に絞ってから「何をするか」を選ぶという認知の流れと合っているから。Docker も Azure CLI も同じ発想で設計されている。
既存のコマンド群に一貫性があるなら、新しいコマンドを揃えるのが一番安全な判断だと思います。統一感を崩してまで変える動機が薄ければ、動かないのが正解。
「動詞先にすれば自然に見える」という感覚は割と罠で、「使うときにどこから探すか」を先に考えたほうが、後から後悔しない命名になる気がします。