2008-12-18

モノが流れる工程を検査・確認する仕組み

object (モノ) が多数あり,それぞれについて同様に複数の処理を行なう flow (フロー,工程) があるとする.このような工程においては,すべての処理をすべてのモノに対して行なったという check (チェック,検査・確認) が必要である.ここで,処理それぞれを checkpoint (チェックポイント,通過確認所) として考える.チェックポイントでは,そこを通過しようとしているモノを許すか否かを判断し (前の処理が完了していなければ拒否しなければならない),通過したモノを記録する.モノそれぞれには identifier (id,一意識別子) が付いている必要がある.

このようなチェックを行なうための system (システム,仕組み) を考える.仮称は「rn-objflwchk」(Object Flow Checkpoint System) とする.非機能要件は,総保有コスト (total cost of ownership, TCO) が低いことである.すなわち,開発・導入・修正・保持管理が容易であること,既存の一般的な情報基盤 (ローカルエリアネットワーク,共有ディレクトリなど) を活用すること.無視してよい要件は,扱う情報を秘密とすること.軽視してよい要件は,悪意あるいは過失による攻撃に備えること.

このシステムの構成要素

  • モノ
  • node (ノード):inventory (インベントリ,通過確認台帳)
    • data (データ):definition of checkpoints (通過確認所の定義)
    • data (データ):records at checkpoints (通過確認記録)
  • nodes (ノード):checkpoints (チェックポイント,通過確認所)
    • program (プログラム):checker (通過確認プログラム)

モノ

モノそれぞれは identifier (id,一意識別子) によって一意に識別される.id は ASCII 文字から成り,制御文字,改行文字を含んではならない.機械で読み取れる形式によって表示される (例えばバーコード) ことが強く望まれる.

通過確認台帳

ローカルエリアネットワーク (LAN, Local Area Network) 上のファイル共有サービスを用いる.共有ディレクトリ上のあるディレクトリをこのシステムで使用する.このディレクトリ下のディレクトリツリーは次のようになる.

  • directory (ディレクトリ):inventory
    • directory (ディレクトリ):conf
      • file (ファイル):checkpoints.definition
    • directory (ディレクトリ):checkpoints-records
      • directory (ディレクトリ):チェックポイント名
        • file (ファイル):適当な区分名,日付など.checked
        • file (ファイル):
        • file (ファイル):node.assigned
      • directory (ディレクトリ):チェックポイント名
      • directory (ディレクトリ):
  • directory (ディレクトリ):bin
    • file (ファイル):checker

ディレクトリ inventory 以下が,通過確認台帳である.通過確認記録をチェックポイントごとに格納するディレクトリは,通過確認所の定義中のチェックポイント名に対応していなければならない.

ファイル共有サービスが備えるユーザ認証や接続元ノードによるアクセス制御,パーミッション制御は,このシステムの唯一のセキュリティコントロールである.

通過確認所の定義

このシステムは,通過確認所のリストセット (順序ある列挙.重複しない) として工程を定義する.ある通過確認所は次の要素によって定義される.

  • チェックポイント名.一意であること
  • このチェックポイントを通過する前に通過しなくてはならない他のチェックポイントの一覧

ファイル checkpoints.definitionは ASCII テキストで,各行に 1 チェックポイントが定義される.空行を含みうる.番号記号文字 # から始まる行はコメントである.チェックポイントの順序は,最初と最後のもののみ意味をもつ.各行においては,チェックポイント名に続いて空白 (空白文字あるいはタブ文字の 1 回あるいはそれ以上の連続),セミコロン文字 ; で区切られたそのチェックポイントを通過する前に通過しなくてはならない他のチェックポイントの一覧がそれに続く.チェックポイント名はセミコロン文字,空白文字,制御文字,改行文字を含んではならない.

通過確認記録

いつ・どこを・何が通過したかの記録である.それぞれ,時刻表記 (例えば,2008-12-18T005617Z.UTC),ノードの識別情報 (ホスト名,ユーザ名),通過か通過取消かの別 (checked あるいは canceled-checking),モノの id による.

通過確認記録ファイル 適当な区分名.checked は ASCII テキストで,各行に 1 つの記録が保持される.各行は,上記要素を空白 (空白文字あるいはタブ文字の 1 回あるいはそれ以上の連続) を区切りとして連結したものである.

通過確認所

チェックポイント (通過確認所) は,それぞれ一意な名前をもつ.チェックポイントにおいては,通過確認プログラムが動作する.

通過確認プログラム

通過確認プログラム checker は,そのチェックポイントを通過しようとするモノの id の入力を受け,通過確認台帳上にある通過確認所の定義および他のチェックポイントの通過確認記録を照会して審査を行なう.ここまでに通過していなければならない他のチェックポイントをすべて通過していなければ,通過を拒否する.通過を許可したら,そのモノの通過を通過確認台帳に記録する.誤ったモノを通過させてしまった時は,通過を取り消す.モノの id は機械式読み取り (例えばバーコードリーダ) によって入力されることが強く望まれる.

通過確認プログラムが実行されたときは,通過確認台帳上のファイル node.assigned を読み,受け持つチェックポイントはどれかを調べる.まだ受け持つチェックポイントを選んでいなければ,そのノードでどのチェックポイントを受け持つかを選択する.すでに他のノードが受け持っているチェックポイントは選択できない.選んだあとは,そのノードの識別情報 (ホスト名,ユーザ名) を 1 行目,設定時刻などを 2 行目とそれ以降として,通過確認台帳上の ASCII テキストファイル node.assigned に記録する.このファイルの存否によって,受け持ちノードの有無が表現される.