GNSを使うにあたって、まず必要な知識を解説します。

  1. ファイル構成
  2. GNSによる日記の概要
  3. 日記マスタ
  4. 日付・タイトル・段落
  5. リンク
  6. アンテナへの対応
  7. RSSの出力
  8. アクセス解析

ファイル構成

GNSのデフォルトのファイル構成は、以下のようになっています。


+-GNS/                          GNSフォルダ
  |                             
  +-d/                          日記マスタフォルダ
  | |                           
  | +-2002/                     2002年日記マスタ
  | |                           
  | +-2003/                     2003年日記マスタ
  | |                           
  | +-2004/                     2004年日記マスタ
  | | |                         
  | | + 0615.html               2004/06/15日記マスタ
  | | + 0616.html               2004/06/16日記マスタ
  | | + 0617.html               2004/06/17日記マスタ
  | |                           
  | +-keep/                     ユーザーデータベースフォルダ
  |   |                         
  |   + 10.html                 ダイジェストページ上部テンプレート
  |   + 11.html                 ダイジェストページ上部メモテンプレート
  |   + 20.html                 ダイジェストページ下部メモテンプレート
  |   + 21.html                 ダイジェストページ下部テンプレート
  |   + 30.html                 ベースページ上部テンプレート
  |   + 40.html                 ベースページ下部テンプレート
  |   + 50.html                 年次インデックスページ上部テンプレート
  |   + 51.html                 年次インデックスページ下部テンプレート
  |   + 52.html                 カテゴリインデックスページ上部テンプレート
  |   + 53.html                 カテゴリインデックスページ下部テンプレート
  |   + 97.html                 ユーザーマクロデータベース
  |   + 98.html                 表示アイテムデータベース
  |   + 99.html                 URI置換データベース
  |   + lastupload              最新版更新記録
  |   + upload.pass             WWW環境・メール環境用パスワード
  |                             
  +-gns300/                     GNSプログラムフォルダ
    |                           
    +-style/                    cssファイルフォルダ
    | |                         
    | +-plain/                  plain版cssファイル
    | |                         
    | | + gns.css               基本css
    | | + gns_base.css          ベースページ用css
    | | + gns_digest.css        ダイジェストページ用css
    | | + gns_index.css         インデックスページ用css
    | | + gns_up.css            更新フォーム用css
    | |                         
    | +-simple/                 simple版cssファイル
    |   |                       
    |   + gns.css               基本css
    |   + gns_digest.css        ベースページ用css
    |   + gns_index.css         ダイジェストページ用css
    |   + gns_log.css           インデックスページ用css
    |   + gns_up.css            更新フォーム用css
    |                           
    +-help/                     GNSユーザーズマニュアル
    | |                         
    | + index.html              マニュアルトップページ
    | + (other)                 (以下省略)
    |                           
    +-keep/                     デフォルトデータベースフォルダ
    | |                         
    | + 10.html                 ダイジェストページ上部テンプレート
    | + 11.html                 ダイジェストページ上部メモテンプレート
    | + 20.html                 ダイジェストページ下部メモテンプレート
    | + 21.html                 ダイジェストページ下部テンプレート
    | + 30.html                 ベースページ上部テンプレート
    | + 40.html                 ベースページ下部テンプレート
    | + 50.html                 年次インデックスページ上部テンプレート
    | + 51.html                 年次インデックスページ下部テンプレート
    | + 52.html                 カテゴリインデックスページ上部テンプレート
    | + 53.html                 カテゴリインデックスページ下部テンプレート
    | + 97.html                 ユーザーマクロデータベース
    | + 98.html                 表示アイテムデータベース
    | + 99.html                 ユーザーURI置換データベース
    |                           
    + index.html                WWW環境用トップページ
    + mkidx.html                WWW環境用インデックス作成ページ
    + mkpasswd.html             WWW環境用パスワード作成ページ
    + mkup.html                 WWW環境用更新フォームテンプレート
    + sysmacro.html             システムマクロデータベース
    + sysuri.html               システムURI置換データベース
    + chkpath.cgi               動作チェックCGI
    + mkpasswd.cgi              パスワード作成CGI
    + mkidx.cgi                 インデックス作成CGI
    + upload.cgi                更新フォームCGI
    + jcode.pl                  日本語コード変換Perlスクリプト
    + libgns.pl                 GNSメインプログラムPerlスクリプト
    + mkd.pl                    日記ページ作成Perlスクリプト
    + mkidx.pl                  インデックスページ作成Perlスクリプト
    + mkup.pl                   アップロードフィー無作成Perlスクリプト
    + recvmail.pl               メール更新Perlスクリプト
    + postmail.pl               更新メール発信Perlスクリプト
    + mkd.bat                   日記ページ更新バッチファイル(Windows用)
    + mkidx.bat                 インデックスページ更新バッチファイル(Windows用)
    + mkd.sh                    日記ページ更新バッチファイル(UNIX用)
    + mkidx.sh                  インデックスページ更新バッチファイル(UNIX用)
    + config_sample.ph          GNS設定ファイルPerlスクリプトのサンプル

GNSによる日記の概要

GNSで日記を作成すると、以下の4種類の「日記ページ」ファイルが作成されます。

  1. ベースページ
  2. ダイジェストページ
  3. インデックス
  4. RSSファイル

これらのファイルは、デフォルトでは「GNSフォルダ」に出力されます。「config.ph」内の「$PUTDIR」変数の内容を変更することで、出力先を変更することができます。

「ベースページ」は、日記の本体です。1ページあたり約10日(1ヶ月を上旬・中旬・下旬に区切る)で構成されています。ファイル名はGNSが日付から算出して自動的に付けられ、日付・タイトル・段落ごとに付けられるアンカーもGNSが自動算出します。これにより、「ある日付のある段落」にURLを自動的に設けることができるようになっています。

「ダイジェストページ」は、「ベースページ」から最近(初期設定では3日前から今日までの4日分)の分を抜き出して出力するページです。ファイル名は固定されており、読者はこのページを読むことで最新の日記を読むことができます。また日付・タイトル・段落ごとのアンカーはベースページにリンクするように出力されており、特定の段落へのリンクを簡単にコピーすることができます。

「インデックス」は、1年分の日記の目次となるページです。「年次インデックス」と「カテゴリインデックス」の2つが作られます。「年次インデックス」は1年分のタイトルが日付順にカレンダーとともに並べられ、一望することができます。「カテゴリインデックス」は、1年分のタイトルがカテゴリ順に並べられ、同じカテゴリで括られたタイトルを効率よく参照することができます。

「RSSファイル」は、「ダイジェストページ」をさらに簡潔にまとめたファイルです。「RSSリーダー」と呼ばれるツールでこのファイルを収集・閲覧することで、多くのサイトの最新情報を効率よく展望することができます。

日記マスタ

日記マスタフォルダ
▲日記マスタフォルダ

GNSでは、日記文の記述に特殊なツールを使う必要はありません。基本的には、「1日1ファイルをテキストエディタで記述する」だけです。この、「1日ごとに分けて書かれる個々のファイル」を、「日記マスタ」と呼びます。

日記マスタは、指定したフォルダ(初期設定では"./d/")に年別にフォルダ(YYYY)を作成し、その下に"MMDD.html"(MMは月、DDは日)というファイル名で認識します。まとめて書くと、"./d/YYYY/MMDD.html"となります。

拡張子は".html"を使いますが、中身はHTML文法に沿ったファイルではなく、プレーンなテキストファイルとなります。

日記マスタの記述に使う文字コードは、「nkfが受け付けることができる形式」であれば何でもかまいません。ISO-2022-JP・EUC-JP・Shift_JIS・UTF-8を想定していると考えてください。なお、内部的にはEUC-JPに変換して処理しています。このためEUC-JPに変換できない文字コードは、内部的にどのような動作になるかを保証することができません。

日記マスタは、バッチファイルまたはシェルスクリプトを実行することで、「ベースページ」・「ダイジェストページ」・「RSSファイル」に変換することができます。Windows環境では「[GNSプログラムフォルダ]/mkd.bat」を、UNIXシェル環境では「[GNSプログラムフォルダ]/mkd.sh」を実行することで、変換が行われます。インデックスの作成は「[GNSプログラムフォルダ]/mkidx.bat」または「[GNSプログラムフォルダ]/mkidx.sh」を実行します。

「WWW環境」では、日記マスタの転送にCGIフォームを使用しています。CGIを起動することで、フォーム送信内容から日記マスタファイルを作成し、さらに日記ページの生成を自動的に行います。

「メール環境」では、日記マスタの転送にメールを使用しています。メールを受け取ったときに.forwardからスクリプトを起動することで、メール本文から日記マスタファイルの作成を行い、さらに「日記ページ」の生成を自動的に行います。

日付・タイトル・段落

@title いか〜
@category 料理

@s
夕飯にイカを買ってくる。さくさくとさばいて、身は刺身、ゲソはにら・キャベツ・豚バラと野菜炒め、ワタとえんぺら・身とゲソの残りで塩辛に。

@s
・・・したはずだったんだが、最後に刺身を盛って食卓へ・・・というところで床へ皿が落下・・・(汗)。

いか〜 (料理)

_ 夕飯にイカを買ってくる。さくさくとさばいて、身は刺身、ゲソはにら・キャベツ・豚バラと野菜炒め、ワタとえんぺら・身とゲソの残りで塩辛に。

_ ・・・したはずだったんだが、最後に刺身を盛って食卓へ・・・というところで床へ皿が落下・・・(汗)。

▲日記マスタ(上)と出力例(下)

日記マスタから日記ページを生成すると、その内容に基づいてさまざまなタグが追加されます。この中でもっとも重要なものが、「日付」・「タイトル」・「段落」です。

日記マスタは、特殊な命令なしに本文となる文章のみを書くことができます。これだけでも、日記として十分に読むことのできる出力を得ることができます。ですが、「タイトル」と「段落」を記述するための命令は、覚えておくと便利です。

日付タグ
ある日(ここでは例に基づいて2004/06/15とします)の日記マスタを入力すると、この日であることを示すタグが追加されます。これを「日付タグ」と呼びます。
日付タグは、日付を表す文字列とそれへのリンクアンカーを基本として構成され、オプションとして「日付」「トピック」「カテゴリ」「天気」などを追加することができます。
タイトルタグ
日記マスタ中に"@title"という命令を見つけると、その行から次の"@title"命令行までをひとつのブロックとして構成するようになります。"@title"命令により出力されるタグを、「タイトルタグ」と呼びます。
タイトルタグは、タイトル文字列とそれへのリンクアンカーを基本として構成され、オプションとして「カテゴリ」などを追加することができます。
右の例では、「いか〜」というタイトルで、ひとつのブロックを構成しています。
アンカーの名前には、「日記マスタの先頭から数えていくつめのブロックか」が反映されます。一度公開した日記マスタの途中にブロックを追加、またはブロックを削除すると、それ以降のブロックに対するアンカーが変化してしまい、リンク位置が狂ってしまうことになります。
一度公開した日記を変更するときは、途中にブロックを追加したり、ブロックを削除しないようにするべきです。
段落タグ
日記マスタ中に"@s"という命令を見つけると、その行から次の「何らかの命令」までをひとつの段落として構成するようになります。"@s"命令により出力されるタグを、「段落タグ」と呼びます。
段落タグは、リンクアンカーとなる先頭文字(例では小さい"_"(下線)文字)で構成されます。
右の例では、「夕飯に〜」と「・・・したはず〜」という文章で、それぞれひとつの段落を構成しています。
アンカーの名前には、「ブロックの先頭から数えていくつめの段落か」が反映されます。一度公開した日記マスタの途中に段落を追加、または段落を削除すると、それ以降の段落に対するアンカーが変化してしまい、リンク位置が狂ってしまうことになります。
一度公開した日記を変更するときは、途中に段落を追加したり、段落を削除しないようにするべきです。

リンク

GNSで書く日記には、リンクを設置することができます。リンクは、以下のどちらかの方法を用います。

  1. 通常のHTMLタグを使い、"<A HREF="http://〜">リンク</A>"のように書く。
  2. URI命令を使う。

前者はとくに説明の必要はないでしょう。日記マスタには、一部の例外を除いたほとんどのHTMLタグをそのまま使用することができます。自分の日記の適当な位置にリンクを張りたいときにも、この方法を使用します。

後者は、後に解説する「URI置換機能」を使用します。この機能はまず、たとえば「GORRY」という単語に"http://gorry.hauN.org/"というURIを関係付け登録します。そして、日記マスタ中に"@/GORRY//"と記述することで、日記には"<A HREF="http://gorry.hauN.org/">GORRY</A>"という文になって出力され、リンクを張ることができます。

「URI置換機能」については、以下をご覧ください。

アンテナへの対応

拙作「WDB」や、「なつみかん」・「朝日奈アンテナ」・「はてなアンテナ」など、「アンテナ」と呼ばれるツールがあります。これは、登録したURIにある文書ファイルを定期的に監視し、更新があればそれを検知してリストの上位に並べるものです。「アンテナ」を使うことで、多くのサイトの巡回を効率的に行うことができるようになります。

GNSによる日記は、以下の方法でこれら「アンテナ」での検知に適応することができます。

  1. ダイジェストページを監視対象にしてもらう。ダイジェストページを作るための初期テンプレートには、これら「アンテナ」からの認識を容易にするための文字列が埋め込み済みになっています。
  2. RSSファイルを監視対象にしてもらう。このファイルは、ダイジェストページの更新と同時に更新されるため、ダイジェストページと同様に監視対象になることが可能です。特に、ダイジェストページに「SSIによるカウンタやアクセス解析」を組み込んである場合は、ダイジェストページに対して「アンテナの監視用アクセス」が入る度に、カウンタ増加やアクセスログへの無駄な記録が行われてしまうことがあります。これを回避するための手段として、ダイジェストページの代わりにRSSファイルを監視してもらうわけです。

RSSの出力

ダイジェストページが作成されるとき、GNSは同時に「RSS(Rich Site Summary)ファイル」を作成します。これは、ダイジェストページの要約となるファイルです。

「RSSリーダー」というツールでこのファイルを読み込むと、これらを簡潔に表示することができます。一般的な「RSSリーダー」は複数のRSSをまとめて管理することができ、多くのサイトの要約を更新順に表示することができるようになっています。

GNSが出力するRSSファイルには、日付・タイトルリストと、各ブロックの最初の段落、そしてこれらの記述時刻が含まれています。

記述時刻は、各日付の日記マスタのファイルのタイムスタンプを利用しています。このため、(特別な指定をしない限り)同じ日付内のすべてのブロックの記述時刻は同一となります。
ブロックごとに異なる記述時刻を出力させたいときは、"@time"という命令を使用します。詳細は以下をご覧ください。

アクセス解析

GNSは、それ自身ではアクセスを解析する機能を持っていません。トラックバックなどのツールもありませんし、コメントを受け付ける機能も持っていません。これらを使用したい場合、出力のうち固定部となるヘッダ・フッタに、別途CGIやSSIなどで作られたツールを組み込むとよいでしょう。