# tDiary
ツッコミのできるWeb日記システム

## tDiaryでできること

tDiaryは、いわゆるWeb日記を支援するシステムです。tDiaryには以下の特徴があります。

### 更新や設定までCGIでできる

日記の参照だけでなく、日記の更新、設定までもCGIでサポートします。ブラウザさえあれば面倒なメンテナンスは不要。手軽に使えて、長く続けられます。

### 「ツッコミ」が入れられる

日記の読者が、日記に「ツッコミ」を入れられます。ようするに、日付ごとに掲示板がついています。これを通じて、読者とのコミュニケーションが生まれます。 ツッコミがあったことを著者にメールで知らせる機能もあります。

### 「本日のリンク元」(Referer)機能

他の日記等からリンクされると、Refererヘッダを見てそのURLを表示します。どこかで自分の日記が話題にされていることがすぐにわかるように、従来のWeb日記コミュニケーションで使われている手法をわかりやすくサポートしています。

### 携帯端末対応

iモードに限らず、ほとんどの携帯電話やPalm・ザウルスなどの携帯端末からも日記を参照できます。専用の特別なURLは必要なく、自動認識して最適なページを生成します。通信料金のシビアな端末向けには無駄を省いた小さなページを送るようになっています。

### CSSを使ったテーマ機能

スタイルシートを使って見た目をがらりを変えることができます。これは「テーマ」と呼ばれ、別パッケージとして配布されているテーマ集には、100を越えるテーマが収録されています。もちろん自分で作ることも可能です。テーマは設定画面で簡単に切り替えることができます。

### プラグインによる機能追加

プラグインというモジュールを追加することで、日記の機能を増やしたり変更したりすることが可能です。詳しくはHOWTO-use-plugin.html(使い方)・HOWTO-make-plugin.html(作り方)を参照してください。

### 記述形式や保存形式を変更できる

日記を記述する形式(スタイル機能)や、データの保存形式(IO機能)が選択可能です。スタイルはmisc/styleの下に複数収められています。IOは現在、旧tDiary互換のPStoreIOと、新しいテキスト形式であるDefaultIOがあります。詳しくはHOWTO-make-io.rdを参照してください。

### Rubyで書かれている

重要なポイントでしょう:-) 実行にはRuby 1.6.3以上が必要です。

セクション(段落)アンカーや過去の日記の参照など、一般的な日記システムの持つ機能は基本的にサポートしています。

## tDiaryのインストールと設定

一般的なCGIの実行を許可しているISPやレンタルサーバ上で利用する場合を想定し、以下のような環境を例に説明します。

- WWWサーバ: Apache 1.3.x
- ユーザ名: foo
- 日記のURL: http://www.hoge.example.org/~foo/diary/
- 上記URLのパス: /home/foo/public_html/diary

### CGIスクリプトの設定

配布アーカイブを展開し、中身をすべて`/home/foo/public_html/diary`にコピーします。以下の2つのファイルがCGIスクリプト本体なので、WWWサーバの権限で実行可能なようにパーミッションを設定してください。

- index.rb
- update.rb

また、/usr/bin/envを使った起動ができない環境では、各ファイルの先頭を、rubyのパスに書き換える必要があるでしょう。ISPのホームディレクトリにこっそりRubyを入れたような場合を除き、通常はあまり気にしなくても良いはずです。

### .htaccessの作成

続いて、CGIの実行環境を整えます。`dot.htaccess`を`.htaccess`にリネームして、環境に合わせて書き換えます。添付のサンプルは以下のようになっています。

    Options +ExecCGI
    AddHandler cgi-script .rb
    DirectoryIndex index.rb

    <Files "*.rhtml">
       deny from all
    </Files>

    <Files "tdiary.*">
       deny from all
    </Files>

    <Files update.rb>
    AuthName      tDiary
    AuthType      Basic
    AuthUserFile  /home/foo/.htpasswd
    Require user  foo
    </Files>

ここでは、

- CGIの実行を可能にし、
- サフィックス「.rb」のファイルをCGIと認識させ、
- index.rbをデフォルトのファイルに設定し、
- *.rhtmlとtdiary.*のファイルの参照を禁止して、
- update.rbへのアクセスにはユーザ認証が必要

という設定になっています。とりあえず書き換えが必要なのは、`AuthUserFile`と`Require user`でしょう。意味はWebででも調べて下さい。`AuthUseFile`は、あらかじめ`htpasswd`コマンドで作成しておく必要があります(これもWebで調べればわかります)。

また、利用するWWWサーバの設定が、CGIの実行ファイルのサフィックスを固定(例:.cgi)にしている場合があります。この場合、`AddHandler`や`DirectoryIndex`も変更する必要があるでしょう。これに応じて、`index.rb`や`update.rb`のファイル名も変更する必要があります。

### tdiary.confの作成

次に、`tdiary.conf.sample`を`tdiary.conf`にリネームして、内容を書き換えます。これはRubyスクリプトとして、CGIに直接読み込まれます。tDiaryの設定はほとんどCGI経由で行えるので、最低限書き換えるべきなのは最初に出てくる`@data_path`だけです。

    @data_path = '/home/foo/diary'

`@data_path`は、日記のデータを保存するディレクトリです。このディレクトリは通常、WWW経由でアクセスできない(`public_html`配下でない)ディレクトリを指定します。このディレクトリは、WWWサーバの権限で書き込めるパーミッションにしておく必要があります。

`tdiary.conf`には、他にもいろいろな設定項目を記述できます。それらの項目には以下の3つの種類があります。

#### CGIで設定できない項目

`@data_path`のように、CGIでは設定できない項目です。これらの項目は、`tdiary.conf`ファイルを直接編集して変更しなければいけません。

#### CGIで設定できる項目

変更画面のメニューにある「設定」を開くと、ブラウザからtDiaryの設定を変更できます。ほとんどの項目はここから設定できるので、わざわざ`tdiary.conf`を手で書き換える必要はありません。

#### CGIで追加設定できるが、標準設定を記述できる項目

`tdiary.conf`に記述しておくことで、CGIの設定画面からは編集できないが追加はできるといった設定をできる項目があります(リンク元記録除外や、リンク元変換表)。あらかじめ`tdiary.conf`に記述しておくことで、複数の人が同一サーバ上でtDiaryを使うような場合に手間を省くことができます。

各々の項目については、`tdiary.conf.sample`の説明を読んでください。一般的な使用では、`@data_path`だけを正しく設定すれば、あとはブラウザから変更が可能です。ただしツッコミをメールで受けとりたい場合には、これに加えて`@smtp_host`、`@smtp_port`も指定しておく必要があります。

また、サフィックス.rbのファイルをCGIスクリプトとして指定できない環境では、`index.rb`や`update.rb`のファイル名を変更する必要がありますが、この変更をtDiaryに教えるために、`@index`や`@update`という変数が用意されています。環境によってはこれも指定する必要があるでしょう。

`tdiary.conf`の設定が終わったら、`http://www.hoge.example.org/~foo/diary/`にアクセスしてみましょう。からっぽの日記ページが出れば設定は正しいです。不幸にして「Internal Server Error」が出てしまったら、Apacheのエラーログを参照して間違った設定を修正してください。

### セキュリティ

`tdiary.conf`には、tDiaryの設定をCGIから行う場合のセキュリティレベルを調整する変数があります。自分が管理するWebサーバで、自分だけが使う場合にはあまり気にしなくても良いですが、知人に貸したり、tDiaryを使った日記サービスを提供するような場合には、ユーザにできることを制限したい場合が少なくありません。

そこで、`tdiary.conf`中でセキュリティの設定を行います。通常、`tdiary.conf`の末尾には以下の2行が書かれています。

    @secure = false
    load_cgi_conf

`@secure`は、セキュリティ設定を指定する変数です。この値が`false`の場合、セキュリティチェックはいっさいかかりません。ユーザはCGI設定で好き放題ができます。それでは危険という状況下でtDiaryを運営する場合には、`@secure`の値を`true`にします。そうすると、CGI設定中における危険な変数操作やファイル操作が禁止されます。

また、`@secure`の値は、日記の表示時に後述するプラグインを実行する場合にも影響を及ぼします。これにより、`@secure`が`true`の場合には、いくつかのプラグインが利用できなくなります。

`load_cgi_conf`はその位置でCGIによる設定を読み込む指令です。つまり、`@secure`でセキュリティレベルを設定したあとでファイルを読み込むようになっています。

なお、両者の指定位置は独立しているので、両者の位置を組み合わせることで様々な設定を行うことが可能です。また、`@secure`を指定しない場合のデフォルト値は`true`です。

## tDiaryの実行

### 日記の更新

ページの先頭には、「トップ」「更新」の2つのリンクがあります。「トップ」は@index_pageで指定した表紙へ、「更新」は日記を更新するフォームへ移動します。もし「更新」をクリックした時、認証ダイアログが出なかったら、`.htaccess`の記述が正しくない可能性があります。

更新ページの先頭にもメニューがあります。一番右端に「設定」が増えているでしょう。ここをクリックすると、設定用のページが開きます。詳しくは日記の設定を参照してください。

更新ページには、日記の日付とその日のタイトル、本文を入力するフォームがあります。日付、タイトル、本文を入力して「追加」ボタンを押すと、その日の日記に追加されます。タイトルと本文はどちらも省略可能です。追加なので、一日に何度も日記を書く場合に、わざわざ以前のデータを呼び出す必要はありません。また、すでにタイトルが指定されている場合、タイトルを入力しなければ以前指定したものが使われます。

フォームで日付を入力して「この日付の日記を編集」ボタンを押すと、(その日の日記がすでに存在すれば)タイトルと本文に過去の日記のデータが読み込まれます。この時、フォームの最後のボタンは「登録」になります(つまり、追加ではありません)。

日記本文には日記向けに少し特殊化したHTMLを使います。多少癖があって人によってはなかなか馴染めないことがあるようなので、日記の書き方には必ず目を通して下さい。

### 日記の設定

更新画面で「設定」をクリックすると、設定画面になります。ここではtDiaryのさまざまな設定項目をブラウザから設定できます。各項目の説明は画面中に記述してありますから、それを参考にいろいろと設定を変えてみてください。また、ページ中には利用しやすくするために「OK」ボタンがたくさん置いてありますが、すべて同じものです。つまり、どの「OK」を押してもすべての項目が保存されます。

なお、この設定画面で行った変更は、`@data_path`で指定したディレクトリに別の`tdiary.conf`として保存されます(初期設定時に手動で書き換えた`tdiary.conf`ではありません)。このファイルは、元の`tdiary.conf`のあとに読み込まれるので、設定の内容はブラウザから指定したものが優先されます(ただし、元の`tdiary.conf`中の設定を変えることで、読み込むタイミングは変更できます)。

### 日記の参照

日記の参照には、最新、月別、日別の3種類のモードがあります。デフォルトページは最新です。月別は、ページの最初の方に出るカレンダーをクリックすると参照できます。また、日別は日付をクリックすると参照できます。

最新・月別と日別には、表示される内容に違いがあります。最新・月別では「本日のツッコミ」「本日のリンク元」が省略されて表示されるのに対し、日別ではすべて表示されます。また、日別にはツッコミ用のフォームがあります。ツッコミをしてもらいたかったら、読者を日別ページに誘導するように、ヘッダ(@header)を工夫する必要があるかも知れません。

月、日、セクション、ツッコミには、それぞれアンカーがあり、他の場所からリンクできるようになっています。それぞれのアンカーはリンクにもなっているので、そこにポインタを合わせることで、そのURLを知ることができます。

携帯端末からの参照ではデータ量に制限があるため、上記の機能はほとんど使えません。最新は最新日付の日記だけが表示され、前日・翌日へ移動できるだけです。ただし、すべてのページにツッコミ用フォームが付いているので、ツッコミを入れることは可能です。

### プラグインによるカスタマイズ

tDiaryにはプラグインと呼ばれる機能があります。プラグインを追加することで、tDiaryの機能を増やしたり、変更したりすることが可能です。プラグインについての詳しい説明は、HOWTO-use-plugin.html(使い方)・HOWTO-make-plugin.html(作り方)を参照してください。

### あとは……

日記をつけ続けるだけです(これが一番難しい:-)。Have fun!!

## 著作権、サポートなど

tDiaryは、作者であるただただし(sho@spc.gr.jp)が、GPLの元で配布、改変を許可するフリーソフトウェアです。

ただし、配布ファイルのうち`erb/`ディレクトリ配下にあるファイルはすべて、咳さんによるERbというライブラリです。これらのファイルについては別途http://www2a.biglobe.ne.jp/~seki/ruby/をごらん下さい。

また、tDiaryフルセットに付属するテーマ、プラグインはすべて、それぞれの原作者が著作権を有します。配布条件も必ずしもGPLではありません。個々のファイルを参照してください。

tDiaryはhttp://www.tdiary.org/でサポートを行っています。ご意見・ご要望はこちらへどうぞ。パッチ歓迎です。