名称未定のままはや5年…(汗)。
Web 日記を手軽に書くことを目的に作成された awk スクリプトです。同様のものとしては hns、 TDS、 GNS、 nDiary などがありますが(このへんから辿るもよし)、それらと同じようなもので、これらが持つ機能の多くは nsmm も備えています。特徴としては、
てなことがあげられます。
まず、awk をインストールします。Solaris などにデフォルトで存在する /usr/bin/awk や /usr/bin/nawk は時刻を扱う関数が存在しないので動きません。具体的には、gawk 2.13 以上をインストールしてください。なお、FreeBSD は 5 系から nawk に変更されていますので、別途 gawk を入れる必要があります。4 系ならば始めから GNU awk が入っています。DOS/Windows 環境では、mawk+MBCS が使えます。DOS/Win の mawk は vector からダウンロードできます。同じところに (j)gawk もありますが、なぜか動作しません(深く追及していないので原因はわかりません)。また cygwin な環境があれば、それに含まれる awk でも問題なく動作します。オリジナルの mawk には時刻を扱う関数がないようなので、UNIX 環境に mawk をインストールしても nsmm は動作しません(Debian では標準で mawk が入っているようです)。
次に、nsmm をダウンロードします。展開した後、インストールした awk に合わせて nkf などでスクリプトの文字コードを変換します。具体的には、UNIX 環境または cygwin なら EUC、DOS/Windows の mawk なら SJIS に変換します。日記ソースもこの文字コードで書きます。環境に合わせて config.awk を書き換えます。最低限以下を設定してください。
ディレクトリを作成します。var["diarydir"] で指定したディレクトリを作成し、さらにその下に 2000/ など年ごとにサブディレクトリを作ります。また、var["outputdir"] で指定したディレクトリも作ります。自動で mkdir したりはしません(そもそも awk にディレクトリを扱う機能がありません。残念ながら)。
以上で最低限必要な準備ができました。
var["diarydir"] で指定したディレクトリの下の YYYY/dYYYYMMDD.hnf というファイルに日記を書きます。ファイルのフォーマットは、hnsで用いられる hnf 形式とほぼ互換です。2000/5/28 の日記として、たとえばこんなのを 2000/d20000528.hnf に書いてみましょう。
TENKI 晴 OK NEW 朝 朝〜、朝だよ〜。朝ご飯食べて学校行くよ〜。 NEW 昼 舞と佐祐理さんと俺と3人で昼ご飯。 NEW 夜 真琴にコンニャク攻撃を食らった。
これをセーブしたら、以下のようにして nsmm を起動します。awk の実行ファイル名、パスは環境に応じて適宜変更してください。シェルスクリプト、あるいはバッチファイルにしておくと便利でしょう(アーカイブに同梱されています)。
> awk -f nsmm.awk -f config.awk
うまく設定ができていれば、var["outputdir"] に指定したディレクトリに index.html と 200005c.html ができています。どちらも今書いた 20000528.hnf に対応した部分が、以下のように変換されています。
<!-- 2000/05/28 start --> <h2><a name="20000528" href="200005c.html#20000528">2000年5月28日(日)</a> [晴]</h2> <h3><a name="200005281" href="200005c.html#200005281">■</a> 朝</h3> <blockquote> 朝〜、朝だよ〜。朝ご飯食べて学校行くよ〜。 </blockquote><!-- section end --> <h3><a name="200005282" href="200005c.html#200005282">■</a> 昼</h3> <blockquote> 舞と佐祐理さんと俺と3人で昼ご飯。 </blockquote><!-- section end --> <h3><a name="200005283" href="200005c.html#200005283">■</a> 夜</h3> <blockquote> 真琴にコンニャク攻撃を食らった。 </blockquote><!-- section end --> <!-- 2000/05/28 end -->
index.html には、最新5日分が日付逆順に出力されます。また、200005c.html には2000年5月下旬の日記が日付順に出力されます。
前述の通り、日記ソースのフォーマットは、hnf 形式とほぼ互換です。詳しくはそちらを参照してください。ただし、以下のような違いがあります。
config.awk でおこないます。nsmm.awk にある設定を config.awk で上書きするので、デフォルトでは気に入らない部分だけ config.awk で書き換えればいいです。指定できるキーワードとその意味については、nsmm.awk に詳しく書いてあるので、そちらを参照してください。入出力ファイル名や出力スタイルの変更など、たいていのことは自由に変更できます。ここでは config.awk および、head.html, foot.html で使われる特殊な変数の指定について触れます。
nsmm.awk をじーっと見ればわかりますが、var["variable"] の内容は、${variable} で参照できます。${variable} は入れ子にできるので、たとえば var["foo"] = "bar", var["bar"] = "baz" のとき、${${foo}} の値は baz になります。また、以下の特殊な記法を用いることにより、簡単な条件判断を記述できます。
なお、$, {, } などの特殊文字をエスケープする手段はありません。どうしても必要ならば、$ のように実体参照で記述してください(将来的にはこれは解消したいな…)。
config.awk は awk スクリプトなので、awk の制御構造で自由に記述をすることができます。また文字列の指定についても awk の制限を受けるので、「"」という文字を記述するには \" のようにエスケープする必要があります。head.html, foot.html はこのような制限はありません。スクリプトを見ると行末にはすべて ; がついてますが、これは特になくてもかまいません。
古いものも残してあるけど、できるだけ新しいものを使いましょう。
作者の側で把握してるものについて勝手にリンクしてます。敬称略。
なお、こちらにはどさにっきの日記ソース、設定ファイルがあります。また、ここには公開版よりも新しい作業中のスクリプトが置かれていることもあります。なお、サフィックスが .html のものについてはこの Web サーバの仕様によってバナー広告が勝手に付加されてしまうので、実際に使っているものとは異なります。
無保証です。これを使って何か問題が起きるとかいうことはあまりないとは思いますが、自己責任で使ってください。著作権は特に主張しません。無断改変大いに結構。本スクリプト中には、awk を使う上で日記作成とはまったく別の目的にも有用なものが多く含まれていると思いますが、部分転用についても問題なし。改良やバグつぶしをされた場合は、わしもそのご相伴にあずかりたいので連絡してくれるとうれしい。
やまぐちたかのり(やまや)