ステータスおよびバージョンの管理
前記事から少し間が空いたが、業務の重要な部分をモデル化できたのでメモしておく。
前回からの間に追加された主な機能は下記の通り:
- 資源評価の状態遷移を扱えるようにする
- 評価の「初期化」作業をできるようにする
- 評価結果のバージョニング
各機能の概要
資源評価の状態遷移を扱えるようにする
これは前記事で課題として挙げたものだったので早速やってみた。 分析してみると、資源評価事業は下記のような状態遷移図によって表現できる:

ほぼ一本線で複雑ではないが、実際には 3 ロールが関与する
遷移フローはほぼ一直線で、複雑さという点では大したことはないが、ロールや評価の状態に応じた操作の制御が必要なので、ロジックをドメインモデルレベルで表現した。
例えば、外部公開() のシグネチャ1は下記のようになっている:
export function 外部公開(
対象資源評価: 内部査読受理済み資源評価,
日時: Date,
操作者: 認証済資源評価管理者,
対象バージョン: number
): { 外部査読中資源評価: 外部査読中資源評価; 外部公開済み: 外部公開済み } {
}
これが意味するところは、外部公開とは下記の仕様をもった業務ということだ:、
- 内部査読で受理された評価を対象とした操作である
- 管理者だけが実行できる
- 特定のバージョンに対して実施する
つまり、主担当者が、内部査読を受けていない評価を独断で勝手に公開することはできないということである。
評価の「初期化」作業をできるようにする
これは当初はこの解像度では見えていなかった作業だが、けっこう重要だったのでこの機会に実装した。 資源評価業務には当然ながら「年度」という概念が重要だが、評価に携わる担当者目線では、いちど評価が始まればほとんど意識することはない。 よって、グローバルな設定値のようにモデル化するのが妥当と考え、管理者だけが管理画面上で初期化・設定できるパラメータとした。

新しい年度の作成
年度の始めなどの適切なタイミングで設定すると、他の担当者の画面でも「年度」の表記が切り替わる動きをする:

担当者の画面ヘッダに表示された年度表記
作成候補として 依存の最新年+1 をワンクリックでどんどん作ることができ、その年のすべての評価が「未着手」ステータスの場合のみ削除もできるようにした:

まだ誰も作業を始めていなければ削除もできる
評価結果のバージョニング
実際の資源評価では、担当者はそれぞれの方法で作業経過をバージョン管理している。
エクセルで作業するので、よくある方法は、ファイル名に日付が入った .xlsx を毎日丸ごとコピーする方法だ。
現時点では、パラメータの組み合わせが異なる計算結果はすべて別バージョンとして保存するようにした。

パラメータの組み合わせが異なる計算結果がそれぞれバージョン履歴として表示されている
その他、DB サイズの節約やエンバグ予防を考慮して、状態に対していくつかのブロックを入れてある:

パラメータの組み合わせが同じだと保存できない

パラメータを変えても、計算するまでは保存できない
内部向けバージョン名(v1, v2…)と、外部向けバージョン名(yyyy-MM-dd 公開版)を分けたことも地味にポイントかもしれない。
実際の業務では、自動生成されるバージョン ID に加えて、作業内容などを書けるオプショナルのメモがないと管理しきれないが、次は計算ロジックの実装や結果のプロットに着手したいので、バージョニング機能はいったんこのくらいにしておく。
動作デモ
活字での説明はなかなか大変だし伝わりにくいので、これ以上の説明は割愛し、代わりにデモ動画を貼っておく。
管理者による初期化作業
ポイント:
- 翌年度の評価をすぐに(年を手入力することなく)初期化できる
- すべての評価が「未着手」状態のうちは実は削除もできる
主担当者による評価作業
ポイント:
- 異なるパラメータの組み合わせはすべて別バージョンとして登録する
- 各バージョンは切り替え可能
- 実際のユースケースで必要なのは「切り替え」ではなく「すべて並列可視化した状態での比較」ではあるが、まずバージョンという概念をモデル化した
- パラメータを変えたら計算するまでは結果登録できない
- 特定のバージョンを内部査読に提出できる
副担当者による内部承認
ポイント:
- 査読依頼されたバージョンを他と区別できている
- 副担当者による承認なしでは外部公開できない
管理者による外部公開
- 外部公開したあとでも公開停止できる(公開した事実は履歴として残る)
- 外部公開すると、未認証ユーザー向け画面にそのバージョンの結果が表示される
まとめ
荒削りだが、最低限の業務フローは通せたことにする。 今は下記の機能が気になっている:
- 主担当者向けの計算・プロット機能
- 管理者向けのユーザー管理機能
- 一般向けに資源の解説ページ
-
このプロジェクトでは日本語でモデリングするようにしている ↩︎