Window10でLAMP (Fall Creators Update版)

# この記事は
プログラムを学んでいるひと向けに、自宅で手軽にサーバーサイドのプログラムを試してみるための環境として、Windows10でLAMPしてみる、という記事です。
昨年(2016年)に"**Anniversary Update**"の時に自分用に書いておいたメモの内容を"**Fall Creators Update**"に合わせて書き換えました。

# **Windows Subsystem for Linux** を有効にする
まず"**Windowsの機能**"というウィンドウを開きます。
1. **スタートメニュー**の**歯車アイコン**をクリックして設定を開く
![setIcon.png](https://qiita-image-store.s3.amazonaws.com/0/53460/334f9e2b-12b2-24ad-099e-2541be24ccb3.png)
2. **アプリ**をクリック
![appIcon.png](https://qiita-image-store.s3.amazonaws.com/0/53460/9c7c1761-45a7-fafe-5439-e31a67d42c9c.png)
3. 左側の**アプリと機能**をクリック（既に選ばれている筈ですが念のため）
![akicon.png](https://qiita-image-store.s3.amazonaws.com/0/53460/17affb40-a9a8-1084-c924-73300ab94974.png)
4. 設定ウィンドウの幅により、広ければ右サイド、狭ければスクロールした下の方に「関連設定」**プログラムと機能**という項目があるのでクリック。**プログラムと機能**というウィンドウが開きます
![pkicon.png](https://qiita-image-store.s3.amazonaws.com/0/53460/ec350c35-037f-db7c-8367-d0a8f67d45fe.png)
5. 左側に**Windowsの機能の有効化または無効化**という項目があるのでクリック。**Windowsの機能**というウィンドウが開きます。
![wku.png](https://qiita-image-store.s3.amazonaws.com/0/53460/86eacf1b-89c6-9ca2-48f6-7952b32ca954.png)

または
1. **スタートメニュー**から**Windows システム ツール**の項目の中の**コントロール パネル**を選ぶ。**コントロール パネル**が開きます。
![menu0.png](https://qiita-image-store.s3.amazonaws.com/0/53460/7001e381-6a17-fc28-b248-8558aa32e380.png)
2. **プログラム**という項目にある**プログラムのアンインストール**をクリック。**プログラムと機能**というウィンドウが開きます。
![uninst.png](https://qiita-image-store.s3.amazonaws.com/0/53460/5fc22d15-cc26-ef1a-dd94-27914aa3ad32.png)
3. 上記5番に同じ

* **コントロール パネル**は**コルタナ**さんに**con**と入力して探してもらうという手もあります。

**Windowsの機能**に無事たどり着いたら、スクロールしていって**Windows Subsystem for Linux**という項目を探してください。ここにチェックを入れてOKします。この機能は**再起動後に有効**になります。再起動を促すダイアログが出てくるので再起動してください。
![kinou2.png](https://qiita-image-store.s3.amazonaws.com/0/53460/350331c0-2d7e-6adf-20e9-65feb640d326.png)

* もしここがWindows Subsystem for Linux (BETA)となっていたら、まだFall Creators Updateが適用されていませんのでWindowsをアップデートしてください。
* BETA版ではなくなったので、以前のように「開発者モード」にする必要はなくなりました。


# **Ubuntu**をインストールする

**Windows Subsystem for Linux**（以下**WSL**）ではストアから複数のディストリビューションがインストールできますが、ここでは**Ubuntu**を選びます。（2017年10月現在では他に"**openSUSE**"、"**SUSE Linux Enterprise Server**"が選べます）

**ストア**を起動して**ubuntu**で検索してください。
見つけたらインストールします。
![store0.png](https://qiita-image-store.s3.amazonaws.com/0/53460/59a5b8bc-0255-a94e-cbc9-9d71f4929dd5.png)

**スタートメニュー**から**Ubuntu**を選んで起動します。初回起動時にインストールが始まり、しばらく時間がかかります。インストールが完了すると最後に、**ユーザーネーム**と**パスワード**の入力がありますが、これはWindowsのアカウントとは全然関係はありませんので自由に決めてください。パスワードは確認のため２回入力することになります。パスワードは今後何度も入力することになるので絶対忘れないでください。
![ubuntu-inst.png](https://qiita-image-store.s3.amazonaws.com/0/53460/2a817372-7932-6c68-ce3f-8d43cf3c5eac.png)

インストールが終了すると画面に**プロンプト**が出て入力待ち状態になります。
プロンプトはデフォルト状態では
**ユーザー名@ホスト名:カレントディレクトリ$**
となっています。ホスト名は**Windowsの設定**＞**システム**＞**バージョン情報**で確認できる"**デバイス名**"が設定されています。
起動時のカレントディレクトリは"**~**"と表示されていますが、これはユーザーの**ホームディレクトリ**で、実際には`/home/ユーザー名`です。
以下、ここにキーボードからコマンドを打ち込んでプログラム／パッケージのインストールや設定をしていきます。
まずはインストールに使う**apt-get**を最新にしておきます。apt-getコマンドを使用するには管理者権限が必要になりますのでコマンドの前に**sudo**をつけて実行します。

```bash
sudo apt-get update
```

と打ち込んで**Enter**を押すとパスワードの入力が求められるので上で設定したパスワードを入れてください。（一度パスワードを入れてから数分間はsudoコマンドのあとパスワード入力を省略してくれます）
ちなみにこの**update**でaptライブラリが最新版に更新されます。
続いて、インストール済みパッケージを最新バージョンにアップデートします。

```bash
sudo apt-get upgrade
```

アップグレードするパッケージがあった場合、「これこれの容量のディスクスペースを消費するがインストールしてよいか？」というようなことを訊かれますので**y**を入力してください。いちいちyを入力するのが面倒な場合は

```bash
sudo apt-get upgrade -y
```

と、**-y**を付け加えておくとこちらの返事を訊かずに先に進みます。
アップグレードした結果不要になったパッケージがある場合はそのように表示がされますので、不要パッケージを削除しておきます。

```bash
sudo apt-get autoremove
```

これらの作業（apt-get update/upgrade）は定期的に行ってください。

----

※**Fall Creators Update**以前に既に**Ubuntu**を導入済みのひとへ
**コマンド プロンプト**や**PowerShell**から**bash**と打ち込んでインストールした"**Bash on Ubuntu on Windows**"は、今回インストールした"**Ubuntu**"とは別インスタンスになります。前者は将来的には廃止方向ということなので適宜新環境に移行しましょう。

参考：
[What's new in WSL in Windows 10 Fall Creators Update - MSDN Blogs](https://blogs.msdn.microsoft.com/commandline/2017/10/11/whats-new-in-wsl-in-windows-10-fall-creators-update/)

----

# **Apache**をインストールする
**LAMP**の**L(Linux)**の導入が終わりましたので次に**A(Apache)**をインストールします。

```bash
sudo apt-get install apache2
```

以下、インストール時には「これこれの容量のディスクスペースを消費するがインストールしてよいか？」というようなことを毎度訊かれますので**y**を入力してください。いちいちyを入力するのが面倒な場合は`upgrade`の時と同じようにコマンドに`-y`をつけておくと質問を省略できます。
インストールが終了したら、動作確認をしてみましょう。
**Apache**はWebサーバーなので、まずサービスを立ち上げます。

```bash
sudo service apache2 start
```

無事起動すると

```
Starting Apache httpd web server apache2
```

と表示されます。その下に

```
AH00076: Failed to enable APR_TCP_DEFER_ACCEPT
```

と警告が出ますが今は無視しておきます。**Apache**が起動したら、普段使っているWebブラウザを立ち上げてください。（Edge/IE/Chrome/FireFoxなど）
アドレスバーに`localhost`と入力してエンターを押してみてください。
![apache.png](https://qiita-image-store.s3.amazonaws.com/0/53460/891e5d95-edc0-1be5-e2ec-aa5bbae8ed33.png)
無事に**Apache2 Ubuntu Default Page**が表示されれば成功です。
（表示されるファイルは`/var/www/html/index.html`です。）

なお、サービスの停止は

```bash
sudo service apache2 stop
```

再起動は

```bash
sudo service apache2 restart
```

です。

※まっさらな状態のWindowsの場合はたいてい大丈夫だと思いますが、一部のサービスがhttpのポートである80番を既に使用している場合、**Apache**が起動に失敗します。
先ずは上で"**WSL**"を有効にした時と同じように"**Windowsの機能**"を開いて"**インターネット インフォメーション サービス**"にチェックが入っていないことを確認してください。もしチェックが入っていた場合はチェックを外してOKを押し、もう一度**Apache**を起動してみてください。

# **MySQL**をインストールする
次は**LAMP**の**M**、**MySQL**をインストールします。

```bash
sudo apt-get install mysql-server
```

インストールの途中で、**root**ユーザーのパスワードを決めるように言われます。
![mysqlinst.png](https://qiita-image-store.s3.amazonaws.com/0/53460/af8cd93b-0fd4-763b-d4d4-de1aadb0a0a9.png)
ここも自由にパスワードを決めてかまいません。ただし忘れないでください。

インストールが終了したら、こちらも動作確認をしてみましょう。
**MySQL**はデータベースサーバーなので、**Apache**と同じようにまずサービスを立ち上げます。

```bash
sudo service mysql start
```

`Starting MySQL database server mysqld`と表示され**MySQL**が起動します。
以下のコマンドを打ち込んでMySQLサーバーに接続してみましょう。

```bash
mysql -u root -p
```

パスワードの入力を求められますので、MySQLのインストール時に決めたパスワードを入れてください。無事接続できると、プロンプトが

```mysql
mysql>
```

に変わります。ここにコマンドを打ち込むことでデータベースを操作できます。
とりあえず試しに現在のMySQLサーバーのバージョンを見てみましょう。

```mysql
show variables like 'version';
```

以下のような表示になると思います。
![mysqlver.png](https://qiita-image-store.s3.amazonaws.com/0/53460/15e85919-5107-aeb9-4867-0c34e9efde2f.png)

`version`を**シングルクォーテーション**で囲むことと、最後に**セミコロン**をつけることを忘れないでください。セミコロンを忘れた場合はMySQL側でコマンドが途中だと判断し、
`->`というプロンプトで続きの入力を促すのでセミコロンのみ入力すれば大丈夫です。
![mysqlcmd.png](https://qiita-image-store.s3.amazonaws.com/0/53460/69ac3a3a-ce52-261a-be76-609d952e3cec.png)

動作が確認できたら一旦接続を切ります。`quit`と入力すれば元のUbuntuに戻ります。

```mysql
quit
```

**MySQL**も**Apache**と同じように
`sudo service mysql stop`で停止、
`sudo service mysql restart`で再起動できます。

# **PHP**をインストールする
最後に**LAMP**の**P**ですが、
ここでは**PHP**をインストールします。
（**Perl**、**Python**についてはまたいずれ）
**PHP**本体の他に**MySQL**にアクセスするためのモジュールもインストールします。

```bash
sudo apt-get install php php-mysql
```

インストールが終わったらバージョンを確認してみましょう。

```bash
php -v
```

以下のように表示されます。

```
PHP 7.0.22-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.22-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies
```

さて、**Anniversary Update**の頃はこれだけで**Apache**上でも**PHP**が実行できるようになっていたのですが、現在はApache用のモジュールを別途インストールする必要があります。

```bash
sudo apt-get install libapache2-mod-php
```

インストールが終わったら**Apache**を再起動します。

```bash
sudo service apache2 restart
```

動作確認のためにテスト用のファイルを作ってブラウザで表示させてみましょう。
テキストエディタも好きなものをインストールして使ってもらえば良いのですが、
とりあえず初めから入っている**nano**というテキストエディタを使ってみます。

```bash
sudo nano /var/www/html/test.php
```

以下のように入力します。

```php:test.php
<?php
    phpinfo();
?>
```

入力できたら、**Ctrl**を押しながら**x**を押してください（**Exit**）。
変更を保存するか訊かれるので**y**と入力し、次に書き出すファイル名の入力画面になるのでそのまま**Enter**を押してください。

※**nano**の主なコマンドは画面下に表示されています。
"**^**"は、"コントロールキーを押しながら"ということで、
"**^G**"なら、**Ctrl**を押しながら**g**を押します。
"**M-**"は、"エスケープキーを押してから"ということで
"**M-/**"なら、**Esc**を押してから**/**を押します。

保存したファイルがちゃんとブラウザから見えるかどうか、アドレスバーに
`localhost/test.php`
と入力してみます。
![php.png](https://qiita-image-store.s3.amazonaws.com/0/53460/0318f9d5-6079-0d6b-533c-343e2b1acec3.png)
こんな感じの画面が見えれば成功です。

以上で**Windows10**上での**LAMP**環境の構築はひとまず終了です。

なお、**Apache**、**MySQL**ともに、**Ubuntu**のウィンドウを閉じるとサービスも終了してしまうので、基本的に一度開いたら閉じないようにしましょう。**Ubuntu**のウィンドウを複数開いていた場合は、どれか一つ残しておけばサービスは停止しません。

## おまけ：**phpmyadmin**のインストール
データベースをブラウザ上で管理する**phpmyadmin**をインストールします。

```bash
sudo apt-get install phpmyadmin
```

インストール中にどのwebサーバーを使うかの選択画面が出ます。
![pma-inst0.png](https://qiita-image-store.s3.amazonaws.com/0/53460/7b28a420-d3c3-5166-e99e-ea7b5b2f69f9.png)
**apache2**にカーソルを合わせて**スペースキー**を押すと「**＊**」マークがつきます。
そのまま**Enter**で確定します。
次に**phpmyadmin**の設定について訊かれます。
![pma-inst2.png](https://qiita-image-store.s3.amazonaws.com/0/53460/c49f425c-8a1c-0f27-1ab9-d8e772cdb1c2.png)
そのまま**Yes**を選んで**Enter**を押します。
最後にパスワードの設定があります。
![pma-inst3.png](https://qiita-image-store.s3.amazonaws.com/0/53460/f043edd6-9dda-204f-41a4-0d77cc84a396.png)
**phpmyadmin**用のパスワードを決めてください。

インストールが完了したらブラウザのアドレスバーに以下のように入力します。
`localhost/phpmyadmin`
**phpMyAdmin**のログイン画面が出ます。
![pma-login.png](https://qiita-image-store.s3.amazonaws.com/0/53460/5d3f7a8d-9594-2443-d62a-c1b0f773edbb.png)
ここでの**ユーザ名**と**パスワード**は**MySQL**のものです。
**ユーザ名**は**root**とし、**パスワード**には**MySQL**のインストール時に決めたパスワードを入れてください。
無事ログインできたら、画面左側上部のドアに矢印のアイコンをクリックしてログアウトします。
![pma-logout.png](https://qiita-image-store.s3.amazonaws.com/0/53460/1283cce2-9440-5779-26e1-841ae4cae32e.png)

以上でだいたい準備完了です。お疲れ様でした。