どんなツールか
modern.IEの仮想マシン (virtual machine, 以下VMと略) のダウンロードから起動までを自動で行うツールをGoで書いてみました。macのVirtualBox用です。
ソースは hnakamur/moderniedownloader にあります。
バイナリはReleases · hnakamur/moderniedownloaderにあります。
セットアップ
上記のバイナリのリンクからダウンロードして、以下のコマンドで実行パーミションをつけるだけです。
chmod +x moderniedownloader
使い方
使用可能なmodern.IE の種類の一覧を表示
$ ./moderniedownloader -L
IE6 - WinXP
IE8 - WinXP
IE7 - Vista
IE8 - Win7
IE9 - Win7
IE10 - Win7
IE11 - Win7
IE10 - Win8
IE11 - Win8.1
ダウンロードと起動
例えばIE11入りのWindows7のVMを起動したい場合は以下のようにします。
$ ./moderniedownloader "IE11 - Win7"
初回はVMの分割ファイルをダウンロード、ファイル結合、VM登録、VM起動を行うので時間がかかります。2回め以降は単に起動するだけなので早いです。
詳細な処理内容
- VMタイプと同名のVMが登録されていなかったら
- VMタイプと同名の*.ovaファイルが存在しなかったら
- VMの分割ファイル (.sfxと.rar)をダウンロードして結合し*.ovaファイルを作成します。(その後*.sfxと*.rarは削除します)
- .sfxと.rarは既に存在するファイルはスキップします。途中終了したりして不完全なファイルがある場合は、消してから再実行してください。
- VMの分割ファイル (.sfxと.rar)をダウンロードして結合し*.ovaファイルを作成します。(その後*.sfxと*.rarは削除します)
- *.ovaファイルをインポートしてVMを作成します。
- VMのDVDストレージにVirtualBox GuestAdditionsのDVDイメージをマウントします。
- "Snapshot 1"という名前でスナップショットを作成します。
- VMタイプと同名の*.ovaファイルが存在しなかったら
- VMを起動します。
- VMのクリップボード連携を双方向に設定します。
登録済みのVMの起動
例えばIE11入りのWindows7のVMを起動したい場合は以下のようにします。
$ ./moderniedownloader "IE11 - Win7"
つまり、ダウンロードして起動する場合と同じです。
登録済みのVMの一覧表示
$ ./moderniedownloader -l
IE11 - Win7
pecoで選択して起動
$ ./moderniedownloader "`./moderniedownloader -l | peco`"
Goで書いた経緯と感想
なぜGoで書きなおしたのか
バイナリ1つで配布できて便利なのと、Goの勉強を兼ねてという2つです。
modern.IEのOSX上のVirtualBox VMのダウンロードから起動までを自動化するスクリプト - Qiitaにも書きましたが、最初はbash scriptで実装し、その後Node.jsで実装しなおしました。でも、ヘッドレスブラウザでJavaScriptを解釈するのはページ内のJavaScriptエラーに弱いという欠点が見つかりました。
そこでHTMLファイル内のscriptタグからJSONの部分を正規表現で切り出して取得するようにしました。ただ、この方式ならNode.jsでなくても良いので、勉強を兼ねてGoで書きなおしてみたというわけです。
Goで書いてみた感想
Node.jsで書いた時はコールバックやPromiseを使って実装したのですが、やはりGoのほうが書きやすかったです。
分割ファイルをダウンロードする処理の並列化には、以下のページを参考にしました。ありがとうございます!