Delphi と IBLite (InterBase)

# はじめに
InterBase は組み込みから多層 DB アプリケーションにも対応するマルチデバイス向けのデータベースで、エディションにより用途が異なります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/d1149b5e-8ce0-7e30-d7df-cfb1d980aa79.png)

| エディション | 用途 | 対応プラットフォーム |同時接続ユーザー数|ユーザーあたりのセッション数|最大 DB ファイルサイズ|
|:--------------|:----|:-----|:-----:|:-----:|:-----:|
| IBLite      |組み込み|Windows, macOS, iOS, Android|1|1|100MB|
| ToGo Edition|組み込み / スタンドアロン|Windows, macOS, iOS, Android|1|8|無制限|
| Desktop Edition |スタンドアロン |Windows|1|8|無制限|
| Developer Edition |開発用|Windows, macOS [^1], Linux, Solaris [^1]|20|4|無制限|
| Server Edition |多層 DB アプリケーション |Windows, macOS [^1], Linux, Solaris [^1]|～無制限 [^3]|4|無制限|

**Delphi には 開発用の Developer Edition が付属**しており、スタンドアロン及び多層 DB アプリケーション向けのアプリケーションを開発できます。無償で使えますが、この Developer Edition を配布する事はできません。

クライアントサーバーを含む多層 DB アプリケーション用であれば、**Server Edition** とクライアントライセンスを購入する必要があります。

スタンドアロン用の **Desktop Edition** もありますが Windows 専用であり、複数の PC から同時接続できません。ネットワークに繋がない PC でのスタンドアロン動作という今となってはニッチな用途向けです。

**ToGo Edition** と **IBLite** は共に組み込み向けです。**Firebird SQL** で言う所の **Embedded Server** です。Delphi には **ToGo Edition のテスト配置ライセンス**と **IBLite の無制限配布ライセンス**が付属しています。この両者の違いはライセンスのみであり、制限もライセンスファイルで行われています。スタンドアロン用途なら ToGo Edition でもいいと思います。

IBLite を iOS や Android 等のモバイル環境で使うのは OK だと思いますが、**ちょっと残念な仕様がある** [^2] ため、Windows や macOS のようなデスクトップ環境の場合には (有償ですが) ToGo Edition や Desktop Edition を使いましょう...大丈夫だよね？ToGo や Desktop なら。

余談ですが Firebird SQL は InterBase 6 Open Edition からフォークした RDBMS です。使い方はほぼ同じなので、用途や状況に応じて使い分けるといいと思います。

**See also:**

- [InterBase について (DocWiki)](http://docwiki.embarcadero.com/InterBase/2017/ja/InterBase_%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
- [InterBase 製品エディション (Embarcadero)](https://www.embarcadero.com/jp/products/interbase/product-editions)
- [InterBase (Delphi Forum)](https://ht-deko.com/delphiforum/?vasthtmlaction=viewtopic&t=882.0#postid-2687)
- [Firebird SQL (firebirdsql.org)](https://www.firebirdsql.org/) 
- [Firebird (Delphi Forum)](https://ht-deko.com/delphiforum/?vasthtmlaction=viewtopic&t=861.0) 

# IBLite (ToGo Edition)
この記事では IBLite を扱いますが ToGo Edition も使い方は一緒です。先述の通り、Delphi には IBLite の無制限配布ライセンスが付属しており、無償でしかもマルチプラットフォームで使えます。

**See also:**

- [ToGo クイック スタート (DocWiki)](http://docwiki.embarcadero.com/InterBase/2017/ja/ToGo_%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF_%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88)

## IBLite (ToGo Edition) のインストール

Delphi で使う場合、GetIt ([ツール | GetIt パッケージマネージャ]) から Interbase ToGo Edition / IBLite 用の再配布ファイルを入手します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/5ee1d574-3bc8-ae6e-585a-29b365981b5d.png)
Delphi インストール時に Developer Edition をインストールしなかった場合には、インストーラーの [変更] で追加インストールするか、別途 Developer Edition を DL してインストールしましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/c7621d54-b821-f80f-c6f9-6b7a0adb3ef4.png)
ToGo Edition / IBLite アプリケーション**設計時の機能は Developer Edition を通じて提供されます**。ToGo Edition / IBLite が実際に使われるのは実行時です。ToGo Edition / IBLite 向けのアプリ開発であっても **IDE から設計時の機能を使う場合には Developer Edition のインストールが必須**となります。 

開発には Developer Edition があると便利なのですが、**Firebird SQL** をお使いの場合、そのままだと競合してしまうので、InterBase Maneger でサービスとしてではなくスタンドアロンで手動起動するようにするといいでしょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/d75ec6df-94ff-a0ed-4bd2-e9bfeeacea5a.png)

また、Firebird SQL をお使いの場合には、システムフォルダ (C:\Windows\SYSWOW64) にある Interbase 由来の GDS32.DLL を削除し、Firebird 由来の GDS32.DLL をコピーしておきましょう。

以前は再配布ファイルを用意した後で、ライセンスファイル (reg_iblite.txt) を取得して $(IBREDISTDIR) [^4] へ手動でコピーする必要があったのですが、現在では GetIt からインストールした ToGo Edition / IBLite の再配布ファイルと共にライセンスファイルが含まれるようになっています...つまり、現在は**デフォルトで IBLite として動作する**という事になります。

 - [InterBase クイック スタート：Part I - InterBase for Windows をインストールする (DocWiki)](http://docwiki.embarcadero.com/InterBase/2017/ja/InterBase_%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF_%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%EF%BC%9APart_I_-_InterBase_for_Windows_%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B) 
 - [ToGo のインストール (DocWiki)](http://docwiki.embarcadero.com/InterBase/2017/ja/ToGo_%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
 - [InterBase Developer Edition ダウンロード (Embarcadero)](https://downloads.embarcadero.com/free/interbase?lang=jp)
 - [InterBase トライアル、および Developer 版の仕様について (Support KB)](https://support.embarcadero.com/article/37627)
 - [IBLite への接続時に [FireDAC][Phys][IBLite]unavailabale database エラーが発生する (Windows アプリケーション 設計時)](https://support.embarcadero.com/article/44673)
 - [IBLite および IBToGo のテスト配置ライセンス (DocWiki)](http://docwiki.embarcadero.com/RADStudio/ja/IBLite_%E3%81%8A%E3%82%88%E3%81%B3_IBToGo_%E3%81%AE%E3%83%86%E3%82%B9%E3%83%88%E9%85%8D%E7%BD%AE%E3%83%A9%E3%82%A4%E3%82%BB%E3%83%B3%E3%82%B9)
 - [IBLite および InterBase ToGo Test Deployment のライセンス使用方法 (SupportKB)](http://support.embarcadero.com/jp/article/43726)
 - [IBLite 2017 の GetIt パッケージが更新され、ライセンスファイルが付属しました (Community.Embarcadero)](https://community.embarcadero.com/blogs/entry/updated-iblite-2017-getit-package-with-license-file-jp)

## IBLite (ToGo Edition) アプリケーションの作成
IBLite (ToGo Edition) アプリケーションの作成については以下の記事を参考にしてください。FireMonkey からだけでなく、VCL からももちろん使えます。

 - [軽量の、だがしかし高性能なデータベース InterBase / IBLite を iOS / Android で利用する (Qiita: @kazaiso)](https://qiita.com/kazaiso/items/f579cfd711dd283664e9)
 - [IBLiteをWindowsで使用する (community.embarcadero.com)](https://community.embarcadero.com/blogs/entry/how-to-use-interbase-lite-on-windows-jp)
 - [InterBase関連のリソース (Embarcadero)](https://www.embarcadero.com/jp/products/interbase/resources)

## IBLite (ToGo Edition) の配布
Windows の場合には手動で配布してもいいのですが、macOS / iOS / Android の場合にはアプリケーションパッケージに含める必要があります。パッケージに IBLite の再配布ファイルを含めるには、以下のいずれかの方法を採ります。

 - [プロジェクト | プロジェクトに追加...] でプロジェクトに拡張子 .gdb または .ib のファイル (Interbase のデータベースファイル) を追加する。
 - [[プロジェクトマネージャ]](http://docwiki.embarcadero.com/RADStudio/ja/%EF%BC%BB%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88_%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%EF%BC%BD) に拡張子 .gdb または .ib のファイル (Interbase のデータベースファイル) をドラッグ＆ドロップする。
 - [プロジェクト | 配置] で [機能ファイルの追加] ボタンを押す。![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/9e20a375-2806-0a3c-8236-acf3c5f7cfc6.png)

それから [[機能ファイル]](http://docwiki.embarcadero.com/RADStudio/ja/%E9%85%8D%E7%BD%AE%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3_-_%EF%BC%BB%E6%A9%9F%E8%83%BD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%BF%BD%E5%8A%A0%EF%BC%BD) ダイアログで "Interbase ToGo" にチェックを入れます。 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/af18c3ca-1673-34b7-caf5-29cb607f70cb.png)

こうするとプロジェクトのビルド完了後の配布 (デプロイ) 時に配布パッケージに IBLite の再配布ファイルが含まれるようになります。

## Windows 向けの IBLite (ToGo Edition) の配布 (手動)

Windows 用に開発＆デバッグする場合には、再配布用フォルダ [^4] から手動でファイルをコピーしておくといいでしょう。

### 1.32bit アプリケーション用の手動配布
32bit Windows アプリケーション向けの場合には win32_togo フォルダからファイルを収集します。

```text:win32_togo
\
│  (あなたの作った EXE)
│  (あなたの作った DB)
│  ibtogo.dll (32bit アプリケーションの場合)
│
└─InterBase
    │  ADMIN.IB
    │  interbase.msg
    │  license.txt
    │  oss_license_notice.txt
    │
    ├─intl
    │      gdsintl.dll
    │
    └─license
            reg_iblite.txt (IBLite の場合)
```

### 2.64bit アプリケーション用の手動配布
64bit Windows アプリケーション向けの場合には win64_togo フォルダからファイルを収集します。

```text:win64_togo
\
│  (あなたの作った EXE)
│  (あなたの作った DB)
│  ibtogo64.dll (64bit アプリケーションの場合)
│
└─InterBase
    │  ADMIN.IB
    │  interbase.msg
    │  license.txt
    │  oss_license_notice.txt
    │
    ├─intl
    │      gdsintl.dll
    │
    └─license
            reg_iblite.txt (IBLite の場合)
```

reg_iblite.txt は再配布用フォルダ [^4] 直下にあるハズですが、なければ ToGo / IBLite の再配布パッケージを　GetIt から再度インストールしてみてください。

## Windows 向けの IBLite (ToGo Edition) の配布 (PAServer 経由)
開発がローカル PC 内で完結しているのなら、この方法は面倒なだけかもしれませんが、一応ご紹介しておきます。

### 1.PAServer のインストール
PAServer は `Delphi のインストールフォルダ\PAServer` にインストーラが格納されています。`setup_paserver.exe` を実行してインストールします。
デフォルトのインストール先だと UAC の影響を受けてしまいますので、**必ず Program Files / Progran Files (x86) 以外の場所へインストール**してください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/eadbed3a-4068-ccea-bf5b-4e76ac2b2eaa.png)
インストール先の `paserver.exe` を実行します。Enter を押し、以下の画像のような状態にしてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/92b8d31c-08e8-4749-bebc-5ef43bcd051f.png)
初回起動時には Windows Defender に引っかかるかもしれませんが、その時には許可を行ってください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/7eb11fdd-7a32-3bd9-2e72-4d5b41169af0.png)


### 2.接続プロファイルの作成
 1. [ツール | オプション] で **接続プロファイルマネージャ** を開きます。
 ![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/3b4171e0-076a-1e5d-de13-6bf98bd8d71b.png)
 2. [追加] ボタンを押して接続プロファイルを作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/96e9a3f1-e81e-81c1-7d30-4614bd0e262a.png)
 3. プロファイル名を `"Win32 Loopback"` にし、プラットフォームで `32 ビット Windows` を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/e9b89d42-6d61-73d5-2ca4-0dfb6bf89a48.png)
 4. IP アドレスに `127.0.0.1` を入力します。パスワードは不要です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/ea6d26f1-cc7d-686d-2c63-317ede68ed57.png)

 5. [接続テスト] ボタンを押して接続できれば OK です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/ed56d47a-0318-3e1d-14d4-98b5fdc9d39e.png)
 6. 同様に 64bit Windows 用の接続プロファイルも作っておきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/2438aa77-d3dd-4def-a882-94a5a52ab04c.png)

### 3.ターゲットプラットフォームに接続プロファイルを割り当てる

[プロジェクトマネージャ] のターゲットプラットフォームを右クリックし [プロパティ] をクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/a803fbdd-3e58-2a33-d1d0-30b934a8f50a.png)
プロファイルで先程作った接続プロファイルを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/d2169680-7c7c-2455-21dd-50c46f05d51b.png)
プロファイルで先程作った接続プロファイルを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/1d93972f-cfe0-dfa3-0fc5-0873412e5c56.png)
ターゲットプラットフォーム "32 ビット Windows" に接続プロファイル "Win32 Loopback" が割り当てられました。

### 4.配置
[プロジェクト | 配置] で [機能ファイルの追加] ボタンを押し、
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/9e20a375-2806-0a3c-8236-acf3c5f7cfc6.png)
 [[機能ファイル]](http://docwiki.embarcadero.com/RADStudio/ja/%E9%85%8D%E7%BD%AE%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3_-_%EF%BC%BB%E6%A9%9F%E8%83%BD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E8%BF%BD%E5%8A%A0%EF%BC%BD) ダイアログで "Interbase ToGo" にチェックを入れ、 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/af18c3ca-1673-34b7-caf5-29cb607f70cb.png)
[プロジェクト | ？？？の配置] か、[配置] タブで [配置] ボタンを押します。普通にデバッグ実行しようとしてもファイルは配置されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/4c1da0f6-4fb7-28ae-0e24-57b7e9d1fb58.png)
但し、**ファイルはプロジェクトフォルダに配置されません**。PAServer を使った場合、ファイルは[スクラッチディレクトリ](http://docwiki.embarcadero.com/RADStudio/ja/%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0_%E3%82%A2%E3%82%B7%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%88_%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%EF%BC%9A_PAServer#.E3.82.B9.E3.82.AF.E3.83.A9.E3.83.83.E3.83.81_.E3.83.87.E3.82.A3.E3.83.AC.E3.82.AF.E3.83.88.E3.83.AA)に配置されます。スクラッチディレクトリはリモートデバッグ用のサンドボックスのようなものです。これは通常 `PAServer インストールフォルダ\Scratch-dir` に存在します。このため、PAServer は %ProgramFiles% 以下にインストールしてはいけません。

スクラッチディレクトリの場所は PAServer のコンソールで s [Enter] とすると知ることができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/21785/28c391ba-0002-6f96-3dea-477e6e261251.png)
ね、手動配布の方が簡単でしょ？ (^^;A

**See also:**

- [プラットフォーム アシスタントのオプションの設定 (DocWiki)](http://docwiki.embarcadero.com/RADStudio/ja/%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0_%E3%82%A2%E3%82%B7%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%88%E3%81%AE%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E8%A8%AD%E5%AE%9A)

# 終わりに
便利ですがちょっと解りにくい IBLite についての記事でした。

繰り返しになりますが、アプリケーション側から見た ToGo Editon と IBLite に違いはありませんので、ドキュメントの類はライセンス部分を除いて互いに読み替える事が可能です。

**See also:**

- [Embarcadero 製品価格表 (Embarcadero)](https://www.embarcadero.com/images/jp/embarcadero-pricelist-jpy.pdf)

[^1]: Interbase XE が最新版となる。
[^2]: IBLite を使ったアプリケーションが複数ある場合、後で起動したアプリケーションからは IBLite が使えない。つまり IBLite 使用アプリは排他利用となる。
[^3]: クライアントライセンスが別途必要。最近ちょっとお高い。
[^4]: デフォルトで C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBase2017