バックナンバー

Windows 10 Insider Previewで加わったWSLの新機能

Microsoftは2016年10月7日(すべて現地時間)にWindows 10 Insider Preview ビルド14942、10月13日に同OSビルド14946をリリースしている。以前の連載記事でも述べたように本誌読者には推奨できないが、直近のWSL(Windows Subsystem for Linux)に関する更新情報を紹介しよう。

リリースノートによれば、OSビルド14942では、バグチェックアドレスにSSHブロック時のネットワーククラッシュで発生する「ATTEMPTED EXECUTE OF NOEXECUTE MEMORY」を取り込み、WSLからWindows 10のファイルシステムにアクセスするDrvFsでinotifiyをサポート。さらにpivot_rootシステムコールを実装している。

OSビルド14946では、空白や引用符を含むWindowsユーザー名の場合、WSLのユーザーアカウントを作成できなかった問題を修正。Linux側の主なファイルシステムとなるVolFSとDrvFs上のディレクトリリンクカウントで「0」を返すように仕様変更した。その他にもIPV6_MULTICAST_HOPSのサポート、TTYごとのシングルコンソールI/Oを制限し、「bash -c "echo data" | bash -c "ssh user@example.com 'cat > foo.txt'"」といったコマンドが使用可能になっている。

特にinotifiyのサポートは開発者にとって大きなポイントとなり、Microsoftも公式ブログで記事を公開した。例えば「tail -f foo.txt」とファイルに変更が加わった際に描画内容を更新するようなコマンドが正しく動作するとアピールしている。

「メモ帳」でテキストファイルの内容を更新すると、「tail -f」や「cat -wait」といったコマンドで描画する内容もリアルタイムで更新される(公式ブログより抜粋)

このようにWindows 10 Insider Previewと共に更新されるWSLの進捗状況を追いかけたい利用者は、GitHubのBashOnWindowsをウオッチリストに加えておくといいだろう。

文章をMarkdown記法に置換する

さて、BUW(Bash on Ubuntu on Windows)を使っている方なら、Markdown記法をご存じの方も多いことだろう。最近ではGitHubのREADMEなど各所で使われるようになり、対応する海外産テキストエディターも増えている。他方で我々日本人が文章を作成する場合、大見出しや小見出しなどを多用することが多い。その際に文章を「章・節・項」として区切る場合、テキストファイルなら記号、ワープロならフォントサイズなどを変更して切り分けることだろう。

本稿も納品時は記事タイトルに「■」、チャプターに「□」を使っているが、これはテキストエディターとして使用している「秀丸」のアウトライン機能を独自スタイルとしてカスタマイズしているためだ。このように独自スタイルは往々にして自分だけが分かりやすく、相手に伝わらないことが多い。そこでテキストファイルの内容をMarkdown記法で統一すれば分かりやすいのではないだろうか。

秀丸のオプション設定でアウトライン用ツリー表示の定義を行うことで、アウトライン表示や折りたたみなどが便利になる

筆者はURLリンクを記述する際、「[リンクのテキスト](リンクのアドレス)」とMarkdown記法を使っているため、この点は割愛するが、基本的にはsedやawkなどを使って既存の記号を、Markdownに合わせた記号に置き換えれば済む話だ。このような条件で作成したのが、下記に示したシェルスクリプトである。シェルスクリプトを作成したら、実行権限を与えてからお試し頂きたい。

 #!/bin/bash

 Cmdname="$0"

 if [ $# -ne 2 ]; then
    echo "Usage: ${Cmdname} InputFile OutputFile" 1>&2
    exit 1
 else
    cat $1 \
    | sed -e 's/^■/# /g' \
    | sed -e 's/^□/## /g' \
    | sed -e 's/^●/### /g' \
    | sed -e 's/^○/#### /g' \
    | sed -e 's/^・/##### /g' \
    | sed -e 's/^※/###### /g' >$2
 fi

ご覧のとおり今回のシェルスクリプトは9~16行目がポイント。catコマンドで1番目の引数(入力ファイル)を標準出力に出し、パイプでsedコマンドに与えている。10~16行目にあるsedコマンドの正規表現は行頭にある各行をMarkdown記法の「#(ハッシュ)」を見出しのレベルに応じて置き換えている。10行目は行頭に「#」がある場合、誤動作の原因となるため取り除くものだ。16行目で2番目の引数(出力ファイル)に文字置換結果を出力して、シェルスクリプトは終了する。

こちらがスクリプトの実行結果。今回サンプルで用意した「Before.txt」と出力結果である「After.txt」の各行頭を見比べると分かりやすい

極めてシンプルなシェルスクリプトだが、自身の記述方法に合わせた文字やMarkdownの記号に置き換えることで、容易にカスタマイズできるだろう。そもそもMarkdown記法は"方言"が多いため、すべてを網羅するのは難しい。そのため、John Gruber氏のサイトからMarkdown 1.0.1をダウンロードし、自身が必要な変換ロジックを追記すると便利になるはずだ。

Markdownのプレビュー機能を備えるテキストエディター「Atom」で開いた状態。Markdownの内容が確認できる

阿久津良和(Cactus)