Windows 10 Anniversary Updateのローリングアウトが8月2日に始まった。10のユーザーであればほぼアップデート済みではないだろうか。いろいろ機能追加された中、今回はBash(バッシュ)に焦点を当ててご紹介したい。 基本的に開発者向けの機能ということもあり、開発者以外の方々にはつまらない、もしくは分かりにくい内容であり、また既にBashを試しているユーザーには既知の内容になることを予めご了承頂きたい。

筆者最近の開発環境 Windows 10 Anniversary UpdateのBashをご紹介する前に、筆者最近の開発環境の話を書いてみたい。実はこのBashの登場によって、今後大きく変わる可能性があるからだ。 昔はWin32やiOS/Androidアプリの開発を行なっていたが、最近はApache、PHP、Perl、MySQLなどを主に使った、つまり古典的なLAMP(Linux、Apache、MySQL、PHPの略)によるサイト系の開発が多くなっている。個人が扱える内容なので小規模だが、新規サイトの構築、古いサイトのリニューアル、企業の社内システム、開発元が居なくなり手の付けられなくなったシステムの解析/機能追加……などが主要どころだ。 これらの開発を行なう場合、新規以外、作動中のオリジナル環境をそのまま触るわけにも行かず、別途サーバーを構築し、その上で開発/デバッグ/テスト、そしてそれを終えてからリリースという手順になる。 この時、別途構築するサーバーは、大きく分けて2パターンに分かれ、１つは仮想マシン上にほぼ同じ環境を構築するケース。これはメールシステムやcron、シェルスクリプトなど、作動環境も密接に関係している場合だろうか。 もう１つはXAMPP(Windows上での簡易LAMP環境)的なものやOS Xを使うケース。これはApache+MySQL+PHP(+Perl)だけで完結し、環境依存しない場合となる。Windows上の疑似LAMP環境としてXAMPPより更にLinuxに近いCygwinやcoLinuxもあるが、これは(最新版は分からないが)初期版の印象がピンとこなかったこともあり、実務レベルでは使ったことがない。 手掛けるシステムは後者が多く、通常OS Xをそのままサーバーにして(ベースがUnixなので、Linux系と相性が良い上、専用のパッケージなども用意され環境が整っている)、Parallels DesktopでWindowsを作動させ、その上で開発することがほとんど。全てをOS X上で行なわないのは単に慣れの問題だ(笑)。一時、素のWindowsでXAMPPを動かしていたが、互換性などいろいろ問題もあり、今では使わなくなってしまった。 ただこれはOS Xありきなので、Windows単独で……とした場合、仮想PC上でLinuxを動かすか、XAMPP的なものを使うかの2択となり、メモリとストレージが少ないノートPCなどでは前者は不利。しかし後者だと互換性の問題が……と、悩ましい話となる。もちろんクラウドを使う手もあるが、今度はネットありきとなり、デモなどをしにくかったりする場合もある。 そんなところに登場したのが、Windows 10 Anniversary Updateで搭載したBashだ。当初は「Bash on Ubuntu on Windows」と言うネーミングから、PowerShell的にBashが動くだけかと思っていたが、実は“ほぼ”Ubuntuに近い≒「Ubuntu on Windows」である。

Bashだけでなく、Ubuntuで作動するコマンドやパッケージも利用可能 さてBashが起動して、psやtopなどありがちなコマンドを打ったところ普通に動く。以下、簡単なコマンドの結果だ。Ubuntu自体のバージョンは“14.04.5 LTS”となっている。 $ lsb_release -a

No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 14.04.5 LTS

Release: 14.04

Codename: trusty





$ bash --version

GNU bash, バージョン 4.3.11(1)-release (x86_64-pc-linux-gnu)

Copyright (C) 2013 Free Software Foundation, Inc.

ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降





This is free software; you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.





$ mount

rootfs on / type rootfs (rw,relatime)

sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)

proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)

devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204320k,mode=755)

none on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)

none on /run/shm type tmpfs (rw,nosuid,nodev,relatime)

none on /run/user type tmpfs

(rw,nosuid,nodev,noexec,relatime,size=102400k,mode=755)





$ ls -l /mnt/c

ls: /mnt/c/pagefile.sys にアクセスできません: 許可がありません

ls: /mnt/c/swapfile.sys にアクセスできません: 許可がありません

合計 448

drwxrwxrwx 2 root root 0 4月 30 2015 $Recycle.Bin

-r-xr-xr-x 1 root root 0 5月 30 2015 $WINRE_BACKUP_PARTITION.MARKER

d--------- 2 root root 0 7月 26 2015 6289ac6b947c143bc82026

-r-xr-xr-x 1 root root 1 10月 30 2015 BOOTNXT

drwxrwxrwx 2 root root 0 5月 14 2015 Data

drwxrwxrwx 2 root root 0 5月 23 2015 EFI

drwxrwxrwx 2 root root 0 8月 20 2015 OneDriveTemp

d--------- 2 root root 0 7月 16 20:47 PerfLogs

dr-xr-xr-x 2 root root 0 8月 1 19:13 Program Files

dr-xr-xr-x 2 root root 0 8月 1 19:13 Program Files (x86)

drwxrwxrwx 2 root root 0 8月 29 11:56 ProgramData

dr-xr-xr-x 2 root root 0 8月 1 19:20 Recovery

d--------- 2 root root 0 5月 29 07:17 System Volume Information

dr-xr-xr-x 2 root root 0 8月 1 19:13 Users

dr-xr-xr-x 2 root root 0 8月 29 11:52 Windows

-r-xr-xr-x 1 root root 393718 4月 25 2015 bootmgr

-????????? ? ? ? ? ? pagefile.sys

-????????? ? ? ? ? ? swapfile.sys

※Windowsのドライブには/mnt/cでアクセスできる





$ id

uid=1000(knishika) gid=1000(knishika) groups=1000(knishika),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)





$ df

Filesystem 1K-blocks Used Available Use% Mounted on

rootfs 49050620 21150480 27900140 44% /

tmpfs 49050620 21150480 27900140 44% /run

none 49050620 21150480 27900140 44% /run/lock

none 49050620 21150480 27900140 44% /run/shm

none 49050620 21150480 27900140 44% /run/user

sshを使って外部サーバーへの接続も問題なくでき、これなら長年愛用していたPuTTYも必要なくなりそうだ。 いろいろ操作してLinuxとして特に違和感なく、しかも仮想PCと違って速いので、ならばと、「sudo apt-get update」(aptライブラリインデックスを更新)を動かしたところ、更新が始まり、「sudo apt upgrade」でインストール済のパッケージが最新版にアップデートされた。つまりUbuntuのパッケージ管理ソフトが使える上、バイナリ互換ということになる。 とすれば、冒頭で書いた筆者が使うLAMP環境を構築できるだろうと、まず「sudo apt-get install apache2」でapacheをインストール、「sudo service apache2 start」でapacheを起動、Windows上のWebブラウザでURLにlocalhostを指定すると……Apacheの初期画面が表示された。 「これは!」と、続いてMySQLとPHPをインストール(「sudo apt-get install mysql-server」と「sudo apt-get install php5 php-pear php5-mysql」)。PHPの作動確認は/var/www/htmlにindex.php(中は<?php phpinfo(); ?>)を作り、Apacheをリスタート。Webブラウザでlocalhost/index.phpにアクセスすると、MySQL対応のPHPが作動していることが確認できた。 ここまで動けば最後の仕上げとして、phpMyAdminを「sudo apt-get install phpmyadmin」でインストール。Webブラウザでlocalhost/phpmyadminにアクセスすると、ログイン画面が表示された。ここにMySQLインストール時に設定したID/PWで管理画面へ入ることができた。 つまり、WindowsにおけるBashは、GUIなしのUbuntuと何ら変わらないのだ。1つだけ注意したいのは、Bashを閉じるとこれらのプロセスも終了するため、恒久的なサーバー用途には向いておらず、プログラミング/デバッグ中など一時的な用途に限られる。この辺りの事情もあって、「Bash on Ubuntu on Windows」となったのだろう。 量が多過ぎて全てのコマンドやパッケージは触れないが、少なくともLAMP環境は「Bash on Ubuntu on Windows」で作動することが確認できた。加えてaptによる管理ができるので、パッケージのアップデートなども容易。XAMPP以上で、OS Xに匹敵(?)する環境が、Windows 10だけで整うことになる。 ここによると、優先順位が高いものとして、 1.A Bash environment for developers to run standard GNU command line tools such as grep, sed, awk

2.Provide access to the local hard drives through /mnt

3.Symlink support within the WSL environment

4.Linux user support

5.Provide the ability to run apt / apt-get for updates and package testing

6.Provide basic functionality for some languages:

NodeJS / npm

Python

Perl

Git

7.Command line editors / tools

vi

emacs

ssh

が上がっているので、開発において必要なものは概ね動くと思って良さそうだ。 若干気になるのは、コンソール上の日本語表示が途中で切れたりすること。ただ、現状β版扱いなので、取り立てて騒ぐほどでもないだろう。