68312


nodejs のパッケージマネージャーの、 yarn はどうやら yarnpkg というバイナリも提供し、かつ同じような動作をするようだ、と思っています。

# 質問

yarn はどうしてバイナリとして、 yarn と yarnpkg の2つを提供しているのですか? 何か部分的に違った振舞いをしたりするものなのでしょうか?


CC BY-SA 4.0
2020-07-05T12:37:54.280
68305
2020-07-05T16:00:08.110
754
question
node.js yarn
yarn と yarnpkg の違いは何ですか?


ディストリビューションなどが明記されていないのであれなのですが，ざっくりといえば多くのディストリビューションにおいてはディストリビューションが提供しているパッケージは`yarnpkg`，yarnが独自の[deb](https://classic.yarnpkg.com/en/docs/install#debian-
stable)や[rpm](https://classic.yarnpkg.com/en/docs/install#centos-
stable)のリポジトリで配布してるのが`yarn`になっていることが多いようです．また，ディストリビューションの配布しているパッケージでは`yarn`コマンドではなく`yarnpkg`コマンドに置き換えられていることがあります．(DebianやUbuntuなどでディストリビューションの配布しているyarnpkgパッケージには`/usr/bin/yarn`は含まれていません．)

しかし，これは理由というよりは結果です．なぜディストリは`yarn`ではなく`yarnpkg`でこのパッケージを提供しているのでしょうか．それはyarnpkgとは全く関係のないpythonのパッケージである`cmdtest`(Ubuntuのバージョンによってはデフォルトでインストールされていることがあるようですが)が`/usr/bin/yarn`をリザーブしており，`yarn`は`cmdtest`のエイリアスになっていることがあるようです．

例えば <https://pkgs.org/download/yarn>
をみてみると，ArchやAlpineのようなディストリにおいては`yarn`の名前でyarnpkgが提供されていますが，DebianやUbuntuにおいては`yarn`ではなく`cmdtest`が表示されていることが確認できます．

試しに，dockerの`ubuntu:20.04`イメージにおいて`apt install yarn`を実行してみました．

[code]

    root@2a6230b9002a:/# apt install yarn
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Note, selecting 'cmdtest' instead of 'yarn'
    The following additional packages will be installed:
      file libexpat1 libmagic-mgc libmagic1 libmpdec2 libpython3-stdlib libpython3.8-minimal libpython3.8-stdlib
      libreadline8 libsqlite3-0 libssl1.1 libyaml-0-2 mime-support python3 python3-cliapp python3-markdown python3-minimal
      python3-packaging python3-pkg-resources python3-pygments python3-pyparsing python3-six python3-ttystatus
      python3-yaml python3.8 python3.8-minimal readline-common xz-utils
    Suggested packages:
      python3-doc python3-tk python3-venv python3-xdg python-markdown-doc python3-setuptools python-pygments-doc
      ttf-bitstream-vera python-pyparsing-doc python3.8-venv python3.8-doc binutils binfmt-support readline-doc
    The following NEW packages will be installed:
      cmdtest file libexpat1 libmagic-mgc libmagic1 libmpdec2 libpython3-stdlib libpython3.8-minimal libpython3.8-stdlib
      libreadline8 libsqlite3-0 libssl1.1 libyaml-0-2 mime-support python3 python3-cliapp python3-markdown python3-minimal
      python3-packaging python3-pkg-resources python3-pygments python3-pyparsing python3-six python3-ttystatus
      python3-yaml python3.8 python3.8-minimal readline-common xz-utils
    0 upgraded, 29 newly installed, 0 to remove and 4 not upgraded.
    Need to get 8479 kB of archives.
    After this operation, 38.3 MB of additional disk space will be used.
    
[/code]

`cmdtest`がインストールされようとしていることが確認できます．

このように，互換性，あるいはパッケージ衝突の問題などが関係しているようです．

なお，npmのパッケージには`yarn`と`yarnpkg`の両方が実行ファイルとして含まれていますが，上記のような理由からエイリアス的に用意されているのではないでしょうか．なお，`package.json`をみれば両方が同じコードを指しているのは見てのとおりです．

[code]

      "bin": {
        "yarn": "./bin/yarn.js",
        "yarnpkg": "./bin/yarn.js"
      },
    
[/code]

[Name conflict with Apache Hadoop Yarn · Issue #2337 ·
yarnpkg/yarn](https://github.com/yarnpkg/yarn/issues/2337)


CC BY-SA 4.0
2020-07-05T15:40:48.343
68312
2020-07-05T16:00:08.110
2020-07-05T16:00:08.110
2376
2376
68305
answer