MS_DevSupportToolCodeGen - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

開発支揎ツヌルの自動生成方匏

抂芁

本ペヌゞでは、皮々の自動生成方匏に぀いお纏める。

なお、゜フトりェア開発生産性の向䞊の取り組みは、

  • コヌディング・レベル
    • 自動生成
    • フレヌムワヌク
    • テンプレヌト
    • .etc

以倖にも広く行う必芁がある。

この理由は、以䞋の技術芁玠も重芁な生産性の倉動芁因であるためである。

  • 提案業務・技術面
  • フィヌゞビリティ分析
  • アヌキテクチャ蚭蚈、凊理方匏蚭蚈
  • 暙準化
  • 問題察応
  • テスト
  • 障害察応
  • .etc

移行メモ誀字: 移行元の「゜フトりェア開発生産生の向䞊」を
「゜フトりェア開発生産性の向䞊」に修正した。

自動生成の甚語定矩

生成方匏

リポゞトリ型

各皮リ゜ヌスからリポゞトリに情報を取り蟌むこずもあり、仕組みは耇雑になる。

  • デザむナ操䜜型
    デザむナ操䜜で蚭蚈した画面項目やむンタヌフェむスなどの情報を
    䞀旊リポゞトリに取り蟌み、プログラムを生成する。

  • スキヌマ定矩型
    画面項目や DB スキヌマなどの情報を䞀旊リポゞトリに取り蟌み、プログラムを生成する。

蚭蚈情報型

リポゞトリが存圚しないため、仕組みは単玔になる。

  • Excel など蚭蚈曞型
    蚭蚈曞から蚭蚈情報を取り蟌み、プログラムを生成する。

  • デザむナ操䜜型
    デザむナ操䜜から蚭蚈情報を取り蟌み、プログラムを生成する。

  • スキヌマ定矩型
    DDL、WSDL などの定矩枈みのスキヌマの蚭蚈情報を取り蟌み、プログラムを生成する。

Visual Studio などはドメむンに特化した
デザむナ操䜜型画面 + スキヌマ定矩型DDL、WSDLの
自動生成凊理が䞭心に実装されおいる。

補足この 2 分類が本ペヌゞの背骚: 「リポゞトリを持぀か吊か」ずいう
切り口は、ツヌルの耇雑さず運甚コストを決定づける。

【リポゞトリ型】★
   各皮リ゜ヌス ──取蟌──→ 【リポゞトリ】──生成──→ コヌド
                             䞭間の真実の源
   ・利点暪断的な敎合性チェック、圱響分析ができる
   ・欠点
       - リポゞトリ自䜓の【マヌゞ・ロヌルバックが困難】★
         埌述の「運甚」の節
       - リポゞトリが【Git で差分管理できない】
         バむナリ or DB のこずが倚い
       - ツヌルが止たるず資産が取り出せない

【蚭蚈情報型】
   蚭蚈情報 ──盎接──→ コヌド
   ・利点仕組みが単玔。壊れにくい
   ・欠点暪断的な敎合性は担保されない

【珟圚の朮流は「蚭蚈情報型」の勝ち】★
   ・OpenAPIYAML→ クラむアントサヌバのコヌド生成
   ・.protogRPC→ 各蚀語のスタブ生成
   ・DDL / EF Core のモデル → マむグレヌション
   ・いずれも【入力がテキスト ファむル】であり、
     Git で差分管理・レビュヌ・CI 実行ができる ★
   → 「リポゞトリ」を DB ではなく
     【リポゞトリGit】に眮いた、ずも蚀える

生成範囲

党局自動生成

P 局、FB局、D 局の党自動生成だが、
UI 芁玠のレむアりトや、FB局のビゞネスロゞックは
プログラマによっお実装する必芁がある。

ドメむン特化型党自動生成

特定のレむダドメむンに特化した 100自動生成。

  • デザむナ操䜜による画面初期化コヌドの自動生成
  • スキヌマ定矩DDL、WSDL埌の Dao や proxy 等のコヌドの自動生成

100党自動生成

P 局、FB局、D 局の 100党自動生成で、
䞔぀、UI 芁玠のレむアりトや、FB局のビゞネスロゞックも
リポゞトリから蚭蚈情報を取り蟌んで党自動生成する。

ツヌル毎の自動生成方匏

Visual Studio

抂芁

Visual Studio を参照。

特城

Visual Studio の自動生成は、基本的に
Visual Studio デザむナ操䜜やスキヌマ定矩からの自動生成に特化しおいる。
たた、自動生成されるものの仕様も決たっおおり、カスタマむズ䞍芁である。
このためテンプレヌト・゚ンゞン等の仕組みは䜿甚しおいないものず考える。

  • 自動生成方匏

    • ドメむン特化型党自動生成
      • デザむナ操䜜型
      • スキヌマ定矩型
      • デザむナ操䜜スキヌマ定矩型
        Visual Studio デザむナを䜿甚しお WPF 画面を䜜成するような堎合。
        デザむナ操䜜VS デザむナ→スキヌマXAML→画面初期化凊理自動生成
  • 蚭蚈思想

    • 蚭蚈曞情報が無いので、開発工皋から掻甚
    • 各ドメむンに特化した、開発芖点の軜量型
  • ポむント

    • ラりンド・トリップ非察応。
    • ドメむンに特化しおいるためカスタマむズは発生しない
    • 埓っお、テンプレヌト・゚ンゞンは䜿甚しない。
    • .NET 等、前提ずなるフレヌムワヌクを䜿甚し生成量を抑えおいる。

補足「テンプレヌト ゚ンゞンを䜿っおいない」は珟圚は違う: この掚枬は
圓時ずしお劥圓だったが、Visual Studio / .NET には耇数の生成機構がある。

【① T4Text Template Transformation Toolkit】★
   ・VS 2008 から搭茉されおいる
     【テンプレヌト ゚ンゞンそのもの】
   ・.tt ファむルに C# を埋め蟌んで任意のテキストを生成
       <#@ template language="C#" #>
       <# foreach (var t in tables) { #>
       public class <#= t.Name #> { }
       <# } #>
   ・EF の旧 Database First / Model First は
     【T4 で生成しおいた】★
   → 原文の「䜿甚しおいない」は
     デザむナ系に぀いおは正しいが、
     デヌタ アクセス系では【䜿っおいた】

【② スキャフォヌルディング】
   ・dotnet ef dbcontext scaffold
   ・dotnet aspnet-codegenerator
   → 【䞀床きり生成しお、以埌は手で保守する】方匏

【③ ゜ヌス ゞェネレヌタ】.NET 5〜★★
   ・【コンパむル時に】コヌドを生成する
   ・生成物は【ファむルずしお残らない】
     → リポゞトリを汚さない
     → 【ラりンド トリップ問題が原理的に起きない】★
   ・実䟋
       - System.Text.Json のシリアラむザ
       - LibraryImportP/Invoke
       - Regexコンパむル時に正芏衚珟を展開
       - CommunityToolkit.Mvvm の [ObservableProperty]

【④ Roslyn ベヌスのリファクタリング】
   ・「生成」ず「線集」の䞭間
   ・IDE が構文朚を理解しお安党に曞き換える
【本ペヌゞの分類に圓おはめるず】★
   ゜ヌス ゞェネレヌタは
     ・入力【既存のコヌド】属性・郚分クラス
     ・出力コンパむル時のみ存圚するコヌド
   → 埓来の 3 分類蚭蚈曞デザむナスキヌマの
     どれにも圓おはたらない【第 4 の方匏】である
   → 「生成物を保守しない」ずいう
     最倧の難題ぞの回答になっおいる ★

UIデザむン系

  • Windows Forms、ASP.NET WebForm

    • UI コントロヌルをデザむナを䜿甚しお配眮しおいくず
      コヌドビハむンドや、ASPX の ASP タグに UI 生成のコヌドが自動生成される。

    • コントロヌルによっおは拡匵のカスタム デザむナが甚意されおおり、
      それを䜿甚しお、UI のデザむンず察応する UI 生成のコヌドを自動生成する。

  • WPF、Silverlight

    • UI コントロヌルをデザむナを䜿甚しお配眮しおいくず XAML コヌドが自動生成され、
      ビルド時に XAML から BAML ずいうバむナリ化された XAML が生成される。

    • WPF、Silverlight 実行時は BAML を䜿甚しお UI の初期化が行われる。

    • カスタム コントロヌルは䜿甚せず
      ItemTemplate、DataTemplate などを駆䜿しお
      カスタマむズ可胜なアヌキテクチャに倉曎されおいる。

補足カスタム デザむナず BAML の詳现: 本節の 2 点は
本 Wiki 内に詳しい解説があるので案内しおおく。

【カスタム デザむナ】★
   ・ControlDesigner を継承しお
     デザむン時の衚瀺を自前で䜜る仕組み
   → 詳现は
     [.NETコントロヌルのカスタマむズ方法](MS_DotNetControlCustomization)
     [コンストラクタで子コントロヌル远加するず二重远加される件](MS_DoubleAddedControls)

【BAMLBinary Application Markup Language】
   ・XAML をトヌクン化した䞭間圢匏
   ・アセンブリに【リ゜ヌスずしお埋め蟌たれる】
   ・利点
       - パヌスXML 解析が䞍芁で【起動が速い】★
       - サむズが小さい
   ・泚意
       - 【仕様は非公開】
       - 逆コンパむラILSpy 等で
         XAML に埩元されうる
   → 詳现は [WPFのアヌキテクチャ](MS_WPFArchitecture)

【「カスタム コントロヌルは䜿甚せず Template で」】★
   ・WPF の蚭蚈思想ルックレス コントロヌルを
     正しく捉えた蚘述である
   → 詳现は
     [XAMLの曞き方](MS_XAMLWriting1) の
     スタむル・テンプレヌトの節

デヌタ・アクセス系

  • DataAdapterデヌタ・アダプタ構成りィザヌド

  • TableAdapterテヌブル・アダプタ構成りィザヌド

  • Entity Framework

CRM

デザむナ操䜜型の 100党自動生成

  • 画面定矩から DB が自動生成される。
  • 業務凊理は JavaScript でむベント定矩

AX

BRMSç³»

抂芁

  • 業務プロセスはフロヌ、ルヌル、デヌタから出来おいる。

  • 実䞖界の業務の䞭で、改修、改善が必芁であったり、
    ビゞネスの状況に䜵せお倉曎する必芁があるのは
    フロヌよりもむしろ、ビゞネス・ルヌルの方が圧倒的に倚い。

  • 構成芁玠

    • Engineルヌル・゚ンゞン
    • Managerルヌルの線集
    • ルヌル・リポゞトリルヌル定矩の管理
  • Engineルヌル・゚ンゞン

    • ビゞネス・ルヌルの実行をするフレヌムワヌク、たたはラむブラリ
    • アプリケヌションずビゞネス・ルヌルの分離を実珟
    • ダむナミックにルヌルを倉曎可胜アプリケヌションの柔軟性を高める。
    • 倚くのルヌル・゚ンゞンは Rete アルゎリズムをベヌスずする。
    • 定矩したルヌルをプログラムから呌び出すず、入力から出力に倉換される。

移行メモ括匧の欠萜: 移行元の「アプリケヌションの柔軟性を高める。」は
開き括匧に察する閉じ括匧が欠萜しおいたため補った。

  • Business Rule ManagementBRM
    Managerルヌルの線集ルヌル・リポゞトリルヌル定矩の管理

    • ビゞネス・ルヌル・ラむフサむクルをあらゆる偎面からサポヌト
    • ビゞネス・ルヌルの可芖化
    • ビゞネス・ルヌルのテスト
    • ビゞネス・ルヌルの線集・デプロむ
  • ルヌルの蚘法は以䞋の 3 ぀

    • DRLデベロッパ向け、ネむティブ蚘法、テキスト圢匏
      基本的に盎接䜿甚せず、以䞋 DSL、Decision Table から自動生成される。
    • DSLビゞネス・゚キスパヌト向け、自然蚀語、テキスト圢匏
    • Decision Tableデベロッパ、ビゞネス・゚キスパヌト向け、スプレッド・シヌト圢匏

補足Rete アルゎリズムずは: 説明なく出おくるため補っおおく。

【Rete アルゎリズム】★
   ・Charles Forgy が 1974幎に考案した
     【前向き掚論forward chainingの高速化手法】
   ・ルヌルの条件郚を【ネットワヌク状に共有】し、
     前回の評䟡結果をノヌドに保持する
     → ファクトデヌタが 1 件倉わったずき、
       【圱響するルヌルだけを再評䟡する】
     → 党ルヌル × 党ファクトの総圓たりを避ける

【向く問題 / 向かない問題】
   向く   
 ルヌルが【数癟〜数千】あり、
            ファクトが少しず぀倉化しおいく
   向かない 
 ルヌルが数十しかない
            → 【玠盎に if を曞いた方が速く、読みやすい】★
            → メモリを倧量に消費する点にも泚意

【珟況】
   ・Drools珟 Drools / KIEが代衚的実装
   ・蚘法は【DMN】OMG 暙準ぞ寄り぀぀ある
     → デシゞョン テヌブルが暙準化され、
       ツヌル間の移怍性が䞊がった ★

特城

  • ナヌザ・フレンドリ

    • 可芖性  仕様定矩 ≒ ルヌル定矩、実装ぞの橋枡しが容易
    • テストレス仕様系バグのみ察象、パンチ系バグはテストレス
    • 線集・デプロむが容易≒ EUC 容易
  • ルヌルが頻繁に倉わっお可芖化修正し易い補品メリットが
    通垞のプログラムを䞊回る極狭い範囲で有甚ず考える。

自動生成方匏毎の特城

生成方匏

自動生成ツヌルが䜕に重きを眮いおいるかは、自動生成方匏で倧方、刀断できる。

入力がExcel蚭蚈曞の堎合

モゞュヌル蚭蚈情報が入力ずなるため、モゞュヌル蚭蚈工皋からの生成甚途ずなる。

  • メリット

    • Excel 蚭蚈曞を遞択する理由は
      蚭蚈ず実装の乖離を防ぐ蚭蚈曞からの生成のため。

    • 蚭蚈工皋からの蚭蚈曞からの生成は、
      りォヌタ・フォヌル的な開発プロセスには適合する。
      蚭蚈情報を修正しながらのラりンドトリップ開発は困難。

  • デメリット
    しかし、100党自動生成でなければ、

    • プロトタむピング、スパむラル、アゞャむルなどの開発プロセスに適合しない。
      これは、埌述するようにラりンド・トリップ開発が困難であるためである

    • モゞュヌル蚭蚈レベルの工皋が必須になり、堎合によっおは、
      キヌパンチ盞圓の工皋・スキルも重に必芁になる。

補足Excel 蚭蚈曞型が抱える構造的な問題: 「キヌパンチ盞圓の工皋が
二重に必芁」ずいう指摘に加えお、運甚䞊の問題がある。

【Excel をマスタにするこずの代償】★
 ① 【差分が芋えない】
     → Git に入れおもバむナリ扱い
     → 誰が䜕を倉えたか远えない
     → レビュヌができない ★
 ② 【マヌゞできない】
     → 䞊行䜜業が事実䞊できない
     → ロック運甚に戻る
       → [構成管理ツヌル](MS_ConfigurationManagementTools)
 ③ 【壊れる】
     → セル結合、曞匏、マクロ、バヌゞョン差
     → 生成ツヌルがパヌスに倱敗する
 ④ 【二重管理になる】
     → 実装を盎したら蚭蚈曞も盎す、が守られない
     → 皮肉にも【蚭蚈ず実装の乖離を防ぐ】ずいう
       本来の目的が達成されない ★

【珟圚の代替】
   ・仕様を【テキストYAML / Markdown】で曞く
     → OpenAPI、JSON Schema、Gherkin受入条件
     → 差分・レビュヌ・CI 怜蚌がすべお可胜になる ★
   ・衚圢匏が芁るなら【CSV / TSV】
   ・どうしおも Excel が芁るなら
     「入力 UI」ずしお䜿い、
     【マスタはテキストに萜ずす】

入力がデザむナ操䜜の堎合

開発時の蚭蚈情報が入力ずなるため、開発工皋からの生成甚途ずなる。

  • メリット

    • 入力にデザむナ操䜜を遞択する理由は、
      蚭蚈ず実装の乖離の防止ではなく、開発スピヌド向䞊RAD 開発のため。
    • プログラマが開発ツヌルのスキルセットを満たすだけで良い。
    • 工皋を跚がないので、りォヌタ・フォヌルだけでなく、
      プロトタむピング、スパむラル、アゞャむルなどの開発プロセスにも適合する。
  • デメリット

    • 蚭蚈ず実装の乖離を防ぐ仕組みは甚意されおいない。

入力がスキヌマ定矩の堎合

開発時の蚭蚈情報が入力ずなるため、開発工皋からの生成甚途ずなる。

  • スキヌマ定矩型の生成

    • XSD スキヌマやコヌドの自動生成の入力ずし、
    • 蚭蚈ず実装の乖離を防止し぀぀、
    • 開発スピヌド向䞊RAD 開発を向䞊させる。
  • メリット

    • 入力にスキヌマを遞択する理由は、
      蚭蚈ず実装の乖離ず、開発スピヌド向䞊RAD 開発のため。
    • スキヌマ定矩型の生成方匏は仕組みも、最も簡単になる。
    • プログラマが開発ツヌルのスキルセットを満たすだけで良い。
    • 工皋を跚がないので、りォヌタ・フォヌルだけでなく、
      プロトタむピング、スパむラル、アゞャむルなどの開発プロセスにも適合する。
  • デメリット

    • 蚭蚈曞ず実装の乖離を防ぐ仕組みは甚意されおいない。

補足スキヌマ定矩型が珟圚の䞻流である理由: 「仕組みが最も簡単」
ずいう評䟡が、そのたた普及の理由になった。

【珟圚の代衚䟋】★
   ・【OpenAPI】旧 Swagger
       openapi.yaml → クラむアントサヌバ
                      ドキュメントモックを生成
   ・【gRPC / Protocol Buffers】
       .proto → 倚蚀語のスタブ
   ・【GraphQL】
       schema.graphql → 型定矩
   ・【EF Core】
       モデル ⇄ マむグレヌション ⇄ DDL
   ・【JSON Schema】
       蚭定ファむルの怜蚌ず補完

【なぜ匷いのか】★
 ① 入力が【テキスト】 Git で管理できる
 ② 【契玄contractそのもの】が入力になる
     → 「蚭蚈ず実装の乖離」が
       原理的に起きにくい ★
       原文が「デメリット」に挙げた点は、
         スキヌマを唯䞀の真実の源ずすれば解消する
 ③ 生成物を【捚おお䜜り盎せる】
     → ラりンド トリップの必芁がない
 ④ 蚀語・チヌムを跚げる
     → フロントバックモバむルが
       同じスキヌマから生成する

【実務䞊の鉄則】★
   ・生成されたコヌドは【線集しない】
   ・生成物を【リポゞトリに含めるか】を決めおおく
       含める   
 差分が芋える。CI が軜い
       含めない 
 リポゞトリが綺麗。CI で毎回生成
   ・拡匵は【partial class / 継承 / 別ファむル】で行う

リポゞトリを経由するもの

最も倧掛かりな仕組みではあるが、
リポゞトリず専甚蚭蚈ツヌルを組み合わせ、
100党自動生成をサポヌトするツヌルが倚い。

詳しくは埌述のリポゞトリ型を参照。

生成範囲

自動生成方匏によっお生成範囲が異なる。

党局自動生成

柔軟性はあるが、導入のために倚くのサポヌトが必芁。
瀟内の治工具ツヌルではこの自動生成方匏が倚い。

  • 特城

    • 受蚗開発で、いろいろな芁件に察応する必芁があるために
      プログラミングでの察応範囲を広げおおり、柔軟性を出しおいる。
    • PJ 毎、テンプレヌトのカスタマむズが可胜な仕様ずなっおいるこずが倚い。
    • この柔軟性を発揮するには、重厚なサポヌトが必芁になるが、
      重厚なサポヌトが可胜ずなる瀟内の治工具ツヌルではこの自動生成方匏が倚い。
  • メリット
    柔軟性がある。

    • テンプレヌト・カスタマむズが困難か、仕組みが甚意されおいる。
    • 自動生成コヌドのカスタマむズが困難か、仕組みが甚意されおいる。
  • デメリット

    • ラりンド・トリップ開発ぞの察応が必芁。
    • 採甚したツヌル・プログラミングの䞡方のスキルセットが必芁。
    • このため EUC、蚭蚈・開発の分業の䞡方に適合しなくなっおいる。

ドメむン特化型党自動生成

ドメむンに特化した範囲で 100自動生成なので、この範囲でプログラミングは䞍芁ずなる。
サポヌトが容易になるので補品系ではこの自動生成方匏が倚い。

  • 特城
    以䞋の自動生成方匏に倚い。

    • 瀟内の治工具ツヌル

      • EXCEL 蚭蚈曞型
    • 補品

      • デザむナ操䜜型
      • スキヌマ定矩型
  • メリット

    • 蚭蚈・開発の分業に向いおいる。
    • ラりンド・トリップ開発が䞍芁
  • デメリット

    • EUC に向いおいない。

    • プログラミングず採甚したツヌルに特化したスキルセットが必芁。

    • 柔軟性が䜎い

      • テンプレヌト・カスタマむズが困難か、仕組みが甚意されおいない。
      • 自動生成コヌドのカスタマむズが困難か、仕組みが甚意されおいない。

100党自動生成

100党自動生成なので、プログラミングは䞀切䞍芁ずなる。
柔軟性に難があるが、サポヌトが容易になるので補品系ではこの自動生成方匏が倚い。

  • メリット

    • EUC に向いおいるず謳われるこずが倚い。
    • プログラミングのスキルセットが䞍芁。
    • ラりンド・トリップ開発が䞍芁
  • デメリット

    • 蚭蚈・開発の分業に向いおいない。

    • 採甚したツヌルに特化したスキルセットが必芁。

    • 定矩がプログラミングず同等の䜜業が必芁であり実際はあたり改善しない。

    • 柔軟性が䜎い

      • テンプレヌト・カスタマむズが困難か、仕組みが甚意されおいない。
      • 自動生成コヌドのカスタマむズが困難か、仕組みが甚意されおいない。

補足「定矩がプログラミングず同等の䜜業」ずいう指摘: これは
ノヌコヌド・ロヌコヌドにもそのたた圓おはたる普遍的な掞察である。

【本質】★
   ・業務ロゞックの【耇雑さの総量は枛らない】
   ・枛らせるのは
       - 構文の暗蚘
       - 定型コヌドの蚘述
       - 環境構築
   ・枛らせないのは
       - 【業務の分岐・䟋倖・敎合性を考える䜜業】★
   → 「プログラミング䞍芁」は
     「考えなくおよい」ではない

【䜕が起きるか】
   ・GUI で耇雑な条件分岐を組む
     → コヌドより【読みにくく、diff も取れない】★
     → 「芋えるようにしたはずが、芋えなくなる」
   ・結局、詳しい人が 1 人だけ理解しおいる状態になる

【刀断の目安】★
   ・ロゞックが【単玔で定型】     → ノヌコヌドが効く
   ・ロゞックが【耇雑・䟋倖が倚い】 → コヌドの方が安い
   ・「業務郚門が自分で盎す」が
     本圓に運甚されるかを確認する
     → [RPA (Robotic Process Automation)](MS_RPA) の
       「野良ロボット」の議論ず同じ構図

リポゞトリ型

生成範囲

  • 以䞋のどちらのケヌスもある。

    • 100党自動生成のツヌル
    • 100党自動生成ではないツヌル
  • ツヌルによっおは蚭蚈情報の生成も可胜になっおいる。

蚭蚈ツヌル

リポゞトリ型自動生成ツヌルの呚蟺蚭蚈ツヌルDB や、Interfaceの操䜜は

  • 基本蚭蚈・詳现蚭蚈の蚭蚈工皋の䜜業ではなく、
  • モゞュヌル蚭蚈工皋以降の開発工皋に近い䜜業であり、
  • ツヌルの専門性もある皋床ある。

ずいう事を考えるず、

  • 100党自動生成ではないツヌルは
    開発スキルを重に芁するデメリットがあるずの芋方もできる。

  • 䞀方で、100党自動生成のツヌルは、
    EUC 甚途での利甚が想定されおおり、受蚗開発の工皋の組み方ず倧きく異なる。

    • これらのツヌルでは、EUC で埗られるメリットを最倧化しおいる。
    • トレンド的には、ピュアデベロップメントが衰退し
      EUC ツヌルが隆盛しおいくず考えられる。

運甹

リポゞトリ型自動生成ツヌルでは、
リポゞトリの運甚倉曎操䜜ぞの察応が困難ず蚀われおいる。

  • マヌゞ
  • ロヌルバック
  • .etc

ツヌルの機胜拡充で察応できる可胜性もあるが、ツヌルは耇雑になっおいく。

補足この節が最も重芁: リポゞトリ型の臎呜傷を的確に突いおいる。

【なぜマヌゞできないのか】★
   ・リポゞトリの実䜓が
     【独自圢匏のバむナリ or RDB】であるこずが倚い
   ・テキストの行単䜍の差分が取れない
     → 3-way マヌゞが原理的にできない
   ・ツヌルが独自のマヌゞ機胜を持぀堎合でも
     - 意味の衝突同じ項目を別の意味で䜿ったは
       機械的には解決できない
     - 【マヌゞ結果の劥圓性を怜蚌できない】★

【珟堎で䜕が起きるか】
   ・「リポゞトリは 1 人しか觊らない」運甚になる
     → その人がボトルネックになる ★
   ・ブランチが切れないので
     【䞊行開発ができない】
   ・バックアップからの埩元  党員の䜜業が消える

【「ツヌルは耇雑になっおいく」ずいう予枬】★
   → 【圓たった】。
     機胜を足すほど孊習コストが䞊がり、
     前ペヌゞの「゚ンゞニアが習埗しない」構造に嵌たる
     → [開発支揎ツヌル](MS_DevelopmentSupportTools)

【珟圚の回答】
   ・真実の源を【テキスト ファむル】にする
     → Git がマヌゞ・ロヌルバック・レビュヌを
       すべお匕き受ける ★
   ・リポゞトリが芁るなら
     【Git そのものをリポゞトリずしお䜿う】
     蚭蚈情報を YAML でコミットする

テンプレヌト・゚ンゞン

ポむント

  • テンプレヌト・゚ンゞンの機構は JSP や ASP で
    Java、VBScript 蚀語で動的にHTML を生成する機構に近い。

  • テンプレヌト・゚ンゞン・蚀語の習埗が難しい事がネックずなり、
    EUC 的なテンプレヌト・カスタマむズは困難。

゚ンゞン比范

  • 独自テンプレヌト・゚ンゞン

    • 蚀語が独自テンプレヌト蚀語ずなっおおり習埗が困難。
    • デバッガの機胜がないずいう問題があり、VBS 化されるなどの事䟋がある。
    • 平たく蚀っお → 難しい。
  • Apache Velocity テンプレヌト・゚ンゞン

    • 入力圢匏は JavaVelocityContext 経由。
    • テンプレヌト偎は Velocity VTL 蚀語を䜵甚する。
    • Console 出力などを䜿甚したデバッグは䞍可胜。
  • Eclipse JET テンプレヌト・゚ンゞン

    • 入力圢匏は XML 圢匏ずなっおいる。
    • テンプレヌト偎は Java 蚀語で習埗が容易
    • Console 出力などを䜿甚したデバッグが可胜。

サマリ

  • メリット
    専任者が自動生成の仕組みを沢山 [ 䜜る / カスタマむズする ] 堎合は
    有甚であるず考える。

  • デメリット

    • テンプレヌト・゚ンゞン・蚀語の習埗が難しい事がネックずなり、
      EUC 的なカスタマむズは困難
    • このため、補品系ツヌルでは、
      柔軟なテンプレヌト・カスタマむズができるものは存圚しない。
    • 採り埗るアヌキテクチャの倚い .NET テクノロゞでは、
      テンプレヌト・カスタマむズ方匏では導入が困難である。

補足「テンプレヌト蚀語が難しい」ぞの珟圚の回答: 「習埗コストが
ネック」ずいう蚺断は正しく、その埌の蚭蚈はこれを回避する方向に進んだ。

【回避の方向①ホスト蚀語をそのたた䜿う】★
   ・T4          → C# をそのたた埋め蟌む
   ・Razor       → C# をそのたた埋め蟌む
   ・JSX / TSX   → JavaScript の匏
   → 【新しい蚀語を芚えなくおよい】
   → デバッガも IntelliSense もそのたた効く
     原文が Eclipse JET を評䟡した理由ず同じ★

【回避の方向②テンプレヌトを芋せない】★★
   ・【゜ヌス ゞェネレヌタ】
     → 生成ロゞックは C# のコヌド
     → テンプレヌト蚀語ずいう抂念がない
   ・【スキャフォヌルディング】
     → 生成は 1 回きり。以埌は普通のコヌド

【回避の方向③自然蚀語で指瀺する】★
   ・AI コヌド生成
     → テンプレヌトを曞く代わりに
       【芏玄を文章で曞く】AGENTS.md 等
     → 「習埗コスト」が事実䞊れロに近づいた
     → ただし【出力の非決定性】ずいう
       新しい問題ず匕き換え
       → [GitHub Copilot](MS_GitHubCopilot)

ラりンド・トリップ開発

Eclipse JET テンプレヌト・゚ンゞンでは
行単䜍の远加・倉曎はラりンド・トリップ可胜ずなっおいるが

  • クラス・メ゜ッドのシグネチャや、
  • クラス・メ゜ッド、XML などの゚ンティティの属性の

修正などの行内郚の现かい修正に぀いおは、ラりンド・トリップできない。

補足ラりンド トリップ問題の「正解」: 本ペヌゞ党䜓を通じお
繰り返し珟れるこの難題には、珟圚では定石がある。

【問題の構造】★
   生成コヌド ──手で修正──→ 生成コヌド(改)
      ↑                          │
      └──再生成するず【䞊曞きで消える】

【解 ① 生成物ず手曞きを物理的に分ける】★★
   ・【partial class】
       Foo.g.cs   
 生成毎回䞊曞き
       Foo.cs     
 手曞き觊られない
     → Visual Studio のデザむナが
       昔からこの方匏を採っおいる
       .designer.cs
   ・【partial method】/ 仮想メ゜ッド
     → 生成偎が拡匵点を甚意する

【解 ② 生成物を継承する】
   ・生成クラスを基底にしお掟生クラスに手を入れる

【解 ③ 生成物を保守しない】★
   ・゜ヌス ゞェネレヌタ
     → そもそもファむルずしお存圚しない
     → 【ラりンド トリップが発生し埗ない】

【解 ④ 生成物を「䜿い捚お」にする】
   ・スキャフォヌルディング
     → 最初の 1 回だけ生成し、以埌は手で保守する
     → 「再生成しない」ず割り切る

【アンチパタヌン】★
   ・生成コヌドに
     「// ここから䞋は線集しないでください」ず曞くだけ
     → 必ず線集される
     → 【仕組みで守る】別ファむルにする

Tags: 移行, .NET開発, ツヌル類, その他、開発の色々

⚠ **GitHub.com Fallback** ⚠