【Delphi】コマンドライン版 GetIt (GetitCmd.exe) を使う

# はじめに
RAD Studio 10.4 Sydney がリリースされ、その環境設定のために GetitCmd.exe を使ってパッケージ取得先の切り替えをする必要がありました。

ですが、この **GetitCmd** には全くドキュメントがありません。GetitCmd.exe はコマンドライン版 GetIt パッケージマネージャなので、使い方次第では便利な事もあると思うのですが...

# GetitCmd の使い方

以下、GetItCmd の使い方です。

## 事前準備 - 環境変数のセット

GetitCmd を動作させるためにはいくつかの環境変数が正しくセットされている必要があります。また、複数のバージョンの GetItCmd を切り替えて使うには、**\<インストールフォルダ\>\bin** にある `rsvars.bat` を実行します。

```
C:\Program Files (x86)\Embarcadero\Studio\21.0\bin>rsvars.bat
```

## 使用例

### ■ インストールされているパッケージを列挙する

`getitcmd -l=` とすると既にインストールされているパッケージがリストアップされます。

```
C:\Program Files (x86)\Embarcadero\Studio\21.0\bin>getitcmd -l=
GetIt Package Manager - Version 7.0
Copyright (c) 2020 Embarcadero Technologies, Inc. All Rights Reserved.

Id                                                 Version         Description
--                                                 -------         -----------
10.4Patch1-10                                      1               RAD Studio 10.4 Patch 1 adds som...
Fast_Report_FMX-2.6.2-104                          2.6.2           Report generator FastReport FMX ...
Fast_Report_VCL-6.7-10.4                           6.7             Report generator FastReport VCL ...

Command finished with success!
```

### ■ すべてのパッケージを列挙する

`getitcmd -f=all -l=` とすると利用可能なすべてのパッケージがリストアップされます。

```
C:\Program Files (x86)\Embarcadero\Studio\21.0\bin>getitcmd -f=all -l=
GetIt Package Manager - Version 7.0
Copyright (c) 2020 Embarcadero Technologies, Inc. All Rights Reserved.

Id                                                 Version         Description
--                                                 -------         -----------
10.4Patch1-10                                      1               RAD Studio 10.4 Patch 1 adds som...
Fast_Report_FMX-2.6.2-104                          2.6.2           Report generator FastReport FMX ...
Fast_Report_VCL-6.7-10.4                           6.7             Report generator FastReport VCL ...
Abbrevia-10.6-Sydney                               10.6            Abbrevia is a compression toolki...
AlienInvasion-1.10                                 1.10            Alien Invasion is a classic arca...
AndroidKioskModeTemplate-1.0                       1.0             FMX Template showing the new And...
  ...
```

### ■ 特定のカテゴリのパッケージを列挙する

`-l` オプションにカテゴリを指定するとパッケージがリストアップされます。例えば `getitcmd -f=all -l=delphi` とすると　Delphi で利用可能なすべてのパッケージがリストアップされます。

```
C:\Program Files (x86)\Embarcadero\Studio\21.0\bin>getitcmd  -f=all -l=delphi
GetIt Package Manager - Version 7.0
Copyright (c) 2020 Embarcadero Technologies, Inc. All Rights Reserved.

Id                                                 Version         Description
--                                                 -------         -----------
Abbrevia-10.6-Sydney                               10.6            Abbrevia is a compression toolki...
AndroidKioskModeTemplate-1.0                       1.0             FMX Template showing the new And...
AppHomeScreens-1.0                                 1.0             This FireMonkey UI template incl...
AppTemplateFitnessCenter-1.0                       1.0             This Firemonkey UI template simu...
AsyncPro-1.7-Sydney                                1.7             Async Professional is a comprehe...
CardPanelDemo-1.0-Rio                              1.0             This sample shows you how to use...
  ...
```

カテゴリには次のようなものを指定できるようです。

`Delphi, C++, Libraries, Components, Trial, IDE, Styles, Samples, Patch`


### ■ パッケージをインストールする

`getitcmd -i=<アイテムID>` とするとパッケージをインストールできます。

`<アイテムID>` はリストアップコマンド `-l` で表示したリストの一番左の列にある 'ID' です。例えば 10.4 Patch 1 のアイテム ID は '10.4Patch1-10' となります。

```
C:\Program Files (x86)\Embarcadero\Studio\21.0\bin>getitcmd  -f=all -l=patch
GetIt Package Manager - Version 7.0
Copyright (c) 2020 Embarcadero Technologies, Inc. All Rights Reserved.

Id                                                 Version         Description
--                                                 -------         -----------
10.4Patch1-10                                      1               RAD Studio 10.4 Patch 1 adds som...

Command finished with success!
```
これをインストールするには `getitcmd -i=10.4Patch1-10` とします。

 




### ■ 機能インストール

`-if` で機能をインストールする事ができます。次の機能ID が指定できます。機能ID はセミコロンで区切って複数指定する事ができます。

`delphi, delphi_windows, delphi_macos, delphi_linux, delphi_ios, delphi_android, cbuilder, cbuilder_windows, cbuilder_ios, cbuilder_android, samples, help, teechart, dunit, interbase_express, interbase_2020, openjdk, android_sdk.`

例えばヘルプとサンプルをインストールするには `getitcmd -if=samples;help` とします。

```
C:\Program Files (x86)\Embarcadero\Studio\21.0\bin>getitcmd -if=samples;help
GetIt Package Manager - Version 7.0
Copyright (c) 2020 Embarcadero Technologies, Inc. All Rights Reserved.


Command finished with success!
```

ただ、インストールされている機能の一覧を表示する方法や、アンインストールの方法がないため、普通に機能マネージャを使った方がいいと思います。

### ■ オンライン/オフラインの切り替え

GetIt のモードはインストールしたメディアによって初期状態が異なります。

RAD Studio (Delphi / C++Builder) を Web (ESD) インストーラでインストールした場合にはオンラインモード、ISO (オフライン) インストーラでインストールした場合にはオフラインモードになっています。

ISO (オフライン) インストーラでインストールした場合、オンラインモードへ切り替えないと GetIt を使えません。オンラインモードにするには次のコマンドを実行します。

```
GetItCmd.exe -c=useonline
```

オフラインモードにするには次のコマンドを実行します。

```
GetItCmd.exe -c=useoffline
```


**See also:**

 - [Q5: ISO からインストールすると GetIt に接続できないんだけど？ (Qiita)](https://qiita.com/ht_deko/items/cd0101150b8b78bf6f71#q5-iso-%E3%81%8B%E3%82%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E3%81%A8-getit-%E3%81%AB%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%82%93%E3%81%A0%E3%81%91%E3%81%A9)


### ヘルプ

`-ｈ` でコマンド一覧が見れます。以下は簡単な日本語訳です。

```
  -i=<itemid> または --install=<itemid>
        パッケージをインストールします。アイテム ID は ";" で区切って複数指定できます。

  -if<featureid> または --install_features=<featureid>
        インストール機能は ";" で区切られています。利用可能な機能 ID は次の通りです:
        delphi, delphi_windows, delphi_macos, delphi_linux, delphi_ios
        delphi_android, cbuilder, cbuilder_windows, cbuilder_ios, cbuilder_android
        samples, help, teechart, dunit, interbase_express
        interbase_2020, openjdk, android_sdk.

  -id または --installdeferred
        遅延されたパッケージをインストールします。

  -u=<itemid> または --uninstall=<itemid>
       パッケージをアンインストールします。アイテム ID は ";" で区切って複数指定できます。

  -d=<fileurl> または --download=<fileurl>
        ファイルをダウンロードします。

  -l=<searchby> または --list=<searchby>
        利用可能なアイテムをすべてリストアップします。

  -s=[name/vedor/date] または --sort=[name/vedor/date]
        list コマンドの sort パラメータを指定します。デフォルトは "name "です。

  -f=[all/installed] または --filter=[all/installed]
        リスト コマンドのフィルタ パラメータを指定します。デフォルトは "installed "です。

  -ra=<apppath> または --runapp=<apppath>
        終了前にアプリケーションを実行します。

  -c=[useonline/useoffline] または --config=[useonline/useoffline]。
        GetIt システムを設定します。

  -un=<ユーザ名>または--username=<ユーザ名>
        認証が必要なプロキシのユーザー名。

  -p=<password> または --password=<password>
        認証が必要なプロキシのパスワード。

  -v=[quiet/minimal/normal/detailed] または --verb=[quiet/minimal/normal/detailed]
        コンソール出力メッセージの冗長レベルを指定します。

  -ae または --accepteulas。
        ダウンロードしたパッケージの EULA を承諾します。

  -dnsef または --donotsetenvfile。
        環境変数を設定しません。

  -h または --help。
        利用可能なコマンドをすべて印刷します。
```

# おわりに

10.4 RTM 時点では、パッケージをインストールしようとすると**関係のないパッケージをアンインストールし始める**というバグがありまして...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ad2a59c8-6f31-8dd2-2bf5-0a0d07988288.png)

 - [GetitCmd.exe のバグに関するツイート (Twitter)](https://twitter.com/ht_deko/status/1266671988749111296)

そのため、この記事をお蔵入りにしていたのですが、**10.4.1 (10.4 Update 1) でバグが取れた**ようなので改めて公開する事にしました。

**See also:**

 - [10.4 Sydney - Release 1 (DocWiki)](http://docwiki.embarcadero.com/RADStudio/Sydney/ja/10.4_Sydney_-_Release_1)