MAMP のインストールと初期設定

Mac で MAMP をダウンロードしてインストールする方法と初期設定や Apache の設定(バーチャルホスト)、httpd.conf の文法エラーをチェックする方法についての覚書です。

MAMPには MAMP(無料)と MAMP PRO(有料) がありますが、以下は無料版の MAMP についての説明です。

作成日:2020年2月10日

MAMP のダウンロード

以下のMAMP のダウンロードページからインストーラーをダウンロードします。

https://www.mamp.info/en/downloads/

古いバージョンの MAMP のダウンロードページ:Download MAMP & MAMP PRO Older versions

MAMP のインストール

ダウンロードしたパッケージ MAMP_MAMP_PRO_5.6.pkg を(ダブルクリックして)起動します。パッケージ名はバージョンにより異なります。

Chrome の場合は以下のように左下に表示されるパッケージをクリックすると起動します。

起動すると以下のような画面が表示されるので「続ける」をクリックします。

以下のような内容が表示されるので確認して「続ける」をクリックします。

大切な情報

このインストーラーは MAMP と MAMP PRO をアプリケーションディレクトリにインストールします。 MAMP フォルダを移動したり、名前を変更したりしないでください。

インストーラーが既存のインストールを検出した場合、/Applications/MAMP/htdocs および /Applications/MAMP/conf/ssl のデータを保持し、既存のデータベースを新しいインストールにコピーし、古いMAMPフォルダーの名前を変更します。

使用許諾契約が表示されるので確認し、「続ける」をクリックすると以下のような「同意」を求めらるのでインストールを続行するには「同意する」をクリックします。

以下のような画面が表示されます。MAMP PRO(有料版)をインストールしたくない場合は左下の「カスタマイズ」をクリックします。

以下のような画面が表示されます。デフォルトでは MAMP PRO にチェックが入っているので、インストールしない場合はチェックを外します。

「インストール」をクリックすると確認画面が表示されるので「パスワード」を入力して「ソフトウェアをインストール」をクリックします。

ソフトウェアのインストールが開始されます。

以下の画面が表示されたらインストールは完了です。「閉じる」をクリックします。

以下のウィンドウが表示されます。問題なくインストールできていれば、インストーラは特に必要ないので「ゴミ箱に入れる」をクリックします。

MAMP PRO のアンインストール

標準のインストールを実行すると MAMP PRO も自動的に一緒にインストールされます。そのまま残しておいても問題ないと思いますが、アンインストールするには Uninstaller を使用します。

Finder でアプリケーションから MAMP PRO を見つけて右クリックして「パッケージの内容を表示」を選択します。

Contents フォルダが表示されるのでダブルクリックして、表示される「MacOS」フォルダを更にダブルクリックします。

MAMP PRO Uninstaller.app をダブルクリックします。

以下の画面が表示されるので、内容を確認してアンインストールを続行するには「Uninstall」をクリックします。

このアンインストーラーは、MAMP PRO の使用中に作成または変更された MySQL データベースを含む、MAMP PRO インストールに関連するすべてのフォルダーとファイルを削除します。MySQL データベースがまだ必要な場合は、バックアップを作成するかエクスポートする必要があります。

アンインストーラーは /etc/hostsファイルとMAMP PROによって変更された全てのpostfixファイルを復元します。

MAMP フォルダーは削除されません。 このフォルダを削除する場合は、ゴミ箱にドラッグしてください。

確認画面が表示されるので「パスワード」を入力して「OK」をクリックすると MAMP PRO がアンインストールされます。

MacOS の Apache の確認

MacOS には Web サーバー Apache が標準で搭載されています。MAMP との競合を避けるため、標準で搭載されている Apache が停止していることを確認します。

「システム環境設定」 → 「共有」で「インターネット共有」にチェックが入ってなければ大丈夫です。

MAMP の初期設定

Finder の「アプリケーション」→「MAMP」フォルダから「MAMP」を起動します。

起動時に表示される広告が邪魔な場合は「Show this window when starting application」のチェックを外して閉じます。

「Start Servers」をクリックします。

規定のブラウザで MAMP の WebStart ページが表示されます。初期状態では Ports の設定がデフォルトの 8888 なので URL が「http://localhost:8888/MAMP/?language=English」になっています。

問題がなければ Apache Server と MySQL Server の右側が緑色になりサーバーが起動します。サーバーを停止するには Stop Server をクリックします。

上部メニューから「MAMP」→「Preferences」をクリックします。

General

General タブが開くので MAMP の起動時と終了時の動作を設定することができます。

各項目のチェックを必要に応じて変更して「OK」をクリックして設定を保存します。

When starting MAMP: 起動時の動作を設定

  • Start servers: サーバーを起動
  • Check for updates:アップデートを確認
  • Open WebStart page:WebStart ページをブラウザで表示

When quiting MAMP: 終了時の動作を設定

  • Stop servers: サーバーを停止

Ports

Ports タブを選択するとポートを設定することができます。MAMP のデフォルトは以下のようになっているので、一般的なポートの設定にするには「Set Web & MySQL Ports to 80 & 3306」をクリックします。

以下のように Apache と Nginx のポートが8888番から80番に、MySQL のポートが8889番から3306番に変わります。

この設定により、ローカル環境で MAMP の Apache にアクセスする URL が「http://localhost:8888/」 から「httt://localhost/」に変更されます。

PHP

PHP タブでは PHP のバージョンを設定(選択)することができます。

Web Server

PHP タブでは Web サーバー(Apache または Nginx の選択)と Document Root を設定することができます。

Document Root(Web ファイルの配置場所)を変更するには「Select」をクリックします。

MySQL

MySQL タブでは MySQL のバージョンを確認することができます。

以上で基本的な設定は完了です。

WebStart page

設定の General タブで「Open WebStart page」にチェックが入っている場合(デフォルト)、MAMP を起動すると WebStart page が開きます。

MAMP の画面の「Open WebStart page」をクリックしても WebStart page を開くことができます。

WebStart page からは phpinfo ページや phpMyAdmin へアクセスすることができます。また、MySQL の基本的な情報(User や Password)や接続する際のパラメータなども確認することができます。

設定ファイル

設定に使う主なファイルやその配置場所など。

php.ini

php.ini は /Applications/MAMP/bin/php/php*.*.*/conf/ に配置されています。「*.*.*」の部分は使用している PHP のバージョンで PHP タブで確認できます。

MAMP
└── bin
    └── php
        └── php*.*.*(例 php7.4.1)
            └── conf
                └── php.ini

httpd.conf

httpd.conf はApplications/MAMP/conf/apache/ に配置されています。

MAMP
└── conf
    └── apache
        └── httpd.conf

httpd.conf は Apache の動作を設定するメインのファイルです。このファイルに Apache への命令「ディレクティブ」を記述します(コメントアウトされているディレクティブのコメントアウトを外して有効にします)。

また、全てのディレクティブを httpd.conf に記述してしまうと煩雑になるため、extra ディレクトリや other ディレクトリに機能ごとに個々の設定ファイルを用意して httpd.conf では必要に応じて Include ディレクティブ を使ってそれらのファイルを読み込むようになっています(バーチャルホストの設定など)。

httpd.conf や httpd.conf の読み込んでいるファイルを変更した場合は、その変更を反映させるには Apache を再起動させる必要があります。また、記述に誤りがあると Apache が起動しないので再起動の前に configtest などで誤りがないかを確認します。

httpd-vhosts.conf

httpd-vhosts.conf はApplications/MAMP/conf/apache/extra/ に配置されています。

MAMP
└── conf
    └── apache
        └── extra
            └── httpd-vhosts.conf

PHP エラーの表示

MAMP の場合、デフォルトでは PHP のエラーを表示(出力)しないようになってます。

ローカル環境(開発環境)の場合は、エラーがチェックできるようになっている方が良いのでエラーを表示するようにしておくと良いと思います。

※ 逆に本番(プロダクション)環境では、エラーが表示されてしまうとファイルのパスなどが表示されてしまい、セキュリティ上問題があるのでエラーを表示しないように設定し、ログに出力するようにするのが一般的です。

全ての php ファイルに適用するには php.ini を編集するのが簡単です。

php.ini の display_errors という「エラーをHTML出力の一部として画面に出力するかどうか」を定義する項目で設定することができます。以下のようにデフォルトでは Off になっています。設定項目の上にはコメントアウトされた説明書きがあります。

MAMP の php7.4.1 の php.ini
; This directive controls whether or not and where PHP will output errors,
; notices and warnings too. Error output is very useful during development, but
; it could be very dangerous in production environments. Depending on the code
; which is triggering the error, sensitive information could potentially leak
; out of your application such as database usernames and passwords or worse.
; For production environments, we recommend logging errors rather than
; sending them to STDOUT.
; Possible Values:
;   Off = Do not display any errors
;   stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
;   On or stdout = Display errors to STDOUT
; Default Value: On
; Development Value: On
; Production Value: Off
; 
display_errors = Off   //デフォルトの設定(Off) 

以下に変更することで、全ての php ファイルに対してエラーを表示するようになります。

php.ini(開発環境の場合)
display_errors = On 

参考ページ:PHP マニュアル(実行時設定)

エラーレベルの設定

開発環境では全ての種類のエラーを表示するようにしておきます。MAMP の php7.4.1 では以下のようにデフォルトで全ての種類のエラーを表示するようになっていると思います。

php.ini (開発環境の場合)
error_reporting = E_ALL

以下はエラーレベルに設定できる値の例です(php.ini の上記設定項目の上に説明が記載されています)

  • E_ALL (全てのエラーと警告)
  • E_ALL & ~E_NOTICE (実行時注意を除く全てのエラー)
  • E_ALL & ~E_NOTICE & ~E_STRICT (実行時注意とコーディング標準警告を除く全てのエラー)
; 実行時注意(E_NOTICE)以外の全てのエラーを表示する場合
error_reporting = E_ALL & ~E_NOTICE
E_NOTICE
コードの中のバグの可能性について(例えば、代入されていない値を使用した場合など)警告を与えてくれます。また、好ましくないコードに対しても警告してくれるので、開発時には表示するようにします。
E_STRICT
非推奨であったり将来の互換性が保証されていなかったりするコードを書いたときに警告を与えてくれます。PHP 5.4.0 より前のバージョンの場合は E_ALL に E_STRICT が含まれないため、 PHP 5.4.0 未満では明示的にこのエラーレベルを設定する必要があります。

php.ini 以外で設定する方法

PHP のエラーの表示・非表示は個別の PHP ファイルで設定したり、.htaccess や httpd.conf で設定することもできます。

特定の PHP ファイル内でだけエラーの表示・非表示を設定するには、PHP ファイルの先頭に以下を記述します。

<?php
// エラー表示する場合
ini_set('display_errors', 1);

// エラー表示しない場合
ini_set('display_errors', 0);

?>

.htaccess または httpd.conf で設定する場合は、以下を追記します。

.htaccess または httpd.conf
#エラー表示する場合
php_flag display_errors On

#エラー表示しない場合
php_flag display_errors Off

バーチャルホストの設定

例えば、ローカル環境(MAMP や XAMPP)で htdocs に example と言うフォルダを配置してブラウザでアクセスする場合、通常 http://localhost/example/ と言う URL になります。

これを http://example.localhost/ と言う URL でアクセスできるようにするにはバーチャルホストと言う機能を利用します。以下は MAMP の場合の例です。

Virtual hosts の有効化

バーチャルホストを利用するには httpd.conf ファイルを編集して Virtual hosts の機能を有効化する必要があります。(関連項目:文法エラーをチェック)  

MAMP の場合、/Applications/MAMP/conf/apache/httpd.conf にファイルがあるので httpd.conf をテキストエディターで開いて編集します。

デフォルトでは、おそらく以下のように Virtual hosts の次の行の Include ... がコメントアウトされているので、その場合はコメントアウトを外します。

# Virtual hosts
#Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

以下のように変更して(httpd-vhosts.conf を読み込むようにして)保存します。

# Virtual hosts
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

httpd-vhosts.conf の編集

上記で読み込みを有効にした httpd-vhosts.conf をテキストエディターで開いて編集します。

httpd-vhosts.conf は httpd.conf ファイルの読み込み(Include)に記述されている /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf にあります。

ファイルを開くと最後の方に以下のようなバーチャルホストの設定サンプルが記載されています。

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:80>
  ServerAdmin webmaster@dummy-host.example.com
  DocumentRoot "/Applications/MAMP/Library/docs/dummy-host.example.com"
  ServerName dummy-host.example.com
  ServerAlias www.dummy-host.example.com
  ErrorLog "logs/dummy-host.example.com-error_log"
  CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin webmaster@dummy-host2.example.com
  DocumentRoot "/Applications/MAMP/Library/docs/dummy-host2.example.com"
  ServerName dummy-host2.example.com
  ErrorLog "logs/dummy-host2.example.com-error_log"
  CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>

バーチャルホストの設定 <VirtualHost *:80>〜</VirtualHost> は複数設定することができます。

設定項目は、少なくとも DocumentRoot と ServerName は指定する必要があります。

  • DocumentRoot:サイトのディレクトリのパス
  • ServerName:ローカル環境でアクセスしたいホスト名(URL)

また、以下の例の場合 *:80 としてあるのでポート 80 を指定してある必要があります(Ports)。

以下は追加例です(URL を http://example.localhost/ でアクセスできるようにする場合)。

<VirtualHost *:80>
    DocumentRoot "/Applications/MAMP/htdocs/example"
    ServerName example.localhost
</VirtualHost>

ドキュメントルートを変更している場合など環境によっては、<Directory> ディレクティブを使った以下のような記述の追加が必要かも知れません。

<Directory "/path/to/directory"> #上記と同じパス
  order deny,allow
  allow from ALL
</Directory>

hosts ファイルの編集

hosts ファイルを編集してホスト名と IP アドレスをマッピングします。

hosts ファイルは隠しファイルになっているので、Shift + Command + . を押して表示させることができます。

ファイルの場所は /private/etc/hosts になります。

private
└── etc
    └── hosts

Finder での hosts ファイルの場所のスクリーンショット

hosts ファイルを開くと初期状態ではおそらく以下のようになっていると思います。

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost

このファイルにホストを追加します。

テキストエディタで編集

テキストエディタで編集するには、一度デスクトップなどにファイルをコピーして編集します。IP アドレス(127.0.0.1)とホスト名を追加します。

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1             localhost
127.0.0.1	example.localhost
127.0.0.1	foo.localhost #必要なだけ追加します

元の位置に戻して上書きします。

ファイルを上書きする際には以下のようなメッセージが表示されるので「認証」をクリックします。

etc にあるファイルを上書きする際に表示される警告のスクリーンショット

続いて以下が表示されるので「置き換える」をクリックし、パスワードの入力を求められるので入力します。

hosts ファイルを上書きする際の警告のスクリーンショット

ターミナルで編集

ターミナルを起動して sudo vi /private/etc/hosts と入力して enter を押すとパスワードを求められるので入力すると hosts ファイルが開きます。

i を押して INSERT モードにして矢印キーを使ってカーソルを一番下の右端まで移動し、改行して IP アドレスとホスト名を追加します。

IP アドレスとホスト名の間は tab キーを押すと適当なスペースが入力されます。

hosts ファイルを上書きする際の警告のスクリーンショット

追加したら、esc キーを押して INSERT モードを終了し :wq と入力後 enter を押して保存します。

関連ページ:vim の基本的な使い方

Apache を再起動

Apache の設定ファイルを変更しらた、Apache を再起動する必要があるので、MAMP を再起動(Stop Servers → Start Servers)します。設定した URL にアクセスできるようになっているかを確認します。

Apache のコマンド

MAMP の場合、Apache のコマンドは /Applications/MAMP/Library/bin/ に保存されています(MacOS の Apache のコマンドは /usr/sbin/ に保存されています)。

Applications
└── MAMP
    └── Library
        └── bin

例えば、Apache のバージョンは httpd コマンドに -v オプションを指定すると確認することができます。

/Applications/MAMP/Library/bin/httpd -v   return #MAMP の Apache のバージョン
Server version: Apache/2.2.34 (Unix)
Server built:   Jan  8 2020 17:45:13

MacOS の Apache のバージョンは以下で確認できます。MacOS の Apache のコマンドの場合、/usr/sbin/ にはパスが通っているのでコマンド名だけで実行できます(環境変数 PATH)。

httpd -v   return #MacOS の Apache のバージョン
Server version: Apache/2.4.34 (Unix)
Server built:   Feb 22 2019 20:20:11

ロードされている(現在使用されている)モジュールは以下で確認することができます。

/Applications/MAMP/Library/bin/httpd -M  return
Loaded Modules:
 core_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 authn_file_module (shared)
 authn_dbm_module (shared)
 authn_anon_module (shared)
 authn_dbd_module (shared)
 authn_default_module (shared)
 authz_host_module (shared)
 ・・・以下省略・・・

モジュールには、Apache 本体に組み込まれている静的モジュール(static)と必要に応じて読み込むことができる動的(DSO)モジュール(shared)に大別されます。

モジュールのロード

どのモジュールを読み込むかは httpd.conf で LoadModule ディレクティブによって設定します。LoadModule ディレクティブはデフォルトではコメントアウトされているものもあり、必要な機能はコメントを外して有効にすることができます(httpd.conf を変更したら Apache を再起動する必要があります)。

以下は httpd.conf の一部抜粋です。動的モジュールのファイルの拡張子は「.so」になっています。

#
# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_anon_module modules/mod_authn_anon.so
・・・中略・・・
LoadModule perl_module modules/mod_perl.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule xsendfile_module modules/mod_xsendfile.so

LoadModule php7_module        /Applications/MAMP/bin/php/php7.4.1/modules/libphp7.so
・・・以下省略・・・

apachectl

コマンドラインから Apache を制御するには apachectl コマンドを使用します。

apachectl コマンドは以下のようにサブコマンドを指定することができます。

apachectl サブコマンド (MacOS)

/Applications/MAMP/Library/bin/apachectl サブコマンド (MAMP)

以下のサブコマンドを実行する際は、configtest を除きスーパーユーザの権限が必要なので sudo コマンド経由で実行します。

apachectl の主なサブコマンド
サブコマンド 説明
start Apache を開始
stop Apache を停止
restart Apache を再起動
graceful Apache の緩やかな再起動(実行中のリクエストの処理を中止させたくない場合)
configtest 設定ファイルの文法エラーをチェック

以下は MAMP の Apache を再起動する例です。

sudo /Applications/MAMP/Library/bin/apachectl restart  return
Password:  # パスワードを入力
configtest 文法エラーをチェック

設定ファイル httpd.conf に誤った記述があると、エラーが発生して Apache が起動しません。

configtest サブコマンド を使うと、httpd.conf の記述が正しいかをチェックすることができます。

「Syntax OK」と表示されれば、記述上の問題はないことになります。

/Applications/MAMP/Library/bin/apachectl configtest return
Syntax OK  # 記述が正しい場合

「apachectl configtest 」の代わりに「httpd -t」を実行しても同じです。

/Applications/MAMP/Library/bin/httpd -t return
Syntax OK

Warning

configtest サブコマンド を実行すると、以下のような Warning が表示される場合があります。

/Applications/MAMP/Library/bin/apachectl configtest return
Warning: DocumentRoot [/Applications/MAMP/Library/docs/dummy-host.example.com] does not exist
Warning: DocumentRoot [/Applications/MAMP/Library/docs/dummy-host2.example.com] does not exist
Syntax OK

この Warning はバーチャルホストを設定していて、httpd-vhosts.conf にサンプルとして記述されているバーチャルホストの設定(存在しない DocumentRoot)のためです。

そのため、この Warning は無視して問題ありませんが、Warning を出したくない場合は、httpd-vhosts.conf の該当箇所をコメントアウトするか削除(または変更)します。

httpd-vhosts.conf サンプル部分抜粋
# VirtualHost example: 以下の6行目と15行目が原因

<VirtualHost *:80>
  ServerAdmin webmaster@dummy-host.example.com
  DocumentRoot "/Applications/MAMP/Library/docs/dummy-host.example.com" #原因
  ServerName dummy-host.example.com
  ServerAlias www.dummy-host.example.com
  ErrorLog "logs/dummy-host.example.com-error_log"
  CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin webmaster@dummy-host2.example.com
  DocumentRoot "/Applications/MAMP/Library/docs/dummy-host2.example.com" #原因
  ServerName dummy-host2.example.com
  ErrorLog "logs/dummy-host2.example.com-error_log"
  CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>