0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[macOS] スタンドアロンの FileMaker Pro と localhost との連携 vol.2

Last updated at Posted at 2025-03-04

使用環境

  • 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 と入力し、最下行を確認します。

httpd.conf
Include /private/etc/apache2/other/*.conf

上記のようにコメントアウトされていなければ問題ありません。

 次に、設定ファイルを順番に作成していきます。まず、設定ファイルを置くディレクトリに移動し、設定ファイルを作ります。ファイル名は何でも構いません。

ターミナル
cd /etc/apache2/other/
sudo vi fm_website.conf

インサートモード i で以下のように入力します。

fm_website.conf : version 1
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 を書いてみます。

fm_website.conf : 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 が動作するので、確認します。

~/Sites/WebServer/Documents/phpinfo.php
<?php phpinfo();

http://localhost/phpinfo.php で、PHP の情報が表示されれば成功です。

version 3 〜 CGI を動かす

Perl 等の言語で、CGI を動かすことができます。Perl を動作させて、CGI を動作させてみましょう。

fm_website.conf : version 3
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 でも動作する設定にしています。

~/Sites/WebServer/Documents/hello-world.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

~/Sites/WebServer/Documents/hello-world.py
#!/usr/bin/python3

print("Content-type: text/html\n\n")
print("<h1>Hello, world!</h1>\n")

R

~/Sites/WebServer/Documents/hello-world.R
#!/usr/local/bin/Rscript

cat("Content-type: text/html\n\n")
cat("<h1>Hello, world!</h1>\n")
quit()

Node.js

~/Sites/WebServer/Documents/hello-world-node.cgi
#!/usr/local/bin/node

	console.log('Content-type: text/html');
	console.log('');
	
	console.log("\
<h1>Hello, world!</h1>\
");

Ruby

~/Sites/WebServer/Documents/hello-world.rb
#!/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 でとどめておいて、まったく問題ありません。

fm_website.conf : version 4
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 が動作する設定です。

テストファイルです。

~/Sites/WebServer/Documents/ssi-test.shtml
<!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つを順番に解決していきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?