Skip to content

OTR_ReleaseDetails03

nishi_74322014 edited this page Oct 28, 2026 · 1 revision

詳細なリリース情報(03-00〜)

概要

OpenTouryo リポジトリの Git のタグ間の差分を読んで作った、詳細なリリース情報(03 系と、未リリースの develop)。
利用者向けの要約は Open 棟梁のリリース情報 を参照。作り方は リリース・エンジニアリング を参照。

  • 対象:C:\OpenTouryo のクローン。未リリース区間は origin/develop(最終コミット 2026-10-22、PR #635 のマージ)を基準にする。
    develop に未マージの作業中ブランチ(5th_agent、2026-10-28)は、別の節に分けて書く。
  • パスは root/programs/ からの相対で書く。Infra/ は CS/Frameworks/Infrastructure/ の略。
  • #番号は OpenTouryo リポジトリの Issue。内容は、差分とリポジトリ内の文書(ANALYSIS.md など)から読んだものである。
区間 期間 コミット(マージ除く) 差分
02-70 → 03-00 2021-03-30 〜 2022-04-04 59 381 ファイル、+11,675 / −7,100
03-00 → 03-10 2022-04-04 〜 2025-07-01 34 1,327 ファイル、+346,469 / −196,363
03-10 → 03-20 2025-07-01 〜 2025-12-17 12 288 ファイル、+4,879 / −15,733
03-20 → develop 2025-12-17 〜 2026-10-22 277(PR 40) 1,204 ファイル、+98,474 / −10,484
(参考)develop → 作業中ブランチ 2026-10-22 〜 2026-10-28 3 23 ファイル、+999 / −346

詳細

02-70 → 03-00

Issue 単位の修正(#390〜#412)。差分の中心はサンプルとテンプレートで、フレームワーク本体の変更は通信制御に集中している。

フレームワーク本体

Issue ファイル 変更
#393 Infra/Framework/Transmission/CallController.cs SOAP・WebAPI の Cookie コンテナ対応。 Web 参照(Reference)を 1 つ持つ形から、プロパティ文字列ごとに保持する辞書(WEB_REF、syncObject で排他)に変更。CookieContainer を CallController のプロパティとして公開
#395 CallController.cs、ServiceInterface/*/FxController.cs ASP.NET WebAPI(JSON)の例外処理を修正。 サーバ側で業務例外を返す形を見直し、クライアント側の再スロー部分を整理
#399 CallController.cs HttpClient をサーバ側でも使えるようにした。 都度生成せず、サービス名ごとにプールする。代わりに「マルチスレッドのクライアントからは使えない(クリティカル・セクション内で使う)」制約が付いた
#400 Infra/Business/Presentation/MyBase*Controller*.cs キャッシュ制御ヘッダの二重追加エラー。 AppendHeader をやめ、既存のヘッダを消してから設定する
#412 Infra/Framework/ JwkSetStore のコンストラクタの TypeInitializationException

ツール・サンプル

  • Tools/DistributeFile_Tool を追加(#408。テンプレートにはマージしない)。→ 03-10 で削除。
  • CLI テンプレート(Samples/CLI_sample、Samples4NetCore/Legacy/CLI_sample。#398、19 コミット)。
  • 設定ファイル:root/files/resource/Log/*Log*.xml のインデントをスペースに、パス区切りを / に(#407)。接続文字列から sqlexpress を削除(#401・#403・#404)。
  • ASP.NET Core MVC サンプル:Startup.cs の修正、Crud2Controller の追加(#410・#411)。
  • NuGet の登録バッチの修正(#394)。

後方互換性

  • CallController の Web 参照の持ち方が変わったが、公開メンバー(CookieContainer)は維持。
  • HttpClient 利用時のスレッドの制約が増えた(#399)。

03-00 → 03-10

3 年の間隔があり、「migration branch」で 16 段に分けて移行した区間(2025-04〜06)。差分が大きいのは、旧ターゲットのプロジェクトと、同梱の JavaScript ライブラリの入れ替えによる。

ターゲット・フレームワークとプロジェクト

03-00 03-10
フレームワーク本体のプロジェクト *_net45 / _net46 / _net47 / _net48 / _netstd20 / _netstd21 *_net48 / *_netcore80
パッケージ参照 packages.config PackageReference
ビルド・バッチ net4x・netstd 系 2_Build_NuGet_net48.bat / 2_Build_NuGet_nettcore80.bat など
  • 条件付きコンパイルのシンボル(NETSTD など)は残し、NET45 / NET46 の分岐はこの時点では残った(03-20 で除去)。

フレームワーク本体の構造の変化

区分 内容
追加 Infra/Public/Log/BaseLog.cs・Log_log4net.cs・Log_nlog.cs・LogManager_nlog.cs(NLog のサポート。log4net と同じ窓口 LogIF から使う)
改名 Public/Log/LogManager.cs → LogManager_log4net.cs
削除 Public/Db/DamOraOdp.cs(旧 ODP.NET。DamManagedOdp へ)
削除 ServiceInterface/ASPNETWebService の ServiceForFx.asmx.cs(ASMX)・WCFHTTPSvcForFx.svc.cs(WCF-HTTP)・IWCFHTTPSvcForFx.cs
削除 ServiceInterface/ASPNETWebServiceCore(.NET 側の通信制御のサービス。Samples4NetCore/Backend/ASPNETWebService に置き換え)
再構成 ServiceInterface/ASPNETWebService を Global.asax + App_Start/*Config.cs の構成に作り直し
削除 Tools/DistributeFile_Tool
  • DamSqlSvr の参照を System.Data.SqlClient → Microsoft.Data.SqlClient に変更。
  • DamPstGrS(Npgsql)は .NET 側のみに。

テスト

  • テスト・プロジェクトを移行(Frameworks/Tests)。root/files/resource/Sql/ のテスト用 SQL を整理。

後方互換性

  • 通信制御で ASMX・WCF-HTTP のプロトコルが使えなくなった。 WebAPI(JSON)か、WCF-TCP を使う。
  • DamOraOdp を使っていた場合は DamManagedOdp に置き換える。
  • System.Data.SqlClient の型を直接扱っていた場合は、Microsoft.Data.SqlClient に置き換える。
  • .NET Framework 4.5〜4.7・.NET Standard 向けのビルドは無くなった。

03-10 → 03-20

.NET 10 への移行(「dotnet10 branch」)と、NuGet パッケージ作成の整備(2025-07〜12)。

.NET 10 への移行

  • プロジェクトを *_netcore80 → *_netcore100 に。
  • NET45 / NET46 の条件付きコンパイルの分岐を除去。 例:CmnJwtToken の Unix 時間、SAML2Client の HashNameConst.SHA1 / HashAlgorithmName.SHA1 の分岐、FAPI2 の NotSupportedException。
  • .NET 10 で非推奨になった API の置き換え:new X509Certificate2(path, pwd) → X509CertificateLoader.LoadPkcs12FromFile(NETSTD 側のみ)、パスワードからの鍵の導出 など(Public/Security/ の SymmetricCryptography・Pwd/GetPasswordHashV1 / V2・HashAlgorithmCmnFunc・DigitalSignX509・DigitalSignECDsaCng ほか)。
  • ASymmetricCryptography の旧実装の一部を削除。
  • Public/Diagnostics/MyDebug.cs → Public/Security/MyDebug.cs(Security のプロジェクトへ移動)。

削除

  • Tools/DeployZipPackWithHTTP(DotNetZip の廃止に伴う)。→ develop で復活(#528)。
  • 非同期イベントのサンプル(Samples4NetCore/Legacy/2CS_sample/AsyncEvent_sample。BinarySerialize に依存)。
  • Tests/ExecOnLinux。

NuGet

  • CS/NuGet/ を整理:テスト用のパッケージ(T_*.nuspec・T_NuGetPack.bat・_T_NuGetPush.bat。偽名 Erutcurtsarfni.Oyruot.Public のα版でシンボル・サーバーを確かめる)を追加。
  • このタグの時点の *.nuspec は、版が 3.0.0 固定・依存の group が net8.0 のままだった。 → develop で $version$ 化・net10.0 化(#531)。

後方互換性

  • .NET 8 向けのビルドは無くなった(.NET 10 のみ)。
  • MyDebug の名前空間・アセンブリが変わった。

03-20 → develop(未リリース)

未リリース。 次版(03-30、OpenTouryoVersion は 3.3.0-alpha1)に入る予定の変更で、確定ではない。
コーディング・エージェントを使って進めた区間で、PR は「1st_agent」〜「4th_agent」の 4 段(2026-07〜10)。
コミットの約半分が、検証の機械化・文書・テストであり、フレームワーク本体の変更は 156 ファイル(+15,666 / −3,503)。

段階

段 期間 主な Issue 内容
1st_agent 2026-07-31〜08-02 #501・#508・#509・#512・#513・#515 AGENTS.md などの文書、ビルドの機械化(1_BuildAll.ps1 ほか)、D 層自動生成ツールの CUI 化
2nd_agent 08-05〜08-08 #517・#520・#522・#524・#528 GitHub Actions の CI、単体テストの機械比較、ZIP 部品の作り直しと DeployZipPackWithHTTP の復活
3rd_agent 08-09〜08-21 #531〜#582 リリース作業の整理(版の一括更新)、CodeQL 対応、構成の突き合わせ、Docker のサンプル、疎通確認(3_SmokeTest.ps1)
4th_agent 09-10〜10-22 #584〜#634 認証・暗号の部品の修正、NUnit の単体テストとカバレッジ、Linux での単体テスト、汎用認証サイトからの部品の移設

フレームワーク本体:認証(Infra/Framework/Authentication/)

Issue 変更
#504 SAML2Client の要求の作成・応答の検証に hashAlgorithmName 引数を追加し、既定を SHA1 → SHA256 に変更
#584 IdToken の hash クレーム(at_hash など)の計算で、ハッシュの左半分の切り出しを ShortenByteArray から CopyArray に置き換え
#586 AuthenticationHeader:スキームの後ろが空・Base64 でない場合に例外にせず、照合失敗として扱う
#587 OAuth2AndOIDCConst:active、RFC 6750 の invalid_token、OIDC Core の login_required / consent_required / interaction_required / account_selection_required、CIBA の unknown_user_id を追加
#592 OAuth2AndOIDCClient:クライアント認証の方式を選べるようにした(client_secret_basic / _post / _jwt、private_key_jwt)。Basic の資格情報を URL エンコードしてから Base64 にする(RFC 6749 §2.3.1)。AuthenticationHeader.GetCredentials に、復号前後の両方を返す版を追加
#598 SAML2Bindings の検証が、StatusCode を見ずに Assertion を必須にしており、Assertion を持たない正当なエラー応答を弾いていたのを修正。VerifyResponse の out statusCode を検証の前に設定
#600・#606 SAML2Client:応答の検証に証明書のパスを渡すオーバーロード、要求の署名鍵を渡すオーバーロード(null・空は受けない)
#601 AccessToken / IdToken の検証に、jws・iss・aud を引数で受けるオーバーロードを追加(複数の認可サーバを相手にできる)。ResponseObject.Verify も同様
#603 aud の照合を OAuth2AndOidcClientID / OAuth2AndOidcClientIDs のいずれかを含むか、に統一(配列の aud に対応)
#604 SAML2 の SigAlg を、実際の署名から決める(GetSigAlg。RSA の SHA1/256/384/512、DSA)。それまでは SHA256 で署名しても rsa-sha1 を名乗っていた。 VerifyRedirect が 2 つに(名乗りどおりに検証する版と、互換の版)。引数名 dsRSAwithSHA1 → ds
#634 汎用認証サイトから部品を移設(すべて追加。既存のシグネチャは変えていない):DPoPProof、OAuth2AndOIDCClient の DPoP・DCR、RemoteJwkSetStore、SAML2Metadata、SAML2Attributes、SAML2Client.VerifyResponseWithReason・VerifyRequest・CreateRedirectResponse / CreatePostResponse、OAuth2AndOIDCSpec、JwkSetDocument、CmnServerParams。SAML2Client などを partial class に分割
— Public/Security/Xml/SignedXml2.Verify が署名の数学的な正しさだけを見ていたのを修正。参照(Reference)が 1 つで、その URI が検証対象の要素の ID と一致し、同じ ID の要素が 1 つだけであることを確かめる(署名ラッピング攻撃への対策)

フレームワーク本体:暗号・JWT(Infra/Public/Security/)

Issue 変更
#374 EccPublicKeyConverter:jose-jwt の EccKey をやめ、ECParameters から ECDsaCng を作る(依存の削減)
#595・#596 DigitalSignECDsaCng にハッシュ・アルゴリズムを受けるコンストラクタを追加(既定は従来どおり SHA-256)。ES384 / ES512 の検証が Windows と Linux で食い違っていた問題。PS256 / PS384 / PS512(JWS_PS*・_Param・_X509)を追加
#608 共通鍵暗号のパスワードからの鍵の導出:net48 で StackOverflowException(catch できない)でプロセスが落ちていた。net10.0 では鍵と IV を 2 回に分けて導出しており、IV が鍵の先頭と同じになっていた(net48 とも暗号文が食い違う)。1 回で鍵+IV の長さを導出し、切り分ける形に統一
#611 JWS.Verify(jwt, typ) を追加(typ を照合する版。Verify(jwt) は照合しない)
#615 JWS / JWE のヘッダを基底が持つ形に整理。JWEHeader を public get / protected set のプロパティに。JWE.Decrypt が typ を照合しなくなった(照合するなら Decrypt(jwt, typ, out ...))
#626 DigitalSignX509:.NET 側で DSA の公開鍵を GetDSAPublicKey で取る。net48 の DSACng の秘密鍵が平文でエクスポートできない場合は、写し直さずにそのまま使う
#627 AsymmetricAlgorithmCmnFunc:生成する ECDSA(CNG)の鍵を、平文でエクスポートできる鍵にした(JWS_ES*_Param の秘密鍵の取り出しが例外になっていた)
#628 AsymmetricAlgorithmCmnFunc.CreateCryptographySP:RsaCng の指定が効いていなかったのを修正(new RSACng() で作る)。RsaCsp は RSA.Create() のまま(net48 では RSACryptoServiceProvider、.NET では環境の既定の実装。.NET の RSACryptoServiceProvider は OAEP-SHA256 などを持たないため)
#629 鍵交換(BaseKeyExchange):暗号文の文字列化を UTF-8 から Base64 に(バイナリを UTF-8 で文字列にすると壊れる)
#630 RsaBob:証明書の読み込みに X509KeyStorageFlags.Exportable を付ける
#631 DSA の署名:DsaOpenSsl_SHA256 を指定しても SHA1 で署名していたのを修正
#634 JwsFactory(alg から署名器を作る)、JwtReader(検証せずに読む)、JwkOperator(RFC 7638 の指紋、公開鍵だけか、秘密鍵の項目を落とす)、RsaKeyConverter
#536 EnumSymmetricAlgorithm.CipherMode_ECB に [Obsolete](CodeQL。既定ではなく、削除は互換を壊すため非推奨化に留めた)

フレームワーク本体:共通部品(Infra/Public/)

Issue ファイル 変更
#405 IO/ResourceLoader、Util/GetConfigParameter、Framework/Util/GetMessage・GetSharedProperty、Log/LogManager_* 存在確認と読み込みを別々に行っていたのを、ResourceLoader.ResolveFilePath で解決したパスを使う形に統一
#515 Db/SQLUtility バッチ更新の SQL 生成:SET・WHERE の列が空なら何もしないガード、列名の括弧付け、複合主キーの条件(GetPrimaryKeyCondition)
#522 Util/ArrayOperator GetLongFromByte の桁の重みの修正(結果ファイルの比較で、不具合が「正」として固定されていた)
#524 IO/ZipperV2・UnZipperV2・ZipBaseV2・ZipEnumV2 DotNetZip を使わない ZIP 部品(System.IO.Compression)を追加
#544 Dto/DTTables・DTTable ほか、Util/CustomMarshaler DataSet との相互変換(FromDataSet / ToDataSet)。null を DBNull.Value に
#563 Xml/XmlLib GetAttributeFromXPath の index が効いていなかった。GetAttributeFromXmlNode(XmlNode, string, int) を [Obsolete]
#567 Dto/DTRow・DTRowVersion・DTTableStatus ほか 変更前の値(Original)を保持(row[colName, DTRowVersion.Original])。WebAPI 越しに楽観排他ができる
#612 Db/SQLUtility、Str/FormatConverter、Util/PubCmnFunction null を NULL(PostgreSQL は DEFAULT)に変換、文字列リテラルの ' のエスケープ
#616 Diagnostics/StackFrameOperator JIT のインライン展開でフレームがずれないよう NoInlining
#618〜#621 Dto/DataToPoco・PocoToPoco、FastReflection/CompiledExpressionCreater 書き込めない・読めない項目を飛ばす(以前は NullReferenceException)、同名で型が違う項目を Convert.ChangeType で移す(以前は InvalidCastException)、移送先に構造体を許す(以前は値が入らなかった)
#622 Dto/DataToDictionary 重複キーで、専用のメッセージ(DUPLICATE_DICTIONARY_KEY)の例外
#632 IO/DeflateCompression 出力パスを Path.Combine で作る(Linux 対応)
#634 Log/LogSanitizer、Str/UriOperator ログに出す値の改行を落とす。URI の小物

フレームワーク本体:P 層・通信制御

Issue 変更
#536・#549 FxCmnFunction:Cookie に Secure 属性(HTTPS のときのみ)。リバース プロキシで TLS を終端する場合は UseForwardedHeaders が要る旨をコメントと文書に記載
#594 FxCookieNamePrefix で Cookie 名に接頭辞(FxCmnFunction.GetCookieName。書く側と読む側の両方で通す)。BaseController・BaseMVController・BaseMVControllerCore
#543 CallController:未定義のプロトコルで null ではなく FrameworkException(PRT_NAMESERVICE_XML_FORMAT_ERROR)。サンプルの TMProtocolDefinition.xml から ASMX・WCF-HTTP を外した
#546・#561 CallController:WCF-TCP の呼び出しをメソッドに切り出した際の欠落と、その修正
#575 MyMVCCoreFilterAttribute:HttpWebRequest → HttpClient

ツール

  • D 層自動生成ツール(DaoGen_Tool)の CUI モード(/CUI /MODE ...。#508)。
  • DeployZipPackWithHTTP の復活(#528。ZipperV2 / UnZipperV2 を使う。設定と履歴は JSON)。

検証・ビルド・CI(リポジトリの運用)

  • 3 本のスクリプト:1_BuildAll.ps1(#513)・2_RunAllTests.ps1(#520 ほか)・3_SmokeTest.ps1(#546・#571 ほか)、0_RunAll.ps1、0_SetVersion.ps1(#531)。
  • 単体テスト:NUnit のテスト・プロジェクト(Tests/NUnit/TestPublic・TestFramework)とカバレッジの自動集計(Tests/COVERAGE.md)。結果ファイルによる比較(Tests/Golden/)。
  • Linux での単体テスト(docker。#632)、クロス DB(#623)。
  • GitHub Actions:build-windows.yml・build-windows-vb.yml、Dependabot、CodeQL、Secret scanning、ブランチ保護(#517・#536・#542・#588・#610)。
  • 構成の突き合わせ:CompareConfig.ps1・CompareRedirect.ps1・ComparePackage.ps1(CS 版と VB 版、bindingRedirect、パッケージの版。#553・#556・#557・#569)。
  • 脆弱性の確認:CheckVulnerability.ps1、SelectTargets.ps1(変更から回す範囲を決める。#610)。
  • NuGet:*.nuspec の版を $version$ に、依存を net10.0 に、パッケージ化の時に net48 と net10.0 のアセンブリの版の一致を検査(#531)。

サンプル

  • Docker:Samples4NetCore/Docker/MVC_Sample(#548)・Docker/ASPNETWebService(#582)。環境で切り替える設定(appsettings.Container.json、UseForwardedHeaders。#541・#549)。
  • ASP.NET Core WebAPI のサンプルで OpenAPI を標準機能で出す(/openapi/v1.json。#580)。
  • Samples/WS_sample/ASPNETWebService の引き戻し(#566)。

文書

  • AGENTS.md・CODING.md・CONFIGURATION.md・CHEATSHEET.md・BUILDING.md・TESTING.md・SMOKETEST.md・RELEASE.md・GitHubUsage.md、各領域の ANALYSIS.md(#613 で区画ごとに再編)。
  • エージェント用スキルの取得(GetAgentSkills.ps1。#577)。

依存パッケージ

  • log4net 3.3.0、System.Security.Cryptography.Xml 9.0.18、System.Security.Cryptography.Pkcs(#617 で版を揃えた)など。

後方互換性

変更 影響 対処
SAML2 の署名の既定 SHA1 → SHA256(#504) 既定のまま相手と通信している場合、相手が SHA1 を前提にしていると失敗 引数 hashAlgorithmName で SHA1 を指定する
SAML2 の SigAlg を実際の署名から決める(#604) #604 より前の Open 棟梁が送った要求・応答(rsa-sha1 と名乗る SHA256 の署名)は検証に失敗する 送り手・受け手を揃えて上げる
EncodeAndSignRedirect / VerifyRedirect の引数名 dsRSAwithSHA1 → ds(#604) 名前付き引数で呼んでいる場合にコンパイル・エラー 引数名を直す
パスワードからの鍵の導出(#608) net10.0 で暗号化したデータが、新版では復号できない(IV が変わる) 旧データは旧版で復号して再暗号化する
JWE.Decrypt が typ を照合しない(#615) typ の照合に頼っていた場合、照合されなくなる Decrypt(jwt, typ, out ...) を使う
XmlLib.GetAttributeFromXmlNode(..., int) の非推奨(#563) 警告 2 引数の版を使う
CipherMode_ECB の非推奨(#536) 警告 CBC などを使う
未定義のプロトコルで FrameworkException(#543) 以前は null が返っていた 設定(TMProtocolDefinition.xml)を直す
DataToPoco / PocoToPoco の振る舞い(#618〜#620) 例外になっていた入力が、通るようになった 例外を前提にした処理があれば見直す

作業中ブランチ(develop に未マージ)

develop にもまだ入っていない。 5th_agent ブランチ(2026-10-28、3 コミット)の内容で、
レビュー・マージの前なので、変わりうる。

Issue 対象 内容
— Public/Db/SQLUtility リテラル・識別子の生成を SQLSanitizer に寄せた(QuoteIdentifier・ToStringLiteral)。MySQL で \ を含む値のリテラルが正しく閉じない問題を修正。PostgreSQL は E'~'、MySQL は 16 進リテラルになる
#636 Public/Db/SQLSanitizer SQL Server の文字列リテラルを N'~' にした。N が無いと照合順序のコード・ページで解釈され、そこに無い文字(絵文字・ハングルなど)が ? などに化けていた
— テスト SQLSanitizer・SQLUtility・DamTests などのテストの拡充、ゴールデン・ファイルの更新
  • 後方互換性(マージされた場合):SQLUtility が生成する SQL の文字列が変わる(SQL Server の N'~'、MySQL の 16 進リテラルなど)。
    生成された SQL の文字列を比較・保存している場合は、見直しが要る。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally