複数のバージョンのDelphi 10.xをインストールするときの覚書 10.3 Rio版

#問題
Delphi 10.3 Rioをインストールすると，10.2 Tokyoでコンポーネントの新規作成をしようとすると継承元コンポーネントの一覧が表示されなくなりました。

つまり，**メニュー** の **コンポーネント―コンポーネントの新規作成**で，プラットフォームを選択し，**次へ** ボタンをクリックして，継承元コンポーネントの選択をするダイアログで一覧が表示されないのです。
![Snap0002.png](https://qiita-image-store.s3.amazonaws.com/0/33902/4e912177-b726-aecf-b3e1-07395a862501.png)

なお，私の使っているOSはWindows10 Professionalです。

Twitterでつぶやいたところ，Owl's perspectiveさんから対策方法を教えていただきました。
問題は複数のバージョンのDelphiをインストールしていたことに起因していました。システム環境変数が長くなってしまっていたのです。さらに，複数のバージョンにまたがって同一名のサードパーティ製のコンポーネントをインストールしていたこともよくなかったようです。そこで以下の対策を行いました。
0. GetItからインストールしたパッケージをアンインストールする
1. システム環境変数PATH がDelphiのバージョンごとに用意した環境変数を参照するようにする
2. JCL/JVCLのパス情報
3. 複数のDelphiのバージョン用にパッケージファイルが用意されていない場合，バージョンごとにサフィックスを設定する

この記事では，今回は10 Seattleから10.3 Rioの4つのバージョンがインストールされている場合についてまとめます。

#対策0 GetItからのパッケージのインストールをやめる
GetItからのパッケージのインストールは便利なのですが，複数のバージョンのDelphiをインストールするときに，複数のバージョンにわたって名前が被らないように修正することができません。また，以前はGetItで提供されていたJCLとJVCLが提供されなくなったようで，Delphiのバージョンごとにインストール方法をかえなくてはならなくなりました。そこで，GetItからインストールしていたパッケージをGitHubからダウンロードして手作業でインストールし直すことにしました。その多くは複数バージョンにインストールすることを前提に設計されていますが，対応していないものは手を入れてインストールします。手の入れ方については，**対策3 コンポーネントにサフィックスをつける**で書きたいと思います。

#対策1 環境変数の見直しをする
システム環境変数の最大は2047文字で，それ以上の文字はOSの環境変数編集ダイアログから入力できないそうです。ユーザ環境変数と合わせて4097文字が最大になります。これを超えるとPATHが正しく参照されなくなり，今回のような問題が起きるようです。
参考： http://www.atmarkit.co.jp/ait/articles/1510/30/news041.html

Delphiのバージョンごとに環境変数を割り当ててPATHから参照させるようにします。
参照する環境変数名はDelphiの動作だけなら任意のものが使えるのですが，コマンドプロンプトからはPATHよりもアルファベット順で早いものしか置き換えてくれません。そこで，RAD Studioのバージョンごとに参照するディレクトリ一覧を記述する環境変数を作り，PATHにその環境変数を書くことにしました。以下の情報を参考に環境変数を決めました。

### Delphiのコンパイラバージョン
|製品名         |RAD Studioのバージョン  |パッケージバージョン|環境変数|
|:-------------|:---------------------:|:-----------------:|:---------------:|
|10   Seattle  |17.0|230|DS17|
|10.1 Berlin   |18.0|240|DS18|
|10.2 Tokyo    |19.0|250|DS19|
|10.3 Rio      |20.0|260|DS20|
参考： http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9_%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3

以下のように割り当てます。なお，記述するパスの順番ですが，32ビット用のパスと64ビット用のパスがありますが，必ず32ビット用のパスを先に記述します。そうでないとDelphiの起動時に「ibmonitor250.bplが見つかりません」エラーが出ました。

```
DS17=C:\Users\Public\Documents\Embarcadero\Studio\19.0\bin64;C:\Users\Public\Documents\Embarcadero\Studio\19.0\bin;C:\Program Files (x86)\Embarcadero\Studio\19.0\bin64;C:\Program Files (x86)\Embarcadero\Studio\19.0\bin;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl\Win64;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl

DS18=C:\Users\Public\Documents\Embarcadero\Studio\19.0\bin64;C:\Users\Public\Documents\Embarcadero\Studio\19.0\bin;C:\Program Files (x86)\Embarcadero\Studio\19.0\bin64;C:\Program Files (x86)\Embarcadero\Studio\19.0\bin;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl\Win64;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl

DS19=C:\Users\Public\Documents\Embarcadero\Studio\19.0\bin64;C:\Users\Public\Documents\Embarcadero\Studio\19.0\bin;C:\Program Files (x86)\Embarcadero\Studio\19.0\bin64;C:\Program Files (x86)\Embarcadero\Studio\19.0\bin;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl\Win64;C:\Users\Public\Documents\Embarcadero\Studio\19.0\Bpl

DS20=C:\Users\Public\Documents\Embarcadero\Studio\20.0\bin64;C:\Users\Public\Documents\Embarcadero\Studio\20.0\bin;C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl\Win64;C:\Users\Public\Documents\Embarcadero\Studio\20.0\Bpl;
```

その後，該当するディレクトリをPATHから取り除いて，上記の環境変数を以下のように書きます。

```
PATH=%DS20%;%DS19%;%DS18%;%DS17%;C:\Windows;C:\Windows\system32;…以下略
```
##RapidEEを利用してシステム環境変数を再割り当てする
これをOS付属の編集機能でやるのはとても大変です。そこで，Owl's perspectiveさんに環境変数を編集するツールとしてRapidEEを教えていただきましたので，それを使って環境変数を編集しました。

Rapid Environment Editor https://www.rapidee.com/ja/about
私のところではこのソフトは一発で起動せず，何度がリスタートしないと動きませんでしたが，問題なく編集できました。
また，日本語表示をサポートしていて，ツールバーにある言語を切り替えると日本語表示になります。
利用に際して注意することは以下の点です。
1. システム環境変数を編集するときには管理者モードで動作させる。メニューの**ファイルー管理者として実行**を選択すると管理者として利用できるようになります。
2. PATHを右クリックして**変数タイプを変更**をクリックすると，記述した環境変数が展開されます。もう一度クリックすると元に戻ります。
3. 編集が終わったら，ファイルメニューの**保存**をしてください。保存しないと編集結果が反映されません。

#対策2 JCL/JVCLのインストール時の注意点
JCLとJVCLはバッチファイルからインストールします。そのため，PATHの中に書かれた環境変数の補完が正しく動かないことがあるようです。どうも環境変数名はアルファベット順に置換がおこなわれるようでPATHよりも先にくる名前にしておかないと解決されません。
例えば，%BDS%だとBDSで定義された内容に置き換えられますが，%RSXX%だと，そのまま表示されます。PATHが置き換えられるかどうかは，コマンドプロンプトで

```
>PATH
```
と打つと確認できます。

##1.JCLのインストール
それぞれのバージョンのBPL Path や DCU Path の設定を確認します。GetItを使った後だともしかすると期待したのと違うものなっている可能性があります。
##2. JVCLのインストール
**Configuration**で，Win32のバージョンを選択し，**Add BPL Directory to PATH**にチェックを入れます。他は特に変更せずにインストールを行います。これはDelphiの開発オプションのライブラリ検索PATHにJVCLのソースが追加されるようです。
![Snap0004.png](https://qiita-image-store.s3.amazonaws.com/0/33902/32f04d93-ab9d-7f5c-b4e9-ed93bbdd935f.png)

#対策3 コンポーネントにサフィックスをつける
複数のDelphiのバージョンがあるパソコンにインストールされることを想定していないコンポーネントは，コンポーネントにLIBサフィックスをつけることで対応できます。以下の手順でLIBサフィックスを付けてコンポーネントをインストールます。
1. 既にインストールされている場合は，アンインストールする
2. BPLフォルダ内にある該当のコンポーネントの.bplファイルを削除する
3. コンポーネントのプロジェクトを読み込む
4. プロジェクトマネージャで該当するプロジェクトを右クリックし**オプション**を選択する
5. **説明**のライブラリ名のLIBサフィックスにDelphiのパッケージバージョンを追加する
![Snap0001.png](https://qiita-image-store.s3.amazonaws.com/0/33902/9bf70525-7b29-1d2a-9d45-85a19c503e7d.png)
するとBPLファイルの後ろにパッケージバージョンが追加されます。
6. **プロジェクト－すべてのプロジェクトをコンパイル**でコンパイルする。（DEBUGビルドでいいようです）
7. プロジェクトマネージャーで該当の.bplを右クリックして**インストール**を選択する

参考： https://owlsperspective.blogspot.com/2015/09/conflict-lockbox-35-from-getit-between-xe8-and-10seattle.html

#謝辞
私がtwitterでつぶやいたとき，Owl's perspective さんがいろいろと教えてくださいました。ありがとうございます。
https://twitter.com/p_kato/status/1074662823643381760
このおかげでまたDelphiについて学ぶことができました。