MAMP のインストールと初期設定
Mac で MAMP をダウンロードしてインストールする方法と初期設定や Apache の設定(バーチャルホスト)、httpd.conf の文法エラーをチェックする方法についての覚書です。
MAMPには MAMP(無料)と MAMP PRO(有料) がありますが、以下は無料版の MAMP についての説明です。以下で取り扱っている MAMP のバージョンは5.6です。バージョン6は以下を御覧ください。
MAMP のインストールと初期設定(version 6.6)
作成日: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/」に変更されます。
Web Server
PHP タブでは Web サーバー(Apache または Nginx の選択)と Document Root を設定することができます。
Document Root(Web ファイルの配置場所)を変更するには「Select」をクリックします。
以上で基本的な設定は完了です。
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 などで誤りがないかを確認します。
PHP エラーの表示
MAMP の場合、デフォルトでは PHP のエラーを表示(出力)しないようになってます。
ローカル環境(開発環境)の場合は、エラーがチェックできるようになっている方が良いのでエラーを表示するようにしておくと良いと思います。
※ 逆に本番(プロダクション)環境では、エラーが表示されてしまうとファイルのパスなどが表示されてしまい、セキュリティ上問題があるのでエラーを表示しないように設定し、ログに出力するようにするのが一般的です。
全ての php ファイルに適用するには php.ini を編集するのが簡単です。
php.ini の display_errors という「エラーをHTML出力の一部として画面に出力するかどうか」を定義する項目で設定することができます。以下のようにデフォルトでは Off になっています。設定項目の上にはコメントアウトされた説明書きがあります。
; 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 ファイルに対してエラーを表示するようになります。
display_errors = On
参考ページ:PHP マニュアル(実行時設定)
エラーレベルの設定
開発環境では全ての種類のエラーを表示するようにしておきます。MAMP の php7.4.1 では以下のようにデフォルトで全ての種類のエラーを表示するようになっていると思います。
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 で設定する場合は、以下を追記します。
#エラー表示する場合 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
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 #必要なだけ追加します
ファイルを元の位置に戻して上書きします。
ファイルを上書きする際には以下のようなメッセージが表示されるので「認証」をクリックします。
続いて以下が表示されるので「置き換える」をクリックし、パスワードの入力を求められるので入力します。
ターミナルで編集
ターミナルを起動して sudo vi /private/etc/hosts と入力して enter を押すとパスワードを求められるので入力すると hosts ファイルが開きます。
i を押して INSERT モードにして矢印キーを使ってカーソルを一番下の右端まで移動し、改行して IP アドレスとホスト名を追加します。
IP アドレスとホスト名の間は tab キーを押すと適当なスペースが入力されます。
追加したら、esc キーを押して INSERT モードを終了し :wq と入力後 enter を押して保存します。
関連ページ:vim の基本的な使い方
サイト移転の際の動作確認
Wordpress などを使っているサイトの移転前の動作確認では、 hosts ファイルを編集して移転先の IP アドレスを指定して移転先のページにアクセスすることができます。
その場合、ホスト名を指定する際に、www. を使っているサイトではホスト名に www. も付けて記述します。Firefox や Safari では www. なしでも変更が反映されますが、Chorome では www. を付けないと変更が反映されないかもしれません。
Apache を再起動
Apache の設定ファイルを変更しらた、Apache を再起動する必要があるので、MAMP を再起動(Stop Servers → Start Servers)します。設定した URL にアクセスできるようになっているかを確認します。
400 Bad Request error
Apache のローカル環境でホスト名に_(アンダースコア)が使われていると「400 Bad Request」になり、次のようなエラーが表示されます。
- Bad Request
-
Your browser sent a request that this server could not understand.
Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.
ホスト名にはアンダースコアは使えない
ホスト名(ドメインのラベル)には英字(A~Z)、数字(0~9)、及び記号のハイフン( - )が使えますが、アンダースコア(_)は使えません(バージョン 2.4.25 以前の古い Apache では使用できていたようです)。
参考サイト:ドメイン名の構成(JPNIC)
解決方法としては、アンダースコア(_)を使わないことですが、「一時的」にアンダースコア(_)を許容するには Apache の設定ファイル httpd.conf に次の行を追加します。
HttpProtocolOptions Unsafe
設定を反映するには Apache を再起動する必要があるので、MAMP を再起動(Stop Servers → Start Servers)します。
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 コマンド経由で実行します。
サブコマンド | 説明 |
---|---|
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 の該当箇所をコメントアウトするか削除(または変更)します。
# 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>
MAMP で Basic 認証
.htaccess ファイルと、ユーザ名(ID)とパスワードを記述する .htpasswd ファイルを作成して MAMP で Basic 認証を設定する例です。
.htaccess や .htpasswd を MAC で表示するには、shift + command + . を押します。
Basic 認証を設定するディレクトリに .htaccess を作成して配置します。
以下は.htaccess の記述例です。
AuthType Basic AuthUserFile /Applications/MAMP/pwd/.htpasswd AuthGroupFile /dev/null AuthName "Login Password Required" Require valid-user
この例では MAMP ディレクトリの中に pwd というディレクトリ(/Applications/MAMP/pwd)を作成し、その中に .htpasswd というファイルを保存します。
.htpasswd ファイルには、ユーザー名(ID)とパスワード を「:(コロン)」で区切り記述します。その際、パスワードは暗号化(ハッシュ化)して保存します。
パスワードの暗号化は「パスワード暗号化(ハッシュ化)生成サンプル」で生成することができます。
以下は.htpasswd の記述例です。以下の場合、ユーザー名(ID)は usr1 で、パスワードは password を暗号化したものです。
usr1:Y0TVVr8vSLApg
これで上記の .htaccess を配置したディレクトリにアクセスしようとすると以下のような認証のウィンドウが表示され、ユーザIDとパスワードを求められます。
ベーシック(Basic)認証の詳細は以下を御覧ください。
関連ページ:ベーシック(Basic)認証