手っ取り早く試したい場合は簡単版を 見るべし。
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の場合は簡単。
日記更新用アドレスを考える。たとえば yourname-diary@gentei.org とする。実際は いたずらされないよう、-diaryじゃなくて推測されにくい 拡張アドレスにした方がよい。
~/.mkdiaryrcというファイルを作って個人情報を書き込 む。必須なのは連絡用アドレス(自分のメイルアドレス)と日記更新 を許可するアドレス。
owner=yourname@gentei.org allow=yourname@gentei.org|yourname@provider.ne.jp
許可したいアドレスが複数ある場合は |(縦棒)で区切っ てスペースを空けずに列挙する。メイル更新をする場合 エラー報告が owner に送られるので、主に携帯電話から 更新するなら .qmail-keitai とか携帯電話にもフォワードされる アドレスを作って owner には、それを書いておくとよい。
1で考えたアドレスで、mkdiary.rb -s が走るような dot-qmail ファイルを作る。1の例の場合は、~/.qmail-diary というファイルを作って、
|./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自動変換フィルタ(後述)を使ってもいい。
~/.mkdiaryrc
ファイルにフィルタを使う設定を書いてない
場合はHTML直打ちモードなのでまずその説明から。
直打ちモードの場合、二行目以降そのままが日記の本文 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>でくくったり、行頭TABと*で 箇条書きにするようなフィルタを用意したのでつこてみてくれ。 とりあえず ~/.mkdiaryrc に
bodyfilter=body2html|autoimg
と追加してみるべし(※))。この例は、
自動変換フィルタとして、body2htmlとautoimgの2つを使うという意味で、
その他のフィルタを使いたかったら縦棒(パイプ; |
)で
区切って繋いでいく。フィルタの最初に書いた body2html が一番便利。
どう使うかは body2html というへぼい
スクリプトに書いたコメントを見てもらうとして、かいつまんでいうと
メイル本文で適当にプレインテキストでTABやら
使ってインデントして書いて行くと勝手にULとかになるのだ。
以前のバージョンではフィルタの直前に ./ が必要だったが現在では不要(付けてはいけない)。その日の日記のディレクト リに移動してからフィルタスクリプトを実行する。
body2html 以外、現在使えるフィルタは以下の通り
添付画像を探してimgタグに変える。たとえば、メイル本文に
%IMG1
と書いておくとその部分がメイルに添付した1枚目の 画像を出す img 要素に変わる。また添付画像が大きくて 日記本体ページにはサムネイルだけにしときたいなと感じるときは メイルで送る文を
%IMG1=コメント
としておくと、添付した画像だけを含む別のHTML文書が 追加で作られて、その中に「コメント」が入れられる。
http://foo.bar.co.jp/(ほげ)
というパターンがあれば
<a href="http://foo.bar.co.jp/">ほげ</a>
に置換する。
行頭に
というパターンがあれば
に置換する。autoimgがお節介すぎると感じる場合にはこちら。
この「本文→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 = で始まるブロックを見てもらうのが一 番正確。が、一応良く使うオプションを以下に。
オプション | 意味 | デフォルト値 |
titleleft | 表題のprefix | 【 |
titleright | 表題のsuffix | 】 |
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 |
addpath | 実行時にPATHに追加する値 | |
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には
yearformat=%d年の食い倒れ日記
のように記述する。メイル更新モードのときの本文の最初に 書くのもこの書式に従う。
なお、メイル更新のときだけ有効なオプションとして append、 repl、merge がある。例えばメイルの本文先頭に
append=1
と書いておくと、現在のその日の日記の本文の末尾に、以降のメイル本文を 追加する。ただし、これは追加前の文章もメイル更新で書いておかないとへんて こりんになる可能性が大きいのでちうい。また、実はその日2回目の日記メイルなの に1回目だと思って送ってしまったときには、1回目で作られた日記ファイルが バックアップとして送られる(owner宛に)。そんなとき、送られたバックアップ メイルを全部引用して、本文先頭に
merge=1
と書いて送ると、1回目で作った日記と2回目に送ったメイルを appendしたものを勝手に作っておいてくれる。逆に2回目に送ったのは なしにしたいときは、メイル本文先頭に
repl=1
と書き、送られたバックアップメイルの全文を引用して送り返す。
毎日の日記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|vinum|gmirror|\bgeom\b/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
て感じ。なにイメージが涌かないとな。んじゃ カテゴリを使った 例じゃ。
カテゴリインデックス生成の動きを制御する .mkdiaryrc
変数
には以下のものがある。
オプション | 意味 | デフォルト値 |
categtbl | カテゴリ分けパターン登録ファイル名 | category.tbl |
categdirl | カテゴリインデックスファイル生成ディレクトリ | category |
cldprefix | カテゴリインデックスファイルへのリンクを含む a href を 出力するときに、各ファイル名に付けるプレフィクス。年インデックス ページの全てにカテゴリインデックスを #include させる場合は これを "../" なんかにしておくと楽。 | "" |
cutstr | 文書には全てフッタが付いているのでそこにキーワードっぽいのがあると それがマッチしてしまう。「この文字列以降は切り取る」という文字列。 正規表現ではない。 | "\nGenerated with" |
themes | カテゴリインデックステンプレートで%THEME%を置き換える語 | "%sに関する語を含む" |
other | カテゴリインデックステンプレートから未分類ファイル
(other.html )を生成するときに%THEME%を置き換える語 |
"いずれにも分類されない" |
作者のWeb日記に関してのポリシーにより、以下の機能は実装しない可能性が 高い。
なぜか、name属性を付ける日記があると、そこへのリンクを示して、 それに対しての反論などを付ける人がいる。人への意見を自分の日記ペー ジに書くということは、その人に面と向かっていわない分、配慮に欠けた 文章になりやすく、知らないうちに日記フレーム(喧嘩)に発展する例が後 を絶たない。もちろんこれはその機能が悪いのではなくて、利用者に非が あるわけだが、やっぱりname属性が無ければ段落まで指定して文句を書く ことができなくなることは確実なので、やっぱりその機能は付けたくない。 坊主憎けりゃ袈裟まで憎い。
読み手からすると、特定の固定URLを見るといちばん新しい日記が読め るのは確かにうれしい。楽だ。真剣に読んでくれる人にはそうしてあげた いのだが、この世の中日記ページを見るや、なぜか知らない人のページで も自動巡回装置(アンテナっちゅーの?)に登録して、読みもしないのに毎 日毎日、いや、大抵毎時間毎時間連続アクセスしてくる輩が多い。だいた い日記なんて、一日に一回しか書かんっちゅーの。そういうことをやられ ると、gentei.orgのように回線の細いサイトはたまらない。なので、ブッ クマークから手動で読んでいる人には、申しわけないが、やっぱり固定 URLでアクセスできるような機能はあまり気が進まない。が、そのほうが 回線負荷が下がったり、無駄な自動巡回君をやめさせられるようなアイデ アがあれば実装するかもしれない(かといって、アクセス拒否ってのはい やらしいので無しね、穏便に穏便に)。