【A5】DelphiテクニカルケーススタディDelphiによるビジネスロジックのリサイクル
一粒で二度おいしいプロトタイプ転用術
株式会社ドリームハイブ
代表取締役
山本悟

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

1

会社紹介
商号

株式会社ドリームハイブ

設立

2001年12月4日

ミッション「モノ創りをし、皆で共有する」

在り方

システム ソリューション カンパニー

約束

お客様とともに夢を実現します

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2

事業内容(ドリームハイブとは？)中小企業が抱えるIT関連の負荷を軽減し、仕事を楽にするサービスを提供する会社

お客様のお客様
お客様のサービス＋DHのサービス・サポート

ドリームハイブのお客様
ドリームハイブのサービス・システム開発
・トレーニング
・みんなの情報システム部
・DH-APPLI

開発やIT系コンサルなどお客様のサービスではないもの

ドリームハイブ
業務内容概要図

ドリームハイブとお客様の関係

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

3スピーカープロフィール
山本 悟：：略歴：：
17歳からコンピュータ関係にはまり、プログラミング言語で一番最初に触ったのはTurbo C++でした。
大学卒業後、そのまま起業しましたが、今でも自分勝手に創るのが一番好きです。
現在の開発案件では、主に.NETとPHPを利用しています。
案件が少ないせいもあり、JAVAが苦手なのですが、加えてUNIXも苦手です。
Delphiとは1.0の頃から出会い、バイト先のゲーム会社のサポートプログラムを作成したりしていました。
現在も、ちょっとしたプログラムであればDelphiで作ることが多いですし、ご紹介するDH-APPLIももちろんDelphi製です。
現在はPM系や言語系といったIT系のトレーニングを多くやっていますが、昔テレビ埼玉でパソコンの先生をしていたこともあります。

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

4

公開アプリの紹介
アプリ••

DH-APPLI•

M – シンプルなメモツール•

Change! –お手軽名前変更ツール•

GrepReplace –複数行一括置換•

PlacesBar – ダイアログを便利に！

•

ColorPicker – 色情報取得ツール

その他•

VALUE-DOMAIN 専用 DNS更新ツール

アプリが目指すもの

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

5

アプリの配布方法• インターネット• 自社Web
http://www.dreamhive.co.jp/dhappli.html• Vector
http://www.vector.co.jp/vpack/browse/person/an037127.html• 窓の杜
http://www.forest.impress.co.jp/lib/sys/file/filesearch/grprplc.html• メールのフッター• 二次的に• ブログで紹介• 顧客先でデモ本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

6

アプリの貢献度• 累計60,000件以上のダウンロード数と言う実績• 社会貢献と言っても良い？
アプリが貢献する販促の流れ

顧客

新規顧客

•客が知っている→アイスブレークが楽•具体例を出しやすい

既存顧客•DH-APPLIの紹介ついでに打診が出来る製品以上の価値を提供できる

7

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

アプリ作成の背景
マーケティングの予算が十分に無かった作ったモノは可能な限り使い回したい

モノ・・・•商品のプロトタイプ•テスト用プログラム•良くできたロジック•etc...

なぜ二度おいしいのか？

なぜリサイクルなのか？

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

8

背景にある技術：なぜDelphiで作ったのか• ネイティブコードで動作が速い• 高速コンパイル• 単一のバイナリで公開できる• DLL Hell
• Side by Side
• Active X• API• コンポーネントが多い(フリーも商用も)• GUIが作りやすい• 外部ライブラリへの依存性が非常に低い• 開発ライセンスと配布ライセンスの問題が少ない• 過去の資産が利用できる

9

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

背景にある技術：コードの部品化
背景状況問題となるポイント

着目すべきポイント•プログラマは面倒くさがりが多い•プログラマは勉強しない人が多い•どれだけ手間を増やさないか•どれだけ情報共有ができるか実装に当たって考慮する事項• (1) Action化→ビューとモデルの簡易分離が出来、UIの変更に応えやすい• (2)函数化→ロジックの基本となる機能を部品化できるロジックを「データ」と「処理」として考えるプログラマに適している• (2)クラス化→ オブジェクト指向の場合の機能の部品であり、函数より有用ロジックを「オブジェクト」と「メッセージ」として考えられるプログラマに適している• (3)パッケージ→最後にまとめるのに利用、環境移行するとき楽

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

10

背景にある技術：コードの部品化
ビュー側

モデル側
函数
関数

Actionパッケージ
クラスクラス

ビューに依存する部分のみ(入力チェックなど)を実装モデル(＝ビジネスロジック)に関わる部分のみを実装本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

11Actionと函数のサンプルコード
ビューとモデルを分けるメリット
Dreamhive.FunctionUnit.pas
unit Dreamhive.FunctionUnit;
function Plus(A: Integer; B: Integer): Integer;
begin
Result := A + B;
end;

モデル側ではロジックのみ！

Main.pasuses Dreamhive.FunctionUnit;
procedure TFormMain.ActionPlusByFunctionExecute(Sender: TObject);var
v1, v2: Integer;
begin
v1 := StrToInt(Edit1.Text);
v2 := StrToInt(Edit2.Text);

ビュー側でチェックする！

Label1.Caption := IntToStr(Plus(v1, v2));
end;

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

12Actionとクラスのサンプルコード1
unit Dreamhive.MathClass;Dreamhive.MathClass.pas

TMath = classpublicfunction Plus(A:Integer;B:Integer): Integer;end;function TMath.Plus(A:Integer;B:Integer): Integer;
begin
Result := A + B;
end;
uses Dreamhive.MathClass;

Main.pas

procedure TFormMain.ActionPlusByClassExecute(Sender: TObject);var
v1, v2: Integer;
MyMath: TMath;begin
MyMath := TMath.Create();v1 := StrToInt(Edit1.Text);
v2 := StrToInt(Edit2.Text);
Label1.Caption := IntToStr(MyMath.Plus(v1, v2));

クラスの場合、インスタンスの生成が必要になる

MyMath.Free;
end;

13

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Actionとクラスのサンプルコード2
unit Dreamhive.MathClass;
TMath = classpublicclass function Plus(A:Integer;B:Integer): Integer;
end;Dreamhive.MathClass.pas

クラスメソッド化してしまうclass function TMath.Plus(A:Integer;B:Integer): Integer;
begin
Result := A + B;
end;
uses Dreamhive.MathClass;

Main.pas

procedure TFormMain.ActionPlusByClassExecute(Sender: TObject);var
v1, v2: Integer;
begin
v1 := StrToInt(Edit1.Text);
v2 := StrToInt(Edit2.Text);
Label1.Caption := IntToStr(TMath.Plus(v1, v2));
end;

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

直接呼べるようになる14背景にある技術：リファクタリング•

Togetherで可視化が簡単•

SyncEdit(同期編集)でオブジェクト名変更が簡単•

コードテンプレート•

パターンオーガナイザで定型パターンを再利用••••

クラス設計されている場合に有効プログラムの構造を見て作業できる
コードレベルの再利用
クラスレベルの再利用

コードテンプレート
呼び出し「表示|テンプレート」メニュー、Ctrl+J

保存場所<マイ ドキュメント>¥RAD Studio¥code_templates

パターン オーガナイザで定型パターンを再利用
呼び出し「ツール|パターン オーガナイザ」メニュー%APPDATA%¥Borland¥BDS¥5.0¥Patterns¥templets

保存場所

VistaC:¥Users¥<アカウント名>¥AppData¥Roaming¥Borland¥BDS¥5.0¥Patterns¥templets

XPC:¥Documents and Settings¥<アカウント名>¥Application
Data¥Borland¥BDS¥5.0¥Patterns¥templets

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

15

今後の展開仕事を楽にするためのサービスを、中小企業にフォーカスして制作・販売していきます。

• 今後もDH-APPLIシリーズをリリースします• Web系のアプリも公開します
ドリームハイブと一緒にお仕事しませんか？

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

16

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

17