Windows 10 Anniversary UpdateからサポートしたWSL(Windows Subsystem for Linux)。その結果としてWindows 10上でもBUW(Bash on Ubuntu on Windows)が動作し、各種Linuxコマンドが利用可能になった。本連載ではWSLに関する情報や、Bashから実行するシェルスクリプトを紹介する。

Microsoft Office 2016の最新バージョンを確認する

Microsoftのサブスクリプションサービスである「Office 365」に含まれる最新バージョンのOffice(=Office 2016)は、毎月更新する「期限内チャネル」と4カ月ごとに更新する「延期チャネル」の2チャネルが存在する。この他にもOffice Insiderプログラムも用意されているが、Office 365サブスクライバーは必然的にいずれかを選択しなければならない。

Office 365管理センターで選択できる配信チャネル

どちらのチャネルにメリットがあるかは、利用者の使用スタイルによって異なるため言及は避けたいものの、困るのは気付かぬうちに更新プログラムが適用されてしまう点だ。アカウントページから能動的に更新プログラムの適用を実行できるものの、Microsoftは「更新日は変更される可能性がある」との理由で正確な日付を公表していない。また、月に複数回更新されることもあるという。

Office 2016はアカウントページから更新プログラムを適用できる

そのため我々利用者は公式サイトの情報を元に最新版のOfficeに関する情報を収集しなければならない。だが、同サイトはRSSフィードなどを用意していないため、更新状況を把握することは難しいだろう。一昔前に流行(はや)ったWeb更新チェッカーなどのツールも動的なWebページの増加で死屍(しし)累々という状態だ。

そこで考えたのが公式サイトからバージョン情報を取得するという方法。cURLコマンドなどを使って必要な情報を抽出すれば、良いはずである。いつもどおり任意のテキストエディターに以下の内容を入力し、必要に応じて出力先のパスなどを変更してから、chmodコマンドなどで実行権限を与えて動作を確認してほしい。

 #!/bin/bash

 URL='https://support.office.com/ja-jp/article/Office-365-%e3%81%ae%e6%96%b0%e6%a9%9f%e8%83%bd-95c8d81d-08ba-42c1-914f-bca4603e1426?ui=ja-JP&rs=ja-JP&ad=JP'
 IFS_Backup=$IFS
 IFS=$'\n'
 TmpFile=$(mktemp)

 curl -s $URL -o $TmpFile
 for Obj in `cat $TmpFile | grep \
    -e 'デスクトップ向け最新の更新プログラム' \
    -e '向けの最新更新プログラム' -A 2 | \
    perl -pe 's/<[^>]*>//g; s/--//g; s/^[ ]*//g; s/\r\n//m'`; do

    case ${Obj} in
        Windows\ デスクトップ* )
            Win=$(echo $Obj | cut -d " " -f 3-5) ;;
        Mac* )
            Mac=$(echo $Obj | cut -d " " -f 4-5) ;;
        iOS* )
            iOS=$(echo $Obj | cut -d " " -f 4) ;;
        Android* )
            Android=$(echo $Obj | cut -d " " -f 4) ;;
        Windows\ Mobile* )
            WM=$(echo $Obj | cut -d " " -f 5) ;;
    esac
 done

 echo "Windows版はバージョン" $Win "です。"
 echo "Mac版はバージョン" $Mac "です。"
 echo "iOS版はバージョン" $iOS "です。"
 echo "Android版はバージョン" $Android  "です。"
 echo "Windows Mobile版はバージョン" $WM  "です。"

 rm $TmpFile
 IFS=$IFS_Backup

本シェルスクリプトを実行すると、日本語版の公式サイトからHTMLファイルを取得し、各OSのバージョン情報を抽出して標準出力に書き出す。

シェルスクリプトを実行した状態。各OSのバージョン(ビルド番号)などが表示される

それではシェルスクリプトの内容を解説しよう。まずは9行目で指定したURLからHTMLファイルをダウンロードする。今回は配列化するまでもないため、単純にダウンロードする仕組みを用いた。次に10~13行のfor文で事前にgrepを使ってOS名を元に必要な行を抽出し、「-A 2」はパターンにマッチした行の後に続く2行まで表示するというもの。さらに取得した内容はPerlで不用なタグや文字列を削除し、改行コードも削除して1行にまとめている。

15~27行のcase文は各OS名にマッチした部分で分岐させ、変数Objに格納された文字列から不要な部分をcutコマンドで削除している。セパレート文字を空白としているため、HTML側の内容が変化した場合は修正が必要になると思われるが、執筆時点ではひとまずこの指定で成功した。後は各変数に代入した結果を29~33行で出力して終了する。

極めてシンプルなシェルスクリプトだが、先に紹介した日本語ページは若干の翻訳遅延が発生し、英語版の公式サイトと比べると情報が古くなってしまう。この点は筆者も気になるところだが、次回以降の課題として目をつぶることにした。

阿久津良和(Cactus)