PowerShellでREAPER(DAW)を半自動アップデート【Windows向け】

2019年5月22日

前回の記事で、低価格ながらパワフルなDAWソフト「REAPER」についてご紹介しました。REAPERはすばらしいDAWソフトですが、本体のアップデートは自動で行われません。インストールされているよりも新しいバージョンが存在する場合、起動時にダイアログが表示され、公式HPのダウンロードページに遷移できます。この方法でもアップデートはできますが、毎回インストーラーをダウンロードしてから実行するのは面倒です。

そこで今回は、Windowsに標準搭載のスクリプト言語およびその開発環境であるPowerShellを使って、REAPERのアップデートを半分くらい自動化します。

今回の対象はあくまでもREAPERですが、ものによっては同じ方法で他のソフトもアップデートできます。

※PowerShellについてはここでは解説しません。すでにPowerShellに触れたことがある方向けの記事なので、ご注意ください。

用意するもの

PowerShellしか使わないのでなにもいりません。PowerShell ISEを開きましょう。

実装例

先に断っておきますが、自分用にパパっと10分くらいで組んでスクリプトなのであくまでもご参考まで。ご自身でもっといい実装をしてぜひ私にも教えてください(願望)
以下が実装例です。

# アセンブリの読み込み(エラー時の表示用)
Add-Type -Assembly System.Windows.Forms

# スクリプトファイルのパスを取得
$scriptPath = $MyInvocation.MyCommand.Path
# スクリプトファイルのディレクトリパスを取得
$scriptDirPath = Split-Path -Parent $scriptPath
# スクリプトファイルのディレクトリに移動
Set-Location $scriptDirPath
# exeファイルの保存フォルダを指定し、フォルダを作成する
$exeDLDirPath = $scriptDirPath + '\exe\'
New-Item -ItemType Directory $exeDLDirPath -Force
# すでにあるインストーラを削除
Remove-Item ($exeDLDirPath + '\reaper*x64-install.exe')

try {
    # 対象のWebページ全体を取得
    $response = Invoke-WebRequest https://www.reaper.fm/download.php    
}
catch {
    # 取得できなければエラー表示
    [System.Windows.Forms.MessageBox]::Show("Webサイトが取得できませんでした。", "エラーが発生しました")
}

# exeファイルのリンクを探す
$dlExepath = $response.Links | Where-Object href -Like "*x64-install.exe*"
# exeファイルのリンクを設定
$dlUrl = "https://www.reaper.fm/" + $dlExepath.href
try {
    # ファイル名を取得
    ## REAPERは以下の形式なので、files/5.x/を省くため、Substring(10)を指定
    ## files/5.x/reaper5978_x64-install.exe
    $fileName = $dlExepath.href.Substring(10)
}
catch {
    # 取得できなければエラー表示
    [System.Windows.Forms.MessageBox]::Show("ファイル名が取得できませんでした。", "エラーが発生しました")    
}

# ファイル名を含めた保存先指定
$fileFullPath = $exeDLDirPath + $fileName
try {
    # exeファイルをダウンロード
    Invoke-WebRequest -Uri $dlUrl -OutFile $fileFullPath    
}
catch {
    # 取得できなければエラー表示
    [System.Windows.Forms.MessageBox]::Show("ファイルがダウンロードできませんでした。", "エラーが発生しました")
}

# ダウンロードしたexeファイルを実行
Start-Process -FilePath $fileFullPath

かなり簡単じゃないですか?スクリプト言語なのでコンパイルもいらず、簡単なものならすぐ組めるのがいいですね。

実装例の動作

上記のスクリプトを保存したディレクトリにexeディレクトリを作り、exeファイルをダウンロード後に実行します。exeファイルディレクトリに過去にダウンロードしたインストーラがあった場合には、最新のインストーラーダウンロード前に削除し、最新版しか残しません。

またバージョンの比較等は行っていないので、最新版がインストールされている場合にも同じ動作です。 本当はこのあたりも考えて実装してもいいのですが、今のところ不便は感じていないのでこのままで。

もしも上記の比較まで行うように書き換えたり、完全に自動実行できるスクリプトを作ったりしたらまた記事を更新します。

最後まで読んでくださりありがとうございます。ぜひ別の記事も読んでいただけますと幸いです。