2025/10/18

共通部品にチャレンジ:#12)LotusScript 実行ログ - 実際の利用と課題

前回までで LotusScript 実行ログを出力するライブラリ StdLog を作成しました。既存プログラムでこの機能を利用して、ログを出力するには、まずライブラリを DB 内にコピーしたうえで、Use で組み込みます。

Use "StdLog"

するとライブラリ内の Public な関数を利用してログ出力できます。提供する関数は次の通りでした。

関数名 機能
LogOpen ログをオープンします
PrintLog ログ(通常メッセージ)を出力します
PrintError エラーログを出力します
PrintSummary サマリーログを出力します
LogClose ログをクローズし、ログ文書を保存します

ここで問題となるのが、関数名の重複です。既存プログラム内に同名の関数がすでに存在した場合、そのままでは利用できません。かなり極端な事例ですが、次のような感じです。


この先ライブラリを機能拡張すると Public な関数が増えることになります。同様のエラーが発生する可能性が高くなり、まずます組み込みにくいライブラリとなってしまいます。


クラス化で解決

この問題を改善するのがクラス化です。ノーツの文書を取り扱う機能が NotesDocument クラスにまとまっているように、実行ログを出力する機能をユーザ定義クラスとしてまとめてしまう方法です。

次の例では、StdLog というクラスを作成して、ログ出力を実現しています。クラス内の PrintLog メソッドとエージェントの PrintLog サブルーチンはスコープが別になるのでエラーとなりません。将来、機能拡張があっても既存プログラムの影響は少ないことがわかりますね。

なお、クラス化については別の連載『クラス化に挑戦』でまとめています。必要に応じてを参照ください。


柔軟な利用

クラス化によって、ログ出力機能をオブジェクト内に完結させることができます。

これにより、1 つのエージェント内で複数のログ出力オブジェクトを同時に扱うことが可能になります。たとえば、デバッグ用とユーザ向けのログを分けて出力することで、見る人に応じた内容を整理して記録できます。

   Dim oLogAdmin As New StdLog("デバッグ用の詳細ログ")
   Dim oLogUser As New StdLog("ユーザ向け処理結果")

さらに、oLogAdmin や oLogUser を引数として他の関数に渡すことで、プログラムの意図がより明確になり、独立性の高い構造を実現できます。


開発効率の向上

クラス化する利点はほかにもあります。

組み込みのノーツクラスと同様に . を入力すると、利用できるプロパティやメソッドがリストアップされ、タイプアヘッドで選択できます。さらにライブラリに記載したコメントがポップアップヘルプとして表示されます。

コメントをしっかり書いておけば、ライブラリを開くことなく利用できますので、開発効率が劇的に上がります。


まとめ

今回は、通常の関数で作成したライブラリとクラス化したライブラリの差についてまとめました。クラス化したほうが汎用性が高くなり、ライブラリをより活用できることが確認できたかと思います。

そこで次回は、前回まで作成したライブラリをクラス化する作業を行います。


前回 共通部品にチャレンジ 次回


0 件のコメント:

コメントを投稿