【B1】D l hi/C B ild テク カルセ シ ン【B1】Delphi/C++Builderテクニカルセッション

株式会社ドリームハイブ
代表取締役 ITコンサルタント 山本 悟

マルチデバイスに対応できるDBアクセス形態を作るには？実践テクニック

自己紹介


会社：株式会社 ドリームハイブ



名前：山本
名前山本 悟 (やまもと さとる)

 会社URL ：http://www.dreamhive.co.jp/
h //dhij /
 お得なコンテンツ配信サイト：http://dhive.jp/

ドリームハイブ 代表取締役 & ITコンサルタント
ブログ：http://dhive.jp/blog/yama/
facebook ：http://www.facebook.com/kryu2
twitteri：http://twitter.com/kryu2
h // i/k 2

 山本はこんな感じの人：○ 17歳からIT業界へ
歳
業界○ Delphi は1.0からの親友○ テレビ埼玉に出たり○ ドリームハイブの経営、ITコンサルティング、システム開発、スピーカーなどが主な仕事事

3本日の内容 拡張しづらいシステム構成
拡張し ら シ テ 構成
 問題が起こるケース
 拡張しやすいシステム構成
 構成を具体的に考える
 ベストプラクティスのまとめ このセッションは、テクニカル・セッションです Delphi/C++ Builder製のデBuilder製のデータベースアプリケーションのタベ スアプリケ ションの構築方法について、私の主観と経験に基づいてお話しいたします あなたにとって最適解では無いかもしれませんが、参考になると思います4拡張しづらいシステムの特徴
単層/二層構造• 単一クライアント• デスクトップアプリケ
デスクトップアプリケーション
ション•

BL：ビジネスロジック
UI：ユーザーインターフェイス

PC

デスクトップアプリケーション
BL
UI

TTable/TQueryなど

DB

5

BDEのみはもっともダメなパタ ン
BDEのみはもっともダメなパターン
 FormにTTableとか直置きのアプリのパタFormにTTableとか直置きのアプリのパターン
ン

データベース6

そのままだと最新OSでは動きません ル
ルートディレクトリにファイル書き込んじゃうしトディレクトリにファイル書き込んじゃうし対処方法 → http://dhive.jp/blog/yama/?p=2679

7

最低限、BDEアプリは互換コンポーネントで置き換えまし う
置き換えましょう

BL：ビジネスロジック
UI：ユーザーインターフェイス

PC

デスクトップアプリケーション
BL
UI

PC

TTable/TQueryなど

DB

デスクトップアプリケーションBL
UI

TXXTable/TXXQueryなど※移⾏は簡単ですが、ユーザーが単数の場合の暫定的な対処ですDB

8

問題が起こるケ ス
問題が起こるケース


それは要求“変更”！！
 例)○ 複数のPCから見られるのは当たり前だろオーダーが入った！
○ 社長からWebが主流らしいじゃんの鶴の一声が出た！
○ 最近流行のモバイルアプリに対応しろオーダーが入った！



何が問題となるのか







複数クライアントから同時アクセスを想定しなければならない
クライアント環境が複数存在する事になるクライアントへの配布が難しい
クライアントアプリケーションのバージョン管理が難しい
他のシステムやライブラリを利用する確率が増える
確
社内サーバに社外から直接アクセスできなければ、中継サーバが必要になる
社内外間のネットワーク負荷が増大する
DBへの同時接続数の問題が発生する

9拡張しやすいシステムの特徴
移り変わる運用環境
 企業システムの多くがWebを主軸に
 BYODの増加○ モバイル

これまでも、これからも今後ますます増える
クライアントデバイスの種類○ タブレット 整備されてきたクラウドサーバー環境○ Amazon Web Services○ Windows Azure Platform○ Google App Engine

IaaS(Infrastructure as a Service)
Service)、PaaS(Platform as a Service)などがキーワード。
オートスケーリングなど柔軟な拡張性を持っています

拡張性を確保するには機能ごとのレイヤー分割が必須！
10レイヤ 分割 多層化
レイヤー分割＝多層化
PC

デスクトップアプリケーション

単層

BL
UI

TTable/TQueryなど

DB

DBサーバ
PC

デスクトップアプリケ シ ン
デスクトップアプリケーション

⼆層

BL
UI

TTable/TQueryなど

DataSnapサーバなど
PC

多層

DBサーバ

デスクアプリ
UI

モバイル
やWeb

DB

モバイルアプリBL
TTable/TQueryなど

DB
BL：ビジネスロジック
UI ユ ザ インタ フ イス
UI：ユーザーインターフェイス

UI
11

各レイヤ ごとに変更を吸収できる
各レイヤーごとに変更を吸収できる← IaaS/PaaSがサービスする範囲 →クライアントレイヤー

PC

データレイヤーBLDB

デスクアプリ
UI

モバイル
やWeb

ビジネスロジックレイヤー

モバイルアプリUI

BL：ビジネスロジック
UI：ユーザーインターフェイス← RAD Studioが開発をサポートする範囲
St di が開発をサポ トする範囲 →12Delphi/C++ Builderの構成を具体的 考える
具体的に考える 拡張に強い設計を考える前に気をつけるべきポイント
拡張 強 設計を考 る前 気を ける き イ

 動作するOSのバージョン
 開発するDelphi/C++ Builderのバージョン
 使用する文字コード
 データベース接続で利用しているフレームワークの種類

13構築する環境の基準は？
98～
XP

OS

2000～
XP

XE3を買えば2000～
過去のバージョンも去(Vista対応)
使えます＼(^_^)／

(8対応)
MacOS

Delphiの場合 D7,と2007以降(2007, 2009, 2010, XE, XE2, XE3)
C++Builderの場合 CB6と, 2007以降(2007, 2009, 2010, XE, XE2, XE3)

Delphiの～バージョン Delphi 6

Delphi 7

Delphi
2007

ANSI

文字コード
データベースのフレームワーク～Delphi
2006

BDE
DBX

Delphi2009～※7対応は2010から

Delphi
XE3~

UNICODE

DBX

98が必須

Delphi
XE2

FireDACViVista以降のOS
t 以降のOS+ANSI

ViVista以降のOS
t 以降のOS+UNICODE

14過去のプロジェクトの移行はどうする？
とりあえず、だいたい動きます＼(^_^)／
 プログラムの「互換性」タブを使用するとか

 新しいDelphiに切り替えるだけでも効果ありです ドライバ・パッケージ・ソー
スなどが更新されていまなどが更新されます 新しいコンパイラによる効果(最適化や新機能が有効になる)があります15規模が小さいプ ジ クト 移行 あればプロジェクトの移行であれば
 とりあえず新しいDelphiで開いてみましょう

ただし 規模の大小に関わらず
ただし、規模の大小に関わらず、
 Delphi 2007より前のプロジェクトについては一度Delphi 2007へ移行してから、最新のDelphiに移行する とを強くオススメします
最新のDelphiに移行することを強くオススメします16開発環境はどうする？


仮想環境を構築するのがオススメ 仮想化：1台のコンピュータを、あたかも複数台のコンピュータであるかのように論理的に分割し、それぞれに別のOSを動作させることで、複数の環境をに論理的に分割しそれぞれに別のOSを動作させることで 複数の環境を少ないリソースで比較的安全に構築することができる○ Hyper-V：マイクロソフト○ VMWare：ヴイエムウェア○ Xen：シトリックス・システムズ・ジャパン
シトリ ク シムズ ジ パ など

複数の環境=複数のPC

複数の環境
を
1台のPCで拡張しやすい構成
拡張しやすいとは 理想は、変更数ゼロ、コードの追加のみで機能追加などができること
 設計の例
 デ
データモジュールを利用する
タモジュ ルを利用する
 クラスだけでなく、例外処理などもカプセル化する
 BDE+ClientDataSetへの変更作業を中間に挟む
 FireDACを利用する
Fi DACを利用する
 メソッド内でオブジェクト参照を付け替える
var

MyMemo:y
TMemo;;
begin

MyMemo := Memo1;
MyMemo.Lines.Add('AAA');MyMemo Lines Add('BBB');MyMemo.Lines.Add(BBB );MyMemo.Lines.Add('CCC');end;
18

ちょっとだけFireDACの説明

拡張しやすい構成 の変更例
拡張しやすい構成への変更例
絶対ダメ構成とりあえず逃げの構成
BDE+ClientDataSet構成のデータモジュール

素晴らしい構成
DBX構成のデータモジュール

BDE構成のデータモジュール

FireDAC構成のデータモジュール

BDEのみデータベース21

BDE+DataModule

22

FireDAC+DataModule23

FireDAC+DataModule+IntraWeb
アプリ構成

データベース

実⾏結果

24

FireDAC+DataModule+DataSnap+FireMonkey
ik
DataSnapServer.exe

データベース

DataSnapClient.exe

25サンプル(見せる？作る？)
http://docwiki.embarcadero.com/RADStudio/ja/TDataModule_%E3%81%AE_ClassGr
 DataModule
DataModuleへの切り出しの切り出し
oup_%E7%96%91%E4%BC%BC%E3%83%97%E3%83%AD%E3%83%91%E3%83
 既存クライアントの作成%86%E3%82%A3

 Webアプリの作成
 更に・・ DataSnapインターフェイスの作成
 iOSアプリの作成
 クラウドに展開してみる
 案件成功ばんざーい＼(^_^)／

26工数を比較してみる
規模設計

製造

テスト

移行

拡張

単層/二層多層小大

小大

小大

小

大

小

大



多層は設計に時間がかかる
多層は製造にも時間がかかる
多層はテストが楽

多層は移⾏が楽

多層は拡張しやすい

27

まとめ

レイヤー構成の範囲を明確にすること
 利用するプラットフォームによって、利用できる技術が変わります。
利用するプラットフォ ムによ て 利用できる技術が変わります 対応するクライアントによって、製作のしやすさが変わります

データベースの構成はDBXのみ、もしくはFireDACにすること

 DBXフレームワークを利用していれば、多層化対応のコンポーネントが多数揃っています。
 既存のプロジェクトの移行案件であれば（特にBDEからの移行案件であれば）、FireDACの構成へ変更するのが簡単です。

リファクタリングはこまめに行うこと
クタ グは まめ 行う と

複数のバージョンがテストできる環境を用意すること

 RADの本来の機能を十分に使いましょう Delphi 2005以降、リファクタリングのための機能が数多くIDEに統合されています ここ数年で、仮想環境構築のコストは極端に下がっています 実機よりも仮想環境！ 環境依存の問題を検証をするのにかかる人件費よりも安いです28メルマガもご登録ください(※期間限定)
メガもご登録くださ
期間限定↓↓↓
p //jp//
http://www.dreamhive.co.jp/25thdc/
パスワード：25thdc