コマンドを使った BizRobo! インストール の自動化

## はじめに

みなさん `Design Studio` や `RoboServer`、 `Desktop Automation Service` などインストール／アンインストールする際、BizRobo! のインストーラー（`.msi`ファイル）を使って画面をポチポチやっていると思います。

面倒くさくないですか？

ほとんどの場合 標準インストール以外しないのに、なぜ毎回 GUI による画面操作を繰り返すのだろうか？と前々から思ってます。（無駄に画面に張り付く時間の創出:weary:）

自動化・効率化を提供している会社がそういう発想にならないのってかなりアレな感じもするので探索してみました。[^1]

## Windows の標準コマンドで簡単インストール

`msiexec` という Windows 付属の標準コマンドを使ってインストールを行います。
コマンド自体はバージョン関わらず Windows であれば利用できる反面、インストーラがこの機能に対応した `.msi` ファイルであることが前提であり、製品側の対応が必須とのこと。

:::note
現在提供しているものであれば、どのバージョンの BizRobo! でも実行可能と思いますが、本記事においては v11.3.0.2 を使って実施しています。
:::

https://e-words.jp/w/msiexec.html

使い方は以下のような感じ。詳しい説明は `msiexec /help` とコマンドを実行するとプロンプトに表示されます。

```powershell:msiexec /help
msiexec /Option <Required Parameter> [Optional Parameter]

インストール オプション
	</package | /i> <Product.msi>
		製品をインストールまたは構成します
	</uninstall | /x> <Product.msi | ProductCode>
		 製品をアンインストールします
表示オプション
	/quiet
		Quiet モード - ユーザーの操作なし
	/passive
		無人モード - 進行状況バーのみ
	/q[n|b|r|f]
		ユーザー インターフェイスのレベルを設定します
		n - なしUI
		b - 基本 UI
		r - 簡易 UI
		f - 完全 UI (既定)
再起動オプション
	各種（略）
ログ オプション
	/l[i|w|e|a|r|u|c|m|o|p|v|x|+|!|*] <LogFile>
	　各種（略）
	/log <LogFile>
		指定したときと同じ情報がログに記録されます /l* <LogFile>
更新オプション
	各種（略）
修復オプション
	各種（略）
```


## コマンドによるBizRobo!のインストール／アンインストール

### インストールの方法
`BizRobo_Basic-11.3.0.2_x64_JP.msi` をプログレスバー表示でインストールしてみます。

管理者モードでコマンドプロンプト（PowerShellでも可）を起動し、以下のコマンドを実行します。[^2]

```powershell:インストール
msiexec /passive /i BizRobo_Basic-11.3.0.2_x64_JP.msi /l msi_i_br_log.txt
```
> * /passive：無人モード - 進行状況バーのみ
> * /i：インストール
> * /l msi_i_br_log.txt：ログを msi_i_br_log.txt に出力

3分ぐらいかかります。思ったより時間かかる様子を動画で見てみてください。
<iframe width="560" height="400" src="https://www.youtube.com/embed/BJjkoTyCbb8?si=_9CJw6IJl5a9-cL9&amp;controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

インストールガイドには `/passiv` の代わりに `/qn` が表示オプションとして指定されていますが、`msiexec` 自体が非同期で実行されるようでコマンド実行直後にプロンプトへ入力が返ってきてしまうため、この方法だと全く実行後の様子が分かりません。[^3]

### アンインストールの方法

アンインストールの場合にはインストールオプションを `/x` に変更します。

```powershell:アンインストール
msiexec /passive /x BizRobo_Basic-11.3.0.2_x64_JP.msi /l msi_x_br_log.txt
```
> * /passive：無人モード - 進行状況バーのみ
> * /x：アンインストール
> * /l msi_x_br_log.txt：ログを msi_x_br_log.txt に出力

せっかくコマンドで実行しているのに、削除フォルダを選択する手順は画面から手動で実施しなければならないのがいまいちです。
<iframe width="560" height="400" src="https://www.youtube.com/embed/sw9-BJEZK5w?si=AvvZ3yR_6-V57VgK&amp;controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## まとめ

大した手間の違いはないかもしれませんが、コマンド経由で実行するメリットとしては
* 画面操作による間違いが起こらない。
* 処理中/作業中に異常が発生した場合でもログで漏れなく状況を確認できる。

ということがありますし、手順書自体の管理・保守も楽になります。

「コマンド実行じゃ何をやっているかわからないじゃないか！」という意見も時々いただきますが、画面経由で操作したとして、わかった気になっているだけということも多いですよね。

あくまでコマンド実行が問題なのではなく、それを実行する際のガイドが不十分なのだと思います。


[^1]: 探索というまでもなく普通にインストールガイドに記載があるのですが、ちょっと不便な方法が提示されているので、そのリファインも兼ねて。

[^2]: 管理者モードではなく一般モードでも実行できますが、その際には以下の様に「ユーザーアカウント制御」の確認ダイアログが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090491/436c62ed-e825-fbd6-6e13-02ae986e88e9.png)

[^3]: ただでされインストールには3分以上時間がかかったりするので、初めて行う際には「あれ？動いてる？」と不安になります。