MSYS2ではpacmanの代わりにpacboyを使おう

ご存じの通り、MSYS2ではパッケージマネージャーとして、Arch Linux由来のpacmanが使われていますが、`mingw-w64-x86_64-toolchain` や `mingw-w64-i686-toolchain` のようなやたら長いパッケージ名を指定するのが面倒だと感じたことはないでしょうか。
また、64bit用と32bit用のパッケージを両方インストールしたいときに、わざわざ同じようなパッケージ名を2回指定しなければならないのも面倒だと感じるかもしれません。
そんなときに便利なのが [pacboy](https://github.com/msys2/pactoys/tree/main/source/pacboy) というwrapperスクリプトです。

# インストール

MSYS2のバージョンにより、デフォルトでインストールされている場合とされていない場合があるようです。インストールされていなければ、

```shell-session
$ pacman -S pactoys
```

でインストールしてください。

# 使い方

引数無しで `pacboy` を実行するか、`pacboy help` で使い方が表示されます。

```
$ pacboy help

    Pacboy 2016.6.24
    Copyright (C) 2015, 2016 Renato Silva
    Licensed under BSD

    This is a pacman wrapper for MSYS2 which handles the package prefixes
    automatically, and provides human-friendly commands for common tasks.

    Usage:
        pacboy [command] [arguments]
        Arguments will be passed to pacman or pkgfile after translation:

        For 64-bit MSYS2 shell:
            name:i means i686-only
            name:x means x86_64-only
            name:z means clang-i686-only
            name:c means clang-x86_64-only
            name:u means ucrt-x86_64-only
            name:a means clang-aarch64-only
            name:p means MINGW_PACKAGE_PREFIX-only

        For MSYS shell:
            name:m means mingw-w64
            name:l means mingw-w64-clang

        For all shells:
            name: disables any translation for name
            repository::name means repository/name

    Commands:
        sync        Shorthand for --sync or --upgrade
        update      Shorthand for --sync --refresh --sysupgrade
        refresh     Shorthand for --sync --refresh
        find        Shorthand for --sync --search
        packages    Shorthand for --sync --list
        files       Shorthand for --query --list [--file]
        info        Shorthand for --query --info [--file]
        origin      Shorthand for --query --owns or pkgfile
        remove      Shorthand for --remove --recursive
        debug       Verbose output for the above commands
```

このように、パッケージ名を自動で変換してくれたり、いくつかのわかりやすいコマンドを提供してくれます。

パッケージ名の後に `:i` などのサフィックスを付けるとパッケージ名を変換してくれます。

* `:i` - MinGW 32bit (`mingw-w64-i686-*`)
* `:x` - MinGW 64bit (`mingw-w64-x86_64-*`)
* `:z` - Clang 32bit (`mingw-w64-clang-i686-*`)
* `:c` - Clang 64bit (`mingw-w64-clang-x86_64-*`)
* `:u` - UCRT 64bit (`mingw-w64-ucrt-x86_64-*`)
* `:a` - Clang AArch64 (`mingw-w64-clang-aarch64-*`)
* `:p` - 環境変数 `$MINGW_PACKAGE_PREFIX` で指定したパッケージ名 (=現在開いているシェルに応じたパッケージ名)
* `:m` - MinGW 32bit/64bit 両方
* `:l` - Clang 32bit/64bit 両方
* `:` - パッケージ名の変換無し

パッケージ名の後に `:` 等を付けなかった場合は、以下の通り、現在使用しているMSYS2のシェルの種類に応じてパッケージ名の変換が行われます。

* MSYS2 MinGW 32-bit  
  `:m`と同様に、MinGW 32/64bit 両方のパッケージ名に変換
* MSYS2 MinGW 64-bit  
  `:m`と同様に、MinGW 32/64bit 両方のパッケージ名に変換
* MSYS2 MSYS  
  `:`と同様に、変換なし


## 例:

`MSYS2 MSYS`シェルから以下のコマンドを実行すると、

```shell-session
$ pacboy -S git toolchain:m
```

以下を実行したことと同じ結果になります。

```shell-session
$ pacman -S git mingw-w64-x86_64-toolchain mingw-w64-i686-toolchain
```

どの種類のシェルからでも同じように使うためには、MSYS2のパッケージには常に `:` を指定し、MinGW32/64のパッケージには `:m` (あるいは `:i` や `:x`) を指定するようにすればよいでしょう。

```shell-session
$ pacboy -S git: toolchain:m
```