BIM・IFCブログに戻る
エクスポートの修正 · 2026-06-03 · 8分
IFCのGUIDがエクスポートのたびに変わる理由と、安定させる方法
同じモデルを再エクスポートしてコーディネーターに送ったとたん、BCFのコメントも干渉の指摘事項もFM(施設管理)のタグも、すべて別の要素を指すか、何も指さなくなってしまう。原因は、IFCのGlobalIdが再生成されたことです。なぜそうなるのか、そしてGlobalIdを固定する方法を解説します。
IFCのGUIDがエクスポートのたびに変わる理由と、安定させる方法 — IFC Viewer Online article cover
IFCには、まったく異なる2種類のGUIDの問題があり、両者はしばしば混同されます。1つ目はGUIDの重複で、1つのファイルの中で2つの要素が同じGlobalIdを持ってしまうものです。2つ目が本記事で扱うGUIDの不安定さで、モデルを再エクスポートするたびに、同じ要素に別のGlobalIdが付いてしまう問題です。どちらも調整作業を破綻させますが、2つ目のほうが厄介です。個々のファイルを見るかぎりでは、まったく問題なく見えるからです。
干渉の調整を行う、BCFのワークフローを回す、あるいは施設管理にモデルを引き渡すのであれば、安定したGlobalIdは欠かせません。ツールが「リビジョン4のこの壁は、リビジョン2のあの壁と同じものだ」と判断できる手がかりは、GlobalIdしかないからです。GlobalIdがずれると、古いIDを指していたすべての参照が、何の警告もなく宙に浮いてしまいます。
- 22 — IFCのGUIDの文字数
- 3 — 先頭文字の最大値
- 0バイト — 検証のためのアップロード量
- 100% — ブラウザー内で動作
本来あるべき安定したGlobalIdとは
IfcRootを継承するすべてのIFCエンティティは、GlobalIdを持っています。これは、IFC独自のbase64文字セット(0–9、A–Z、a–z、_、$)を使った22文字の文字列です。仕様では、GlobalIdはグローバルに一意であり、かつ永続的であるべきだと明記されています。つまり、論理的に同じ要素は、リビジョンをまたいでも、ソフトウェア間のラウンドトリップを経ても、同じGlobalIdを保ち続けるということです。この永続性があるからこそ、変更の追跡、BCF、資産台帳が成り立ちます。
// Revision 2
#1402 = IFCWALL('3LYa_FRDj3zhLfyYoQv6Jr', $, 'Exterior Wall - 300mm', ...);
// Revision 3 — same wall, regenerated GlobalId. Every reference to the old ID now dangles.
#1402 = IFCWALL('2hQ8pZ_a1ABxKm9dELc0Ru', $, 'Exterior Wall - 300mm', ...);
RevitがGUIDを再生成する理由
根本的な原因は、Revitの要素と、それがエクスポートされるIFCエンティティとが、必ずしもきれいに1対1で対応しないことにあります。Revitの1つの要素が複数のIFCエンティティに分かれることがあり(手すりは、横材、手すり子、ハンドレールに分かれます)、安定した1対1の関係がない場合、エクスポーターには一貫したGlobalIdを導き出すための確かな拠り所がありません。そのため、新しいGlobalIdを生成してしまうのです。
かつてRevitのIFC GUIDパラメータは読み取り専用だったため、チームが固定したくても固定できませんでした。新しいバージョンのエクスポーターでは読み書き可能になり、値を保存して再利用できるようになっています。ただし、構成によっては再生成が既定の動作になっているため、正しい設定を自分でオンにする必要があります。
- サブ要素への分割:1つのホスト要素が複数のIFCエンティティとしてエクスポートされるケース(手すり、階段、カーテンウォール、鼻隠し付きの屋根)は、GUIDがずれる典型的な原因です。
- 「新規生成」の動作での再エクスポート:エクスポート設定によっては、保存された値を再利用せず、毎回GUIDを作り直すものがあります。
- オーサリングツール(BIMソフト)でのコピー&ペーストやグループの編集によって、GUIDの元になる内部IDがリセットされることがあります。
- GlobalIdを保持しないツールを経由したラウンドトリップ(ビューアーやコンバーターで開いて保存し直すなど)では、GlobalIdが書き換えられます。
もうひとつの問題:範囲外のGUID
自作のエクスポートスクリプトで頻繁に起こる、関連した不具合もあります。有効なIFC GlobalIdの先頭文字は、6ビットの文字セットのうち0〜3の値しか表せません。128ビットのUUIDを22文字のbase64に詰め込むと、先頭の6ビットには有効なビットが2つしか残らないからです。32桁の16進数で表された通常のUUIDを単純に切り詰めたり、エンコードし直したりするスクリプトでは、先頭文字がこの範囲から外れてしまいます。
GUIDの値が有効な範囲外です。先頭の桁が0、1、2、3以外であれば、それは規格に準拠したIFC GlobalIdではありません。
buildingSMARTフォーラム:IFCエクスポートでよくある間違い
範囲外のGlobalIdは、寛容なパーサーでは何事もなく受け入れられ、厳格なパーサーでは弾かれます。そのため、同じファイルがあるツールでは「動く」のに、別のツールでは検証に失敗するということが起こります。範囲外であることを明示的に指摘してくれるチェッカーがなければ、原因の特定に頭を抱えることになります。
不安定なGUIDや無効なGUIDを検出する方法
GUIDのずれは、1つのファイルを見ているだけではわかりません。2回分のエクスポートを比較するか、1つのファイルの中で形式の誤りや重複をチェックする必要があります。両方のリビジョンを検証ツールで開いてください。有効範囲外のGlobalId、ファイル内で重複しているGlobalId、形式が不正なGlobalIdを、30秒以内に、すべてブラウザーの中で指摘します。何もアップロードされません。
実際のモデルでGlobalIdをチェック
buildingSMARTのDuplexモデルを開いて問題のないGlobalIdレポートを確認したら、次は自分のモデルを続けて2回エクスポートしたファイルをドロップし、どの要素のIDが再生成されたかを見つけましょう。
IFC2x3 · 2.4 MB
インタラクティブなIFCビューアーを開く
GUIDを安定させる方法
Revit
オープンソースのIFCエクスポーターを使い、File → Export → IFC → Modify Setup → Advancedで、「Export IFC GUIDs」を「Keep Existing」に設定します(「Generate New」は決して選ばないでください)。こうすると、エクスポートのたびに新しいGlobalIdを発行するのではなく、Revitが要素ごとに保存している安定したGlobalIdが再利用されます。複数のIFCエンティティに分かれる要素については、サブエンティティが完全には安定しない可能性があることを受け入れ、調整作業はホスト要素のIDを基準に行いましょう。
ArchiCAD
IFC Translatorの設定で、「Write stable GlobalIDs (from AC internal IDs)」を有効にします。これを有効にしないと、ArchiCADはエクスポートごとに変わりうる方法でGlobalIdを導き出します。
すでにずれてしまったGUIDの修正
ファイルにすでに無効なGlobalIdや重複したGlobalIdが含まれている場合は、検証ツールで自動修正できます。正しいbase64文字セットを使い、先頭文字が0〜3の範囲に収まる、仕様に準拠した22文字の新しいGlobalIdを生成します。納品されたファイルの形式を修復するにはこれを使いましょう。ただし、上流のエクスポート設定も必ず直してください。そうしないと、次の再エクスポートでまたずれが生じます。
GUIDの重複(2つの要素が1つのIDを共有するケース)や、モデル構造に関するチェックの全体像については、このブログのIFCにおけるGUIDの重複とIFC検証でよくある7つのエラーもあわせてお読みください。
IFCのGUIDがエクスポートのたびに変わる理由と、安定させる方法