codex cli は rust でつくられてるようですが、インストールは npm install -g @openai/codex だそうです。どういうこと?rust じゃないの?
Rustで書かれていても、配布(インストール)の“器”としてnpmを使うことはよくあります。つまり、
@openai/codex)は配布・更新・OS判定・バイナリ取得のためのラッパーという構造です。
典型的にはnpmパッケージ内に少量のNode.jsコードが入っていて、インストール時に次のどれかをします。
codex コマンドとしてパスが通るように配置する(node_modules/.bin など)ユーザー視点では npm install -g で入るけど、実行されるのはRustの実行ファイル、ということが起きます。
npm update -g)Rustで作られているのは本体で、npmは配布経路です。
Python製ツールがpipで配られるのと同様に、「実装言語」と「配布に使うパッケージマネージャ」は別物になり得ます。
必要なら、あなたの環境で実際にどのバイナリが動いているか(which codex や、インストール先の実体がnodeスクリプトかネイティブバイナリか)を確認する手順も案内できます。OS(mac/Linux/Windows)を教えてください。
この手法に名前はついてる? またこの手法を使ってる著名なオープンソースを挙げて
はい、だいたい名前が付いています。文脈によって呼び方がいくつかあります。
foo がメタで、foo-darwin-arm64 / foo-linux-x64 などを依存として切り替える構成。postinstall スクリプトでOS/CPU判定→バイナリをダウンロード/配置するパターンをこう呼ぶことがあります。※厳密に「これが唯一の正式名称」というより、上のどれか(特に npm wrapper / binary npm package)で通じます。
@esbuild/darwin-arm64 等の形)。@swc/core が各OS/CPU向けネイティブバイナリ(N-API)を使います。同じ「npmで配る」でも実装が2系統あります。
bin としてネイティブ実行ファイルを置く。.node(N-API等)を配る。codexは文脈的にA寄り(CLI配布型)で説明されることが多いです。
必要なら「@openai/codex が postinstall download型 なのか platform-specific package型 なのか」を、package.jsonの scripts.postinstall や依存関係の切り方から判定する見方も説明できます。バージョンやリポジトリURLが分かれば、より正確に言えます。
rust製アプリの文化なのかな? golang製アプリでも使われていたりする?
「Rust製アプリ特有の文化」というより、“npmユーザー(JS/TS開発者)に届けたいCLI/ツールの文化”です。Rustがたまたまその領域(高速CLI)で採用されやすいので目立つだけで、Goでも普通に使われます。
npm i -g で更新もアンインストールも簡単結果として「中身はネイティブバイナリ、外側はnpm」という形になります。
使われています。代表例が esbuild(Go製) で、まさに
他にも「CLIはGo/Rust、配布はnpm」という例は珍しくありません(フロントエンド領域のツールほど多い)。
1) platform-specific packages + meta package(esbuild型が有名)
2) postinstallでバイナリをダウンロード
どちらもRust/Go/その他で普通に使われます。
必要なら @openai/codex が上のどっちの型かを、package.json(依存関係や postinstall)の見方で一緒に確認できます。バージョンやpackage.jsonの該当部分を貼ってください。