【B6】 Delphi Prismテクニカルセッション.NET/Mono次世代開発ソリューション Delphi Prismの概要
エンバカデロ・テクノロジーズ エヴァンジェリスト
高橋智宏

アジェンダ

• 製品概要• Delphi Prism言語• Mono• dbExpress• Q&A

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

2

製品概要

Delphi Prismの製品コンセプト
Webサーバー

RIA

デスクトップモバイル

Delphi Prism™
Next generation Delphi development solution for .NET and Mono

プラットフォーム
・Linux・MacOSX・Windows

フレームワーク
・Microsoft. NET Framework
・ASP.NET・Mono

データベース・Oracle・MS SQL Server
・Inter Base・MySQLetc

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

4

Delphi Prismのインストール環境

Delphi Prism™
Next generation Delphi development solution for .NET and MonoOxygene
言語プラグイン

RemObjects
Internet
Packfor .NET

VS 統合環境
拡張機能(Everwoodなど)

dbExpress

Developer
Express
DPack IDE
ExpertVisual Studio 2008 Shell SP1(基本IDE機能)
フォームデザイナ, コードエディタ, ツールボックス、 サーバーエクスプローラなど

Microsoft .NET Framework 3.5 SP1Microsoft Windows XP/2003/Vista/ 2008 (32bit版および64bit版)

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

5

Delphi Prismの機能構成

Oxygene言語

dbExpress

Delphi Prism™
Next generation Delphi development
solution for .NET and Mono

Mono

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

Microsoft .NET3.5
Framework
6Delphi Prismのエディション

Enterprise Edition
Professional Edition
Visual Studio Shell
IDE基本機能Blackfish SQL
配布ライセンス（1ユーザー/512MB)
dbExpress
ローカル接続Oxygeneコンパイラ

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

Blackfish SQL
配布ライセンス（5ユーザー/2GB)

DataSnap
クライアントの作成

dbExpress
リモート接続7

Delphi Prism言語

Delphi Prism言語• Oxygene言語• 既存のDelphiとの互換性• 互換性に関するオプション• Oxygene言語機能の紹介

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

9

Oxygene言語• RemObjects Softwareによって開発された言語(かつては、Chromeと呼ばれていた言語)• Oxygeneは、Object Pascal言語をベースとし、最新.NETが要求する全ての言語イディオムをサポート-ジェネリクス, LINQ, ラムダ式, 無名メソッド, デリゲートなど• Oxygeneコンパイラは、.NET1.1 , 2.0 , 3.0, 3.5 に対応• Oxygeneは、 既存の.NET言語で行える事は、ほぼ全て可能。
さらにこれらの言語より、簡単にコードが記述できる言語機能も搭載されている
Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

10

既存のDelphi との互換性• VCL.NETについて→フレームワークとして互換性が無いため、GUI系のコントロールはDelphi Prismへ移行はできない→Delphi Prismでは今後、VCL.NETはサポートされない
Winforms, WPFといった.NET標準のフレームワークへご移行ください• 既存のDelphi コードをDelphi Prismへ移行させるには?
→言語仕様は類似していますが、現行では移行するにはコードの修正が必要
Delphi Prismのプロジェクトオプション、移行ツール(ShineOn プロジェクト, Oxidizer コードコン
バータなど) をご利用ください。
将来的に、Delphi for win32 , Delphi Prism双方の互換性が、より保てるような言語仕様の拡張が行われていく予定です。

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

11

互換性に関するオプション• Delphi Prismでは、既存のDelphi言語に対するいくつかの言語機能に関して互換性を保つことができるオプションが用意されています。

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

12

Oxygene言語機能の紹介• ジェネリクス• 統合言語クエリ(LINQ)• デリゲート• シンタックスシュガー• 拡張されたNullable型• マルチスレッド

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

13

ジェネリクス• ジェネリクスというテンプレートを利用することで、特定の型に縛られること無くコードを汎用化、そしてコードを記述する量も減らすことができ、効率化が計れます。
type
MyList<T> = class(System.Object, system.Collections.Generics.IEnumerable<T>)
where T is class;privatefData: array of T;
fCount: Integer;
public...

このクラスを利用するには、型宣言においてジェネリックな型を定義する必要があります
var
Data: MyList<String>;
begin
Data := new MyList<String>;
Data.Add(‘Test’);
...
end;

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

14

統合言語クエリ(LINQ)• 統合言語クエリ(LINQ)は、イテレート可能なデータ構造に対してSQLライクなクエリで 検索、操作が行えるプログラミング言語に統合された構文
Microsoft .NET 3.5 Framework上で利用可能 (Monoでもサポート)• LINQは様々なデータに対して適用可能-配列やコレクションなどのオブジェクト, XML ,リレーショナルデータベースなど• 利用可能なクエリ構文-where, order by, select, from, join, group by, take, skip, reverse, distinct など
使用例:
type Customer = public class…
var MyCustomers: sequence of Customers …
var x := from c in MyCustomers where c.City = 'London' order by c.Name select c.Name;for each cust in x do
Console.WriteLine(cust.Name);
Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

15

デリゲート
• デリゲート(委譲)とは、メソッドを参照するためのオブジェクト• 同じシグネチャと戻り値で、順序付けられたメソッドのリストを持ち、複数のメソッドを同時に参照する事ができる• イベントハンドラがデリゲート型で宣言されていることから、他のメソッドに処理を委譲させる目的で使用されます
type
MyDelegate = delegate (data:string);
method MyClass.func(param:String);
begin
Console.WriteLine('Thread_ID:{0} func: {1}',System.Threading.Thread.CurrentThread.ManagedThreadId, param);
end;…..
method MyClass.Proc
メソッドの呼び出しは、
var
同期的に実行される
del:MyDelegate;
begin
Console.WriteLine('Thread_ID:{0} MainProc',System.Threading.Thread.CurrentThread.ManagedThreadId);
del:=new MyDelegate(func);
del('Hello World');
end;

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

16

シンタックスシュガー• Oxygene言語では、C#よりもシンプルなコードが記述できる言語機能が用意されています。 このシンタックスシュガーによって、コーディングを簡略化することができます。
・プロパティ・アクセッサのインライン化
・クラスコントラクト
・プロパティ通知・フューチャー
・非同期メソッド(async)など

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

17

プロパティ・アクセッサのインライン化
Delphi Prism
type
MyClass = public classpublicproperty Data:Int32;
property Twice: Int32 read Data*2;
end;

C# 3.0public class MyClass{
public int Data { get; set; }public int Twice {get {return (this.Data * 2);}}}

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

18

クラスコントラクト(クラス不変条件)
Delphi Prism
type
TClassWithInvariant = classpublicSomeInteger: Integer;
public invariants
SomeInteger < 10;
publicprocedure SetSomeIntegerGreaterThanTen;
end;

C#using System.Diagnostics;
class TClassWithInvariant {public int SomeInteger;

procedure TClassWithInvariant.SetSomeIntegerGreaterThanTen;
begin
SomeInteger:=10;
end;

public void SetSomeIntegerGreaterThanTen(){this.SomeInteger = 10;
lock (this){try {Debug.Assert(this.SomeInteger < 10, "public invariant(SomeInteger < 10)");}finally{
…
}
}
}
}

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

19

クラスコントラクト(Require/Ensure)
Delphi Prism
type
MyClass = classprivateMylist:List<String>:=new List<string>;
Count:Integer;
publicmethod Add(Data: String);
end;
method MyClass.Add(Data: String);
requireData.Length <> 0: '文字列が空です';
begin
MyList.Add(Data);
Inc(Count);
ensureCount = old Count+1;
end;

C#class MyClass{
private int Count;private List<string> Mylist = new List<string>();public void Add(string Data){//require
Debug.Assert(Data.Length != 0, "WindowsApplication12.MyClass.Add(Data:
System.String) precondition 文字列が空です");int count = this.Count;this.Mylist.Add(Data);
this.Count++;//ensure
Debug.Assert(this.Count == (count + 1), "WindowsApplication12.MyClass.Add(Data:
System.String) postcondition (Count = (old_Count + 1))");}}

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

20

アサーションを有効にする
Delphi Prismでは、アサートを有効にするための専用のオプションが用意されており、条件の中に”DEBUG”を含める必要はありません。

このオプションのチェック有無によってコンパイラは、クラスコントラクトで定義されている
アサートコードをMSILへ埋め込むか判断しています。
Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

21

プロパティ通知Delphi Prism
type
ValueClass = classpublicproperty Name: string; notify 'ValueName';end;C#using System.ComponentModel;
public class ValueClass: INotifyPropertyChanged,INotifyPropertyChanging{
public event PropertyChangedEventHandler PropertyChanged;
public event PropertyChangingEventHandler PropertyChanging;
public void NotifyPropertyChanged(String PropertyName){
if (PropertyChanged != null) {PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));}}public void NotifyPropertyChanging(String PropertyName){….
}public string Name
{
….
set{
if (value != _name){
NotifyPropertyChanging("ValueName");_name = value;
NotifyPropertyChanged("ValueName");}}}

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

22

Nullable型• Nullable 型とは?
・値型は、通常 null値（無効な値）を取れない
・値型の初期値が有効な値なのか、無効な値なのか区別がつかない

この問題を解決するために・・・.NET 2.0 Frameworkで Nullable型という特殊な型が用意されました• Nullable 型-System.Nullable<T>というジェネリクス構造体のことを指します-型パラメータTには、値型のみ指定できる-このTに対して指定された値型データとnull値の両方を扱うことができる
Delphi Prism
var iData: nullable Integer:=100;
var dData: nullable Double;
iData:=nil;dData:=1234.56;

C#
int? iData=100;
Nullable<double> dData;iData=null;dData=1234.56;

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

23

拡張されたNullable型とは?

• 拡張されたNullable型では、算術式中にnullableな型が含まれている場合
式全体がnullableとして扱われます。
C#
int? x;
int y;
var a := x+y;var b := 5*x;

C#では、算術式中にnullableな型を含むため上記のコードはコンパイルできません。
Delphi Prism
var x: nullable Int32;
var y: Integer;
var a := x+y;var b := 5*x;

Delphi Prismでは、上記のコードはコンパイル可能です。
これは算術式中にnullableな型が含まれていても、式全体がnullableと解釈されるため、ローカル変数 aもbも nullable なInt32として扱われます。
Delphi Prismでは、上記のようなNullable式の拡張サポートが施されています。

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

24

Quiz
ここで、Nullableに関するクイズです!!
以下のDelphi Prismのコードを実行した時、答えは(1)～(3)のうち、どれでしょうか。
class method ConsoleApp.Main;
begin
var x: nullable Int32;
var y: Integer:=100;
Console.WriteLine('x+y='+(x+y));
Console.ReadLine();end;(1)実行時エラーが発生する(2)コンソール画面に “x+y=“ と表示される(3)何も表示されない

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

25.NETのマルチスレッド(1) -非同期処理•

BeginInvokeメソッド / EndInvokeメソッド-デリゲートを使用し、メソッドを非同期に実行するための仕組みで、BeginInvokeメソッドを呼び出した時に返される
IAsyncResultのIsCompletedプロパティを参照することで、非同期処理が完了したか判断することができます•

AsyncCallbackデリゲート-非同期処理の完了を待たずに主スレッドの処理を継続させたいケースでは、AsyncCallbackデリゲートさせた
コールバック・メソッドを定義しておくことで、完了時にメソッドが呼び出され、通知を受けることができます
type
MyDelegate = delegate (data: string);
method MyClass.func(param: string);
begin//非同期で実行される処理
end;
method MyClass.MyCallback(iar: IAsyncResult); //完了後、コールバックされる処理
begin
var ar: System.Runtime.Remoting.Messaging.AsyncResult := System.Runtime.Remoting.Messaging.AsyncResult(iar);var del: MyDelegate := MyDelegate( ar.AsyncDelegate );del.EndInvoke( iar );//コールバックメソッド内で、EndInvokeを呼び出す
end;
method MyClass.Proc;
var
del:MyDelegate;iar:IAsyncResult;
begin
del:=new MyDelegate(func);
iar := del.BeginInvoke(‘HelloWorld’,new AsyncCallback(MyCallback),nil);…
end;
Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

26

.NETのマルチスレッド(2) -バックグラウンド処理•

ThreadPoolクラスによるマルチスレッド-.このクラスを利用することで、別スレッドで実行させたいメソッドをWaitCallbackにデリゲートさせ、
ThreadPool.QueueUserWorkItemメソッドに渡すことで、定義したメソッドをバックグラウンドで処理させることができます•

スレッドプールのスレッド数-スレッドプールには 1 CPUプロセッサごとに最大25個のワーカースレッドを待機させる事ができ、この最大許容範囲内でスレッドが自動的に追加、そして再利用されます
uses
System.Threading.*;
type
ConsoleApp = classprivateclass method MyThreadProc(data:Object);publicclass method Main;end;class method ConsoleApp.Main;
var
waitCallback:WaitCallback;begin
waitCallback:=new WaitCallback(MyThreadProc);
ThreadPool.QueueUserWorkItem(waitCallback,‘Sample');…..
end;class method ConsoleApp.MyThreadProc(data:Object);
begin//実際の処理end;
Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

27

非同期メソッド (async)
Delphi Prismでは、予約語として asyncを定義することで、非同期処理がより簡単に記述できます
一般的には、asyncブロックは以下のように修飾します:async begin
...
end;

また asyncはディレクティブで指定することもでき、さきほどの.NETのマルチスレッド(2)のプログラムをasyncで以下のようなコードに置き換えることもできます
uses
System.Threading.*;
type
ConsoleApp = classprivateclass method MyThreadProc(data:Object); async;
publicclass method Main;end;class method ConsoleApp.Main;
begin
MyThreadProc(‘Sample’);…
end;
class method ConsoleApp.MyThreadProc(data:Object);
begin//実行の処理end;

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

28

並列ループ (Parallel Loops)• Task Parallel Library (TPL)
Parallel FX Libraryの主要コンポーネントであり、マイクロソフト社が提供する.NET Framework上の言語から利用できる並列実行の向上を目的としたライブラリです。
TPLは、.NETの次期バージョンである「.NET Framework 4.0」のコアライブラリとして組み込まれる予定です。
並列ループを利用するためには、TPLが必要です。
Delphi Prismでは、このTPLに言語レベルで早期に対応!!
Delphi Prism

C#for parallel i: Integer := 0 to 10 do
begin// 実際の処理
end;

Parallel.For(0, 11, 1, delegate (int i, ParallelState state) {// 実際の処理});

for parallel i: Integer := 1 to 49 step 7 do
begin// 実際の処理
end;
var SomeCollection: sequence of String;

Parallel.For(1, 50, 7, delegate (int i, ParallelState state) {// 実際の処理});
Parallel.ForEach<string>(SomeCollection, delegate (string elem, int index,
ParallelState state) {// 実際の処理});

for each parallel elem in SomeCollection do
begin// 実際の処理
end;

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

並列ループ (Parallel Loops)

29

ちょっと実験

規定回数ループさせる単純なプログラムでparallelの有無により、どの程度実行速度が異なるか確認してみました
通常ループ(シングル・スレッド)

並列ループ(マルチ・スレッド)

method ConsoleApp.Main;
begin
var sw:=new Stopwatch;sw.Start;
for i: integer := 0 to 9 do
ConsoleApp.Test;
sw.Stop;
Console.WriteLine('経過時間={0} ms‘, sw.ElapsedMilliseconds);….
end;

method ConsoleApp.Main;
begin
var sw:=new Stopwatch;sw.Start;
for parallel i: integer := 0 to 9 do
ConsoleApp.Test;
sw.Stop;
Console.WriteLine('経過時間={0} ms‘, sw.ElapsedMilliseconds);….
end;

method ConsoleApp.Test;
begin//重い処理....
Console.WriteLine('Thread:{0} is done.',Thread.CurrentThread.ManagedThreadId);
end;method ConsoleApp.Test;
begin//重い処理....
Console.WriteLine('Thread:{0} is done.',Thread.CurrentThread.ManagedThreadId);
end;

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

30

フューチャー(Futures)
futureは強く型付けされた変数で、計算が完了しているかもしれない、もしくは完了してないかもしれない変数を表しますが、必要となる時点で利用可能であることが保証されています
method MyClass.Sum:Int32;
begin….
var i: future Int32:= async MyThreadProc1;
var j: future Int32:= async MyThreadProc2;
var k:Int32:=500;….
Result:=i+j+k; → (1)end;

上記の断片コードをご覧ください
実際にはMyThreadProc1, MyThreadProc2は非同期で実行されています。そして最終的に計算結果が揃うのは(1)の時点なため、もしこの段階で、非同期メソッドが値を返す値、つまりfuture変数が取得する値の計算が完了していなければ、ここで同期が取られます。

method MyClass.MyThreadProc1:Int32;
var
Count:Integer;
begin
for i:Integer:=0 to 20 do
begin…
Count:=Count+i;
end;
Result:=Count;end;method MyClass.MyThreadProc2:Int32;
var
Count:Integer;
begin
for i:Integer:=0 to 50 do
begin…
Count:=Count+i;
end;
Result:=Count;end;

Delphi Prismでは、async、futureを記述するだけで、内部的にFutureHelperクラスのインスタンスが作成され、このオブジェクトが非同期処理のデリゲートと結果取得の調停を担います。このヘルパークラスの働きによって、複雑になりがちなコードもシンプルに書くことができます
Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

31

FutureHelperクラス
FutureHelperクラスの抜粋

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

32

.NET 3.5とTPL• .NET Framework 3.5上でTask Parallel Library(TPL)の利用
別途、 .NET3.5用コミュニティ向けテクノロジープレビュー版(CTP)の入手が必要です。
「Microsoft Parallel Extensions to .NET Framework 3.5, June 2008 Community Technology Preview」
http://www.microsoft.com/downloads/details.aspx?FamilyId=348F73FD-593D-4B3C-B055694C50D2B0F3&displaylang=en※今後、新しいCTP版がリリースされる可能があります。
上記のインストール完了後、GACへSystem.Threadingアセンブリがコピーされるので、TPLの利用時には、必ずプロジェクトでこのアセンブリの参照を追加してください。

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

33

Mono

Monoとは?

• マイクロソフトの.NET Framework互換の開発フレームワーク/ランタイムを提供するオープンソースのソフトウェア• 選択できるライセンスは、GPL, LGPL, MITなど• Monoは、クロスプラットホームで動作可能- Linux, Mac OSX ,Solaris, Windowsなど• Mono JITコンパイラが対応しているプロセッサ-x86,Amd64, IA-64, SPARC, PowerPCなど• Monoは、2009月2月現在で、最新バージョンは2.2

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

35

Monoと.NET Framework
Microsoft .NET Framework.NET Framework 3.5
LINQ.NET Framework 3.0

Mono

Olive
WCF

Mono 2.x

WPF
WCF
WF

C# 3.0サポート(LINQ).NET Framework 2.0.NET Framework 2.0互換
基本クラスライブラリ
ASP.NET
ADO.NET
WinForm

基本クラスライブラリ
ASP.NET
ADO.NET
WinForm

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

36

Delphi Prismで作成可能なMonoプロジェクト

Delphi Prismでは、以下のプロジェクトテンプレートが用意されています
・Gtk# アプリケーション
・Monoコンソールアプリケーション
・Cocoaアプリケーション
・MacOSX 用 WinFormsアプリケーション

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

37

MacOSX向けのWinFormsの作成 – ステップ1(1) [ファイル]-[新規作成]-[プロジェクト]から”WinFormsアプリケーション(MacOSX)”を選択

MacOSX用のWinFormsプロジェクトを選択することで、ビルド時にInfo.plistファイルも含めたMacOSXへ配布可能なモジュール一式が自動生成されます

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

38

MacOSX向けのWinFormsの作成 – ステップ2(2) フォーム上に各コントロール Label 3個 , Button 1個, ListBox 1個 を配置

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

39

MacOSX向けのWinFormsの作成 – ステップ3(3) Button1 OnClickイベントでOSにインストールされているフォントの一覧を取得、ListBox1 onDoubleClickイベントでLabel1を選択されたフォントに変更するコードを記述します。

method MainForm.button1_Click(sender: System.Object; e: System.EventArgs);
begin
var installFonts: System.Drawing.Text.InstalledFontCollection:= new System.Drawing.Text.InstalledFontCollection();
listBox1.Items.Clear;for each font:System.Drawing.FontFamily in installFonts.Families do
begin
listBox1.Items.Add(font.Name);
end;
end;
method MainForm.listBox1_DoubleClick(sender: System.Object; e: System.EventArgs);
begin
Label1.Font:=new Font(listBox1.SelectedItem.ToString,8);
Label3.Text:=listBox1.SelectedItem.ToString;end;

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

40

MacOSX向けのWinFormsの作成 – ステップ4(4) プロジェクトをビルドし、Windows上で実行を確認

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

41

MacOSX向けのWinFormsの作成 – ステップ5(5)MacOSX用のMonoをダウンロードする
Monoの最新版(2.2)は、以下のURLから入手できます。
http://www.go-mono.com/mono-downloads/download.html

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

42

MacOSX向けのWinFormsの作成 – ステップ6(6)MacOSXへMonoをインストールする

インストール後、Monoのバージョンの確認

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

43

MacOSX向けのWinFormsの作成 – ステップ7(7) Windows環境でビルドしたアセンブリをMacOSXへデプロイする
MacWindowsFormApplication1.appフォルダの中には、
Info.plistファイルといったMacOSX上で動作させるために必要な環境ファイルが含まれています。

クリック

デプロイ

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

44

MacOSX上での注意点• MacOSXへデプロイしたMonoアプリケーションを実行する場合,
適切なフォントが選択されていないと、文字化けが発生いたします。
-日本語が表示可能なフォントは、ヒラギノ W3/W6, Osakaなど• 上記はDelphi Prism の問題ではなく、Monoランタイムの仕様と考えます。
アプリケーション側で日本語が表示可能なフォントを明示的にセットしてください。

• 内部的にP/Invokeで呼び出しを行っているライブラリは、Windowsプラットホームに依存してしまうため、そのライブラリを含む
アセンブリを配布してもMono上では動作しない。

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

45

Monoプロジェクトの今後のリリースについて

Mono 2.4

Mono 2.8

2009年
1月

2月

3月

4月

5月

Mono 2.2

6月

7月

Mono 2.6

8月

9月

10月

11月

12月

Mono 3.0• Mono Project Roadmap
http://www.mono-project.com/Roadmap

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

46

dbExpress

dbExpressとは?
Delphi Prismは、データベース開発における強力なフレームワークである「dbExpress 4」を搭載しています。
dbExpressを利用することにより、.NET開発者はバックエンドの特定のデータベースに縛られることなく、単一のフレームワーク
で複数のデータベースにアクセスすることが可能で、データベースドライバ構築のプ
ロセスを大幅に単純化することができます。
またdbExpressは、Delphi for Win32でも採用されており、ネイティブとマネージド
コードのクロスプラットフォームに対応しています。Win32環境と同じエンジンを採用しているため、データベース接続に対する高いポータビリティにより、.NET環境へ移行も容易です。

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

現在サポートされているデータベースは、-InterBase-BlackfishSQL

48

サーバーエクスプローラとの統合

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

49

dbExpressモジュールのロード
データベースとしてInterBaseへ接続した場合:

実行ロードされるモジュール

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

50

ASP.NETアプリケーション作成 例

プロジェクト作成

ドラッグアンドドロップ

データソースの選択

実行

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

51

Delphi Prism製品のロードマップ(予定)Delphi Prism™
Next generation Delphi development solution for .NET and Mono•

.NET4.0とVisual Studio 2010対応に向けた言語仕様の拡張•

Delphi for Win32とDelphi Prismの言語互換性の向上•

dbExpressドライバのアップデート-Oracle, DB2 , Sybase, SQL Anywhere, MySQL, Informixのサポート-ADO.NET エンティティフレームワークに対応•

Mono開発環境の向上(Cocoa#, MonObjC, Gtk#)•

DataSnapサーバーの開発機能•

CruiseControl.NET, NUnit, ソースコード管理機能の統合•

新たなプロジェクトテンプレートに対応-ASP.NET MVC テンプレート, BlackfishSQLストアドプロシージャテンプレート

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

52

製品をご評価ください!!
Delphi Prism™
Next generation Delphi development solution for .NET and Mono

• 最新の.NET環境をフルサポート• 強力なフル機能のDelphi Prism開発言語• データベースアプリケーション構築のためのdbExpressフレームワーク• Monoプラットフォーム向けの開発サポート
エンバカデロ・テクノロジーズが提供する
新しい.NET開発ソリューション環境「Delphi Prism」にどうかご期待ください!!
製品のご評価は以下のURLまで
http://cc.codegear.com/free/prism
Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

53

参考資料

• Delphi Prism Wiki
http://prismwiki.codegear.com/en/Main_Page• Delphi Prism 機能評価ガイド
http://dn.codegear.com/article/39118• Delphi Prismロードマップ
http://dn.codegear.com/article/39276/• Migrating a Project to Delphi Prism from Delphi.NET
http://jamie.op-i.net/blog/2008/12/migrating-a-project-to-delphi-prism-from-delphinet/• マルチコア コンピュータ用にマネージ コードを最適化する
http://msdn.microsoft.com/ja-jp/magazine/cc163340.aspx

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

54

.NET Reflector™

• .NETアセンブリをC#やVB.NETのソース・コードへ変換する
逆コンパイラツール(フリーウェア)

Oxygene(Chrome)言語にも対応

http://www.red-gate.com/products/reflector/

Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

55

Q&A

ご清聴ありがとうございました

Q&A
Copyright ©2009Embarcadero Technologies, Inc. All Rights Reserved.
本文書の一部または全部の転載を禁止します。

56