識別子のルールとガイドライン
使用上の便宜のために、このページでは、すべてのサーバ側コンテキストにおける ObjectScript 識別子のルールを要約し、名前衝突を回避するためのガイドラインを提供します。
ObjectScript には、予約語がありません。そのため、識別子としてコマンドを使用しても結果は構文的に正しくなりますが、そのコードはそれを読む人にわかりにくくなる可能性があります。
ユーザ、ロール、リソースなどのセキュリティ・エンティティの識別子については、"承認ガイド" の関連するセクションを参照してください。
ネームスペース
ネームスペース名では、最初の文字は、英字またはパーセント記号 (%) に限られます。残りの文字は、英字、数字、ハイフン、またはアンダースコアにする必要があります。この名前は、255 文字以内にする必要があります。
回避する必要があるネームスペース名
予約済みのネームスペース名は、%SYS、BIN、BROKER、および DOCUMATIC です。これらのネームスペースのいくつかについては、このドキュメントで前述した “システム提供ネームスペース” で説明しています。他のものは InterSystems IRIS によって内部で使用されます。
データベース
データベース名では、最初の文字は、英字またはアンダースコアに限られます。残りの文字は、英字、数字、ハイフン、またはアンダースコアにする必要があります。この名前は、30 文字以内にする必要があります。
回避する必要があるデータベース名
予約済みのデータベース名は、IRISLOCALDATA、IRISSYS、IRISLIB、IRISAUDIT、IRISTEMP です。
これらのデータベースの詳細は、このドキュメント内の前述の “システム提供データベース” を参照してください。
ローカル変数
ローカル変数の名前について、ObjectScript では以下のルールが適用されます。
-
最初の文字は、英字かパーセント記号 (%) に限られます。
% で始まる名前にする場合、その直後の文字は z または Z にします。
-
残りの文字は、英字または数字にする必要があり、ASCII 128 より大きい任意の文字も使用できます。
-
名前は、大文字と小文字を区別します。
-
名前は、最初の 31 文字で (該当するコンテキストで) 一意である必要があります。
変数の添え字は、このカウントに含まれません。
回避する必要があるローカル変数名
ローカル変数に対して以下の名前は使用しないでください。
-
SQLCODE
InterSystems SQL が実行される可能性があるコンテキストでは、変数の名前として SQLCODE を使用しないでください。"InterSystems IRIS エラー・リファレンス" の "SQLCODE 値とエラー・メッセージ" を参照してください。
グローバル変数
グローバル変数の名前について、ObjectScript では以下のルールが適用されます。
-
最初の文字はキャラット (^) にし、次の文字は英字かパーセント記号 (%) にする必要があります。グローバル名の場合、文字は ASCII 65 から ASCII 255 の範囲のアルファベット文字として定義されます。
-
残りの文字は、英字または数字にする必要があります (ただし、次の箇条書きに示すように例外が 1 つあります)。
-
グローバル変数の名前には、1 つ以上のピリオド (.) 文字を含めることができますが、最初と最後の文字には使用できません。
-
名前は、大文字と小文字を区別します。
-
名前は、最初の 31 文字が (該当するコンテキストで) 一意である必要があります。キャラット文字はこのカウントに含まれません。つまり、グローバル変数の名前は、キャラットを含めて最初の 32 文字が一意である必要があります。
変数の添え字は、このカウントに含まれません。
-
IRISSYS データベースでは、グローバル名はすべて予約されていますが、先頭に ^z、^Z、^%z、^%Z が付くものについては例外です。 “IRISSYS データベースおよびカスタム項目” を参照してください。
他のすべてのデータベースでは、先頭に ^IRIS. および ^%IRIS. が付くグローバル名はすべて予約されています
以下のサブセクションも参照してください。
回避する必要があるグローバル変数名
データベースを作成すると、InterSystems IRIS によって、それ自体が使用するためのいくつかのグローバルでそれが初期化されます。また、作成するネームスペースすべてに、システム・グローバルへのマッピングが含まれます。これには、書き込み可能システム・データベース内のグローバル・ノードも含まれます。
システム・グローバルを上書きしないようにするために、ネームスペースでは以下のグローバルを設定、変更、または削除しないでください。
-
以下の例外を除く、^% で始まる名前を持つグローバル
-
^%z または ^%Z で始まる名前を持つ独自のグローバル
-
^%SYS (ドキュメントに記載されているようにノードを設定できます)
-
-
^BfVY. (InterSystems IRIS のシャーディングで使用するために予約されています)
-
^CacheTemp* (InterSystems IRIS の一部のバージョンで使用するために予約されています)
-
^DeepSee.* (制限は、InterSystems IRIS Analytics を使用しているネームスペースにのみ適用されます)
-
^Ens* (制限は、相互運用対応ネームスペースにのみ適用されます。"相互運用プロダクションの概要" を参照してください。)
-
^ERRORS
-
^InterSystems.Sequences (制限は、InterSystems IRIS Hibernate Dialect を使用しているネームスペースにのみ適用されます)
-
^IRIS.* (インターシステムズで使用するために予約されています)
-
^IRISAuditD
-
^IS. (InterSystems IRIS のシャーディングで使用するために予約されています)
-
^ISCDebugLevel (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^ISCMonitor (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^ISCSOAP (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^ISCMethodWhitelist
-
^mqh (SQL クエリの履歴)
-
^mtemp*
-
^OBJ.GUID (ドキュメントに記載されている場合を除く)
-
^OBJ.DSTIME
-
^OBJ.JournalT
-
^oddBIND
-
^oddCOM
-
^oddDEF (クラス定義を含む)
-
^oddDEP
-
^oddEXT
-
^oddEXTR
-
^oddMAP
-
^oddMETA
-
^oddPKG
-
^oddPROC
-
^oddPROJECT
-
^oddSQL
-
^oddStudioDocument
-
^oddStudioMenu
-
^oddTSQL
-
^oddXML
-
^rBACKUP
-
^rINC (インクルード・ファイルを含む)
-
^rINCSAVE
-
^rINDEX
-
^rINDEXCLASS
-
^rINDEXEXT
-
^rINDEXSQL
-
^rMAC (MAC コードを含む)
-
^rMACSAVE
-
^rMAP
-
^rOBJ (OBJ コードを格納する)
-
^ROUTINE (ルーチンを格納する)
-
^SPOOL (制限は、InterSystems IRIS スプーリングを使用しているネームスペースにのみ適用されます。"入出力デバイス・ガイド" の “スプール・デバイス” を参照してください。)
-
^SYS (ドキュメントに記載されているようにノードを設定する場合を除く)
-
^z* および ^Z* (インターシステムズで使用するために予約されています)
ルーチンとラベル
ルーチンまたはラベルの名前について、ObjectScript では以下のルールが適用されます。
-
最初の文字は、英字かパーセント記号 (%) に限られます。
% で始まるルーチン名にする場合、その直後の文字は z または Z にします。"IRISSYS データベースおよびカスタム項目" を参照してください。
-
残りの文字は、英字または数字にする必要があります (ただし、例外が 1 つあります。次の箇条書きを参照してください)。これらの他の文字に、ASCII 128 より大きい任意の文字を使用できます。
-
ルーチンの名前には、1 つ以上のピリオド (.) 文字を含めることができますが、最初と最後の文字には使用できません。
-
名前は、大文字と小文字を区別します。
-
ルーチンの名前は、最初の 255 文字以内で一意 (該当するコンテキスト内) であることが必要です。
ラベルは、最初の 31 文字以内で一意 (該当するコンテキスト内) であることが必要です。
特定の %Z ルーチン名は、ユーザが使用するために予約されています。"IRISSYS データベースおよびカスタム項目" を参照してください。
ユーザが使用するために予約されているルーチン名
InterSystems IRIS では、ユーザが使用するために、以下のルーチン名が予約されています。 これらのルーチンは存在しませんが、それらを定義した場合、これらのイベントが発生したときにそれらがシステムによって自動的に呼び出されます。
-
^ZWELCOME ルーチンは、ターミナルが起動したときに実行するカスタム・コードを含めることを目的としています。"ターミナルの使用法" を参照してください。
-
^ZAUTHENTICATE および ^ZAUTHORIZE ルーチンは、認証および承認のためのカスタム・コードを含めることを目的としています (代行認証 と 代行承認 をサポートするため)。このようなルーチンのために、InterSystems IRIS にはテンプレートが用意されています。"代行承認の使用法" と "代行認証" を参照してください。
-
^ZMIRROR ルーチンは、InterSystems IRIS ミラーリングを使用する場合の、フェイルオーバー動作をカスタマイズするためのコードを含めることを目的としています。"高可用性ガイド" を参照してください。
-
^%ZSTART および ^%ZSTOP ルーチンは、ユーザ・ログインなどの特定のイベントが発生したときに実行されるカスタム・コードを含めることを目的としています。それらを定義した場合、これらのイベントが発生したときにそれらがシステムによって呼び出されます。"専用のシステム/ツールおよびユーティリティ" の "^%ZSTART ルーチンと ^%ZSTOP ルーチンによる開始動作と停止動作のカスタマイズ" を参照してください。
-
%ZLANGV00、および名前が %ZLANG で始まる他のルーチンは、カスタム変数、コマンド、および関数を含めることを目的としています。"専用のシステム/ツールおよびユーティリティ" の "^%ZLANG ルーチンによる言語の拡張" を参照してください。
-
^%ZJREAD ルーチンは、^JCONVERT ルーチンを使用する場合にジャーナル・ファイルを操作するためのロジックを含めることを目的としています。"データ整合性ガイド" の "ジャーナリング" を参照してください。
クラス
どのクラスも、完全クラス名は packagename.classname の形式です。
クラス名のルールは、以下のとおりです。
-
packagename (パッケージ名) および classname (短いクラス名) は英字で始まる必要があります。
-
packagename にはピリオドを含めることができます。
その場合、ピリオドの直後の文字は英字にする必要があります。
packagename のピリオドで区切られた各部は、サブパッケージ名として扱われ、一意性のルールに従います。
-
残りの文字は、英字または数字にする必要があり、ASCII 128 より大きい文字も使用できます。
-
パッケージ名と短いクラス名は一意である必要があります。同様に、サブパッケージ名は、親パッケージ名内で一意である必要があります。
各クラスを定義したときに使用した大文字と小文字はシステムで保持され、クラス定義に指定した大文字と小文字に完全に一致させる必要があります。ただし、大文字と小文字のみが違う 2 つの識別子を指定することはできません。例えば、識別子 id1 と ID1 は一意性を保つ目的からは同一と見なされます。
-
相互運用対応ネームスペースでは、Ens、EnsLib、EnsPortal、または CSPX をパッケージ名として使用しないでください。これらのパッケージは、アップグレード・プロセス中に完全に置換されます。これらのパッケージ内でクラスを定義した場合は、アップグレード前にそれらのクラスをエクスポートして、アップグレード後にインポートする必要があります。
-
いずれの相互運用対応ネームスペースでも、先頭に Ens (大文字と小文字の区別あり) が付くパッケージ名を使用しないことをお勧めします。詳細は、"プロダクションの開発の概要" の "環境上の考慮事項" を参照してください。
-
以下のように長さの制限があります。
-
パッケージ名 (すべてのピリオドを含む) は最初の 189 文字内で一意である必要があります。
-
短いクラス名は最初の 60 文字内で一意である必要があります。
完全なクラス名は、クラス・メンバの個別の長さ制限に寄与します。次のセクションを参照してください。
-
回避する必要があるクラス名
永続クラスでは、クラスの短い名前として SQL 予約語を使用しないでください。
クラスの短い名前として SQL 予約語を使用する場合、そのクラスに対して SqlTableName キーワードを指定することが必要になります。また、短いクラス名と SQL テーブル名の間に不一致があると、将来コードを読むときに注意が必要になります。
クラス・メンバ
作成するクラス・メンバについては、その項目の名前が範囲指定されていない限り、以下のルールに従う必要があります。
-
名前は、英字かパーセント記号 (%) で始まる必要があります。
SQL に投影されるクラス・メンバについては、その他の考慮事項があります (例えば、このメンバには永続クラスのほとんどのプロパティが含まれます)。最初の文字が % である場合、2 番目の文字は Z または z である必要があります。
-
残りの文字は、英字または数字にする必要があり、ASCII 128 より大きい文字も使用できます。
-
メンバ名は (該当するコンテキスト内で) 一意である必要があります。
クラスを定義したときに使用した大文字と小文字はシステムで保持され、クラス定義に指定した大文字と小文字に完全に一致させる必要があります。ただし、2 つのクラス・メンバに、大文字と小文字のみが違う名前を指定することはできません。例えば、識別子 id1 と ID1 は一意性を保つ目的からは同一と見なされます。
-
メソッドまたはプロパティ名は最初の 180 文字内で一意である必要があります。
-
プロパティの名前の長さと、そのプロパティのインデックスの名前の長さを合わせた長さは、180 文字を超えてはいけません。
-
各メンバの完全な名前 (未修飾のメンバ名および完全なクラス名を含む) は、220 文字以下である必要があります。
-
2 つのメンバに同一の名前を付与しないでください。予測できない結果となる可能性があります。
メンバ名の範囲を指定することもできます。範囲指定したメンバ名を作成するには、名前の最初と最後の文字に二重引用符を使用します。これにより、範囲指定しない場合には許可されない文字を名前に含めることができます。以下はその例です。
Property "My Property" As %String;
回避する必要があるメンバ名
永続クラスについては、メンバの名前として SQL 予約語を使用しないでください。
これらの名前の 1 つに SQL 予約語を使用すると、そのクラスを SQL に投影する方法を指定するときに余分な作業が必要になります。例えば、プロパティの場合、SqlFieldName キーワードを指定する必要があります。また、クラスの識別子と SQL の識別子の間に不一致があると、将来コードを読むときに注意が必要になります。
SQL 予約語には、%SQLUPPER や %FIND のように、名前が % で始まる項目が数多く存在する点に注目してください。このような項目は、SQL に対する InterSystems 拡張機能です。将来のリリースで、その他の拡張機能が追加される可能性もあります。
IRISSYS データベースおよびカスタム項目
IRISSYS データベースに項目を作成できます。ただし、以下の命名規約に従っていない場合、InterSystems IRIS のアップグレード・プロセスで IRISSYS 内のカスタム項目は削除されます。
項目が上書きされないようにこのデータベースにコードまたはデータを追加するには、以下のいずれかを実行します。
-
%SYS ネームスペースに移動し、項目を作成します。このネームスペースの場合、既定のルーチン・データベースおよび既定のグローバル・データベースは、どちらも IRISSYS です。以下の名前付け規約を使用して、項目がアップグレード・インストールの影響を受けないようにします。
-
クラス : パッケージを Z または z で始めます。
-
ルーチン : 名前を Z、z、%Z、または %z で始めます。
-
グローバル : 名前を ^Z、^z、^%Z、または ^%z で始めます。
-
-
どのネームスペースでも、以下の名前で項目を作成します。
-
ルーチン : 名前を %Z または %z で始めます。
-
グローバル : 名前を ^%Z または ^%z で始めます。
ネームスペースの標準マッピングにより、これらの項目は IRISSYS に書き込まれます。
-
MAC コードとインクルード・ファイルはアップグレード・プロセスによる影響を受けません。
別の方法で項目をすべてのネームスペースからアクセス可能にするには、%ALL ネームスペースを使用します。これは、"すべてのネームスペースへのデータのマッピング" で説明しています。