APIカスタマイズと自動生成での上書き禁止設定

TemPlat Consoleが自動生成したソースをカスタマイズしたいシーンがあると思います。TemPlat Consoleの売りの一つがこのカスタマイズの自由度になります。自動生成されたソースだけでは満たせない場合がどうしてもあります。TemPlatはエンジニア・プログラマー向けのツールですので、ソースをカスタマイズできると、アプリケーションとして対応できる幅が広がります。

カスタマイズのパターン

カスタマイズと言ってもいくつかパターンがあるので、最初にそのパターンを整理したいと思います。

パターン説明対応
既存APIの修正自動生成される標準のAPIのメソッド内を修正するケースです。一番利用シーンが多いパターンかと思います。特別な対応は不要。自動生成されたHandlerを直接修正すればOK。
新規のAPI作成自動生成したAPIとは別のAPIを新規に作成するケース。標準で作成される、テーブル単位の検索とCRUD操作以外のAPIが必要なケースになります。追加API用のソースを用意しています。別ページで説明します。
独自APIの追加
その他既存のソースを修正Handler以外の自動生成されているソースを独自に修正したり、全く自動生成とは別でソースを追加したケースになります。今回はこのケースを説明します

TemPlatの自動生成の仕組み

APIのカスタマイズの前提として、まずはTemPlat Consoleのソース自動生成の仕組み・ルールを説明します。

TemPlat ConsoleのビルドではERDの情報をもとにソースを自動生成しています。そして、自動生成されるソースには大きく
①開発者が修正することを前提にしているソース
②開発者が修正しないことを前提にしているソース
の2種類に分かれています。

ここで開発者が修正していいソースは以下の通りとなります。これらのソースは開発者がカスタマイズする前提となっているので、初回作成後はTemPlat Consoleのビルドでは上書きされません。

対象ソースソースの内容
/src/app/handler/hoge_handler.go各APIの実際のロジックを記載するソース。
/src/app/model/hoge_condition.go検索APIで利用する条件を独自に追加することができるソース。

.templat_ignoreファイルの役割

上記のように「カスタマイズする前提のソース」を修正する上では特に意識は不要ですが、それ以外のソースを修正する場合には注意が必要です。ソース修正後に、TemPlat Consoleからビルドをすると、自分が修正したソースが自動生成したソースに置き換えられてしまいます。

この自動生成による上書きを防止する設定ができるのが「.templat_ignore」ファイルとなります。gitをお使いの方はよくご存知の「.git_ignore」のTemPlat版となります。.git_ignoreに関しては、gitにcommitしないファイルを指定しますが、.templat_ignoreに関してはTemPlat Consoleのビルドによって、上書きして欲しくないファイルを指定することになります。

.templat_ignoreの記載方法

それでは実際に.templat_ignoreファイルの記載方法を見ていきたいと思います。以下が初期状態の.templat_ignoreの内容となっています。

# Environment files ( ① )
*.env

# Application handler files ( ② )
/src/app/handler/*_handler.go

# Application condition files ( ③ )
/src/app/model/*_condition.go

ここではTemPlat Consoleにより自動生成されるファイルのうち、もともと上書き禁止となっているファイルが登録されています。ファイルツリーでいうと以下の部分が対象となっています。番号は上記.templat_ignoreのコメントに記載した番号と一致しています。

①は環境変数を定義するファイルです。詳細の説明は APIの環境別変数の設定方 法 にて説明していますので参考にしてください。

②がAPIのメインロジックを記載するHandlerです。既存APIの修正のロジックを修正する場合にはこれらのファイルを修正します。また③も既存APIの検索条件を追加するケースで使用します。

ここで指定されているファイル以外をカスタマイズして、自動生成で上書きして欲しくない場合には、この.templat_ignoreファイルに定義を増やしてください。

主な記載方法は以下となります。

記載方法記載例説明
拡張子指定*.env
*.json
特定の拡張子を上書きしたくない場合。この指定だと特にフォルダは指定されないので、プロジェクトのすべてのフォルダが対象となります。
絶対パス指定/src/app/handler/*_handler.go
/src/app/model/*_condition.go
基本プロジェクトのルートから指定してください。*は任意の文字に、**は任意の複数階層のフォルダに一致します。その他、?(任意の一文字)、{}(カンマ区切りで複数文字列指定してそのいずれかと一致)、などのパターン指定が可能です。

現在、TemPlat Consoleでは.templat_ignoreの解析に以下のライブラリーを仕様していますので、記載方法など参考にしてください。
https://github.com/sindresorhus/globby