あなたの環境でもきっと役に立つDelphi 7以降の新機能トップ10 - by Pawel Glowacki

By: Hitoshi Fujii

Abstract: Delphi 7以降に追加された新機能についてご存じない方が多いと思います。この記事では、それらの新機能を私の主観でランキングしました。

はじめに

私は、Delphiの最初のバージョンからのユーザーで、このすばらしい製品の成長と進化を、長年にわたってウォッチしてきました。Delphi 7は、Delphi 1以来の同じIDEコアをベースにした最後の製品です。多くの開発者は、まだ旧バージョンのDelphiを使っていて、Delphi 7以降のDelphiに追加された新機能を知らないのではないかと思います。CodeGear RAD Studio 2007は、「Gallileo」と呼ばれる新しいマルチパーソナリティIDEをベースにした第5世代の製品です。多くの機能とテクノロジーは、これらの5世代にわたるIDEの開発の中で、Delphiに搭載されてきたものです。

  • Galileo 1.0 - C#Builder 1.0。Galileoの最初のリリース。C#Builder IDEパーソナリティのみを含む
  • Galileo 2.0 - Delphi 8 for .NET。Delphi for .NET IDEパーソナリティを追加
  • Galileo 3.0 - Delphi 2005。Delphi for Win32 IDEパーソナリティを加えたGalileoの最初のバージョン
  • Galileo 4.0 - Delphi 2006。Delphi for Win32 IDEパーソナリティを加えたGalileoの2番目のバージョン。Delphi for Win32コンパイラに多くの改善が施される。C++BuilderIDEパーソナリティが追加される
  • Galileo 5.0 - CodeGear RAD Studio 2007 aka Delphi 2007。最新バージョンのDelphi

以下は、私の主観によるCodeGear RAD Studio 2007(Delphi 2007)にアップグレードする「10の理由」です。私は、Delphi for .NETのプログラミングを大変好んでいます。とりわけ、.NET 3.xプログラミングが好きなのですが、ここでは主としてDelphi for Win32開発にフォーカスし、Delphi ASP.NET 2.0プログラミングやC++などといった別のすばらしい機能については触れていません。

トップ10候補で残念ながらランクインしなかったもの

  • UMLモデリング
    • LiveSourceテクノロジー
    • 検査・測定機能
    • GOFパターン
  • シームレスなAJAXサポートによるネイティブDelphi Web開発のためのVCL for the Web (IntraWeb) フレームワーク
  • Vistaサポート
    • TCustomForm.GlassFrameプロパティ
    • TTaskDialogコンポーネント
    • VCLでのVista APIサポート
  • 統合・搭載された機能
    • InterBase 2007 Developer Edition
    • Blackfish™ SQL for Windows
    • Doc-o-Matic Express
    • InstallAware Express CodeGear Edition
    • Rave Reports
    • Indy 10
    • glyFX アイコンライブラリ– CodeGear Edition
    • TeeChart 7.0
    • Wise Owl Demeanor for .NET, Personal Edition 4.0
    • Microsoft ASP.NET 2.0 AJAX Extensions

10位 新しい「GalileoIDE

Nick Hodgesが、「Delphi 7以降の IDEの新機能」というすばらしいリストを作ってくれています。

  • ツールパレット
  • Welcomeページ
  • フローティングVCLデザイナ
  • プロジェクトページオプション
  • プロジェクトマネージャのフォルダー機能
  • オブジェクトインスペクタ(ファイル名、リンクされたコンポーネントへのナビゲーション)
  • 構造ペイン
  • 集中化されたオプションダイアログ
  • エディタ:
    • UTF8およびUnicodeサポート
    • 同期編集
    • HelpInsight
    • 変更バー
    • コード折りたたみ
  • データエクスプローラとビジュアルクエリービルダ
  • HTMLエディタ
    • ライブテンプレートサポート
    • WYSIWYGデザイナ
    • ツリービュー
  • 配布の管理

新しいビルドエンジンは、MSBuildテクノロジーをベースとしています。プロジェクトファイルはXMLベースで、新しいDelphiプロジェクトファイルの拡張子は、「*.dproj」です。

  • 複数パーソナリティのIDE
  • ビルド設定の名前付け
  • プロジェクト間の設定情報の再利用
  • ビルド前/ビルド後ステップイベントでのスクリプト記述

Corbin Dunnのブログ から、Help Insightについての記述を引用します。

「Delphi 2005には、Help Insightという優れた新機能があります。シンボルの上にマウスを移動して少し待つと、IDEはそのシンボルに関するXMLドキュメントを検索して、(もしドキュメントがあれば)その場にそのヘルプを表示します。(中略)必要なら、Help Insightウィンドウの表示をカスタマイズできます。それは、シンプルな小さいWebページです。ObjReposディレクトリ内に、HelpInsight.css とHelpInsight.xslがあります。.cssファイルを微調整すれば、ページの表示を制御できます。また、.xslファイルを微調整すれば、ページのレイアウトを制御できます。」

9位 新しいコンポーネント

8位 Delphi言語とコンパイラ

Nick Hodgesが、「Delphi 7以降の言語およびコンパイラの新機能」という大変よいリファレンスを作っています。

以下が主なハイライトです。

  • Delphi言語
    • Delphi for .NET(Win32は今後提供予定)でのジェネリックス(パラメータ化された型)
    • “for in do” ループ反復
    • 演算子のオーバーロード
    • クラス宣言でのネストした型とネストした型の定数
    • メソッドを持つレコード
    • クラス変数/クラス定数
    • 独自のデータ型、複素数、安全な配列、データセット経由のバリアントデータの授受をサポートするカスタムバリアント
  • コンパイラ
    • アプリケーションパフォーマンスを向上させる関数のインライン化
    • ユニコードおよび UTF-8 フォーマットのサポート
    • XML ドキュメントの生成
    • LowerCaseUpperCase_LStrCompCompareStrStrLenといったFastCodeからのRTL関数の新バージョン

7位 デバッガとメモリマネージャ

  • 新しいメモリマネージャFastMM コミュニティメモリマネージャ
  • 逆アセンブルペインで、「Opcodeの表示」と「アドレスの表示」メニュー項目を追加
  • 新しいデバッガオプション「スクロールして新しいイベントを表示」と「ユーザーブレークポイント以外を無視」
  • フレームがデバッグ情報を保持しているかどうかを示すグリフを表示するスタック呼び出しビュー
  • 式評価のフレームがWin32ローカル変数をサポート
  • エディタタブから独立して表示可能なCPUビューペイン
  • 項目のダブルクリックでローカルビューと自動的に同期するスタック呼び出しビュー

6位 ユニットテスト

  • DUnit(およびDelphi for .NET用にNUnit)フレームワークを統合したユニットテスト
  • ユニットテストとユニットテストプロジェクトの作成を簡単、迅速にするユニットテストウィザード
  • 各メソッドの呼び出し用に完全なコードを備えたユニットテストコードを生成
  • 既存のテストを新たなテスト方法に更新できるユニットテストケース
  • プロジェクトマネージャからユニットテストを実行

5位 テンプレートライブラリ

テンプレートライブラリは、RAD Studio 2007で導入された強力な新リポジトリメカニズムです。

RAD Studioでは、これから作成するプロジェクトのベースとして用いる複数のカスタムテンプレートライブラリを作成することができます。テンプレートライブラリでは、プロジェクトがどのように表示されるかを宣言し、新規作成ダイアログボクスに新しい種類のプロジェクトを追加できます。テンプレートライブラリを作成するには、2つの手順があります。

まず、テンプレートのベースに用いるRAD Studioプロジェクトと、プロジェクトを記述する.bdstemplatelibという拡張子を持つXMLファイルを作成します。このプロジェクトは、RAD Studioがサポートしているどんなプロジェクトでもかまいません。次に、[ツール|テンプレートライブラリ]メニューからアクセスできるテンプレートライブラリダイアログボックスで、 .bdstemplatelibテンプレートライブラリファイルを指定して、テンプレートライブラリのリストにそのプロジェクトを追加します。これで、独自のテンプレートライブラリを作成したり、他のユーザーが作成したライブラリを利用できるようになります。RAD Studioでは、デフォルトのテンプレートライブラリを提供しており、これらは削除することができませんが、カスタムテンプレートライブラリの追加・削除は可能です。

注:テンプレートライブラリを使ってプロジェクトを作成したときには、プロジェクトは、他のプロジェクトが存在しないサブディレクトリに配置されることにご注意ください。プロジェクトのすべてのファイルは、そのサブディレクトリかそれ以下のディレクトリになければなりません。


テンプレートライブラリプロジェクトごとに、単一の.bdstemplatelibテンプレートライブラリファイルを作ることも、各々のプロジェクトにそれぞれ一意のアイテム番号を割り当てることで、いくつかの関連したテンプレートプロジェクトを同じ.bdstemplatelibテンプレートライブラリファイルにリストすることもできます。

RAD Studio 2007をデフォルトインストールしたときに表示されるプレインストールテンプレートリストを見ると、テンプレートライブラリの目的は、ASP.NET 2.0のマスターページベースのWebアプリケーションのいわゆる ”improved start-from-scratchability”(Delphi R&DエンジニアのJim Tierneyの造語「スクラッチから始めなければならない状態からの改善」)のためであるという印象を受けるかもしれません。しかし実際、このメカニズムは、他の種類のRAD Studio 2007アプリケーション用にも利用できます。ヘルプによると、テンプレートライブラリで作成できるプロジェクトは、4種類あります。プロジェクトの種類は、bdstemplatelib XMLファイル内のCreator属性に指定された規定値によって決定されます。

現在、テンプレートライブラリは、以下の種類のプロジェクトをサポートしています。

  • C++プロジェクト
  • Delphi for Win32プロジェクト
  • Delphi for .NETプロジェクト
  • Delphi for ASP .NETプロジェクト

4位 ローカル履歴

履歴タブの機能は、極めてシンプルなソースコントロールシステムであるといえます。ファイルが保存されるたびに、バックアップが作成され、サブディレクトリに保管されます。これらのファイルをトラッキングし、diffエンジンを使用して旧バージョンとの差異を確認することができます。旧バージョンのファイルが必要な場合には、現在のファイルと入れ替えることもできます。

3位 新しいDBX4データベースアーキテクチャ

DBX4のアーキテクトSteve Shaughnessyは、彼のブログで、DBX4のアーキテクチャに立ち入って大変興味深いことを語っています。

  • 100% Delphi
  • デリゲートドライバ
  • 拡張可能なコマンド型
  • データエクスプローラの統合
  • Win32と.NETで単一のソースコード
  • 主要なRDBMSの最新バージョンをすぐに利用可能

2位 ライブテンプレート

Delphi wiki ページ には、ライブテンプレートについてのたくさんの技術情報があります。

Delphi 2006では、「ライブテンプレート」と呼ばれる機能が導入されました。これは、ひとつのキーワードから展開されるパラメータ化されたマクロ型のテンプレートを記述できるものです。つまり、タブキーでテンプレートが提示する複数のパラメータに順番に値を設定できます。これは、大変生産性を高めます。最もよいところは、独自のテンプレートを利用できること、そしてそれを作ることも比較的簡単だということです。

もっともすばらしいのは、ライブテンプレートが、その機能をOpen Tools APIのスクリプトエンジンによって拡張可能な点です。Adam Markowitzは、彼のブログ "Live Template Script Examples - var declaration with initialization and clipboard contents (Delphi2006)". で、この機能について議論しています。

DelphiプロダクトマネージャのNick Hodgesは、「Blackfish SQLのトリガおよびストアドプロシージャを作成するためのライブテンプレートとスクリプトエンジンのセット」を ID: 24990, Nick's Blackfish SQL Development Pack に作成しています。

また、Marco Cantuも彼のブログで、スクリプトライブテンプレートについて語っています。

ライブテンプレートのすばらしい点は、完全にカスタマイズ可能なことです。逆によくない点は、ドキュメントがないことです。Delphi wikiサイトの興味深い2つの記事は、このギャップを埋めてくれます。そのひとつにはたくさんのサンプルが、他方には、いくつかのリファレンス情報があります。

今、私がDevCoにドキュメント化してもらいたいのは、他の詳細は別にしてでも、テンプレートから呼び出すことのできる、次のようなスクリプトのリスト(あるいは内部機能)です。

  • InvokeClassCompletion
  • PopulateCase
  • DeclareVariable
  • RemoveTemplate
  • ValidateForTemplate

1位 リファクタリング

リファクタリングとは何か?

「リファクタリングとは、コードの外部の動作を変えることなく、その内部構造を改善するような方法でソフトウェアシステムを変更するプロセスです。」

Martin Fowler「リファクタリング

Delphiでは、以下のリファクタリングをサポートしています。

  • 「名前の変更」リファクタリング
  • リファクタリングによる[参照の検索]メニュー
  • 「変数の導入」リファクタリング
  • 「フィールドの導入」リファクタリング
  • 「変数のインライン化」リファクタリング
  • 「パラメータの変更」リファクタリング
  • 「安全な削除」リファクタリング
  • 「メンバのプッシュアップ/ダウン」リファクタリング
  • 「メンバのプルアップ」リファクタリング
  • 「スーパークラスの抽出」リファクタリング
  • 「インターフェイスの抽出」リファクタリング
  • 「メンバの移動」リファクタリング
  • 「変数の宣言」リファクタリング
  • 「フィールドの宣言」リファクタリング
  • 「メソッド抽出」リファクタリング
  • 「ユニットの検索/ネームスペースのインポート」リファクタリング
  • リファクタリングによる「ファイル内検索」
  • 「リソース文字列の抽出」リファクタリング

「名前の変更」リファクタリングによって、プロジェクト内にあるあるシンボル名すべてのインスタンスを変更することができます。「変数の宣言」と「フィールドの宣言」を用いれば、ローカル変数やメンバーフィールドの宣言をすばやく行うことができます。「リソース文字列の抽出」リファクタリングは、Delphiコード中の文字列リテラルをリソース文字列のブロックエントリに変換し、オリジナルのリテラルをリソース文字列のシンボルに置換するために使います。「メソッド抽出」リファクタリングは、選択したソースコードの一部をメソッドとして抜き出し、元の箇所をメソッド呼び出しに置き換えます。正確には利ファクタリグではありませんが、「ユニットの検索/ネームスペースのインポート」もリファクタリングメニュー下にあります。これは、特定のシンボルに関連したネームスペースをすばやく見つけてインポートします。

皆さんはどうか分かりませんが、私にとって、このリファクタリング機能は、Delphi 7にはないIDEの新機能で最も有用なものです。ユニットテストとの組み合わせによって大きな力を得ることができ、コードの信頼性を高められます。これはまさにアジャイル開発です。

まとめ

Delphi 2007には、まだまだ多くのことがあります。私も毎日何か新しくてエキサイティングなことを発見しています。まだ使っていない方は、ぜひ試してみるべきだと思います。

参考情報:

Server Response from: ETNASC04