jeyseni's diary

「ジェイセニ」と呼んでください。批判ではなく提案をするのが生き甲斐です。

ファイルメーカーでhtmlファイルづくり--出力ファイルの文字コードでひと苦労

ファイルメーカーを使って,個別の大量のhtmlファイルを出力する実験をした。大量の情報を発信する方法として,インターネットのWebサイトを使うことをずっと考えているのだが,なかなか時間も機会もテーマもなく,半分お蔵入りになっていた企画である。

 もともと,ファイルメーカーのデータベース上でデータを管理していれば,これにWebブラウザーでアクセスして読み書きする「インスタントWeb公開」という機能は20年も前から実装されている。LANに接続したローカルのパソコンであれば,自分のパソコンのIPアドレスを使ってほかのパソコンからアクセスすることができる。ファイルメーカー側で設定したブラウズ画面や一覧画面を使えるし,検索による絞り込みなども可能である。

 しかし,これをインターネット上に展開するには,ファイルメーカーサーバーを設置し,ドメインを確保しなければならない。個人で実験するには実に面倒である。レンタルサーバーも必要である。

 単なる静的な情報提供であれば,htmlファイルに書き出して閲覧できればいい。htmlファイルレベルであれば,無料のレンタルサーバーもある。一度挑戦してみようと思ったのである。

 ファイルメーカーの計算フィールドを使い,htmlの基本文の中に必要なフィールドを埋め込むだけで,htmlデータは簡単に作れる,はずなのだが,かつて最初にhtmlのタグに出会ったときに,単に文字の大きさを変えたり(hタグ),横罫線を引いたり(hrタグ),改行を入れたり(brタグ)するだけで多大な労力を使ったことを思い出した。まず基本的にある程度の見栄えのするレイアウトを考えるところから勉強しなおさなければならなかったのである。

 少し見栄えのするレイアウトを作るのに,表の形を利用するtableタグがある。これで左右上下にまとまった配置ができる。しかし,単純なマトリックスでは表現は限られており,いわゆるセルの連結をすることを考えた。

 最初は,いわゆるWYSIWYGエディターを使ってレイアウトの原形を作ることを考えた。たしかに,比較的簡単に思い通りの表の形を作ることができた。ところが,そのhtmlファイルを開いてみると,ほぼ意味不明の文字が大量に並んでいたのである。これでは,ファイルメーカーの計算フィールドのベースを作るだけでも大変だった。

 そこで,html文法の基本に戻り,tableタグをスタートに,セルを連結するcellpaddingなどを順番に勉強しながら,形を作っていった。セル幅をどう決めるか,セルの中に画像をはめ込むタグは何か,リンクを埋め込むにはどうするか,といった順にネット検索しながら勉強していった。

 現在はCSSを使ってスタイルを設定する方式が主流なのだが,残念ながらまだそこまでは到達できていない。とりあえず,文字ごとに文字色や背景色,罫線の種類や色といった情報を組み込んでhtmlファイルを作ることができた。

 せっかくファイルメーカーを使うのだから,前後のhtmlに飛ぶ矢印リンクも自動的に発生することも実現させた。当然,メニューとなるリンクの一覧ファイルも,一発で出力できるようになっている。

 さらに見栄えを上げるためにフレーム構造にも初挑戦した。これも最初はまったく理解できなかったが,サンプルファイル群をベースに,徐々に内容を組み込んで行き,縦3分割,中央を上下2分割にしたフレーム構造も実現した。

 ローカルで全体のリンクを確認し,無料のレンタルサーバーにFTP転送し,動作を確認した。

 ところが変な文字化けが発生した。一般的な閉じカギカッコが別の記号に文字化けするのである。一部の漢字も旧字体のような変な字に変わってしまった。

 これも文字化けの原因をネットで検索したところ,どうやら文字コードに問題があることが分かった。ごくノーマルなUTF8で作っていたつもりだったのがだ,ファイルメーカーからのテキストファイルのエキスポートがUTF16になっていたのである。

 新しいファイルメーカーではコード変換する関数が提供されているが,筆者の古いバージョンにはその関数がない。そこでまた頼ったのがMBSである。ここにスクリプトで動かせる文字コード指定の関数が提供されていた。ありがたかった。

 さらに,ローカルのテキストファイルをファイルメーカー内に取り込む関数も用意されていたため,ファイルの修正などのメンテナンスをファイルメーカー上で行う仕組みも作った。htmlファイルをReadし,変更後にWriteして上書きする。変更内容はWebビューアで再読み込みしてすぐに確認する,という手順が1つのレイアウト上でできるのは,画期的である。

 ところが,こうして修正し,UTF8で出力したはずのファイルで,相変わらず文字化けが生じていた。htmlファイルがUTF8になっていることは確認している。WebサーバーにFTP転送する際に,ASCII転送すると化けることがあると書かれていたが,バイナリー転送しているので問題はないはずだった。

 この原因は,最初に出力していたUTF16ファイルを別のユーティリティでUTF8変換したファイルの修正を繰り返していたことが判明した。MBSのWrite関数で新規に出力したファイルでの文字化けは発生しなかったからである。

 すでに多くのファイルに追加修正が加わっており,これを反映してすべてのファイルを新規に作成するのは勇気が必要だった。いったん手動でhtmlファイルを直接修正した部分を反映する方法がなかったからである。

 幸いにも,修正個所を含むフィールド値を,htmlファイルからファイルメーカーのテキスト関数で抽出することができ,このデータを改めてhtml構造に自動的に埋め込み,MBSのWrite関数で新規にhtmlファイルを出力することで,反映することができた。もっとも,訂正前のデータが残っていたりして,何度かやり直しはしたが,ようやく安定的に運用することができるようになった。

 次の機会には,CSSを勉強して組み込みたいと思うのだが,とりあえずファイルメーカーで作るhtmlファイルは,CSSで定義するようなスタイル部分を計算フィールドの中を修正することで一気に修正できる。まあ,スマートなCSSに対してあまりにも愚直なやり方ではあるが,素人レベルではとりあえずこれで十分かもしれない。