お使いのデータベースをコンパイルすることができます。コンパイルとは、すべてのメソッドをマシン言語に翻訳することです。データベースをコンパイルすると、コードの整合性を調べたり、実行速度を向上させることができます。さらに、コード全体を保護することも可能です。4D でデータベース開発を行い、それをスタンドアロンアプリケーションとして配布するまでの間で、コンパイルは不可欠な作業です。
コンパイル処理はすべて自動的に行われますが、コンパイルを実行するためには4D コードをより正確に記述する必要があります。『4D ランゲージリファレンス』マニュアルのコンパイラでは、コンパイルを目的としてプログラムを作成する上でのアドバイスや特定情報が提供されています。さらに、コンパイラーはプログラムのあらゆるエラーを指摘し、エラー箇所を示すという点に留意してください。
コンピューターは、“0”と“1”だけで命令が記述されている装置です。この2 進数による言語は“マシン語”と呼ばれます。マシンの心臓部であるマイクロプロセッサーは、この言語しか理解することができません。高水準コンピューター言語(C、C++、Java、BASIC、4D 等)で記述されたプログラムは、コンピューターのマイクロプロセッサーが理解できるように、まずマシン語に翻訳されます。
これを行うには、2 つの方法があります:
- ステートメントの実行中に翻訳する:このプログラムはインタープリターと呼ばれます。
- プログラムの実行前にステートメント全体を翻訳する:このプログラムは、コンパイル済みと呼ばれます。
一連のステートメントをインタープリターを使用して実行する場合、その処理過程は次のような段階に分かれます:
- プログラムは、ステートメントをプログラム独自の言語で読み込みます。
- ステートメントをマシン語に翻訳します。
- ステートメントを実行します。
このサイクルがプログラムの各ステートメントごとに行なわれます。このタイプの実行サイクルを処理するプログラムをインタープリターと呼びます。データベースの開発過程において、4D メソッドはインタープリターモードで実行されます。
コンパイル済みのプログラムは、実行前にプログラム全体が翻訳されます。この処理により、一連のマシン語のステートメントを納めた新しいファイルが生成されます。このファイルは繰り返し使用するために保存されます。翻訳は一度だけ行なわれ、このコンパイル版のプログラムは、繰り返し実行することができます。
このフェーズでは、そのプログラムが使用されることはまったくありません。翻訳を行うプログラムは“コンパイラー”と呼ばれます。
4D のコンパイラーは、データベース内のデータベースメソッドやプロジェクトメソッド、トリガー、フォームメソッド、オブジェクトメソッドをコンパイルします。アプリケーション内にこれらの要素がひとつも存在しない場合、コンパイラーがコンパイルする対象は何もありません。
コンパイルが正常に終了すると、オリジナルのデータベースと同じ方法でコンパイル済みデータベースを使用することができます。
コンパイルの第一の利点は、もちろん実行速度の向上です。さらに、コンパイルに直接関係する利点が2 つあります:
- 系統的なコードチェック
- データベースとコンポーネントの保護
実行速度の向上は、コンパイル済みコードの2 つの特性によるものです。つまり、一度限りでダイレクトなコード翻訳、変数とメソッドのアドレスへのダイレクトなアクセスという2 つの特性です。
- ダイレクトかつ確定的なコード翻訳
4D で作成されたメソッドのコードは、コンパイラーにより一度だけ翻訳されます。コンパイル済みデータベースを使用すると、インタープリターモードですべてのステートメントを翻訳するために要する時間が省かれます。 次に示すのは、これを説明する簡単な例です。50 回繰り返される一連のステートメントを含むループを例に取り上げています:
For($i;1;50)
End for
インタープリター版のデータベースでは、ループ内の各ステートメントは50 回翻訳されます。コンパイラーを使用すると、各ステートメントの翻訳フェーズがなくなるため、ループ内の各ステートメントに関して、50 回分の翻訳が省略されます。
- 変数とメソッドのアドレスへのダイレクトアクセス
インタープリター版のデータベースでは、名前を用いて変数にアクセスします。したがって、4D が変数の値を取得するには、その名前を使用しなければなりません。
コンパイル済みコードの場合、コンパイラーは各変数に対してアドレスを割り当て、変数のアドレスをコードに直接書き込み、必要になる度にそのアドレスへ直接アクセスします。
注:
- ディスクへのアクセスが必要となる処理の場合、その実行速度はコンピューターと周辺装置(ドライブやハードディスク)間の伝送速度により制限を受けるため、コンパイルの効果が得られない可能性があります。
- コメントは翻訳されないため、コンパイル後のコードには含まれません。したがって、コメントはコンパイル済みモードでの実行速度には影響しません。
コンパイラーは、データベースのシンタックスチェッカーとしても機能します。作成したコードを系統的にチェックして、不明確な箇所があれば知らせます。一方、4Dではメソッドの実行時にのみこの処理が行なわれます。
例えば、あるメソッドには一連の判定文と、実行対象となる一連のステートメントが含まれているものとします。テストする数が非常に多い場合は、すべてのケースを完全にテストすることはほとんどありません。この場合、テストされていないケースにシンタックスエラーが含まれていたとしても、エンドユーザがそのケースに出会うまで分かりません。
コンパイル済みデータベースを使用すると、このような問題が起きなくなります。データベースをコンパイルする際、コンパイラーはデータベース全体を細かく調べ、各ステートメントを解析します。コンパイラーはあらゆるエラーを検出し、警告やエラーメッセージを生成します。
データベースをコンパイルしたら、アプリケーションビルダーを使用してインタープリターコードを消去することができます。これを行うと、レコードアクセスを除き、デザインモードへアクセスできなくなります。アプリケーションビルダーについてはアプリケーションの仕上げと展開を参照してください。
コンパイル済みデータベースでは開発に関連するコマンドを使用することができません。
コンパイルされたコンポーネントをホストデータベースにインストールすると、エクスプローラーから共有メソッドにアクセスでき、ホストデータベースからそのメソッドを呼び出すことができます。しかしそのコードはエクスプローラーのプレビューエリアやデバッガーに表示されません。共有されないプロジェクトメソッド名はまったく表示されません。コンポーネントに関する詳細は4Dコンポーネントの開発とインストールを参照してください。
利点は以下の通りです:
- データベースのストラクチャーは、故意にしろ偶然にしろ変更されることはありません。
- メソッドは保護されます。
4D にはコンパイラーが組み込まれています。次のダイアログボックスを使用して、データベースをコンパイルします:

デザインメニュー内のコンパイル開始コマンドやツールバーのコンパイラーボタンに関連付けられたメニューを使用して、カレント設定に基づきコンパイルを直接起動することもできます。
コンパイルはデータベース設定のDOM Append XML child nodeで設定されたコンパイルオプションを使用して実行されます。
データベースがコンパイルされると、実行メニューのインタープリター再起動やコンパイル済み再起動メニューを使用して、インタープリターモードとコンパイル済みモードを切り替えて実行できるようになります。4Dアプリケーションを終了する必要はありません (アプリケーションビルドを行ってインタプリターコードを削除している場合は除きます)。
データベースを開くダイアログボックスでも起動時にインタープリターモードとコンパイル済みモードを選択することができます (参照)。
インタープリターモードでストラクチャーやコードを変更したら、それをコンパイルコードに反映させるために再コンパイルしなければなりません。
モードを変更すると、4Dは現在のモードを閉じ、新しいモードを開きます。つまりアプリケーションが閉じられ、再び開かれます。モードを移動するたびに4Dは以下のデータベースメソッドを実行します: On Exitデータベースメソッド -> On Startupデータベースメソッド