Ruriko Users Manual

Rurikoとは?

Ruriko(RUby Remote Information Keeper Online)は Webページの更新情報を定期的に取得してまとめて閲覧する、 いわゆる『アンテナ』、『Webチェッカ』と呼ばれる類の アプリケーションです。

類似のアプリケーションと比べたRurikoの特徴は次のような点です。

推奨環境

Rurikoを動作させるには次の環境が必要です。

注意点

Rurikoの設定ファイルは全て生のrubyスクリプトです。 これは設定ファイルのparserを書き起こす手間を省くためですが、 最低限の設定を行うだけならば特にrubyの文法知識が無くても 平気なように考慮されています。

プラグインを書いたりといった大幅なカスタマイズをする場合には、 ある程度のrubyの知識が必要となるでしょう。

Rurikoの構成ファイルはすべてEUCで書かれています。 これはRurikoの内部コードをEUCで統一しているためで、 漢字コードを変更した場合は正常に動作しない恐れがあります。 EUCを編集可能なエディタなどを御用意ください。

ファーストステップ

Rurikoは、大幅なカスタマイズをしないならば、 5分程度で導入を済ませられるように設計されています。 次の順序に従って導入を行なって下さい。

  1. アーカイブをpublic_html(もしくはシステムの設定する HTMLディレクトリ)の下に展開する。
  2. sys/setting.rbをusr/setting.rbにコピーし、 setting.rbの項を参考に書換える。 最低限、 ADMIN_NAME, ADMIN_EMAIL, ADMIN_PASSWORD, SCRIPT_URL, HOME_URL の5つだけは設定する。
  3. コマンドラインで次のコマンドを実行する。
    ruriko.cgi --init
  4. 情報の更新を定期的に行なわせるためのcrontabの設定を行う。 情報の更新を行なわせるためのコマンド列は以下の通り。 crontabの設定の仕方については使用している環境のマニュアルを読む。
    ruriko.cgi --update --generate
  5. アンテナのホームにアクセスし、管理者メニューから 更新情報を取得するサイトを登録する。

ファイル構成

├ ruriko.cgi スクリプト本体
├ manual.html 本ドキュメント
├ sys/ システムディレクトリ
├ usr/ ユーザーディレクトリ
├ data/ データディレクトリ
├ backup/ バックアップディレクトリ

システムディレクトリには各種のシステムファイルが収められています。 これらは全てrubyのスクリプトです。 システムディレクトリのファイルは、 ユーザーディレクトリに同名のファイルを作成する事で その機能を上書きする事が出来ます。 Rurikoのアーカイブのユーザーディレクトリは空になっているので、 ユーザー設定をユーザーディレクトリに置いておく事で、 ユーザー設定を変更しないまま、 上書きするだけでバージョンアップが行えるようになっています。

setting.rb

setting.rbはサイト固有の設定を格納するファイルです。 あなたの環境に合わせて詳細を設定して下さい。

TITLE
アンテナのタイトル。
ADMIN_NAME
管理者の名前。
ADMIN_EMAIL
管理者のメールアドレス。
ADMIN_PASSWORD
cryptされた管理者のパスワード。
次のコードをコマンドラインで実行し、パスワードを入力すると cryptされたパスワードが表示されるので、その値をコピー&ペーストして下さい。
ruby -lpe '$_=$_.crypt([[rand(65536)].pack("S")].pack("m").tr("+", "."))'
SCRIPT_URL
スクリプトファイル(ruriko.cgi)のURL。
HOME_URL
アンテナのホームディレクトリ。
スクリプトからのリターンパスとして使われます。
ALLOW_ONLY_ADMIN_ACCESS
アクセスポリシー。
この値がtrueだと、管理者だけがサイトの登録/削除/更新を行なえます。 この値がfalseだと誰でも自由にサイトを登録できるようになります。
CONFIRM_NULL_PASSWORD_AS_ADMIN_WHEN_ADD
アクセスポリシー。
この値がtrueだと、パスワードを空にしてサイトを登録した場合に、 そのデータは自動的に管理者の管轄化に置かれ、管理者しか 削除/修正が出来なくなります。
ALLOW_ONLY_ADMIN_ACCESSの値がfalseで無ければ この定数は意味を持ちません。
MAX_HTTP_CONNECTIONS
一度に開くHTTP接続の最大数。
Rurikoはサイト更新情報を取得する際にスレッドを使って一度に 複数のHTTP接続を開きます。たくさんの接続を許せばそれだけ 早く更新処理が終わりますが、その分マシンパワーを使います。 お使いのマシンの環境に合わせて適切な値に設定して下さい。
HTTP_TIMEOUT
HTTP接続の時間制限。
HTTP接続を行う時の時間制限を秒数で指定します。 この制限を越えたHTTP接続は自動的に切断されます。
CACHE_EXPIRE_TIME
キャッシュの有効期限
HTML取得した更新時刻のキャッシュの有効期限。 この期限を過ぎるとそのデータは信用出来ない物とみなされます。
BACKUP_LIMIT_NUM
バックアップ制限。
バックアップファイルに数で制限をかけます。 設定した数を越えるバックアップファイルは古い順に削除されます。 0に設定するとバックアップファイルは一切作られません。 nilに設定すると数によるバックアップの制限は行なわれません。
BACKUP_LIMIT_SIZE
バックアップ制限。
バックアップファイルにサイズで制限をかけます。 バックアップファイルの合計容量が設定した値を越えると、 古い順に削除されます。 nilに設定するとサイズによるバックアップの制限は行なわれません。
BACKUP_LIMIT_TIME
バックアップ制限。
バックアップファイルに時間で制限をかけます。 作成されてから設定した秒数を過ぎたバックアップファイルは削除されます。 nilに設定すると時間によるバックアップの制限は行なわれません。
BACKUP_FILE_EXTENSION
バックアップファイル拡張子。
バックアップファイルの圧縮に使う拡張子を指定します。 指定の拡張子を使うCompressor Plug-Inが インストールされていると、バックアップファイルは圧縮して保存されます。
LOG_PATH
ログファイルのパス。
ログファイルのパスを指定します。 nilを指定するとログファイルは保存されません。
REFRESH_INTERVAL
Refresh間隔。
htmlファイルをMetaタグのRefreshを使って 更新させる間隔を指定します。 nilを指定するとRefreshはされません。
MODIFY_SPECIFIC_URL
URLの末尾に更新時刻識別IDを追加。
この値をtrueに設定すると、出力されるHTMLのURLの末尾に "?05071234"といった形式で、更新時刻を識別するための IDが付加されます。これにより、更新されたURLがひとめでわかる ようになります。
CATEGORY
カテゴリ分け。
この値が設定されていると、 各サイト情報にカテゴリを設定できるようになります。 設定する値はカテゴリ情報(カテゴリ名/カテゴリラベルの配列)の配列です。 カテゴリ名には英数字しか使えません。 カテゴリラベルは省略するとカテゴリ名と同じとみなされます。
カテゴリ分けを行なうと、indexファイルの他に、 各カテゴリ毎に分かれたカテゴリファイルが作られます。
nilを指定するとカテゴリ分けは行なわれません。

コマンドラインオション

Rurikoは次のようなコマンドラインオプションを持ちます。

--init
CGI用のファイル/ディレクトリを初期化。
CGIが書き込みをする必要のあるファイル/ディレクトリに 適当なパーミッションを与えて初期化します。 CGIを実行する前に必ず一度は実行する必要があります。
--update
更新情報の更新。
ローカルインデックスに登録されているサイトに アクセスして最新の更新情報を取得します。
--generate
ファイルの生成。
更新情報を元に、HTMLファイルを生成します。 HTMLファイルの生成には generator plug-inが使わます。
--import <filename>
インデックスのインポート。
対応したファイル形式のファイルを ローカルインデックスにインポートします。 ファイルの解釈には translator plug-inが使われます。
--export <filename>
インデックスのエクスポート。
対応したファイル形式のファイルを ローカルインデックスからエクスポートします。 ファイルの解釈には translator plug-inが使われます。

Plug-In

Rurikoでは様々なアルゴリズム部分のコードを Plug-Inとして分離したコンポーネントにする事で 容易な拡張を可能としています。

1つ1つのPlug-Inは単純なrubyスクリプトファイルになっています。 Plug-Inは".rb"というsuffixを持たなければなりません。 それぞれのPlug-Inには、種類毎に実装しなければいけない関数が 定められています。これらの関数が必要に応じてプログラム本体から 呼び出されます。

全てのPlug-Inに共通した関数に次のような物があります。

active
Plug-Inのアクティビティ。
そのPlug-Inを有効にするかどうかを決定します。 trueを返すとPlug-Inが有効に、falseを返すと無効になります。
この関数は全てのPlug-Inに於いて 必ず定義しておかなければいけません。
init
Plug-In関連ファイルの初期化
コマンドライン--init オプションが指定された時に、呼び出される関数です。 Plug-In用のテンポラリデータなどを保存しておくための ファイルやディレクトリを初期化する目的に使用します。
この関数は必ずしも定義しておく必要はありません。

Clipper Plug-In

取得したHTMLファイルのクリッピングを行います。

geocitiesなど広告の入るサイトのHTMLは、 取得する度にHTMLファイルの内容が変わり、 正確な更新時刻を取得する障害になります。 そこで、更新時刻を解析する前にあらかじめ HTMLファイルから広告などを取り除く作業が必要です。 Clipper Plug-InはこうしたHTMLファイルのクリッピングを 行うためのPlug-Inです。

match(site)
Plug-In適用判定。
あるサイトから取得したHTMLに、 このPlug-Inを適用するかどうかを判定します。 Plug-Inを適用する場合はtrueを返します。 引数はSiteクラスのオブジェクトです。 通常はsiteのtarget_urlを見てこのPlug-Inを適用すべきかどうかを判定します。
clip(body)
クリッピング。
HTMLファイルのクリッピングを行ないます。 引数のbodyはEUCに変換されたHTMLファイルのStringです。 この関数ではクリッピングしたHTMLファイルをStringとして返して下さい。

Parser Plug-In

取得したHTMLファイルの解析を行います。

RurikoはなるべくHTMLのHTTPヘッダから 更新時刻を取得しようと試みますが、 それが出来なかった場合にはHTMLファイルの中に 最終更新時刻が記述されていないか解析を行います。 Parser Plug-InはこうしたHMTLの解析を行うための Plug-Inです。

match(site)
Plug-In適用判定。
あるサイトから取得したHTMLに、 このPlug-Inを適用するかどうかを判定します。 Plug-Inを適用する場合はtrueを返します。 引数はSiteクラスのオブジェクトです。 通常はsiteのtarget_urlを見てこのPlug-Inを適用すべきかどうかを判定します。
parse(body)
時刻解析。
HTMLファイルに記載されいてる時刻を解析します。 引数のbodyはEUCに変換されたHTMLファイルのStringです。 この関数ではHTMLファイルを解析して、解析できた時刻を返して下さい。 返り値はUTC1970/1/1 00:00からの秒数、 時刻の解析に失敗した場合はnilを返して下さい。

Generator Plug-In

最終結果としてファイルを出力します。

取得した更新情報は様々な形式で出力される可能性があります。 ユーザーの需要に応じて柔軟な出力形式に対応するために ファイル生成アルゴリズムの部分を分離してやったのが Generator Plug-Inです。 コマンドラインから --generateオプションをつけて実行した時に、 これらのPlug-Inが呼び出されてファイルを生成します。

詳しい書き方は plugin/generator/index.shtml.rbを 参考にして下さい。 これはindex.shtmlを出力するために rubyのCGIクラスを使った例です。

generate(sites)
ファイルの生成。
サイトの更新情報を元にファイルを出力します。 引数のsitesSiteArrayです。

Translator Plug-In

ファイル形式を変換します。

更新時刻情報をあらわすフォーマットには様々な種類があります。 これらのフォーマットとRurikoの内部表現の相互変換を行うのが Translator Plug-Inです。

extension
拡張子。
ファイル形式を識別する拡張子を文字列で返して下さい。 コマンドライン--import--exportを指定した時に ファイルの形式を拡張子から自動判別する際に用いれられます (ファイル形式の判別)。
import(input)
ファイルのインポート。
ファイルをRurikoの内部形式に変換します。 inputからの入力を解析して、サイト情報を SiteArrayとして返して下さい。
export(output, sites)
ファイルのエクスポート。
Rurikoの内部形式をファイルの形式に変換します。 引数のsitesSiteArrayです。 適当に整形してoutputに出力して下さい。

Compressor Plug-In

データ列を圧縮/展開します。

どのような圧縮プログラムが使えるかは環境によって異なります。 そこでRurikoではCompressor Plug-Inという層を挟む事で、 これらの差異をできるだけ吸収しようとしています。 Compressor Plug-Inのコードは、 active関数が呼ばれた時に、 その中で対象となる圧縮プログラムの有無をチェックして、 プログラムが存在する時だけtrueを返します。 こうする事で、確実に存在するプログラムに対してだけ 圧縮/展開メソッドが実行できる事が保障されます。

extension
拡張子。
ファイル形式を識別する拡張子を文字列で返して下さい。 コマンドライン--import--exportを指定した時に ファイルの形式を拡張子から自動判別する際に用いれられます (ファイル形式の判別)。
copmpress(data)
データ圧縮。
圧縮コマンドを呼び出すなどの方法でdataを 圧縮し、圧縮後のデータ列を Stringとして返して下さい。
expand(data)
データ展開。
圧縮コマンドを呼び出すなどの方法でdataを 展開し、展開後のデータ列を Stringとして返して下さい。

更新履歴

2002/8/12 v0.1.20
lirsを正しく解析できていなかったバグを修正。
2002/6/13 v0.1.19
暫定公開。
2001/6/18 v0.1.18
主立ったtimezoneを表引き参照するようにした。
usrディレクトリを追加。ユーザー定義ファイルでシステムファイルのオーバーライドが出来るようにした。
2001/6/16 v0.1.17
取得ファイルのContent-Typeがtext/htmlで無かった場合は 行毎のmd5チェックをせずに、全体でのmd5チェックのみで 一致判定を行うようにした。
2001/6/5 v0.1.16
日付解析時に不正な日付に対してエラーを起こしてしまう不具合を修正。
サイト更新でURLを直接変更できるようにした。
取得した時刻が未来を指していた場合無視するようにした。
2001/5/28 v0.1.15
Location: ヘッダを追えるように修正。
2001/5/7 v0.1.14
出力HTMLのURLの末尾に更新時刻を識別するIDを追加するようにした。
スレッドまわりのバグを修正。
2001/5/6 v0.1.13
サイトの簡単な説明を入れられるようにした。
スレッドの排他制御に失敗していたのを修正。
2001/5/4 v0.1.12
前回ヘッダから情報を取得した場合、HEADリクエストを使うようにした。
generator/index.shtml.rbを修正。
clipper/tok2.com.rbを修正。
LENGTHによる時刻取得メソッドのロジックのミスを修正。
2001/5/3 v0.1.11
カテゴリを導入。
2001/5/1 v0.1.10
N6/IE6以外のブラウザのために擬似SideBarを導入。
出力htmlにMetaタグを挟むようにした。
2001/4/26 v0.1.9
URLの一意性チェックを追加。
logを取るようにした。
backupメソッドを改修。
2001/4/24 v0.1.8
HINA-DI2.2に準拠。
LIRS/HINA/DIのtranslator plug-inにimportを実装。
2001/4/23 v0.1.7
LIRS/HINA/DIのtranslator plug-in作成。
compress/gzip/bzip2のcompressor plug-in作成。
2001/4/22 v0.1.6
N6のSideBar、IE6のPersonalBarに対応。
2001/4/21 v0.1.5
html.rbをcgi.rbに統合。
2001/4/20 v0.1.4
Setting::CONFIRM_NULL_PASSWORD_AS_ADMIN_WHEN_ADDを追加。
ヌルパスワードを自動的に管理者のパスワードに変換して 登録するという管理オプション。
2001/4/19 v0.1.3
local_indexのバックアップ機能を追加。
2001/4/17 v0.1.0
Rurikoプロトタイプ。