使用環境
- Claris FileMaker Pro 21.1.41 (macOS)
- macOS Sequoia 15.3.1
macOS 標準の Apache の起動
単に以下のコマンドをターミナルで実行するだけです。
sudo apachectl start
http://localhost/
、http://127.0.0.1/
またはシステム設定で設定したローカルホスト名を使用してアクセスできます。
成功すると、It works! と表示されます。これはデフォルトでドキュメントルートが、/Library/WebServer/Documents/
に設定されており、そこにある index.html.en
が表示されているからです。
編集の準備
ドキュメントルートがデフォルトの状態では扱い難いので、新しいドキュメントルートを作っておきます。Mac 風のディレクトリをユーザディレクトリ直下に置いて、そこから3階層くらい下をドキュメントルートにすると、後々、都合が良いでしょう。ここでは、以下のようにしました。
mkdir ~/Sites/
mkdir ~/Sites/WebServer/
mkdir ~/Sites/WebServer/Documents/
ここで作った ~/Sites/WebServer/Documents/
を新しいドキュメントルートにします。
ついでに、Finder で見るときに、いちいち、3階層下まで行くのは面倒なので、ユーザディレクトリ直下にシンボリックリンクを作っておきます。
ln -s ~/Sites/WebServer/Documents ~/htdocs
htdocs
の部分は、public_html
でも何でも構いません。
version 1 〜 作成したドキュメントルートで、動くようにする
この部分は、macOS のバージョンによって違うようなので、まずバックアップを作って、その後、確認します。
cd /etc/apache2/
sudo cp httpd.conf httpd.conf_default
sudo vi httpd.conf
大文字 G
と入力し、最下行を確認します。
Include /private/etc/apache2/other/*.conf
上記のようにコメントアウトされていなければ問題ありません。
次に、設定ファイルを順番に作成していきます。まず、設定ファイルを置くディレクトリに移動し、設定ファイルを作ります。ファイル名は何でも構いません。
cd /etc/apache2/other/
sudo vi fm_website.conf
インサートモード i
で以下のように入力します。
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
DocumentRoot "/Users/(Macのユーザ名)/Sites/WebServer/Documents"
<Directory "/Users/(Macのユーザ名)/Sites/WebServer/Documents">
Options Indexes FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride All
Require all granted
</Directory>
コマンドモード esc
で、保存終了 :wq
し、Apache を再起動します。
sudo apachectl restart
http://localhost/
で今度は、Index of / と表示されれば、成功です。
~/Sites/WebServer/Documents/
に HTML/CSS、JavaScript のファイルを置けば動作するはずです。
version 2 〜 PHP を動作させる
次に PHP ですが、Mac の Apache は未署名の外部モジュールは動作しないので、認証局を作成し、PHP のモジュールにコード署名をする必要があります。
これについては、この記事 に書いてありますので、参考にしてください。
記事は、FileMaker Server に関するものなので、認証局とコード署名だけすればいいです。
コード署名が無事できたとして、Homebrew でインストールした PHP 8 という前提で、version 2 を書いてみます。
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so "(コード署名の名称)"
DocumentRoot "/Users/(Macのユーザ名)/Sites/WebServer/Documents"
<Directory "/Users/(Macのユーザ名)/Sites/WebServer/Documents">
Options Indexes FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride All
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
<IfModule php_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
Apache を再起動します。
sudo apachectl restart
これで、PHP が動作するので、確認します。
<?php phpinfo();
http://localhost/phpinfo.php
で、PHP の情報が表示されれば成功です。
version 3 〜 CGI を動かす
Perl 等の言語で、CGI を動かすことができます。Perl を動作させて、CGI を動作させてみましょう。
LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so "(コード署名の名称)"
<IfModule mpm_prefork_module>
LoadModule cgi_module libexec/apache2/mod_cgi.so
</IfModule>
LoadModule perl_module libexec/apache2/mod_perl.so
DocumentRoot "/Users/(Macのユーザ名)/Sites/WebServer/Documents"
<Directory "/Users/(Macのユーザ名)/Sites/WebServer/Documents">
Options Indexes FollowSymLinks Multiviews ExecCGI
MultiviewsMatch Any
AllowOverride All
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html index.php index.cgi
</IfModule>
<IfModule mime_module>
AddHandler cgi-script .cgi .pl .py .rb .R
</IfModule>
<IfModule php_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
Apache を再起動します。
sudo apachectl restart
CGI プログラミングに使用する言語は、何でもいいですが、まず、Perl で確認してみます。
Perl のパスを確認しておきましょう。
which perl
私の環境では、/usr/local/bin/perl
となっていましたので、それで書きます。
拡張子は、.cgi
でも、.pl
でも動作する設定にしています。
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
my $hello_world = << "_HTML";
<h1>Hello, world!</h1>
_HTML
print $hello_world;
exit;
次に、CGI ファイルには実行権限が必要なので、このファイルに実行権限を与えます。
chmod 705 ~/Sites/WebServer/Documents/hello-world.pl
http://localhost/hello-world.pl
で、Hello, world! と表示されれば成功です。
Hello, world! くらいですから、他言語も実験しておきましょう。
各ファイルには実行権限を与えることを忘れないということと、PATH に関しては環境に依存しますので、適宜、書き換えてください。
Python 3
#!/usr/bin/python3
print("Content-type: text/html\n\n")
print("<h1>Hello, world!</h1>\n")
R
#!/usr/local/bin/Rscript
cat("Content-type: text/html\n\n")
cat("<h1>Hello, world!</h1>\n")
quit()
Node.js
#!/usr/local/bin/node
console.log('Content-type: text/html');
console.log('');
console.log("\
<h1>Hello, world!</h1>\
");
Ruby
#!/usr/bin/env ruby
print "Content-type: text/html\n\n"
print "<h1>Hello, world!</h1>"
スタンドアロンの FileMaker Pro のレイアウトとして使うのであって、Web ホスティングをするわけではないので、CGI で何でもありの姿勢でいいと思います。
version 4 〜 SSI も一応
30年前くらいなら、Web の訪問カウンタなんかで利用されてましたが、現代では、あんまり積極的に利用することもないでしょうけど、一応、設定だけ書いておきます。
version 3 でとどめておいて、まったく問題ありません。
LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
LoadModule include_module libexec/apache2/mod_include.so
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
LoadModule php_module /opt/homebrew/opt/php/lib/httpd/modules/libphp.so "(コード署名の名称)"
<IfModule mpm_prefork_module>
LoadModule cgi_module libexec/apache2/mod_cgi.so
</IfModule>
LoadModule perl_module libexec/apache2/mod_perl.so
DocumentRoot "/Users/(Macのユーザ名)/Sites/WebServer/Documents"
<Directory "/Users/(Macのユーザ名)/Sites/WebServer/Documents">
Options Indexes FollowSymLinks Multiviews ExecCGI Includes
MultiviewsMatch Any
AllowOverride All
Require all granted
</Directory>
<IfModule dir_module>
DirectoryIndex index.html index.php index.cgi index.shtml
</IfModule>
<IfModule mime_module>
AddHandler cgi-script .cgi .pl .py .rb .R
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
</IfModule>
<IfModule php_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
Apache を再起動します。
sudo apachectl restart
拡張子 .shtml
で、SSI が動作する設定です。
テストファイルです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>SSI Environment Test</title>
</head>
<body>
<h1>Welcome to my server at
<!--#echo var="SERVER_NAME"--></h1>
<!--#config timefmt="%m/%d/%H:%M:%S" -->
<!--#echo var="DATE_LOCAL" -->
<table>
<tr>
<th></th>
<th class="first_column">SSI</th>
</tr>
<tr>
<th>DATE_GMT</th>
<td><!--#echo var="DATE_GMT"--></td>
</tr>
<tr>
<th>DATE_LOCAL</th>
<td><!--#echo var="DATE_LOCAL"--></td>
</tr>
<tr>
<th>DOCUMENT_NAME</th>
<td><!--#echo var="DOCUMENT_NAME"--></td>
</tr>
<tr>
<th>DOCUMENT_URI</th>
<td><!--#echo var="DOCUMENT_URI"--></td>
</tr>
<tr>
<th>LAST_MODIFIED</th>
<td><!--#echo var="LAST_MODIFIED"--></td>
</tr>
<tr>
<th>USER_NAME</th>
<td><!--#echo var="USER_NAME"--></td>
</tr>
</table>
</body>
</html>
version 4 はともかく、Mac の ~/Sites/WebServer/Documents/
以下に FileMaker Pro のレイアウト用のファイルを置くことで FileMaker Pro のレイアウト作成からほぼ解放されます。
FileMaker のフィールドは、必要なフィールドを不可視領域に置いておけばいいだけとなります。
また、~/Sites/WebServer/Documents/
以下では、HTML/CSS、JavaScript は置けますし、
PHP や CGI も動作しますから、その延長として、PostgreSQL、MySQL、SQLite3 も操作できるということになります。この辺りはアイディア次第ということでしょうか。
レイアウト作成ができるようになりましたが、差し当たって2つの問題が未解決です。
- FileMaker Pro と localhost 側のデータのやり取り
- localhost 側のページ遷移の FileMaker Pro への反映
以上、2つを順番に解決していきます。