このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

BBS_RECENTファイルをカスタマイズしたい

発言者:へべ
( Date Sunday, November 26, 2000 14:32:17 )


EasyBBS SR IIを使わせていただいています。m(_ _)m
BBS_RECENTをカスタマイズする必要が出てきたのですが、以下のようなことが
可能かどうか、また、もし比較的簡単に出来るものでしたら、手順について
アドバイスただけると助かるのですが・・。

 ●やりたいこと
 BBS_RESENTでは、全ての会議室の発言履歴が登録・表示されますが、表示に
 ついては個々のユーザーに必要な会議室の履歴のみを表示させたい。

  表示・非表示については、WebSTARのSSIで、showタグ、hideタグによって
  行いたいので、BBSへの書き込み時、その会議室名を判定して、その会議室
  履歴を表示させたいユーザーに対するshowタグをBBS_RECENTファイルに
  書き込みたい。

  例えば、“テスト伝言板”にアクセスできるユーザが木村拓哉と工藤静香
  だった場合、
  BBS_RECETNTのHTMLとしては

   <!--#hide-->
   <!--#show var="piUserKeyword" op="=" val="kimutaku"-->
   <!--#show var="piUserKeyword" op="=" val="shizuka"-->
   <TT>11/02 18:23  「テスト伝言板」で <b>木村拓哉</b> </TT><BR>
   <UL>「<a href="/A-BBS/read.bbs?BBS_MSG_001102175719.html#001102182327">結婚します</a>」 にコメントしました</UL><p>
   <!--#hide-->

となるようにしたいのです。(valの中身は各ユーザーのアカウントです)

おそらくソースファイル内で“--- Recent ページに登録する”というあたりに
if文を記述するのだと想像しているのですが、AppleScriptがわからないので、
もし比較的手間無くカスタマイズ可能なものでしたら、どのようにすればよい
のかアドバイスいただけますでしょうか?

よろしくおねがいします。m(_ _)m
(わかりにくい文面ですみません)


田中求之 さんからのコメント
( Monday, November 27, 2000 15:32:13 )

>表示については個々のユーザーに必要な会議室の履歴のみを表示させたい。

不可能ではありませんが、かなり大掛かりな改造になります。というのも、
アクセスした会員が、その時点でアクセスを許されている会議室を、すべて
チェックするようにしなければ、きちんと機能しないことになりますよね?

ですから、あらかじめ SSI のタグとしてユーザーの判定条件を埋め込むと
いうのは、現実的ではありません(ユーザーが増えたときに、膨大なタグを
あらかじめ書き込む必要がありますし、メンバーの加入/脱会に対処できない)

現在のように、あらかじめ一つの HTML ファイルに Recent (履歴)を書き込んで
おくという方法では無理だと思います。各書き込み/発言ごとに履歴の記録を
わけて保存しておき、アクセスしたユーザーの権限に応じて、記録の中から
必要なものを抜き出して表示する、という手順の処理になります。

作るうえでの課題は、アクセスしたユーザーの権限の判定ですね。この部分が
高速に機能しないと、使い物にならないと思います。


具体的なスクリプトの次元で検討したわけではありませんが(下手に考える
よりスクリプトを動かしてみたほうがはっきりすることも少なくないのです)
少なくとも、簡単にはいかないと思います。

そもそも、Recent を SSI で処理させる部分も、なかなか難しいですし。

へべ さんからのコメント
( Tuesday, November 28, 2000 04:00:45 )

田中先生、コメント有り難うございます。m(_ _)m

>作るうえでの課題は、アクセスしたユーザーの権限の判定ですね。この部分が
>高速に機能しないと、使い物にならないと思います。

私が考えているのはとても単純なものなのです。
アクセスしたユーザーごとに、アクセス許可されている会議室をチェックしようという
ものではなく、逆に会議室ごとにアクセスを許可するユーザーを決めておくというものです。

どうにも説明が下手なのでうまくお伝えできるか不安なのですが、
例えば・・・


会議室名| 許可されたユーザー名(ユーザーID)
---------------------------------
会議室A| いぬ、ねこ
会議室B| いぬ、りんご
会議室C| 全員
---------------------------------

という環境があるとします。
仮に、いぬさんがいずれかの会議室で発言するとします。
履歴がBBS_RECENTに書き込まれる際、どの会議室での発言かを判定させます。
(“roomName” を比較することになるのでしょうか・・?)

会議室Aなら
   <!--#hide-->
   <!--#show var="piUserKeyword" op="=" val="いぬ"-->
   <!--#show var="piUserKeyword" op="=" val="ねこ"-->
   <TT>11/02 18:23  「会議室A」で <b>いぬ</b> </TT><BR>
   <UL>「<a href="/A-BBS/read.bbs?BBS_MSG_001102175719.html#001102182327">企画書</a>」 にコメントしました</UL><p>
会議室Bなら
   <!--#hide-->
   <!--#show var="piUserKeyword" op="=" val="いぬ"-->
   <!--#show var="piUserKeyword" op="=" val="りんご"-->
   <TT>11/02 18:23  「会議室B」で <b>いぬ</b> </TT><BR>
   <UL>「<a href="/A-BBS/read.bbs?BBS_MSG_001102175719.html#001102182327">企画書</a>」 にコメントしました</UL><p>
会議室Cなら
   <!--#show-->
   <TT>11/02 18:23  「会議室C」で <b>いぬ</b> </TT><BR>
   <UL>「<a href="/A-BBS/read.bbs?BBS_MSG_001102175719.html#001102182327">企画書</a>」 にコメントしました</UL><p>

と記述し、会議室ごとにアクセス許可されているユーザーに対する show タグ(場合によりhideタグ)を設定します。
BBS_RECENTについての処理はこれを追加するだけです。


で、ユーザーがアクセスした際の表示の方ですが、予め WebSTARで、BBS_RECENTファイルへのアクセス制限を全てのユーザーに
対して設定しておきます。
ユーザーがアクセスした際にはブラウザでユーザーIDとパスワードによる認証が行われますので、WebSTARのSSIの環境変数 “piUserKeyword” に
認証に使われたユーザーIDが入ります。
なので、BBS_RECENTを表示した際に、上記のタグで、ユーザーごとに表示・非表示が行える という感じです。

この表示の際の処理速度ですが、試しにBBS_RECENTファイルに手打ちでタグを打ち込んで表示してみた限りでは、ほぼ実用に問題ない
速度で表示されました。(各会議室のユーザーを10〜15名程度を想定して実験)
タグの書き込みさえ出来れば実現できそうで、思いの外、よい感触でした。

あと、30名程度のイントラ内での運用ですので、ユーザー数などの変動などはほとんどないです。

自分がAppleScriptを理解さえできれば実際に試してみるところなのですが・・。



田中求之 さんからのコメント
( Wednesday, November 29, 2000 00:03:36 )

なるほど、わかりました。

ユーザー数が少ないのであれば、スクリプトの改造で可能ですね。へべさん
のおっしゃるように、Recent の書き込みを行う際に、会議室名(フォルダー
名)をもとに、そこにアクセスが許されているユーザーの一覧のデータを得
て、それをもとに SSI 用のタグを生成して、一緒に書き込むようにすると
いう、という処理の流れになります。

ただし、書き込むタグがかなりの量になることが予想されますので、記録す
る数を減らさないと、CGI のデータ容量オーバーでエラーになる危険性が出
てきます。20発言程度を遡る程度にしておかないと危ないでしょうね。

で、そうなってくると、Recent が本当に役に立つのか、という根本的な問
題が出てくるんですよ。20個のうちから自分にアクセスできるものだけが
表示されるとなると、実際にユーザーが見ることができる履歴はかなり少な
くなってしまうことが考えられます。となると、全体の Recent を見るより、
自分に関係のある会議室の各 Recent をチェックしたほうが、結果的に発言
の動向が良く分る(場合によっては、そうしないと流れが分らない)という
ことにもなってくると思いませんか?

もちろん、それでもよいということなら実装することはできますが、残念な
がら、最初におっしゃっていたような

>比較的手間無くカスタマイズ可能

というレベルではないですね。やはり AppleScript をある程度は理解して
取り組んでいただく必要があります。2、3行をちょこちょこっと書き換え
るっていうようなレベルの作業ではありませんので。

へべ さんからのコメント
( Wednesday, November 29, 2000 13:02:35 )

田中先生、コメント有り難うございます。m(_ _)m

昨日からAppleScriptのことを調べまして、なんとか動作するようになりました。

>ただし、書き込むタグがかなりの量になることが予想されますので、記録す
>る数を減らさないと、CGI のデータ容量オーバーでエラーになる危険性が出
>てきます。20発言程度を遡る程度にしておかないと危ないでしょうね。

はい・・。動作するようにはなったのですが、スクリプトを記述していると
“テキストが長すぎますのでテキストの挿入ができませんでした”
とダイアログが出て、それ以上書けなくなってしまいました。
AppleScriptの場合、スクリプトを記述できる容量に制限があるのでしょうか?
でしたら、田中先生がご指摘してくださったCGIのデータ容量オーバーでのエラー
以前の問題ということですよね。
それほど多くを書き加えたわけではないと思うのですが、
結局書けたのは1つの会議室の処理分だけです。(^^;

>自分に関係のある会議室の各 Recent をチェックしたほうが、結果的に発言
>の動向が良く分る(場合によっては、そうしないと流れが分らない)という
>ことにもなってくると思いませんか?

そうですね・・。ただ、うちの場合、10以上の会議室を立ち上げているので
1つ1つの会議室を覗いていくのはそれなりのの手間になってしまうのです。
それで全体の記録を参照するようにしていたのですが、アクセス権のない
分の記録も見えてしまうので、その部分がクリアできればなぁ と・・。

細かいチェックはしてませんが、動作自体の確認ができただけにちょっと残念です。

田中求之 さんからのコメント
( Wednesday, November 29, 2000 18:16:08 )

>AppleScriptの場合、スクリプトを記述できる容量に制限があるのでしょう
>か?

AppleScript 自体の制限ではなく、スクリプト編集プログラムの制限として、
スクリプトは 32K までしか書けない、というのがあります。EasyBBS は
かなりスクリプト量が多いため、新たな機能を追加しようとすると、この
制限に引っ掛かることがあるんですよ。

もちろん、解決策もあります(たとえばスクリプト・オブジェクトを使うとか、
別のアプリケーションに分けておいて連携させるなど)。