GeneXusのビルドが何をやっているかご存知でしょうか?
指定したジェネレータがJavaの場合は、GeneXusで書かれたソースからJavaファイルを生成し、その後コンパイルによってClassファイルを作成しております。
またWebPanelやトランザクションは同時にHTMLやJavascriptの生成もしてます。
ナレッジベースを作成したばかりだと、すべてビルドかけても数分で終わりますが、プロジェクトが進むに連れナレッジベースが大きくなり、数時間かけても終わらないなんてことはよくあります。
プロシージャ1つで数十分と言うのはあまりないですが、WebPanel1つで数十分と言うのはあります。
これって地味にきつくて、原因不明のエラーなんかあるとログを仕込んで数十分、その後ログで特定したバグを修正して数十分とかだと、一つのバグを直すのにあっという間に時間が過ぎてしまいます。
なので、少しでもビルド時間が短縮できるような作りにしてあげたいですね。
パッと思いつく感じであげると、
1、一つのWebPanelにたくさん項目をおかない
分けられるところはWebコンポーネント化して、画面自体を分けましょう。
2、WebPanelのデータ取得処理や登録や更新処理はプロシージャで行う
画面項目の表示/非表示制御みたいなものはプロシージャ化できないですが、できるところはプロシージャで行いましょう
3、値の追加がよくあるドメインを色々なところで使わない
ドメインを修正するとそのドメインを使用しているところがすべてビルド対象となります。値をDBで持つように検討しましょう。
4、項目の追加や修正がよくあるSDTを色々なところで使わない
SDTも修正してビルドをかけると、使用しているところがすべてビルド対象となります。
無理に1つのSDTを色々なところでは使わず、SDTを分けるように検討しましょう。
あとはGeneXusのビルドの設定を見直したり、パソコンのスペックを上げたりですかね。
ビルドの設定はGeneXus上部にある [ ツール ] > [ オプション ] のビルドでインスタンスの同時分析とインスタンスの同時生成を変更します。
GeneXusチームによると、下記の設定が最適とのことです。・インスタンスの同時分析: int(CPU 数/2 + 1)
・インスタンスの同時生成: max(1, int(CPU 数/2))
8コアの場合は同時分析が5で、同時生成が4が良いみたいです。
コア数が多いほど、複数オブジェクトのビルドが同時に出来るので早くなるみたいです。
ただどんだけコア数が多くても1つのオブジェクトにかかる時間は変わらずで、そこはCPUのクロック数になるようです。
(昔XeonのCPUを積んだPCでビルドしたらメチャクチャ早かったです)
最後はメモリ容量も多いほうが良いですね。
最低で8G、できれば16Gはあったほうが良いです。
ジェネレータがJavaの場合はTomcatを使用することが多いと思いますが、Tomcatも結構メモリ使います。
あとChromeやEdgeも開いているとメモリ使います。
メモリに空きが少ないとビルドも遅くなりますので、その場合はTomcatやWebブラウザを再起動してメモリを解放してあげましょう。
※メモリの空き容量が少ないと、ビルド時に「ターゲット環境の更新 開始」でよく止まります。
GeneXusを使用している以上、ビルド時間の問題はどうしても避けて通れないですが、通常人が時間をかけて行うところをGeneXusが裏でやってくれていると思って、その間は違う作業を行うとか効率良く考えていきましょう。