2025/07/31

標準アプリは Notes/Domino ユーザのお手本であれ!

昨日投稿した『有効期限 68 年の DJX ユーザ登録には要注意 !?』に関連して、気になることがあったので追記します。

TimeDifference の戻り値に関する問題により、下記の If 文が正常に判定できず、範囲内の 68 年を指定しても、『認証の有効期限が、設定の範囲(現在時刻~68年後)を超えています』とエラーとなる症状でした。


判定の仕様

この If 文の条件は、現在時刻 ~ 68年後の範囲に含まれないことを判定をしているのですが、私が気になったのは、68 年後を表す MAXADJUSTSEC 定数です。

   If diffs& < 0 Or diffs& > MAXADJUSTSEC Then

この定数の定義は、GeneralConstant ライブラリの Declarations に定義されていました。

   Const MAXADJUSTSEC = 2145916800 ' 68 years in seconds

「なるほど、68 年を秒に変換した値が入っているのか」っと思いつつこの値を検算してみました。その結果、1 年の日数を 365.25 日として計算していることがわかりました。

   68 年 * 365.25 日 * 24 時間 * 60 分 * 60 秒 = 2145916800 秒

この 0.25 は 4 年に一度のうるう年に配慮しているようですね。ただ、うるう年は 100 で割り切れる年は平年、400で割り切れる年は再びうるう年になり、そんなに単純ではありません。正確には、約365.2422日だそうで、それでも ”約” がついています。

よって、この If 文の判定はあまり正確ではないと言えますね。


判定仕様は揃えよう

DJX 管理ツールの有効期間の設定は、年月日のそれぞれを数値で入力する仕様です。 

そして、内部的な日付計算は NotesDatatime クラスの機能を活用して作成されています。ここでも、年月日それぞれの数値を使って算出しています。

このように、入力や演算は日付を基準とした処理で行われていることがわかります。にもかかわらず、上記の If 文では秒数を使って判定が行われていました。つまり、DJX 管理ツールには、こよみ上の「日付」と、時間間隔を表す「秒」という、異なる2種類の基準が混在していることになります。

しかし、「日数」と「その間の秒数」は常に一意に対応するわけではありません。このような設計は、想定外の動作やバグを引き起こす原因になると感じました。


標準アプリは、お手本であれ!

Notes/Domino は、標準テンプレートとして多くのサンプルアプリも用意されています。また、管理用ツールがアプリとして提供されていることが多いです。ユーザはこれらを参考にすることで、アプリ開発の手法を学んだり、自社のアプリ設計のヒントを得たりすることができます。こうした点は、Notes/Domino の面白さであり、大きな魅力のひとつだと感じています。

しかし今回紹介したように、必ずしも参考にすべきでない点も存在します。また、最近の標準テンプレートは機能が過剰で複雑になりすぎており、内容を理解するのが非常に困難になってきています。

標準アプリはすべての Notes/Domino ユーザにとっての「良き手本」であるべきです。誰が見てもエレガントで「イケてる」と感じられる、シンプルかつ洗練された仕様を目指してほしいものです。


0 件のコメント:

コメントを投稿