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

UbuntuをopenSuSEに置き換える?

既報のとおりSUSEは、WSL上で動作するLinuxディストリビューションとして、Ubuntuの代わりにopenSUSEをインストールする方法を自社ブログで公開した。現在のBUW(Bash on Ubuntu on Windows)はUbuntuのイメージファイルを、Windowsストアからダウンロードして展開しているものの、WSLの完成度が高まれば高まるほど、各Linuxディストリビューションが正常に動作する「はず」である。

本連載でもWindows 10 Insider Previewの更新に合わせて、WSLの進捗状況を紹介してきたように、バグフィックスやシステムコールのサポート拡充を重ね、完成度は少しずつ改善してきた。今後のWindows 10で利用者が好みのLinuxディストリビューションを使えるか否かは、WSL開発チームの尽力というよりも、Microsoft Windows and Devices GroupがWSL開発にどれだけのリソースを割くのか、または、Microsoft経営陣の戦略がこのままOSS(オープンソースソフトウェア) Loveで突き進むのか、など複雑に絡み合った背景が影響を及ぼしている。

Linux Foundationへの参加を発表するMicrosoft EVP Cloud+EnterpriseのScott Guthrie氏(公式動画より抜粋)

いずれにせよ、2017年早期にリリースする可能性が高いWindows 10 Creators UpdateのWSLは発展途上。Windows 10でLinuxの可用性を享受するのであれば、Windowsコンテナーもしくは、Docker for Windowsを使ったコンテナーに軍配が上がる。だが、冒頭で述べたようにUbuntuをopenSUSEに置き換えるといった自由度の高さは実証済みだ。

そこで筆者も、Windows 10 Insider Preview ビルド15014で試してみた。openSUSEのコンテナーイメージファイルをダウンロードし、展開するまでは動作を確認したが、「lxrun」コマンドで既定ユーザーを再設定する時点でOSがハングアップ。単純にBashを起動するだけでもハングアップするため、展開したopenSUSEのイメージと意図どおりに連携しないからだろう。本件については、またタイミングを見てチャレンジし、読者諸氏へご報告したい。

ダウンロードしたopenSUSEのコンテナーイメージを展開中の様子。記事を投稿したHannes Kühnemund氏は「エラーは気にしなくてよい」と説明しているが、OSがハングアップする理由ではないだろうか

CSVデータとしてExcelで読み込む

さて、BUWは文字どおりWindows 10上で動作するため、デスクトップアプリの連携が1つの魅力となる。ここ数回の連載で取り上げたコマンド「du」の出力結果を可視化する場合も、普段からなじみ深いExcelを使った方が便利だろう。本来であれば、Excel側の自動化にもチャレンジしてみたかった。だが、筆者はVBAマクロに関して精通していないため、シェルスクリプト側で簡単な加工を施すことにした。

いつもどおり任意のテキストエディターで、下図に示したコードをコピー&ペーストした後に、パスなどをご自身の環境に合わせて変更し、chmodコマンドで実行モードを付与してから、シェルスクリプトを実行してほしい。

 #!/bin/bash

 TargetDir=/mnt/c/Windows/*
 TmpFile=/mnt/c/Users/kaz/Desktop/foo.csv

 echo -e 'Directory\tSize' > $TmpFile
 du -s $TargetDir 2>/dev/null | sort -n | tail -10 | awk '{ print $2 "\t" $1}' >> $TmpFile

前回のシェルスクリプトと異なるのは、awkコマンドを利用し、出力結果の行を入れ替えている。同スクリプトを実行すると、デスクトップに「foo.csv」ファイルが生成されるので、Excel起動後にCSVファイルのインポートを実行すればよい。

ここではExcel 2016を使用する。起動時のウィザードは「空白のブック」をクリックして選択する

<データ>タブ→<外部データの取り込み>ボタン→<テキストファイル>ボタンと順にクリックする

シェルスクリプトで生成した「foo.csv」を選択し、<開く>ボタンをクリックする

テキストファイルウィザードが起動したら、<先頭行をデータの見出しとして使用する>→<次へ>ボタンと順にクリックする

次のステップでは<タブ>にチェックが入っていることを確認してから、<次へ>ボタンをクリックする

データ形式はあえて変更する必要はないものの、「Directory」は<文字列>に変更してから<完了>ボタンをクリックする

最後に「データの取り込み」ダイアログが現れるので、そのまま<OK>ボタンをクリックする

インポートを終えたら取り込んだ内容を範囲選択し、任意のグラフを挿入する。下図は「おすすめグラフ」で推奨された「集合横棒」を利用しているが、このあたりはお好みのグラフをお選び頂きたい。

範囲選択してから<挿入>タブ→<おすすめグラフ>ボタンと順にクリックする

グラフ候補が現れるので、お好みのグラフを選択してから<OK>ボタンをクリックする

Excelのグラフとしてディスク占有率を可視化できた

必要であれば、CSVファイルに含まれる「/mnt/c/」などの文字列は、cutコマンドを使って「cut -c 6-」をパイプ処理に追加すれば、1~5文字目を削除して出力するため、見栄えもよくなるだろう。

阿久津良和(Cactus)