macOS Mojaveでローカルサーバーを動かす。

そろそろ #ES6 ( #ECMAScriptS6 = #ES2015 )をちゃんとしようと思ってコーディングを始めてみたら、なにやら忙し過ぎて気がつくと電車に乗っている時の #ニートップ 作業が多い。(因みに私はスネの長さが左右異なるので、 #Macbook_Pro が斜めにならないように長い方の右足かかとを少し後ろに引いて高さを調整してます。どうでもいい話。)
作業が進むとどうしても #wwwサービス で検証をしたくなるのだけれど、いちいちスマートフォンのテザリングに接続するのもアホ?らしい。ローカルでなんとかしようと考え、 #VirtualBox とかも検討したのですが、まあ独立したサーバーまではいらない。探してみると、何も #インストール することもなく #macOS の機能だけでなんとかなりそうです。まだ実運用はしてませんが、とりあえず動いたのでwwwサービスを稼働させる方法まで、自分の備忘を兼ねて紹介します。

現在のmacOSのバージョンは10.14.5( #macOS_Mojave )です。

まずローカルサーバー構築について参考にしたサイトは、
Macでローカルサーバー構築あれこれ
MacOS X の Yosemite (10.10) で Sites ディレクトリを使って localhost をアカウント別に利用する方法
それから#ターミナル と#viエディタ の利用について参考にしたサイトは、
Macでターミナルとシェルを使うための基礎知識 – 環境の構築と基本的なファイル操作を知る
【初心者でもわかりやすい】Linuxのviの使い方をゼロから!
です。(他にもいろいろ覗いたのですが忘れました。ごめんなさい。皆様に感謝します。)

はい。それではターミナルを起動します。
馴染みのない方もそんなに難しいことをするわけでもないので、注意深く慎重に操作すれば大丈夫です。 #ドスマド とおんなしです。(説得力にかけるなあ。)まあ、噛みついたりしませんからviの #編集モード から逃げる方法だけ習得して恐る恐る触れてください。

ターミナルウインドウに前回利用情報の行と、パソコン名に続いたユーザー名の後ろに「$」マークが表示されています。

Last login: Thu Jul 18 09:41:24 on ttys000
MACBOOK_PRO_NAME:~ USER_NAME $

このまま「$」マークの後ろに次のコマンド(ここからコピーできます。)を入れてエンターキーを押しても #Apache が始動してwwwサービスが利用できます。(ほかにもwwwサービスを稼働させる手段がありますが、私はアパッチ推しです。)

$ sudo apachectl start

試しにブラウザで「http://localhost/」を叩くと「It works!」とか表示が得られます。でもユーザーアカウント内のファイルを参照しておりません。それは不便なので「http://localhost/~ USER_NAME」とユーザーアカウント内のサービスディレクトリ(フォルダ)で運用ができるように調整をします。

一度サービスは止めておきます。

$ sudo apachectl stop

調整を開始します。

(1)「httpd.conf」の編集
「$」マークの後ろに次のコマンドを入れてエンターキーを押してください。

$ sudo vi /etc/apache2/httpd.conf

管理者権限でviが起動して「httpd.conf」を開いた状態になりました。変更対象行を検索などで見つけて編集していきます。
基本はコメントアウトを外していきます。行頭の「#」を削除するだけです。(削除するとコメントアウトが外れるてプログラムソースになります。)

1.まず、次の二行がコメントアウトされていないことを確認します。環境によって状況に違いがあるそうです。

LoadModule authn_core_module libexec/apache2/mod_authn_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so

その二行周辺の抜粋です。

~
#LoadModule authn_socache_module libexec/apache2/mod_authn_socache.so
LoadModule authn_core_module libexec/apache2/mod_authn_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache2/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache2/mod_authz_user.so
#LoadModule authz_dbm_module libexec/apache2/mod_authz_dbm.so
~

2.次の一行の「#」を削除します。

#LoadModule userdir_module libexec/apache2/mod_userdir.so

その一行周辺の抜粋です。

~
#LoadModule imagemap_module libexec/apache2/mod_imagemap.so
#LoadModule actions_module libexec/apache2/mod_actions.so
#LoadModule speling_module libexec/apache2/mod_speling.so
LoadModule userdir_module libexec/apache2/mod_userdir.so
LoadModule alias_module libexec/apache2/mod_alias.so
#LoadModule rewrite_module libexec/apache2/mod_rewrite.so
#LoadModule php7_module libexec/apache2/libphp7.so
#LoadModule perl_module libexec/apache2/mod_perl.so
~

そんなに長いソースでもないので検索するまでもないと思いますが、検索方法の基本はコマンドモードで、カーソルから下へ検索は「/<文字列>」、カーソルから上へ検索は「?<文字列>」です。続けます。

ターミナル画面(該当ソース周辺)

3.次の二行目の「#」を削除します。

# User home directories
#Include /private/etc/apache2/extra/httpd-userdir.conf

次のようなります。

# User home directories
Include /private/etc/apache2/extra/httpd-userdir.conf

「httpd.conf」はこの3要件です。上書き保存してviを終了してください。

(2)「httpd-userdir.conf」の編集
「$」マークの後ろに次のコマンドを入れてエンターキーを押してください。

$ sudo vi /etc/apache2/extra/httpd-userdir.conf

次の一行の「#」を削除します。

#Include /private/etc/apache2/users/*.conf

その一行周辺の抜粋です。(このソースは短いです。)

~
#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
Include /private/etc/apache2/users/*.conf
<IfModule bonjour_module>
RegisterUserSite customized-users
</IfModule>

上書き保存してviを終了してください。

(3)「USER_NAME.conf」の編集
「$」マークの後ろに次のコマンドを入れてエンターキーを押してください。(USER_NAMEにはアカウント名を差し替えてください。)

$ sudo vi /etc/apache2/users/USER_NAME.conf

次のように表示されます。

<Directory “/Users/USER_NAME/Sites/”>
Options Indexes MultiViews
Require all granted
</Directory>

バリエーションもあるようですが、私は次のように編集し直しました。

<Directory “/Users/USER_NAME/Sites/”>
AllowOverride All
Options Indexes MultiViews
Options +FollowSymLinks
Require all granted
</Directory>

上書き保存してviを終了してください。
これでファイルの調整は終了です。

(4)wwwサービス用のディレクトリ(フォルダ)を作る。
「$」マークの後ろに次のコマンドを入れてエンターキーを押してください。

$ mkdir ~/Sites

ユーザーアカウントのホームディレクトリ内に「サイト」という日本語名でフォルダが作られます。
これで準備は終了です。

上にも書いたように、

$ sudo apachectl start

と、コマンドを入れる。もしくは、

$ sudo apachectl restart

でApacheが起動します。

$ sudo apachectl configtest

とコマンドを入れると、

$ Syntax OK

と表示されれば問題なく起動していることが確認できます。確認だけ。

ブラウザで「http://localhost/~USER_NAME」を参照すると次のようにページが表示されます。

「あなたのWebサイト。」

Apacheを止めたいときは、

$ sudo apachectl stop

とコマンドを入れます。

最初に紹介した「Macでローカルサーバー構築あれこれ」では、「(2)『httpd-userdir.conf』の編集」について見当たらず。(正直者には見えるかもしれませんが…、)次のように表示されるばかりで、原因究明に少々手間取りました。注意してください。

「You don’t have permission to access」

ところで、ブラウザで「http://localhost/~ USER_NAME」を参照した際に現れる案内には「Web共有」を使うと簡単にWebサイトを公開できるとあります。これは古い情報で、ずいぶん前からこの機能の表示はなくなったそうです。macOS Mojaveのコントロールパネルの「共有」でも項目がありませんでした。

コントロールパネルの「共有」

このローカルサーバーが開発環境として利用できるかは、まだ不透明です。問題があったり機能拡張するようなことがあれば、追ってレポートします。がんがん電車に乗らないと…、そかさ。