【ITニュース解説】Template Your Own Clean, Precise Boilerplate Code: No AI, No Wallet Drain. Part 2 – Exploring Every Hidden Trail

2025年09月10日に「Dev.to」が公開したITニュース「Template Your Own Clean, Precise Boilerplate Code: No AI, No Wallet Drain. Part 2 – Exploring Every Hidden Trail」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

.NET開発で毎回書く決まったコードを自動生成する「プロジェクトテンプレート」の作り方を解説。設定ファイル`template.json`を編集すれば、ユーザーの選択に応じてファイル構成を変えるなど、自分だけの高機能なひな形が作成可能だ。

ITニュース解説

ソフトウェア開発、特に新しいプロジェクトを開始する際には、毎回決まった構造のフォルダやファイル、初期設定コードを用意する必要がある。この一連の定型的なコードは「ボイラープレートコード」と呼ばれ、その準備は手間のかかる作業となり得る。この作業を自動化し、開発者がすぐに本質的なコーディングに取りかかれるようにするのが「プロジェクトテンプレート」の役割である。.NET環境では、コマンドラインツールを使って簡単にプロジェクトの雛形を生成できるが、その裏側には非常に高機能で柔軟な仕組みが存在する。

.NETプロジェクトテンプレートの核となるのは、プロジェクトのルートディレクトリに配置される.template.configという特別なフォルダである。このフォルダ内にあるtemplate.jsonファイルが、テンプレートのすべての動作を定義する設計図の役割を担っている。このJSONファイルには、テンプレートの作者名や説明といった基本的な情報から、生成されるコードを動的に変化させるための複雑なルールまで、あらゆる設定が記述される。例えば、shortNameというプロパティは、dotnet new webapiのようにコマンドラインからテンプレートを呼び出すための短い名前を定義する。また、sourceNameはテンプレート内の仮のプロジェクト名を指定するものであり、プロジェクト生成時にユーザーが指定した名前に一括で置換されるプレースホルダーとして機能する。これにより、どのプロジェクトでも適切な名前空間やファイル名が自動的に設定される。

テンプレートの真価は、ユーザーの入力に応じて生成内容をカスタマイズできる点にある。これを実現するのがsymbolsという機能である。symbolsは、テンプレート内で利用できる変数を定義するもので、ユーザーがプロジェクト生成時にコマンドラインオプションとして指定できる。例えば、dotnet new webapi --use-controllersというコマンドを実行した場合、--use-controllersというオプションがsymbolsの一つとして解釈される。テンプレート側では、このオプションが指定されたかどうかを条件に、生成するコードの内容を切り替えることができる。

この動的なコード生成の具体的な仕組みは、sourcesプロパティで定義される。テンプレート内には、例えばProgram.csProgram.Main.csのように、同じ役割を持つが内容が少し異なるファイルが複数含まれていることがある。これは、前述のsymbolsで受け取ったオプションの値に基づいて、どちらのファイルを採用するかを決定するためである。sourcesセクションでは、「もし--use-controllersが指定されたなら、Controllersフォルダを含める」「指定されなかったなら、含めない」といった条件分岐や、「Program.Main.csProgram.csという名前に変更して出力する」といったファイルのリネーム処理を記述できる。この仕組みにより、一つのテンプレートから、従来のコントローラーベースのAPIや、最新のミニマルAPIといった複数の異なるパターンのプロジェクトを生成することが可能になる。

symbolsにはいくつかの種類があり、これらを組み合わせることでより高度なテンプレートを作成できる。ユーザーが直接値を指定するparameter型、他のシンボルの値から論理的に計算されるcomputed型、そしてGUIDや利用可能なポート番号など、プロジェクト生成時にシステムが自動で値を生成するgenerated型などが存在する。例えば、ユーザーがデータベースの種類をparameterとして選択すると、その選択に基づいて内部的なフラグがcomputedで設定され、そのフラグに応じて必要な設定ファイルが動的に組み込まれる、といった複雑な処理を実現できる。

さらに、.NETのテンプレートエンジンは多言語対応も考慮している。.template.configフォルダ内にja(日本語)やde(ドイツ語)といった言語コード名のフォルダを配置し、その中に翻訳された説明文を含むJSONファイルを置くことで、ローカライゼーションが可能となる。開発者のPCの環境変数(DOTNET_CLI_UI_LANGUAGE)に応じて、dotnet new --helpなどで表示されるテンプレートの説明が自動的にその言語に切り替わる。これは、テンプレートを世界中の開発者に提供する際に非常に有用な機能である。

このように、.NETのプロジェクトテンプレートは、単にファイルをコピーするだけの単純な仕組みではない。template.jsonという設定ファイルを中心に、ユーザーの意図を汲み取り、条件分岐や動的な値の生成を駆使して、最適なコードの雛形をインテリジェントに生成する高度なシステムである。この仕組みを理解し活用することで、開発者は反復的な初期設定作業から解放され、より創造的な作業に集中できるようになる。