魚がしプランナー uogashi.rb

最近なんか変わった?

何するものぞ

魚がしツアー決行日決定支援ソフト。わからんて。えー、早い話、多人数で どっかにいくのに一番参加人数の多くなる日程を決定したり、団体旅行とかで何 日に何人が泊まれるかの集計を取ろうって時に抜群の威力を発揮するシステムな のだ。予定決めをするときにこれまで欲しくてたまらないシステムだった、 それが uogashi.rb だ。

誰がためのもの

「じゃあ、飲みに行こうか。今月の土日で行けそうな日に○をしてこのメイ ルに続けて書いておくれー」
という号令とともに、

	2(土) 3(日) 9(土) 10(日) 16(土) 17(日) 23(土) 24(日) 30(土)
yuuji     ○    ×   ○     ○    △     ○      ×    ×     ○
yae       ○    ×   ×     ×    ○     ×      ○    △     ○
kenjiro   ○    ○   ○     ○    ○     ○      ○    ○     ○

こんなメイルを回した経験はないだろうか。参加したい面子の予定をまとめ て、参加できる人数が一番多い日を飲み会の日にしよう! なんてことは誰しもが 経験しているはずだ。または二泊三日とか、そんな感じの団体旅行をしようなん て時に、初日は何人が泊まるのか、二日目は何人が夕飯を食うのか、そんな計算 に頭を痛めた幹事は多いはずだ。メイルだけでやろうとすると、あとで集計する のが結構大変だし、誰かが古いメイルに追加して返事を書いちゃったりなんかす るとあとで復旧するのが結構大変だ。そんなときにCGIの使えるWWWサーバで uogashi.rb を動かそう。悩みは一挙解決だ。

あそうそう、前提として、予定表を回す面子は全員メイルアドレスを持って いることが必要だ。まあ、これに興味を示す人達の飲みは大体そうだよな。

使い方

初期設定の仕方は後述するとして、仕込みが終わったあとではこんなページ が現れる。

登録する
名前2(土)3(日)9(土)10(日) ひとこと

[登録する]のリンクを辿ると自分自身の登録用ログイン画面が現れる。

メイルアドレス
パスワード

ここで、自分自身のメイルアドレスとサーバにもらったパスワード(初回登録 時は勝手にパスワードを発行してくれる)を入力すると

名前
2(土)
3(日)
9(土)
10(土)
ひとこと
OK

てな予定入力画面が現れる。自分のスケジュールにしたがってちゃんと入力 してOKをクリックすると最初に見えた表が次のように変化する。

名前2(土)3(日)9(土)10(日) ひとこと
yuuji× ウニ食いたい!

この表のエントリはあとからいつでも変更することが可能。もちろん誰でも 参加することが可能。参加できる人を限定したいときは別途 .htaccess などで CGIを置くページ自体にパスワード制限かければよろし。

なに、いまいちピンと来ないとな。じゃあ、実際に 遊んでみたまへ。

設置方法

まず、自分のホームページがあるWWWサーバでCGIが使えるか確認せよ。使え なかったらさらばじゃ(;_;)/~
さらに、そのサーバにRuby がインストールされているか確認せよ(というか、Rubyがまだ無かったら インストールしようか、という元気が欲しい)。

なに、使えるとな。めでたい。では、uogashi.rb を持ってゆくが良い。そして適当なディレクトリにコピーする。例として ~/public_html/uogashi/ というディレクトリにインストールしたとし て説明を続ける。以下、三つのパターンで説明するが、どれも上記の 「2(土)、3(日)、9(土)、10(日)、ひとこと」という項目の集計を行いたい場合 の設定に関しての説明である。

まず、大前提として、CGIが動作するように .htaccess を書いておく。

 AddHandler cgi-script .cgi
 DirectoryIndex uogashi.cgi
 

てかんじかね。

【スクリプトのインストールとかがある程度分かっている場合】

uogashi.rbの動作は、同じディレクトリに置いてある uogashi.confというファイルによって決まる。 uogashi.confでは、基本的変数の設定と入力すべき項目名の設 定を行う。今回入力して欲しい項目は「2(土)、3(日)、9(土)、10(日)、 ひとこと」である。また、集計を行う人(ほとんどの場合WWWページの所有 者)がyuuji@gentei.orgであったとすると、 uogashi.confには次のように書いておけば良い。

maintainer=yuuji@gentei.org
title=飲み会
heading=飲み会予定決定表
leader=行けそうな日に○をしてください
名前	text(20)
2(土)	option(○,×)
3(日)	option(○,×)
9(土)	option(○,×)
10(日)	option(○,×)
       

ちょっと説明を欲張ってtitle, heading, leader なんて値 も設定してしまったが、それぞれの意味は、

maintainer   集計ページの所有者
title 集計ページの<TITLE>となる文字列
heading 集計ページの最初の<H1>見出し文字列
leader 表の直前につく説明の一行文章

である。そのあとに続けて、多くの利用者に入力して欲しい項目名を 列挙する。項目名定義は全てTAB区切りで記述し、書式は

項目名 [TAB] 値の種別

となっている。値の種別は textoption があ り、textの場合は参加者が任意の文字列を入力することができ、 optionの場合は管理人があらかじめ設定した文字列のうちから ひとつを選ぶことができるようになる。飲み会に参加できるかどうかの表 明をするばあいにはたいてい、「○=いける、△=検討中、×=いけない」 なんてことが多いのでuogashi.confの項目名定義には次のよう に書く。

3(土)	option(○,△,×)

いくつかの文字列のうちひとつを選んで欲しいときは、optionのあと の()内に、選択肢となる文字列を半角カンマで区切って列挙すれば良いの である。もし、任意の文字列を入れて欲しい場合はtextを指定 し、その後ろの括弧内に最大で入力できる文字数を入れる。つまり

ひとこと	text(20)

と書けば、「ひとこと」という項目に対して20バイト以内の任意のメッ セージを入れられることになる。

最後にCGIとして動くときにhttpdが書き出すファイルをあらかじめ作っ ておく。スクリプトのあるディレクトリの

に対して情報を書き込むので、たとえば

% mkdir repository
% chmod 1777 repository
% touch uopass.db uogashi.log
% chmod a+w uopass.db uogashi.log

する。もちろん chmod a+w でなくて、httpdだけに書けるようなグルー プ設定などがあればその方が望ましい(分かる人には分かるね)。

【あんまり詳しくないけどサーバにログインできる人】

./uogashi.rb install 作業ディレクトリ名
という風に 起動すると、いろいろと設定すべき項目を対話的に聞かれたあとで「作業 ディレクトリ名」以下に勝手に予定決定システムが出来上がる算段。たと えば、

% cd ~/public_html/uogashi
% ./uogashi.rb install nomi2000

と起動して、いろいろ聞かれて答えたあとには
http://あなたのサーバ/~あなた/uogashi/nomi2000/uogashi.cgi
というURLで飲み会期日決定システムが上がるようになっている。

【全く詳しくない人】

WWW経由でセットアップできるようになった。インストール直後だけは、 「管理人メイルアドレス」(多くの場合自分のアドレス)を設定する必要が ある。uogashi.rb をインストールしたディレクトリで以下のようにする。

% cd ~/public_html/uogashi
% ./uogashi.rb adduser yuuji@gentei.org

adduserの後には「管理人メイルアドレス」をいれること。するとがしゃ がしゃとユーザを足して……(続く)

より詳しい設定

ここは、自分でuogashi.confをいじれる人のみ。このファイルでは、 以下の変数が設定できる。

maintainer ページ管理人のメイルアドレス(必須)
title 集計ページのtitle
bgcolor 〃 背景色
heading 〃 H1見出し
leader 〃 表の直前に来る説明文一行
inputwarning 〃 入力時の注意文章
numbering 〃 表に番号を付けるか(true/false)
sendmail sendmailコマンドのフルパス
nslookup nslookupコマンドのフルパス
passwdlength 自動生成パスワードの長さ
forgotten ユーザがパスワードを忘れたときの呪文

また、ある日付での参加できる人が何人居るかを集計したいときには 項目定義の option(…) 定義に :stat オプションを指定する。

名前	text(20)
2(土)	option(○,×):stat
3(日)	option(○,×):stat
9(土)	option(○,×):stat
10(日)	option(○,×):stat
ひとこと	text(20)

と記述しておくと、「2(土)、3(日)、9(土)、10(日)」に記入された ○, × それぞれの値が全員で何個揃ったかの集計表が末尾に表示される。つま り、こんな感じ。

名前2(土)3(日)9(土)10(日) ひとこと
yuuji×× ウニ食いたい!
yae××× ツモ一番
kenjiro 昇龍拳

×
2(土)30

×
3(日)21

×
9(土)12

×
10(日)12

さらなるおまけ、各桁の値をセンタリングしたいとかいう場合は、該当する 項目定義の末尾にさらにTABで区切って、center を追加する。たとえば こんな感じ。

名前	text(20)
2(土)	option(○,×):stat	center
3(日)	option(○,×):stat	center
9(土)	option(○,×):stat	center
10(日)	option(○,×):stat	center
ひとこと	text(20)

項目名定義の第3フィールドには、center, right, left を指定でき、それぞ れ対応桁の値を「センタリング」、「右寄せ」、「左寄せ」して表示するように なる。また、第3フィールドに ignore を指定するとその桁位置のデータを全て 無視するようになる。統計を取る途中で「2(土)は誰も集まりそーもねーな、じゃ あ、2(土)は外しちゃえ」なんてことがあったときに、既に2(土)に書き込んでし まった人に入れ直ししてもらわなくても継続して処理ができる。

ちうい

全ての参加希望者の自分自身のデータを自分自身で管理させることになるの でセキュリティは無い。参加者だけに分かるURLで開くとか、さらにそのディレ クトリにパスワードをかけるとか、気を付けて使うこと。

また、予定登録者は全員正しいメイルアドレスで利用していることを仮定し ている。自分のアドレスで別の人の予定エントリを作ることもできちゃう(とい うかそれを許可しないと、メイルアドレスの無い人の代理で登録するって事がで きなくなっちゃって却って不便)。誰がどのメイルアドレスで登録してるかを調 べたい場合は、予定一覧表の出ているページのソースを見ると良い。

なかなかwebにアクセスするのが大変そうな人のために、あらかじめ特定の人 の参加表を作っておくことも可能である。repository/ ディレクトリにあるファ イルの中身をどれか見ればやり方は分かると思う。その人のメイルアドレスと同 じ名前のファイルを作り、そこに他の人の内容と同じような行を書き込んでおけ ば良い。あとでその人本人が登録/修正しにきた場合のことを考えて、httpdが書 き込みできるように chmod しておくのを忘れずに。


yuuji@gentei.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]