手っ取り早く試したい場合は簡単版を 見るべし。
mkdiry.rbは以下の機能を持つ日記ページ作成支援プログラムである。
(以下はUNIX向け)
かいつまんでいうと、日記の本文となる部分の文章だけ mkdiary にくべてや れば見出し一覧のついた日記ディレクトリが出来上がるという、そんなプログラ ム。
まず、mkdiary.rb本体のインストールを行なう。
% mkdir ~/public_html/diary # ディレクトリ作成 % cd ~/public_html/diary # そこに移動
% gzip -dc mkdiary.tar.gz | tar xvpf -
#!/usr/bin/env rubyをシステムのenvに合わせて書き換える。そのままでいいかも。
% chmod +w mkdiary.rb % emacs -nw mkdiary.rb (書き換えてセーブ)
次にこの日記をどうやってつけるかの方法によって道は分かれる。
以下の説明では mkdiary.rb が ~/public_html/diary に インストールされていると仮定。
サーバのメイルシステムがqmailの場合は簡単。
owner=yourname@gentei.org allow=yourname@gentei.org|yourname@provider.ne.jp許可したいアドレスが複数ある場合は |(縦棒)で区切っ てスペースを空けずに列挙する。
|./public_html/diary/mkdiary.rb -sと書き込む。
サーバがsendmailとかの場合は面倒。procmailを使えば 特定のサブジェクトのものを特定のコマンドに投げるなんてことが できるようになるので はらのの説明とか見て適当に設定しちくり。
さて実際にメイルを出してみよう。こんな感じで書く。
To: | yourname-diary@gentei.org |
Cc: | |
Subject: | 1999/10/10 |
m=見出し 今日は富士山に行った。いえー。ちかれた……… |
Subjectには半角でその日の日付。年月日は左から順に省略可能で、全 て省略するとその日の日付になる(朝9時までは前日の日付)に自動設定さ れる。Subjectに "yesterday" と書くと、日本時間の昨日の日付に設定さ れる。"3 days ago" のように "数字 days ago" と書くと、その日数だけ 遡った日付が設定される。もし今日の日記を書くんだったらサブジェクト は何でもええ。today とかにしとくのが無難じゃな。また、本文先頭の m= の直後は日記インデックスの見出しとして使われる。
二行目以降はそのままが日記の本文HTMLとして使われる。なので、 メイル中にHTMLをがしがし書くべし。段落が一つだけならまあそのまま書 いて桶。もし複数の段落を作りたいときは一つ一つの段落を<p>と </p>でくくってやればよろし。こんな感じ。
m=いい天気
<p>きょうは朝からいい天気だった。</p>
<p>てなことで行って来たじょ、北海道。ほにゃらら〜かにゃらら〜 うんじゃら〜、かんじゃら…………</p>
本文中に画像ファイルなどの埋め込みが必要なときは本文中に直接 <img src="hoge.jpg"> なんてのを書いた上で、 添付画像ファイルとして hoge.jpg も一緒にマルチパート形式 で送信する。base64 でエンコードした添付ファイルのみ処理できる。お そらく普通のメイルリーダは画像ファイルとかはbase64エンコードして送 るんじゃないかと思う。なのであまりきにせんでよい。
画像ファイルが複数あるときは lha, zip, tar+gzip で固めて一個の アーカイブファイルにしたのを添付すれば、mkdiary.rbはそれをほぐして 複数のファイルにしてくれる。ただしこの展開は一回だけしかやらないの で、もし *.lzh, *.zip, *.tar.gz, *.tar ファイルそのものを日記ディ レクトリに置きたいときはそれをもういっぺんアーカイバで固めたものを 添付すると良い。
ちなみに、他の日記支援システムではHTML知らなくても書けるように との配慮でHTMLじゃない簡易記法とか導入しているのもあってそれはそれ で楽になることもあるが、結局あれやこれや覚えることが増えて「だった らHTML覚えたほうが早いんちゃう?」という「元の木阿弥」状況を招くこ とが必至なので、mkdiaryでは一切簡易記法を導入する予定はない……。
でもやっぱ、「どーしても、<p>…</p>とかいちいち書く の面倒や〜」とな? ふむ、ではメイルで普通に書いたプレインテキストの 本文を、適当に<p>…</p>でくくるようなフィルタを用意す れば、それを呼ぶようにしてみたので、自分でフィルタ書いて使ってみる よろし。フィルタを作ったら mkdiary.rb と同じディレクトリにインストー ルして、~/.mkdiaryrc に
bodyfilter=そのフィルタ名
なんて書くと良い(※))。変換フィルタを どういう風に作ったら良いかいまいち分からない人のために、サンプルフィ ルタとして body2html というへぼいス クリプトを作ったので実験してみるべし。これをつかうと、てきとうにプ レインテキストでTABやら使ってインデントして書いて行くと勝手にULと かになるらしいぞ。
以前のバージョンではフィルタの直前に ./ が必要だったが現在では不要(付けてはいけない)。その日の日記のディレクト リに移動してからフィルタスクリプトを実行する。
現在使えることのできるフィルタは以下の通り
添付画像を探してimgタグに変える
http://foo.bar.co.jp/(ほげ)
というパターンがあれば
<a href="http://foo.bar.co.jp/">ほげ</a>
に置換する。
行頭に
img=hoge.jpg
というパターンがあれば
<img src="hoge.jpg">
に置換する。
この「本文→HTMLフィルタ」のもっと すごいのを募集するで!
ほい、メイルで日記を付けたいという良い子はこの方法だけおぼえれ ばええぞよ。以下のサーバログイン更新はすっ飛ばしてカスタマイズに進んで良いじょ。
Emacsの中から一撃で当日用のディレクトリを作るのが webdiary.elである。まずこれのインストー ルから。
(autoload 'webdiary "webdiary" "Keep diary!" t) (setq webdiary:dir "~/public_html/diary/")を追加する。
これでOK。サーバにログイン後、Emacsを起動したら
M-x webdiary
とすると日付を聞いて来るのでリターンを押せばその日の日記用の HTMLソースが現れるので適当に文章を書いたらセーブ。セーブと同時に日 記一覧インデックスページが自動更新される。
今となってはそんなことするひたおらんのう。
% cd ~/public_html/diary % ./mkdiary.rb -today (または ./mkdiary.rb -date 1999/10/10 とか) % emacs -nw その日の日付ディレクトリ/index.html
mkdiary.rbの動作定義は ~/.mkdiaryrc ファイルに
オプション=値
という型式の行を列挙することで可能である。また、.mkdiaryrc ファイルは動作する mkdiary.rb と同じディレクトリに置くこともできる。複数 の mkdiary.rb を違う目的で使いたいときにはスクリプトと同じディレクトリに 置くと良い。
~/.mkdiaryrc(または ./.mkdiaryrc) で定義できる変数一覧は mkdiary.rbの $opt = で始まるブロックを見てもらうのが一 番正確。が、一応良く使うオプションを以下に。
オプション | 意味 | デフォルト値 |
bg | 背景色 | lightseagreen |
titleleft | 表題のprefix | 【 |
titleright | 表題のsuffix | 】 |
m | デフォルトの見出し | 見出し |
yearformat | 年INDEXのタイトル書式 | %d年の日記 |
yearleading | 年INDEXのタイトル直後の文句 | (なし) |
day_ascend | 日付を昇順で表示 | 1(yes) |
outcode | 出力ファイル漢字コード | jis (またはeuc) |
need_wday | 日付に曜日を付けるか | 1(yes) |
monthheading | 「X月」表示をするか | 1(yes) |
mailコマンドのパス | /usr/bin/mail | |
owner | mail更新時のエラー連絡先 | なし |
allow | mail更新を許可するアドレスの正規表現 | なし |
bodyfilter | 本文変換フィルタ | なし |
decode64 | base64デコードプログラム | mewdecode |
gnutar | GNU tarコマンド名 | gtar |
unzip | unzipコマンド | unzip |
lha | lhaコマンド | lha |
notify | mail更新結果を知らせるかどうか | 0 (しない) |
ownotify | mailで上書きとなるときにバックアップを送るか | 1 (送る) |
bmp2jpg | BMP形式の添付画像をJPEGに自動変換するか | 0 (しない) |
bmp2png | BMP形式の添付画像をPNGに自動変換するか | 0 (しない) |
convert | ImageMagickのconvertコマンドの起動名 | convert |
~/.mkdiaryrcには
bg=white
のように記述する。全く同じ書式を電子メイル経由での日記更新のときに使 える。本文の先頭に
m=吉村家に行ったよ
なんて書いたのは実はデフォルト値の変更だったのである。今日だけ背景を 変えたいときはメイルの本文先頭に
m=はっぴー
bg=pink
やー、今日はめでたいねー。
なんて書けば良かったりする。
もひとつ、via mail のときだけ有効なオプションとして append がある。 本文の先頭に
append=1
と書いておくと、現在のその日の日記の本文の末尾に、以降のメイル本文を 追加する。ただし、これは追加前の文章も via mail で書いておかないとへんて こりんになる可能性が大きいのでちうい。また、appendモードのときは本文がそ のまま追加されるので、二つ目の見出しを作りたいときは、自分で
append=1 <h1>↑のその後</h1> あのあと店に行ってみたら既に売り切れてた…<br> しくしく…
などと書かなければならないのでこれもちうい。
毎日の日記HTMLの先頭のテンプレートとなるのがheader、 末尾のテンプレートとなるのがfooterファイルである。 また、年間のインデックスを作るときのテンプレートとなるのがそれぞれ、 yheader, yfooter ファイルである。yheaderファイルがない場合は、 mkdiary.pl(Perl版)時代と同じ定型ヘッダが使われる。
書き換えるときは見本についているファイルを参考に適当に書き換える。 なおこれらのファイル中には以下の%展開変数が使える。
%TITLE% | "Diary of 日付" |
%DIARY% | 「日記」を表す単語 |
%BG% | 背景色(.mkdiaryrc中のbg変数) |
%DATE% | 日付(yyyy/mm/dd) |
%YEAR% | 日記の日付の「年」 |
%MONTH% | 日記の日付の「月」 |
%DAY% | 日記の日付の「日」 |
%HEADING% | 最初の見出し |
%WDAY% | 曜日の英語(先頭3文字) |
%YOUBI% | 漢字の曜日(1文字) |
%THEME% | 〜〜に関する語を含む(category.tmpl) |
%KEYWORD% | カテゴリ分けキーワード(category.tmpl) |
ある程度文書が溜って来ると資料的価値が生ずる。そんなときに 年ごとの分類ではなく、話題ごとに分類したインデックスページがあるとおべんり。 あとからどさっと作ろう。
ある話題について書いてある文書には絶対含まれそうなキーワードをいくつ か考える。さらにその話題へのリンクを含むページをどんなファイル名に 保存したいか考える。たとえばこんな感じ。
このような場合は以下のカテゴリ表エントリを作成する。
FreeBSD=f.html: /freebsd|ip6?fw|natd|ginum|geom/i
正規表現の分かる人ならすぐ分かる、簡単書式。要は
話題=分類ファイル名: マッチするであろう正規表現
というものを1行で書く。これを1話題につき1行ずつ列挙したものを
category.tbl
というファイルに保存しておき、
トップディレクトリで
% ./mkdiary.rb -mkcat
とする。すると、./category/
ディレクトリの中に
カテゴリインデックスHTMLファイルがどさっとできる。それらの
カテゴリインデックスファイルのテンプレートの見本が
パッケージ内にある category.tmpl
なのでこれをいじくって
好きな体裁にしてくれたまい。このテンプレートファイル中の
%LIST%
の行がインデックス部分になる。
ちなみに ./mkdiary.rb -mkcat
するときに標準出力に
生成されたカテゴリインデックスファイル群へのリンクに便利な文字列が
出されるのでこれをどこかに保存しておくと
「カテゴリインデックスファイルへのリンク」ファイルになる。
% ./mkdiary.rb -mkcat > hoge % cat yheader hoge yfooter > categlinks.html
て感じ。
作者のWeb日記に関してのポリシーにより、以下の機能は実装しない可能性が 高い。
なぜか、name属性を付ける日記があると、そこへのリンクを示して、 それに対しての反論などを付ける人がいる。人への意見を自分の日記ペー ジに書くということは、その人に面と向かっていわない分、配慮に欠けた 文章になりやすく、知らないうちに日記フレーム(喧嘩)に発展する例が後 を絶たない。もちろんこれはその機能が悪いのではなくて、利用者に非が あるわけだが、やっぱりname属性が無ければ段落まで指定して文句を書く ことができなくなることは確実なので、やっぱりその機能は付けたくない。 坊主憎けりゃ袈裟まで憎い。
読み手からすると、特定の固定URLを見るといちばん新しい日記が読め るのは確かにうれしい。楽だ。真剣に読んでくれる人にはそうしてあげた いのだが、この世の中日記ページを見るや、なぜか知らない人のページで も自動巡回装置(アンテナっちゅーの?)に登録して、読みもしないのに毎 日毎日、いや、大抵毎時間毎時間連続アクセスしてくる輩が多い。だいた い日記なんて、一日に一回しか書かんっちゅーの。そういうことをやられ ると、gentei.orgのように回線の細いサイトはたまらない。なので、ブッ クマークから手動で読んでいる人には、申しわけないが、やっぱり固定 URLでアクセスできるような機能はあまり気が進まない。が、そのほうが 回線負荷が下がったり、無駄な自動巡回君をやめさせられるようなアイデ アがあれば実装するかもしれない(かといって、アクセス拒否ってのはい やらしいので無しね、穏便に穏便に)。