AutoStructureMaker プロジェクトへの貢献をご検討いただきありがとうございます。 本ドキュメントは、本プラグインの開発環境のセットアップ、ビルド手順、コーディング規約、およびプルリクエスト(PR)の提出方針を定めた開発者向けガイドラインです。
- 開発環境のセットアップ
- ビルド手順
- 単体テストの実行
- コーディング規約と設計原則
- 4.1 ゼロクラッシュ例外安全規約
- 4.2 MVVM パターンとインプレース同期
- 4.3 ESAPI 一時作業構造体のクリーンアップ保証
- 新規操作カテゴリー(モジュール)の追加手順
- プルリクエスト (PR) ガイドライン
- IDE: Visual Studio 2017 / 2019 / 2022(Community 版可)
- ワークロード: 「.NET デスクトップ開発」(.NET Framework 4.6.1 開発者パック必須)
- ターゲットプラットフォーム: x64(ESAPI は 64-bit ネイティブライブラリであるため)
ビルドには以下の Varian 公式ライブラリが必要です:
VMS.TPS.Common.Model.API.dllVMS.TPS.Common.Model.Types.dll
AutoStructureMaker.csproj は、以下の標準インストールパスを自動探索します:
C:\Program Files\Varian\RTM\16.1\esapi\API\
C:\Program Files\Varian\RTM\15.6\esapi\API\
これら以外のパスに DLL がある場合は、環境変数 EsapiDir を設定するか、csproj 内の <EsapiDir> を指定してください。
Developer PowerShell または Visual Studio コマンドプロンプトから以下のコマンドを実行します:
# x64 Release ビルドの実行
& "C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe" AutoStructureMaker.sln /p:Configuration=Release /p:Platform=x64 /t:Rebuild- ビルド成果物は
AutoStructureMaker\bin\x64\Release\AutoStructureMaker_v2.0.4.esapi.dllに出力されます。 Costura.Fodyにより、依存するマネージド DLL が単一のバイナリ内に自動マージ(ILRepack / 埋め込み)されます。
本プロジェクトは ESAPI DLL が存在しない CI / 開発環境でもテストが動作するように設計されています。
リポジトリ直下に配置された test.bat を実行することで、ソリューションのビルドと全 81 件の単体テストをワンクリックで連続実行できます。
:: リポジトリ直下の test.bat を実行 (MSBuild x64 ビルド + vstest 一括実行)
test.bat手動で vstest.console.exe を直接呼び出す場合は以下を実行します:
# 単体テストの実行 (vstest.console.exe)
& "C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" AutoStructureMaker.Tests\bin\x64\Release\AutoStructureMaker.Tests.dll /Platform:x64コミット前必須条件: 全 60 件の単体テストが 100% PASS することを確認してください。
- 文字列から数値への変換:
int.Parse()やConvert.ToInt32()の直接呼び出しは全面禁止です。必ずint.TryParse()を用い、パース失敗時は適切なデフォルト値(7mm等)へ安全にフォールバックさせてください。 - 空輪郭(
IsEmpty)ガード: 参照元輪郭(StructureA,StructureB,OrigStructure)を取り扱う際は、必ずorigStr.IsEmptyを事前に確認し、セグメントの存在しない空輪郭に対する Boolean や Margin 計算による ESAPI 内部例外を防止してください。 - 承認済み・ロック輪郭保護:
出力先輪郭(
TargetStructure)に対する変更や輪郭削除の実行時は、承認済み輪郭や線量計算ロック中輪郭への不用意な代入例外をtry-catchで安全に捕捉し、ホストプロセスを巻き込まずにユーザーへ親切なログを表示してください。 - null ガード:
ESAPI の戻り値(
structureSet.Structures.FirstOrDefault(...)など)は常にnullの可能性を考慮し、処理前に必ず null チェックを行ってください。
- コレクションの更新時、
new ObservableCollection<...>で参照ごと再代入すると、WPF のバインディングが切断されたりちらつきの原因となります。 - コレクションの要素同期には
SyncCollection()やSyncStructureInfos()を用い、コレクションおよび同一輪郭のインスタンス参照を維持したままプロパティのみ更新(スマート差分同期)してください(※Clear()すると WPF ComboBox の選択解除・テキスト消失が発生するため禁止です)。 IsEnabledの切り替えやステップ複製(Duplicate)時も、RefreshStepStructureContexts()が自動発動して輪郭コンテキストが正しく同期される設計を維持してください。
一時作業構造体(Auto-Align 時の _tA_1 など)を生成する場合は、必ず try ... finally ブロックを構築し、途中で例外が発生した場合でも finally 内で確実に StructureSet から削除してください。
- Enum の追加:
OpControlItem.cs内のOperationCategoryenum に新しいカテゴリーを追加。 - ViewModel の拡張:
OperationItemViewModel.csに新しいカテゴリー用のプロパティ、表示制御フラグ、およびExecuteXxx()メソッドを追加。 - UI の拡張:
UC_OperationCard.xamlに新しいカテゴリー用の入力パネル(Border / StackPanel)を追加し、Visibility を ViewModel にバインド。 - 伝播シミュレーションの更新:
MainViewModel.csのApplyStepToContext()に新しい操作結果の反映ロジックを追加。 - XML / CSV シリアライザの更新:
TemplateService.csに新操作の保存・読み込み処理を追加。 - 単体テストの追加:
OperationStepViewModelTests.csに新操作の振る舞いテストを追加。
- ブランチ命名:
feature/新機能名またはfix/修正内容 - コミットメッセージ: 変更理由と臨床的影響を簡潔に記載してください。
- ドキュメントの更新: 新しい操作やパラメータを追加した場合は、必ず
MODULES.mdおよびTEMPLATES.mdも合わせて更新してください。