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サブスクライバーは必然的にいずれかを選択しなければならない。
どちらのチャネルにメリットがあるかは、利用者の使用スタイルによって異なるため言及は避けたいものの、困るのは気付かぬうちに更新プログラムが適用されてしまう点だ。アカウントページから能動的に更新プログラムの適用を実行できるものの、Microsoftは「更新日は変更される可能性がある」との理由で正確な日付を公表していない。また、月に複数回更新されることもあるという。
そのため我々利用者は公式サイトの情報を元に最新版の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のバージョン情報を抽出して標準出力に書き出す。
それではシェルスクリプトの内容を解説しよう。まずは9行目で指定したURLからHTMLファイルをダウンロードする。今回は配列化するまでもないため、単純にダウンロードする仕組みを用いた。次に10~13行のfor文で事前にgrepを使ってOS名を元に必要な行を抽出し、「-A 2」はパターンにマッチした行の後に続く2行まで表示するというもの。さらに取得した内容はPerlで不用なタグや文字列を削除し、改行コードも削除して1行にまとめている。
15~27行のcase文は各OS名にマッチした部分で分岐させ、変数Objに格納された文字列から不要な部分をcutコマンドで削除している。セパレート文字を空白としているため、HTML側の内容が変化した場合は修正が必要になると思われるが、執筆時点ではひとまずこの指定で成功した。後は各変数に代入した結果を29~33行で出力して終了する。
極めてシンプルなシェルスクリプトだが、先に紹介した日本語ページは若干の翻訳遅延が発生し、英語版の公式サイトと比べると情報が古くなってしまう。この点は筆者も気になるところだが、次回以降の課題として目をつぶることにした。
阿久津良和(Cactus)