Uniface

**Uniface**（ユニフェイス）は、携帯、メインフレーム、Web、SOA、Windows、JEEとNETの環境で動作するエンタープライズアプリケーションを開発、実行するプラットホームである。Unifaceアプリケーションは、データベースとプラットホームに依存しない。Unifaceで作成されたアプリケーションは主なデータベース製品と統合を可能にする“インテグレーションフレームワーク”を提供する。

例えばメインフレームの製品（CICS、IMS）、Webサービス、SMTPやPOP電子メール、LDAPディレクトリ、.NET、C、C++プログラムとJavaとの統合を実現する。そして、Windows、Windows Mobile、Unixや（いろいろな）Linux、IBM iSeries/AS400、z/OSやVMSの下で稼動する。

Unifaceは、企業に不可欠なビジネスプロセスもサポートしており、重要な企業データを維持する複雑なシステムで利用が可能。

例えば、Webオンラインショッピング、金融取引、給与管理や在庫管理です。現在Unifaceは30カ国以上の数千社で使われている。そして、インストールベースでは数百万ライセンスにも上る。作成可能なUnifaceアプリケーションは、クライアント/サーバアプリケーションからWebアプリケーションの範囲に及ぶ。そして、データエントリー処理から、ワークフロー業務もカバーし、同様にイントラネット及び、インターネットを利用したポータルサイトからアクセスも可能。Unifaceは1984年Inside Automationによってオランダで誕生し、後にUniface B.V.へとなる。そして1994年 デトロイトに拠点を置くCompuware社によって買収される。2014年には Marlin Equity Partners の買収により、オランダ アムステルダムに本社を構え、ワールドワイドにオフィスを持ったUniface B.V.へと戻る。

__TOC__

## Uniface Products（ユニフェイス プロダクト）
Uniface基盤は開発環境と実行環境を提供し、大部分はUniface Application Platform Suite(APS)のパッケージで提供される。APSには以下の製品を含む。

* **Uniface Development Environment**（ユニフェイス開発環境） — アプリケーション開発時にモデル化、実装、コンパイル、デバッグ、配布を行う統合した開発環境
* **Uniface Flow**（ユニフェイスフロー） — ビジネスプロセスを開発、展開するための環境
* **Uniface View**（ユニフェイスビュー） — Webドキュメント、データベースレポート、エンタープライズアプリケーションをユーザに整理されたデスクトップとして提供する環境（アプリケーション統合ポータルの開発・実行環境）

Unifaceアプリケーション（開発環境、Uniface FlowとUniface Viewも含む）は、実行時に一般的なインフラ（システム環境）で稼動する。
* **Uniface Runtime Engine**（ランタイムエンジン） — コンパイルされたアプリケーション コンポーネントとライブラリを特定のプラットホームで実行する。
* **Uniface Router**（ルータ） — Unifaceアプリケーションのプロセス間通信を請け負うマルチスレッドのプロセス。Uniface Serverプロセスの開始、終了、ロードバランシングを行う。更にUnifaceプロセスの間のメッセージング処理も行う。
* **Uniface Server**（サーバ） — Unifaceクライアントからサーバ資源にアクセスを行ったり、サーバ上のコンポーネントを実行することができるサーバ上のプロセス。アプリケーションサーバ、データサーバとファイルサーバの働きをする。
* **Uniface Repository**（リポジトリ） — 開発時のプロパティ、プロセス、組織モデル、ポータル定義を保存する。
* **Web server**（Webサーバ） — UnifaceはWebアプリケーションを開発、テストする環境のためにApache Tomcat Serverをバンドルする。しかし、WebサーバはTomcatにとらわれず、全ての製品を利用することが可能。
* **Servlets** — Uniface Webアプリケーション（Webサービス）のためにWebServerとUniface Serverの間のコミュニケーションを行うJavaサーブレットを提供する。
* **Database connectors** — Unifaceがさまざまなデータベースとコミュニケーションを取るドライバを提供する。
* **Integration tools** — Unifaceとサードパーティ製アプリケーション（Java、CICS、IMS、LDAP、SMTP、POP、オペレーティングシステム命令、COM、その他）間のコミュニケーションを行うためのドライバ、コンポーネント及びAPIを提供する。

そのうえ、Uniface JTi（Java Thin Client Interface）は、Unifaceのクライアント/サーバアプリケーションをインターネットに接続している全てのコンピュータから実行させることができる。

Unifaceを記述するアプリケーションコードは手続き型言語であり、“PROCコード”と呼ばれる。Unifaceはカーネルとデフォルトコードによって、入出力ロジックの大部分を自動化する。ゆえにデフォルト機能の大部分はPROCコードを記述する必要はない。

## Uniface applications（アプリケーション）
Unifaceアプリケーションは、一つ以上のデータベース（ファイルシステム）にデータの作成、更新、削除を行えるコンポーネントベースのアプリケーション。インフラから完全に独立した形でアプリケーションは作成される。開発者は他の開発ツールで作成された非Unifaceコンポーネントを含む複合アプリケーションの統合も可能。そして、利用時にはクライアント/サーバ環境、Web環境、モバイル環境、Webサービス及びメインフレーム環境に展開することが可能。

Unifaceは、マルチティアアプリケーション構築のために異なるレイヤの為にいろいろなコンポーネントを用意している。
プレゼンテーション層のためのユーザインタフェース用のコンポーネント。
* **Forms**（フォーム） — クライアント/サーバ環境でデータ更新を行うインタラクティブな画面構築用のコンポーネント。
* **Server Pages**（サーバページ） — Web環境でデータ更新を行う為のインタラクティブな画面構築用のコンポーネント。
* **Reports**（レポート） — 印刷処理でデータを印刷するためのレイアウトの構築用のコンポーネントです。

ビジネスロジック層のためのコンポーネント。ビジネスルールとタスクの特有の機能を取り扱う。ユーザインタフェースはない。
* **Services**（サービス） — ローカル環境やサーバサイドで他のコンポーネントから起動できる。一般的なロジックやビジネスロジックを実装する。
* **Session Services**（セッションサービス） — 複数のデータ エンティティに影響を与える複雑なビジネスロジックを実装する。例えば、仕事に特化したふるまい、また、業務と関連するロジックを実装する。
* **Entity Services**（エンティティサービス） — 一つのデータエンティティ（実体）に対する単純なビジネスロジックを実装する。

データアクセス層は、Unifaceアプリケーションモデルで作成する物理データベース構築を含む。Unifaceは、SQL自動生成をDBMSコネクタから行うことで、物理的なデータアクセスを確実に行う。ネットワークとミドルウェアアクセスは、ミドルウェアドライバとUniface ルータによって実装される。

ランタイムエンジンは、アプリケーションコンポーネントを実行する。それはユーザインタフェースコネクタを用いたプレゼンテーションコンポーネント(GUI またはキャラクタベースがあります)を表示し、DBMSコネクタによってデータを送受信する。

## Application development（アプリケーション開発）
Uniface開発はモデルドリブンとコンポーネントベースを基本に構築される。データ構造、ビジネスルール及びアプリケーションのデフォルト動作は、アプリケーションモデルから反映される。モデル定義はコンポーネントによって受け継がれ、再利用することも可能。 そして、コンポーネントに固有の機能を追加して、テンプレートは生産性を向上させ、モデル定義を利用することで、システムの一貫性を実現する。

### Application Model（アプリケーションモデル）
アプリケーションモデルは、参照一貫性と共にエンティティ(テーブル)、フィールド、キー(インデックス)とリレーションを定義する。モデル内のエンティティとフィールドは、一式のトリガーとプロパティを持っている。
ビジネスルールは事前にアプリケーションモデル上のプロパティの設定を行い、アプリケーションモデル上のトリガーにProcコード（Unifaceの手続き型言語）を記述する。

トリガーはコードにとっての格納場所。トリガーがユーザの行うシステムイベントを受け付ける。例えば、や、というトリガーが存在する。トリガーは他にチェック機能を記述したり、関連チェックを行うトリガーも存在する。

アプリケーションモデルレベルのトリガーの使用は、ビジネスオブジェクトを集約するのに利用される。故に物理データ構造から論理的にロジックを分離が可能になる。一箇所にシステム全体の標準の動作を記述することが可能になり、再利用性の高い、3層アーキテクチャのアプリケーションを迅速に作成することが可能になる。

### Components （コンポーネント）
アプリケーションモデルで記述されたオブジェクトはコンポーネントで再利用される（継承される）。開発者は、アプリケーションモデルから、画面の部品をレイアウトキャンバス（画面レイアウト作成用の画面）に描画するか、コンポーネントストラクチャーのツリーにオブジェクトの挿入を行い、作成するコンポーネントにオブジェクトを配置する。アプリケーションモデルにないオブジェクト（例、制御部品、フィールド、メニュー、コンポーネント変数）を加えることもできる。

アプリケーションモデルに定義されたプロパティとトリガーはコンポーネントにコピーされることによって継承される。個別の機能を提供するために、コンポーネント単位に変更することは可能。これは、アプリケーションモデルとコンポーネントの継承を断つことになる（継承をアプリケーションモデルの内容に戻すことは可能）。　アプリケーションモデル上に記述したコードもしくは、プロパティをモデル上で変更した時は、各コンポーネントに保持しているすべてのオブジェクトの定義を更新するために再コンパイルが必要になる。

### Uniface Repository（リポジトリ）
Unifaceは、アプリケーションモデルの再利用を目的として、データベースにメタデータ（コンポーネント定義、コンポーネントレイアウト、PROCコード、その他）を維持する。リポジトリはUniface 開発環境を経由しアクセスされ、リポジトリ整合性（機密性）を守る。しかしながら、リポジトリ構造についてドキュメント化されており、例えば(推薦されていないけれども)レポート作成の為に直接リポジトリとのインターフェースを可能にする。
集中化したリポジトリを利用することで、ソフトウェア開発チームで共有される。（チームビルディングが可能）Unifaceは、Microsoft Common Source Code Control Interfaceをサポートするソースコードコントロールシステム（SCCS）と連携が可能。

## Application deployment（デプロイメント）
Unifaceアプリケーションは、コードを変更することなく、携帯からメインフレームまでのプラットホームで展開（運用）することが可能。コンポーネント（スタートアップシェル、メニュー、ツールバーパネル、グリフ、グローバルPROC、インクルードPROC）は圧縮ファイルにパッケージ化され、全てのプラットホームに配布が可能なランタイムオブジェクトにコンパイルされる。ランタイムオブジェクトは、バーチュアルマシンとプラットホーム固有のインタプリタを使用し実行される。(後に、Javaと他の言語は、この方法でUnifaceに続いた)  Uniface Virtual Machineが存在している環境なら、1台のマシンの上でコンポーネントをコンパイルして、別の環境で実行可能。

## Database Connectivity （データベース接続性）
Unifaceは、データベースコネクタ（ドライバ）を利用して、サポートするさまざまなデータベースとファイルシステムにアクセスを行う。DBMSコネクタは、Unifaceデータフォーマットを特定のデータベースに最も適当したフォーマットに変換しマッピングする。実行時にデータベース特有の拡張機能を利用するパラメータを設定することも可能（利用しなくすることも可能）。データベースコネクタが対応可能であれば、異なるデータベース間でデータを変換することも可能。UnifaceはAPI（Database Connector Interface）を提供します。これをカスタマイズすることで、データベースコネクタを作成することができる。

## Licensing（使用許諾）
使用許諾はCompuware Distributed Licenseマネージャ(DLM)を利用して管理される。クライアント環境にライセンスを提供するサーバライセンス管理システム。この機能により、ローカル環境にライセンスを保持する必要をなくする。

## History of Uniface（ユニフェイスの歴史）
当初UNISと呼ばれていた製品はInside Automationによって、1984年オランダで誕生したBodo DouqueはテクニカルディレクターFrits Kressと一緒に会社を立ち上げ、そして1986年までに、製品と社名をUnifaceに変更した。
Unifaceは米国規格協会 ANSI(American National Standards Institute) と3つのスキーマアーキテクチャに基づき開発された。最初の提案は1975年にあった。これは3つのスキーマ(メタモデル)から成り立つデータベース管理システムを構築する標準的なアプローチだった。

* **概念スキーマ**--すべてのデータ項目定義とそれらのリレーションシップ：
これはデータベース毎に1つだけある。Unifaceはアプリケーションモデル(いくつかのUnifaceバージョンではビジネスオブジェクトモデルやアプリケーションオブジェクトモデルとして知られている)として概念スキーマを実装する。
* **外部スキーマ**--異なったデータの外部(ユーザ)ビュー：
多くの外部スキーマがデータベースのために存在できる。Unifaceはコンポーネントとして外部スキーマを実装する。Unifaceが進化していく中で外部スキーマはフォームになった。ユーザへの表示の必要無い隠れたフォームはサービスになった。そしてサービスはビジネス層オブジェクトのセッションサービス、ビジネス層あるいはデータ層のエンティティサービスに分離した。表示の代わりに印刷されるフォームはレポー　トコンポーネントになった。サーバページ(USP)はWeb開発のために導入され、そしてその後のダイナミックサーバページ(DSP)はWeb2.0機能をサポートするために導入された。
* **内部スキーマ**--保存されたデータの物理的な表示の定義：
Unifaceは接続された多くのリレーショナルデータベースに内部スキーマを保存し、データベースに依存しない。

Unifaceは、ネイティブのVAXファイル-管理システムRMSを使って、DEC-VAXマシンの上で開発された。この痕跡がまだモードを変えるためのゴールドキーの継続的な使用によって今日の製品で見られる(DECVTターミナルがキーボード上にゴールドキーか、イエローキーを持っていた。現在のゴールドキーは ただテンキーの+キーまたはファンクションキーに割り当てられている。)

製品の初期バージョンは、そのデータベースだけにアクセスすることに限定されていなかったが、FastBuildという名前でSybase RDBMSがバンドルされていた。
Unifaceは常に新しいテクノロジーとアプリケーションアーキテクチャを取り込んできた。これはこれまでの成功には大変重要な事であり、その理由はUnifaceで作成されたアプリケーションを移行、更新、そしてモダナイズでき、これまでの開発投資を無駄にしないからである。

## Uniface Versions （ユニフェイス バージョン）
**Uniface Version 3 (1986)**
Uniface3は最初に公開したリリースだった。 それはマルチデータベース（RMS、オラクル 、C_ISAM、イングレス とRDB）、バーチャルマシンインタプリタ、ストラクチャエディタ、Unifaceテキストとコマンドエディタをサポートした。

**Uniface Version 4 (1988)**
Uniface4ではテキストエディタ（現在のフォームエディタ）を改善した。印刷、ディスプレイサポートも改善され、MS-DOSに対するサポートを導入して、そしてCASEツールインタフェースを加えた。

**Uniface Version 5 (1990)**
Uniface5はPolyserverを使ったリモートデータベース接続の導入でクライアント／サーバの実装を可能にした。 そしてユニバーサルプレゼンテーションインタフェース （UPI）によるグラフィカル・ユーザインタフェースを導入した。 データベースは合計13のデータベースとファイルシステムをサポートするように拡張された、それはDOS、VMS、OS/2、Stratus VOS とUNIX上で利用可能になり、日本語のサポートも同じく導入された。

**Uniface Six (1994)**
Uniface6 では完全なグラフィカル開発環境への移行が完了した。 それはグラフィカルフォームペインタとアプリケーションモデルエディタから成る。DOL(ダイナミックオブジェクトライブラリ)を通して実装を改善し、マイクロソフトOLEに対するサポート及びアップル・マッキントッシュ のサポートを加えた。そしてパーミションコントロールの追加、バージョンコントロールの統合、パーソナルシリーズレポーティングツールを加え、幅広いプラットフォームをサポートするようになった。

**Uniface Seven (1997)**
Uniface7 はUnifaceリクエストブローカー（URB）アーキテクチャの導入を通してUnifaceと外部コンポーネント両方のコンポーネント統合にフォーカスした。URBはコンポーネント間で双方向の同期／非同期の通信をサポートする。リモートデータアクセスと同様、それに分割されたアプリケーションサーバとメッセージ交換が追加された。またUniface7 はWebアプリケーションサーバとUnifaceのリクエストディスパッチャー を使い、最初のUnifaceWeb開発と実装ツールを提供した。

他の拡張としては新しいコンポーネントタイプ（サービス、サーバページ、レポート）、シグニチャエディタとアセンブリワークベンチ、サブシステム、オペレーション、ノンモダルフォーム、コンポーネントインスタンス、拡張エディタ、ナビゲーション、拡張エディタプラグイン、新しいデバッガ、オンラインヘルプ、コンポーネントテンプレート、Webアプリケーションサーバ、妥当性検証の改善、Unifaceネームサーバ、グラフィカルパーティショニングマネージャー等が含まれる。

Uniface7には他にもいくつかのツールが導入された。
* モデリングツール、統合ビジネスプロセスの管理、これらの機能はUniface8ではOptimal Flow、Uniface9ではUniface Flowになった。
* ビジネス統合ポータルは当初OptimalViewと呼ばれ後にUnifaceViewになった。
* インターネットやイントラネット上でWebアプリケーションを実装するためのUnifaceサーバベース、シンクライアントソルーションは、低帯域幅での高パフォーマンスを提供する。

**Uniface 8 (2001)**
Uniface8はプロセス統合分野において主要な変化をもたらした。UnifaceルータとUnifaceサーバはスケーラブルなで、バランスがとれた実装を提供した。Webリクエストディスパッチャー（WRD）は、パフォーマンスを改善し、URDを置き換えた。またSOAPとXMLを使ったWebサービスのサポートが導入された。接続性と互換性が改善され、3階層のアプリケーションアークテクチャを実装するための方法が導入された。
その他にSOAP、COM、CORBAとMQSeriesに対応したコネクタが加えられた。ウィンドウとファイルマネージメントが改善され、新しい実装ユーティリティが導入された。またアプリケーションの配布を改善し3階層アーキテクチャを構成するサブタイプ、コンポーネントインスタンスのためのハンドル、そしてオートマチックガバレッジコレクションが加えられた。

**Uniface 9 (2006)**
Uniface9はGUIとユーザビリティの改善、わずかな実装と統合にフォーカスした。またWindowsモバイルに対するサポートが加えられ、設定と実装は圧縮されたアーカイブを使い単純化された。そしてUnicode のサポートは多言語機能をさらに向上させた。さらにWeb開発とXMLの改善は業界標準の先にUnifaceを位置づけるものであった。
他の機能としてカラーハンドリングの改善、ダイナミックメニュー、XMLAPI、アプリケーションモデルのダイアグラムエディタが含まれた。また、リファクタリングと実装をサポートするためのクロスフィファレンス機能と拡張されたWebサービス機能も加わった。

**Uniface 9.4 (2010)**
ポイントリリースであったにもかかわらず、Uniface9.4は十分な新しい機能が導入された。最も主要なフォーカスはリッチインターネットアプリケーション(RIA)である。クラシックなクライアント/サーバアプリケーションに慣れた同じツールと方法論を使い、リッチなクライアント/サーバアプリケーションの機能でWeb2.0アプリケーションの開発を可能にした。また、言語とロケールのサポートが十分に改善され、HTML電子メールのサポートにもあったようにセキュリティと暗号化の機能が加わった。

**Uniface 9.5 (2011)**
Uniface 9.5のリリースは、ワールドワイド・ウェブにおける製品統合の改善がされた。 JavaScript APIの導入では、クライアントサイド処理におけるパフォーマンス、統合、機能性と使いやすさにおいて利益をもたらすことができる改善と共に導入された。またセッション管理性能については、改善されたセキュリティを提供するために拡張された。そして、Webサービス処理においては、SOAPとRESTfulサービスの複雑なデータタイプをフルサポートしました。
最後にビジネスに不可欠なクライアント／サーバー・アプリケーションを持っている顧客のために特にグリッドウィジェットにおける改善がされました。

**Uniface 9.6 (2012)**
Uniface9.6のリリースはUnifaceクライアント・サーバGUI機能の大きな見直しを行いました。機能としてJavaScript APIを提供したHTML5コントロールや拡張されたTABコントロールそして新たに追加されたイメージのハンドリング、改良を加えたボタン等が含まれます。フォームコンテナコントロールは、ダイナミックなユーザーエクスペリエンスの開発を可能にし、'フォームの中にフォーム'を作成する事を可能にしました。GUIの見直しの他、Uniface9.6はUniface Webについても拡張を行いました。Webトランザクションのスコープをダイナミックに変更できる機能、Webページネーション、ヒットリスト処理、そしてWSDLとXML機能についても改善を行いました。Uniface9.6は、Uniface9の最後のリリースになり次にUniface10がリリースされます。2014年まではUniface9.6におけるマイナーな拡張を継続します。

## 外部リンク
*www.udev.info building better web applications with Uniface (Tutorials und HowTo's)
*Uniface-Dev French website about technology Uniface
*The Uniface Community Community web site
*http://www.uniface.com Uniface product page
*Uniface mailing list and archive
*[news:comp.soft-sys.app-builder.uniface Usenet Uniface newsgroup]
*Profe$ional Uniface Users Universe a community web site
*Uli Merkel's Uniface resources and guide
*Nextcom Czech company developing in Uniface
*T.U.R.F. The Uniface Related Forum
*Database Driver for Source Code UD6: a database driver for the Uniface repository (used with Version Control)