[MAMP/XAMPPを使わず]HomebrewでローカルにPHP/Apache/MariaDB(mysql)の環境構築をする

# はじめに
![three_amigos.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403039/236381ab-f7c5-b715-fc64-36b5abfb9844.png)

## なぜこの記事を書いたか
Web開発してみたい！ => (入門書やドットインストールで)HTML/CSS/PHPの基礎終わった！ => さぁ作るぞ！

となった初学者にとっての次の壁になるのはWebサーバーやデータベース関連の環境構築だと思います。(私がそうでした)

確かにMAMPやXAMPPを使ったやり方やLinux OS(CentOSとかUbuntu)での環境構築については、わかりやすい日本語記事がゴロゴロネット上に落ちています。

けれども「まずはMacで気軽に環境構築したい」「(MAMPを使わず)出来れば今後の開発環境構築にも力になるような形で開発環境を作りたい！」というような要望を満たしてくれる記事のほとんどが英語で書かれたものです。

というわけで今回タイトルにもある通り

- **Macのローカル環境で**
- **Homebrew(パッケージ管理ソフト)を使って**
- **PHP/Aapche(webサーバー)/MariaDB(DBMS)の環境構築をする**

という3つを初学者がつまづかずに達成出来るようなガイド記事を書いてみました。

## 今回のゴール
- Homebrewをとりあえず導入して使ってみる
- MAMPやXAMPPを使わずにローカルのMacにApacheとMariadbを導入出来るようになる

結果的に…

- 楽チンにMacのローカル環境に環境構築して開発作業/勉強に集中できる!
- 後々Linux環境を使う時にも活きる知識が得られる
- terminalでの作業をすることでCLI(コマンドラインインターフェイス)の真っ黒い画面への免疫が獲得できる！

## OS/環境
MacOS 10.15.5 Catalina


# まずはHomebrewを導入しよう
Homebrewとは、Macでディファクトスタンダード(みんなが広く使っている事実上の標準)となっているパッケージマネージャーです。

各種のソフトウェアの導入と削除やソフトウェア同士やライブラリとの依存関係を色々といい感じにしてくれる(管理してくれる)頼もしいソフトなので入れましょう。

```
//Xcode(アップルのIDE)をインストール
$ xcode-select --install

//次にHomebrewをインストール
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

//Homebrewのバージョンを見てみましょう
$ brew -v

//brewの設定が上手く行っているか念のため,Warningが出た場合適宜指示通りにして直してみましょう
$ brew doctor
```
すでにhomebrewは入れてるよーと言う方は下のコマンドを実行してください。

```
$ brew update
$ brew upgrade
$ brew cleanup
```

## ※参考:さらにHomebrewについて詳しく知りたい方は…
- [新卒エンジニアの開発日記(個人ブログ)/【簡単】MacにHomebrewをインストールする方法と基本的な使い方](https://fukatsu.tech/homebrew)
<br>Homebrewの基本的な使い方について丁寧にまとまっています.まずはここから<br>
- [Qiita記事/homebrewとは何者か。仕組みについて調べてみた](https://qiita.com/omega999/items/6f65217b81ad3fffe7e6)
<br>パッケージ管理ソフトってそもそも何か.Homebrewが他のパッケージ管理ソフトとどう違うのか.についてまとめてくださっていて勉強のとっかかりになります.
- [公式ドキュメント](https://brew.sh/index_ja)
一番正確性が担保されています.慣れてきたらトライ！<br>

# Apacheを導入する
ApacehとはWebサーバーソフトウェア(HTTPサーバー)のことです。
よくわからない人は「クライアント(情報を要求する側)のブラウザがこの情報欲しいよって言ってきた時に、ブラウザがウェブページを表示するのに必要な情報を加工した上でクライアントに渡してくれるソフトウェアなんだな」、という認識で今は問題ないです。


##  Apacheの導入！...の前に
Apacheのインストールの前に先に下の二つをインストールしてください。

```
//OpenLDAPとlibiconvを導入しておく
$ brew install openldap libiconv
```

## Apacheをインストールする

```
//Macに最初から入っているapacheが動いているかもしれないので一応,シャットダウンとスクリプトを削除しておく
$ sudo apachectl stop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

//いよいよインストール！
$ brew install httpd

//上手く行ったかテスト
$ sudo brew services start httpd
```

もし上記が上手く行っていればテストのために打ったコマンドを押した後に
http://localhost:8080 にブラウザでアクセスした時に下記の画像のような画面になるはずです！
![スクリーンショット 2020-07-22 2.10.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403039/82f791be-5c0f-7bdc-21a1-4e6a63a90883.png)

## Apacheの各種設定
/usr/local/etc/httpd/httpd.confを下記のように編集しよう。

```
//編集前
Listen 8080
//編集後
Listen 80
```

これでポート番号8080を受け付けず標準の80のみ受け付けるように変えました。
今後は http://localhost:80 にアクセスしましょう。
(ポート番号なにそれ？という人はとりあえず80番という扉からのみwebサイトに訪問できるようにしたのだという認識で今はおkです。)

次にApacheが管理するコンテンツの場所をApacheに教えてやるためにDocumentRootを編集してやりましょう。
/usr/local/etc/httpd/httpd.confを開きます。

```
//編集前
DocumentRoot "/usr/local/var/www"
//編集後(ユーザー名の箇所は適宜自分のものに変えてください)
DocumentRoot /Users/ユーザー名/Desktop/Sites
```

ちなみに自分のユーザー名がわからない~~おっちょこちょいな~~方は下記コマンドをterminalに打つと確認できます。

```
//私はだれ...?って聞いてます
$ echo $(whoami)
```

DocumentRootの行の下にある<Directory>の記述も下記のように修正してください。

```
//<Directory>タグの中を下記のように
<Directory /Users/ユーザー名/Desktop/Sites>

//<Directory>ブロック内もこのように変更
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All

//mod_rewirte.soを探してコメントアウトを外してください
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
```

これで、

デスクトップ上のSitesディレクトリ = (Apacheがブラウザからのリクエストが来た時に返す)コンテンツを入れて置く場所

とWebサーバー(Apache)に認識して貰えます。

デスクトップに忘れずにSitesというディレクトリを作っておきましょう。

```
//Sitesというディレクトリをデスクトップに作ってやる
$ mkdir ~/Desktop/Sites
```

つぎにUserとGroupを設定します。

```
User ユーザー名
Group staff
```

サーバー名も変えておきましょう。

```
//編集前
#ServerName www.example.com:8080
//編集後
ServerName localhost
```


Apacheに変更を反映させましょう！

```
$ sudo apachectl -k restart
```

一応,Documentroot下にテスト用のファイルを置いてちゃんと動くか見てあげましょう。

```
//Desktop下にSitesというディレクトリを作る
$ mkdir ~/Desktop/Sites
//Sitesのディレクトリの下にqiita.htmlを作りそこに文言を書き込む.(直接開いて編集してもok!)
$ echo "<h1>ここがRoot直下のファイルや!</h1>" > ~/Desktop/Sites/qiita.html
```

これでブラウザのURLにhttp://localhost:80/qiita.html と入力してみましょう。(:80は省略可)

![スクリーンショット 2020-07-22 2.27.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403039/692c8281-bed3-07f3-79a9-2e5fad4225ab.png)

ちなみにindex.htmlと名前を変えてあげれば、 http://localhost のみでindex.htmlが開いてくれます。試してみましょう。


お疲れ様です！PHPの導入はあっさりと終わります！

# PHPを導入する
PHPといっても様々なバージョンがあります。
自分が必要なバージョンをインストールするようにしましょう。(個人開発とか勉強なら今なら普通にPHP7.4で良いかと！)

## PHPをインストールする
```
//brewで入れる前にプリインストールされているPHPのバージョンを確認,メモしておいてください。

$ php -v

//自分が必要なPHPのバージョンを入れる,特にこだわりないのなら最新のもので良いのでは
$ brew install php@5.6
$ brew install php@7.0
$ brew install php@7.1
$ brew install php@7.2
$ brew install php@7.3
$ brew install php@7.4
```

最後にちゃんとbrewで入れたPHPが動いているか(Macに最初から入ったものとは違うか)
確認しましょう。

```
//バージョン確認
$ php -v
//phpのコマンドはちゃんとbrewの管理しているところにある？
$ which brew
```
## インストールしたPHPが動くようにApacheを最終調整

ApacheにどのPHPを使うのか教えてやるために再度/usr/local/etc/httpd/httpd.confを編集しましょう。

```
//LoadModule rewrite_module lib/httpd/modules/mod_rewrite.soの下に追記
//インストールしたversionに合わせて#のコメントアウトを消す(今回はphp@7.4をインストールしたとする)

#LoadModule php5_module /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so
#LoadModule php7_module /usr/local/opt/php@7.0/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so
LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so
```

最後に同じ/usr/local/etc/httpd/httpd.confの中でPHPのディレクトリインデックスを設定！

```
//編集前
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

//編集後
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
```

せっかくPHPも導入したのでDocumentroot下で動くことを確認しましょう。

```
//Desktop下のSitesというディレクトリの下にindex.phpというファイルを作る
$ touch ~/Sites/index.php

//Sitesディレクトリを開いてindex.phpに下記のように記入してみる
<?php
echo "<h2>phpも動くぞ!</h2>";
```

これでlocalhostにアクセスしてみましょう.下記のようになるはずです。
![スクリーンショット 2020-07-22 2.34.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403039/a05393db-6609-c55a-ad39-265affe5bf4a.png)


# MariaDB(MySQL)を導入する
今回はMariaDBというDBMS(DataBase Management System)を導入していきます。

ちなみにデータベースというのは検索/管理といったことがやりやすいように一定のルールに従って蓄積されたデータの集合体のことです。

そしてDBMSというのはそのデータベースを管理するためのソフトウェアのことです。
MariaDB, MySQL, PostgreSQLなどが有名です。(今回はNoSQLとかの話はしません。私自身が詳しくないので涙)

MariaDBはMySQLから分岐して開発がされています。MySQLの将来的なアクセスと開発を保証することが目的で開発されているので互換性があり大きな違いがありません。

今回はHomebrewでインストールやアップデートが容易なMariaDBの方の導入を行っていきますが
上記にあるように扱いの違いが少ないので将来的にMySQLを使う時にも役立ちます！

## MariaDB(MySQL)をインストール,初期設定
まずMariaDBをインストールしましょう！
さらに今後自動で起動するように設定します.

```
$ brew install mariadb
// mariadbが今度から自動で起動するように設定(上手くいったら==>以下の文字が出ます！)
$ brew services start mariadb
==> Successfully started `mariadb` (label: homebrew.mxcl.mariadb)
```

引き続きMariaDBの初期設定を行います。
10回問答があるだけです。(**必ずやってね！**)

```
//下のコマンドを打つとNOTE以下のやりとりがでます!
$ sudo /usr/local/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
 
Enter current password for root (enter for none):--->(1)Enterを入力してください！
OK, successfully used password, moving on
 
Setting the root password or using the unix_socket ensures that nobody can log into the MariaDB root user without the proper authorisation.
Enable unix_socket authentication? [Y/n] --->(2)nと回答してください!(Noってことね)
 ... skipping.
 
You already have your root account protected, so you can safely answer --->(3) nと回答してください!
 
Change the root password? [Y/n] --->(4)yと回答してください!
New password: --->(5)MariaDBの管理者パスワードを設定してください！
Re-enter new password: --->(6)再度上記で設定したパスワードを入力してください！
Password updated successfully! 
 
By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them.  This is intended only for testing, and to make the installation go a bit smoother.  You should remove them before moving into a production environment.
 
Remove anonymous users? [Y/n] ---> (7)yと回答してください！
 ... Success!
 
Normally, root should only be allowed to connect from 'localhost'.  This ensures that someone cannot guess at the root password from the network.
 
Disallow root login remotely? [Y/n] --->(8)yと回答してください！
 ... Success!
 
By default, MariaDB comes with a database named 'test' that anyone can access.  This is also intended only for testing, and should be removed before moving into a production environment.
 
Remove test database and access to it? [Y/n] --->(9)yと回答してください！
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
 
Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
 
Reload privilege tables now? [Y/n] --->(10)yと回答してください！
 ... Success!
 
Cleaning up...
 
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
 
Thanks for using MariaDB!
```

これでMariaDBの導入完了です！
お疲れさまでした！

###今後,MariaDBの簡単な使い方の記事や生PHPを使った開発の記事も上げる予定なのでよろしくです！それではまた！<br>(改善点あればマサカリコメントお願いします！)
=>[MariaDBをターミナル上でクライアントツール(mycli)を使って気楽に触る記事](https://qiita.com/digitalhimiko/items/55f838771357e739c846)を書きました。

#この記事の参考にしたサイト
[Installing MariaDB Server on Mac OS X with Homebrew / MariaDB公式ドキュメント](https://mariadb.com/resources/blog/installing-mariadb-10-1-16-on-mac-os-x-with-homebrew/)
[macOS 10.15 Catalina Apache Setup: Multiple PHP Versions](https://getgrav.org/blog/macos-catalina-apache-multiple-php-versions)
[macOS 10/15 Catalina Apache Setup: MySQL, Xdebug & More...](https://getgrav.org/blog/macos-catalina-apache-mysql-vhost-apc)