magento2：開発環境構築（初級者編）

この記事は[Magento Advent Calendar](http://www.adventar.org/calendars/1372#list-2016-12-01)の11回目です。
コマンドラインを中心に、Magento2.1.2の開発環境構築手順をまとめました。
開発初心者の自分でも、コマンドに迷わない様に記したつもりです。

## 手順
・vagrantで仮想環境を構築
・composerを使ってmagentoのソースをダウンロード
・仮想環境でmagentoの動作確認


## 動作確認環境
```
$ sudo /var/www/html/bin/magento --version
Magento CLI version 2.1.2

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"

$ php -v
PHP 7.0.8-0ubuntu0.16.04.3 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.8-0ubuntu0.16.04.3, Copyright (c) 1999-2016, by Zend Technologies

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

$ apache2 -v
Server version: Apache/2.4.18 (Ubuntu)

```


## 導入手順

####仮想環境の作成


1.VirtualBoxをインストール
[https://www.virtualbox.org/] (https://www.virtualbox.org/)

```
$ VBoxManage -v
5.1.8r111374
```

2.Vagrantをインストール
[https://www.vagrantup.com/](https://www.vagrantup.com/)

```
$ vagrant -v 
Vagrant 1.8.7
```

3.使用boxを選択
[http://www.vagrantbox.es/]
(http://www.vagrantbox.es/)

今回はうまく日本語化できる様、ubuntuを使用しました。
Official Ubuntu 16.04 daily Cloud Image amd64 (Long Term Support release, No Guest Additions)という名前です。

```
 $ vagrant box add [option] {name}
 $ vagrant box list
 $ mkdir {任意のディレクトリ}
 $ cd {任意のディレクトリ}
 $ vagrant init {title}
````

使用したいボックスを追加
名前を確認（今回のbox名は"gbarbieru/xenial"でした）
作業ディレクトリの作成
移動
初期化
まで行うと、Vagrantfileというファイルができます。

4.Vagrantfileの編集

```
 $ vim Vagrantfile
```

該当箇所を検索し、コメントアウトを外します。
下記の様に書き換えます。

```shell-session:Vagrantfile
config.vm.box_check_update = false
```

（意図せずアップデートされ、環境が動かなくなる事をさけます）

```shell-session:Vagrantfile
config.vm.network "private_network", ip: "192.168.33.35"
```

（自分のローカルからのみ接続できる様にします。初期値は末尾10ですが、私の場合10をすでに別のマシンで使用しているため、35に変更しました。）

```shell-session:Vagrantfile
config.vm.provider "virtualbox" do |vb|
  vb.memory = "1024"
end
```

（magento2はメモリを沢山使用するので、上限をふやします）


5.起動

```
 $ vagrant up
```

気長に待ちます。。。:coffee:

6.接続

```
 $ vagrant ssh 
```

仮想環境が立ち上がったら、sshで接続します。


```
$ sudo apt-get update 
$ sudo apt-get install -y apache2 git snmp mysql-server php-bcmath php-curl php7.0-gd php-imagick php7.0-intl php7.0-xsl php-mbstring php7.0-mbstring php-gettext libapache2-mod-php7.0 mcrypt php7.0-mcrypt php7.0-xml php-soap php7.0-zip
```
必要モジュールをインストールします。
magento masterの西さんがMagento Advent calendar第一回の記事にて、日本語でまとめてくださっています！
[https://principle-works.jp/blog/magento2-setup-guide-2016-edition](https://principle-works.jp/blog/magento2-setup-guide-2016-edition)
※mysqlのパスワード記入を求められるので、任意で設定します。

```
 $ php -m
```

apt-getで入れたモジュールに足りないものがないか確認してください。


#### apache2の設定変更

```
 $sudo vim /etc/apache2/apache2.conf
```

下記の設定を追記 or コメントアウトを外します。

```control:apache2.conf
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
```

(デフォルトのwebrootディレクトリにmagentoが自動で上書きできる様にします)

```control:apache2.conf
Servername localhost
```

（サーバーはローカルホストを使うことをシステムに教えてあげます）


```
 $ cd /etc/apache2/mods-enabled/
 $ sudo a2enmod rewrite
```

上記で設定した上書きをしてくれるモジュール、「rewrite」 を有効化します。

```
 $ sudo vim /etc/apache2/envvars 
```

下記の様に書き換えます。

```control:envars
 export APACHE_RUN_USER=vagrant
 export APACHE_RUN_GROUP=vagrant
```

apacheの実行者のズレによってmagento側でエラーが発生するため、実行ユーザー・グループをwww-data→vagrantで統一します。

#### データベースの作成

```
 $ mysql -u root -p
mysql> create database magento character set utf8mb4;
mysql> exit;
```

vagrant up時に設定したパスワードを入力します。


####動作確認
```　
 $ sudo service apache2 start
```

apache2を起動し、ブラウザ上で"192.168.33.35"(Vagrantfileで設定したURL)を入力します。
/var/www/html/index.htmlの中身が表示されたらおっけーです:smiley:！

```
 $ sudo vim /var/www/html/index.php
```

```php:index.php
<?php echo "something" ?>
```

192.168.33.35/index.phpも確認し、
phpが動いていること（somethigの文字列表示）を確認します。

```
 $ sudo chmod -R /var/www/html/*
```

動かなかったら権限を変えます。

```
 $ sudo rm -rf /var/www/html/*
```

確認したらmagentoのソースダウンロード時にエラーが発生しない様、webrootのファイルを全て消去します。


#### composerのダウンロード/magento2のインストール

```
 $ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
 $ php -r "if (hash_file('SHA384', 'composer-setup.php') === 'aa96f26c2b67226a324c27919f1eb05f21c248b987e6195cad9690d5c1ff713d53020a02ac8c217dbf90a7eacc9d141d') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
 $ sudo php composer-setup.php
　　$ sudo php -r "unlink('composer-setup.php');"
 $ sudo mv composer.phar /usr/local/bin/composer
 $ sudo php composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition /var/www/html/ 
```

composerをインストールし、webroot(/var/www/html)にmagentoのソースをインストールします。
composerの最新版をインストールするcommandは変わります。随時下記リンクでcommandを確認してください。
[https://getcomposer.org/download/](https://getcomposer.org/download/)

ここでも気長に待ちます:coffee::coffee:~


####composerに関するエラーに遭遇したら

magentoのソースのインストールに失敗し、再度やり直す際は、

```
 $ sudo rm -rf /var/www/html/*
 $ sudo composer clear-cache
```

を行ない、途中までインストールされたファイルと、composerのキャッシュをクリアしてください。


インストールが終了したら、magentoのコマンドがファイルを上書きできる様に、権限をかたっぱしから変更します（笑）

```
 $ sudo chmod -R 777 /var/www/html/app/etc
 $ sudo chmod -R 777 /var/www/html/var
 $ sudo chmod -R 777 /var/www/html/pub/media
 $ sudo chmod -R 777 /var/www/html/pub/static
```

これでブラウザにmagentoの設定画面が表示されるはずです！
任意で設定してください。


##おわりに
開発環境構築にあたり、お世話になった皆様ありがとうございました。
権限設定など、もっといい方法があると思います。
ツッコミどころ、間違っているところなどございましたらご教示の程、よろしくお願いいたします。

また、別記事で『magento2：管理画面を日本語化する』をまとめようと思います！
[https://principle-works.jp/magento2-japaneselocale](https://principle-works.jp/magento2-japaneselocale)


##参考
[http://devdocs.magento.com/](http://devdocs.magento.com/)