【IRIS/Cache】コンパイルフラグはどう設定する?

本記事は、コンパイル時に指定するコンパイルフラグについて解説致します。

※この記事は下記の方向けになります。
  • コンパイルフラグについて確認したい方
  • IRIS/Cache初心者の方

はじめに

前回は修飾子に関して解説しましたが、今回はコンパイルフラグについて解説致します。

コンパイルフラグは修飾子で代替可能なので、今から覚えるのは少々勿体ない気もします。
とは言え、コンパイルフラグは記述量と種類が少ないので、便利な一面もあります。

また、スタジオや管理ポータルでは、今でもコンパイルフラグが使われていて、初期設定に「cuk」が設定されています。
 →チェックボックスの制御で「b」も追加可能です。

全てのフラグを使いこなす必要はありません。
メインで使用するフラグは決まっているので、パターンに合わせて覚えておけば良いかと思います。

では解説していきます。

コンパイルフラグの設定方法

コンパイルフラグの設定について解説します。

コンパイルの実行

今回はコンパイルフラグの記事なので、関数「Compile」の説明は割愛致します。

第二引数にコンパイルフラグを設定します。
 → 修飾子と同じです。

w $system.OBJ.Compile([対象],[コンパイルフラグ],.err),!
zw err

// サンプル
s cls = "developer.export.Base"
w $system.OBJ.Compile(cls, "cbk", .err)

管理ポータル

言わずもがなですが、管理ポータルからコンパイルを実施する際に表示される子画面で制御が可能です。

デフォルトでは、「c」をベースに、チェックボックスのOn/Offで「k, b, u」の制御が可能です。
また、テキストボックスに直接入力も可能です。

スタジオ

IRIS 2024.2より、スタジオが使用不能になりますが、一応念のため。

[ツール] > [オプション] > [コンパイラ] > [フラグと最適化]より、オプション画面から設定が可能です。

コンパイルフラグの説明

フラグ一覧

コンパイル時に第二引数に指定するフラグの一覧です。
公式ドキュメントには、一部記載誤りがあるので注意が必要です。

flg意味規定
b誤)サブクラスおよび SQL 使用で現在のクラスを参照しているクラスを含めます。
正)サブクラスを含めます。
 ※ドキュメントの誤りです。
cロード後、クラス定義をコンパイルします。
d表示。既定で設定されるフラグです。
-dを設定すると、実行環境に情報が出力されない。
eエクステントによって使用されるグローバル・ストレージを記述するエクステント定義を削除し、データを削除します。
 ※d $system.OBJ.Delete([クラス名],”e“)
h非表示クラス(クラスキーワードHidden指定)を表示します。

↓下記コマンド使用時の引数にする
d $system.OBJ.ShowClasses(“h”)
iロード時、XML エクスポート形式をスキーマに対して検証します。既定で設定されるフラグです。
 ※<インストールディレクトリ>\bin\irisexport.xsdのスキーマ定義を使用して、XML妥当性の検証を行う。
kソースを保持します。 このフラグを設定すると、生成されたルーチンのソース・コードが保持されます。
p名前の先頭の文字が “%” であるクラスを追加します。

とは言え、%付のクラスは読み取り専用のDBにあるので、そのままだと対象外になるんですよねぇ・・・
 → このフラグを利用するには、ひと手間必要
r処理を再帰的に実行します。先行依存するすべてのクラスをコンパイルします。

※ただし、最新ではないクラスのみ対象とします。
sシステム。システム・メッセージまたはアプリケーション・メッセージを処理します。
uアップデートのみ実行します。 最新状態であればクラスのコンパイルをスキップします。
y現在のクラスと関連するクラス (SQL 使用下での現在のクラスを参照しているクラスまたは現在のクラスから参照されるクラス) を含めます。
「現在のクラスを参照しているクラス」かつ「クラスクエリの対象クラス」のみ含まれます。
条件が割と厳しい・・・使いにくい

【非推奨フラグ】
下記フラグ群は、現在非推奨となっているため、説明は割愛します。
a、f、g、l、n、o、q、v、o1、o2、o3、o4

フラグオフ

設定されたフラグをオフにする場合、フラグの前方に「-」を設定します。

例)-k = 生成されたルーチンを「保持しない

// 下記は、developer.export.Base.1.INTが保持されません。
w $system.OBJ.Compile("developer.export.Base", "-k", .err)

コンパイルコマンド後にintルーチンを開くと、下記アラートが表示されます。

保持されませんが、関数自体は問題なく動作します。
エラー時にintルーチンが無いと困るなーぐらいです。

フラグの動作確認

b

Child.clsがBase.clsのサブクラスであるとき、親クラスをコンパイルすると、Child.clsも併せてコンパイルが行われます。

w $system.OBJ.Compile("developer.export.Base", "b", .err)

05/06/2025 16:32:48 に修飾子 'b' でコンパイルを開始しました。
, 2 クラスをコンパイル中
クラスのコンパイル中 developer.export.Base
クラスのコンパイル中 developer.export.Child
ルーチンのコンパイル中 developer.export.Base.1
ルーチンのコンパイル中 developer.export.Child.1
コンパイルが正常に終了しました (所要時間: 0.073秒)。
1

k

クラスであれば、intルーチンが生成/保持されます。
「-k」を付与してコンパイルすると、.intルーチンが作成されません。

このフラグは、下記使い分けを行うと良いかもしれません。

  • 本番環境 = .intルーチンは不要なので、「-k」でコンパイル。
  • 開発環境等 = デバッグ等でintルーチンが必要なので、「k」でコンパイル。

u

最新の状態である場合、コンパイルをスキップします。

下記の様に、1度目のコンパイルで最新化したら、2度目のコンパイルを行いません。
また、「-u」を付ける事で、完全コンパイルを実施します。

w $system.OBJ.Compile("developer.export.Sample","u")
 
05/06/2025 18:59:52 に修飾子 'u' でコンパイルを開始しました。
クラスのコンパイル中 developer.export.Sample
ルーチンのコンパイル中 developer.export.Sample.1
コンパイルが正常に終了しました (所要時間: 0.034秒)。


w $system.OBJ.Compile("developer.export.Sample","u")
 
05/06/2025 18:59:53 に修飾子 'u' でコンパイルを開始しました。
Class developer.export.Sampleは最新状態です。
コンパイルが正常に終了しました (所要時間: 0.003秒)。


// 強制コンパイルに相当するフラグ
w $system.OBJ.Compile("developer.export.Sample","-u")
 
05/06/2025 19:03:44 に修飾子 '-u' でコンパイルを開始しました。
クラスのコンパイル中 developer.export.Sample
ルーチンのコンパイル中 developer.export.Sample.1
コンパイルが正常に終了しました (所要時間: 0.031秒)。

d

規定値で「-d」を与えると、コンパイル時に出力される情報がなくなります。
出力内容の表示が煩わしい際に利用すると便利。

「-d」で、下記コンパイル時の情報がマルっとカットできる

MM/DD/YYYY hh:mm:ss にコンパイルを開始しました。
クラスのコンパイル中 [クラス名]
ルーチンのコンパイル中 [クラス名].1
コンパイルが正常に終了しました (所要時間: 0.051秒)。

コンパイラ修飾子とフラグの相関関係

コンパイラ修飾子とフラグには相関関係があります。
下記表は、それらの関係性を表にまとめています。

フラググループ修飾子初期値
bコンパイラ
Export
/subclasses0
cコンパイラ/compile0
dコンパイラ
Export
UnitTest
/displayerror
/displaylog
1
eコンパイラ/deleteextent0
gExport/exportselectivity0
hShowClassAndObject/hidden0
iコンパイラ/checkschema1
kコンパイラ/keepsource0
pコンパイラ
Export
/percent0
rコンパイラ
Export
/predecessorclasses0
rコンパイラ
Export
/includesubpackages1
rExport/recursive1
sコンパイラ
Export
ShowClassAndObject
/system0
uコンパイラ/checkuptodate=1
-uコンパイラ/checkuptodate=0
yコンパイラ
Export
/relatedclasses0
修飾子とフラグの関係一覧

コンパイラ修飾子はフラグと比較して、より詳細に分割されたイメージです。

詳細に設定するか、まとめて設定するかで修飾子とフラグを使い分けて良いかと思います。

修飾子とフラグを同時に使用する

修飾子とフラグは同時に使用する事が可能です。

例えば、コンパイル時に下記修飾子とフラグの組み合わせが可能です。

w $system.OBJ.CompileAll("cbk/displaylog=0/displayerror=1/journal=0")

このコンパイルコマンドを実行すると、エラーログのみ表示し、ジャーナリングを行いません。

このように、修飾子とフラグは組み合わせて設定する事が可能です。

おわりに

いかがだったでしょうか。

修飾子と異なり、1,2文字で機能のON/OFFが行えるので非常に便利ですね。

本記事で紹介した内容を参考にしながら、ぜひご自身の開発現場でもフラグの設定を見直してみてください。

今後の開発や保守作業の一助となれば幸いです。