連載 / Pe 日活用のヒント {{if post}} 掲載 : {{post}} { { / if } } 最終更新 : {{update}} く /li> く li > く a href="{{href}}">{{title}}{{if subtitle}}—{{subtitle}}{{/if}} く /a> く br> tmpl—loop cont く u1 > く p>{{name}} く /p> tmpl—loop category ーー > リスト 7 図 15 のファイルの目次の部分 /tmpl—loop ーー > く / ul > /tmpl—loop ーー > 内容ファイル、 Spec ファイル、適用されるテンプレー ト・ファイルのいすれか力開用ページより新しい場合 画像ファイルなどのコピー ップページより新しい場合 トップページのテンプレート・ファイルのいずれかがト すべての記事の内容ファイル、すべての Spec ファイル、 ・トップページ 118 する。デフォルトでは再帰的処理をおこなわない。ただ に、ディレクトリの内容を再帰的に処理することを指定 オプション以外の引数でディレクトリが与えられた際 ・—recurslve ように指定する。 必要かどうかの判断をせずに再生成とコピーをおこなう —force は $HOME/public-html である。 生成先のディレクトリを指定する。デフォルトの生成先 —dstdir DST-DIR プションは以下のとおりである。 に応じて説明してきたが、 こでまとめておこう。まず、オ gethtpg のコマンド行オプションと引数については必要 gethtpg のコマンド行オプションと引数 ピーされない。 (. ) を含まないファイル、つまり拡張子のないファイルもコ ィレクトリはコピーされない。また、ファイル名にドット なお、制作用のディレクトリの直下にある template デ プションが指定された場合はつねにコピーする。 のほうカ噺しい場合にのみコピーする。ただし、 -force オ すでにある場合は、制作用のディレクトリにあるファイル にコピーする。生成先のディレクトリに同名のファイルが ルなどを制作用のディレクトリから生成先のディレクトリ genhtpg は、ディレクトリを処理する際に、画像ファイ し、オプション以外の引数がない場合は再帰的処理をお よっ。 ・—srcdir S 月 C ー〃 / 制作用ディレクトリを指定する。デフォルトは、 Cyg- win では $HOME/My Documents/html-src 、 Win- dows 以外では $HOME/htmIsrc である。指定する パスにシンボリック・リンクが含まれると正しく動作し ない可能性があるので注意が必要である。 —verbose より多くのメッセージを表示するように指定する。 オプション以外の引数としては、ファイルまたはディレ クトリを任意の数だけ指定できる。ただし、指定するのは 制作用ディレクトリの下にあるものでなければならない。 これは、 genhtpg が生成先を制作用ディレクトリ内の相対 位置から判断するためである。 こで注意すべきなのは、引数としてファイルまたはデ ィレクトリを相対パスで指定した場合、 genhtpg はカレン ト・ディレクトリを担に引数を理解する点である。たと えば、カレント・ディレクトリがホーム・ディレクトリの ときに、、 genhtpg short-article. html" と入力すると、 ( 実 際にはない ) ホーム・ディレクトリの short-article. html を指定したことになってしまう。これは、 -srcdir オプシ ョンを指定しているときも同様である。サイト全体ではな く、一部を生成 / 再生成する場合は、制作用ディレクトリへ 移って genhtpg を実行するのカ寉実である。 オプション以外の引数が指定されない場合は、制作用デ ィレクトリと -recursive オプションが指定されたことに なる。つまり、 Web サイト全体が生成されるのである。 ☆ 以上、今回は genhtpg の概要と使い方を説明した。次 回はプログラムの説明をおこなう予定である。 ( いまづ・ひでよモルガン・スタンレー証券 ) UNIX MAGAZINE 2005 . 9
連載 / Pe 日活用のヒント 図 15 トップページのテンプレートのもとになる HTML ファ イル には Switch という名前のファイルがあり、どのペーシの 生成にどのテンプレートを使うかを指定している。 sample/template/Switch の内容を以下に示す。 ATop$ : top ・ tmpl default . tmpl 各行の形式は以下のようになっている。 正規表現 : テンプレート・ファイル名 genhtpg は、ページを生成する際に記事の内容ファイル の相対パスが Switch ファイルの各行の正規表現とマッチ するかを上から順に調べ、最初にマッチしたものに対応す るテンプレート・ファイルを使用する。詳しく書くと以下 のようになる。まず、相対パスの起点は制作用ディレクト リである。マッチングの対象になるのは短い記事では内容 ファイル、長い記事では Spec ファイル、トップページでは 、 Top " である。上記の内容の Switch ファイルでは、トッ プページのみに t 叩 . tmpl を使用し、その他のページの生 成にはすべて default. tmpl を使うことになる。 sample/template ディレクトリには、 genhtpg が参照 するテンプレート・ファイルと Switch ファイルのほか、 以下のファイルが置かれている。 ・テンプレート・ファイルのもとになる HTML ファイル ・ HTML ファイルからテンプレート・ファイルを生成す る htm12tmpI コマンド ・必要に応じて htm12tmpl を実行するための Makefile したがって、テンプレートのもとになるファイルを変更 し、 make コマンドを実行すればテンプレート・ファイル が生成される。 公開用ページを再生成するかどうかの判断 genhtpg は、公開用のページがすでにある場合、再生成 する必要があるかを判断し、必要なときだけ再生成をおこ なう。ただし、 -force オプションカ甘旨定された場合は、つ ねに生成 / 再生成をおこなう。短い記事、長い記事、トップ ページの判断担集はそれぞれ以下のとおりである。 短い記事 内容ファイルまたは適用されるテンプレート・ファイル 力開用ページより新しい場合。 長い記事 ( ) サンプー 1 - 「を朝 F ウェブサイトの名前 を の イ 自分の名前 最更新 : 憮Ⅲな懋ヨ師いⅢレ研 post)l 掲載 : ぉ弋旧レ翻最終更新 : at $ . /dumpcontdb. pl samp1e/Cont . db long—article/ $VARI 'subtitle' = > , 長い記事の副題 , ) = > 1120998209 , post ' = > ' 2005 ー 07 ー 09 ' 'title' = > , 長い記事の題名 , short—article . htm1 $VARI ) = > 1120878000 , post' = > ' 2005 ー 07 ー 08 ) 'title' = > , 短い記事の題名 , genhtpg は、目次内の記事の題名、掲載日、最終更新日 の出力にこのデータを使用している。 Cont. db の内容は 公開用の記事ページが生成される際に作成 / 更新されるの で、トップページの生成は記事ページがすべて生成された あとにおこなわれる必要がある。 トップページのテンプレートのもとになる HTML ファ イルの例を図 15 に、このファイルの目次の部分の HTML ソースをリスト 7 に示す。トップページを生成する際のパ ラメータの値は以下のようになっている。 ・ update すべての記事の最終更新日と T 叩ファイルの最終更新 日のなかでもっとも遅い日付。つまり、 web サイトが 最後に変更された日付である。 ・ category 目次のデータ全体が入っている。リスト 7 は category パラメータの値の書式に従って書かれている。 テンプレートの置き場所など テンプレート・ファイルは、制作用ディレクトリの直下 の template ディレクトリに置かれる。このディレクトリ 117 UNIX MAGAZINE 2005.9
連載 / Pe 日活用のヒント リスト 5 図 11 のファイルの目次の吾吩 tmpl—if toc く p> く b> 目次く / b > く / p > く 01 > tmpl—loop name=toc く li>{{if url}} く a href="{{url}}">* {{chapter-name}} く /a> {{else}} く b>{{chapter-name}} く /b>{{/if}} く /li> /tmpl-loop ーー > く / 01 > リスト 6 Top ファイル 短い記事 short—article . htm1 長い記事 long-article/ 図 14 生成されたトップページ 同新 ・、〕サン 1 ルートガ - 勝Ⅲ aF を 0 ウェブサイトの名前 百分の名前 b サイトの簡単な紹介文をここに書くことになるでノよう。 /tmpl-if トップページへの相対 URLO 短い記事の場合と同様 ・・からディレクトリの深さに 応じて選ばれる。 ・ update 記事の最終更新日。すべての内容ファイルと Spec ファ イルのなかでもっとも更新が遅いものの更新日になる。 記事が最初に掲載された日付。具体的には Spec ファ ・ body 記事の内容。内容ファイルの body タグの中身全体で イルの post パラメータの値である。このパラメータは ある。 Spec ファイルのなかになくてもよい。 ・ toc トップページ 各ページの先頭に表示される目次のデータ。図 11 のフ sample ディレクトリに含まれる TOP ファイルをリス ァイルの目次の部分の HTML ソース ( リスト 5 ) は、 ト 6 に示す。これはトップページ内の目次の定義である。 のパラメータの構造に合わせてある。目次には記事を構 Top ファイルはかならず制作用ディレクトリの直下に置か 成する章の題名カ例挙される。章の題名は、各内容ファ なければならない。このファイルをもとに生成されたトッ イルの body タグ内の最初の要素の中身である。 プページを図 14 に示す。 ・ prev-page 、 next-page T 叩ファイルは以下の形式の羅列であり、種別およ隣己 前ページ、次ページへの相対 URL である。 事の並び頂は Top ファイル内での川印に従う。この場合 図 11 のテンプレートは、値が自動的に設定される上記 のく空白〉は 1 つ以上のスペースまたはタブである。 のパラメータのほかにも、以下のパラメータが Spec ファ 己事の種別の名称 イルで定義されることを想定している。 く空白〉その種別に属する記事 1 の相対 URL く空白〉その種別に属する記事 2 の相対 URL く空白〉・ genhtpg の実行例では、ます長い記事の公開用ページが、 続いて短い記事の公開用ページが生成され、トップページ の生成は最後になる。一一般に、トップページはつねに最後 に生成される。長い記事と短い記事を処理した結果、 sam- ple ディレクトリに Cont. db というファイルカ乍成される が、このファイルには各記事の情報が入っている。パッケ ージに含まれている dumpcontdb. pl を使用すると、以下 のように Cont. db の内容を見ることができる。 最を析 : 2005 ー 01- 短い記事 掲載 : 2 0 フー最終更新 : 2 一 0 ト 長い記事 長い記事の題名ーー長い記車の副組 掲載 : 2CI 0 た最終更新 : 2 0 フ -10 ・ title 記事の題名。具体的には Spec ファイルの title パラメ ータの値である。 ・ subtitle 記事の副題。具体的には Spec ファイルの subtitle パ ラメータの値である。このパラメータは Spec ファイル のなかになくてもよい。サンプルファイルの短い記事に は副題がないが、長い記事に特有のものではない。短い 記事でも副題をもっことができる。 ・ post 116 UN 工 X MAGAZINE 2005 . 9