次の方法で共有


ツールボックス

データベース ドキュメントの作成、前提条件と事後条件に関する API、ブログ、その他

Scott Mitchell

ワンクリックでのデータベース ドキュメントの作成

これまでの業務経験の中で、データベースの構造や目的をドキュメントにするさまざまな手法に出会ってきました。大半の開発者は、Microsoft SQL Server のデータベース ダイアグラム ツールを使用して視覚的に表現するだけで終わりにしてしまいます。取りかかりとしては良いものの、それだけでは不十分な場合がほとんどです。初心者にとっては、データベース ダイアグラムを他人と共有することは、なかなか難しいものです (中には、1 つの大きなデータベース ダイアグラムを何枚にも連なったスクリーンショットとして、何通もの電子メールに添えて送ってきたクライアントもいました)。ダイアグラムに大量のテーブルが示されると、読み取りづらく、わかりにくくなり、大規模データベースの理想像からは程遠いものとなってしまうことが少なくありません。

データベース ダイアグラムは確かに役立ちますが、データベースのドキュメントを作成する際にもっと役立つツールがあります。その 1 つが、BI Documenter (version 3.0) です。BI Documenter を使用すると、Microsoft SQL Server データベースのドキュメントを簡単に自動生成できます。まず、BI Documenter を起動して、ソリューション ファイルを作成します。ソリューション ファイルは、ドキュメントを作成するデータベースを指定し、スナップショットの履歴を管理します。スナップショットとは、特定の時点におけるデータベースの構造を示すもので、BI Documenter により生成されます。プロジェクト遂行中は、通常、データベース スキーマが変化します。場合によっては、新しいテーブルの追加、既存の列の修正または削除、インデックスの追加または削除など、大幅な変化が生じることもあります。このような場合にスナップショットを使用すると、現在作成しているドキュメントを後から正確に再現できるようになります。ドキュメントを生成する際に、現在のデータベース スキーマの新しいスナップショットを作成することも、以前のスナップショットからドキュメントを再生成することも可能です。


BI Documenter

ドキュメントを作成するデータベースを選択してスナップショットを作成したら、あとはドキュメントのオプションを構成するだけです。BI Documenter では、コンパイル済み HTML ヘルプ ファイル (.chm)、または一連の HTML ページを作成できます。ドキュメントに使用する色をカスタマイズしたり、各ページにロゴを追加したりすることができます。ドキュメントに含めたり、ドキュメントから除外するデータベース オブジェクトの種類を選択するオプションもあります。さらに、BI Documenter にはデータベース ダイアグラム作成ツールが組み込まれていて、データベース ダイアグラムを作成して、ドキュメントに追加できます。Microsoft Word ファイルやイメージ ファイルをインポートすることもできます。

生成したドキュメントには、指定したデータベース オブジェクトのユーザー、ロール、インデックス、トリガー、テーブルなどを示す詳しい一覧が示されます。特定のテーブルについての情報を参照すると、そのテーブルの列、トリガー、インデックス、制約、依存関係、拡張プロパティ、およびそのテーブルを作成するのに必要な SQL ステートメントが示されます。テーブルの列、トリガーなどの情報はリンクとして表示され、クリックすると詳細ページが読み込まれます。

BI Documenter には、Database、Enterprise、および Workgroup の 3 つのエディションがあります。Database Edition では、Microsoft SQL Server データベースのドキュメントしか作成できませんが、Enterprise Edition と Workgroup Edition では、Analysis Services データベース、Integration Services パッケージ、および Reporting Services サーバーのドキュメントも作成できます。また、Database Edition と Enterprise Edition では、1 人のユーザーしかドキュメントを作成できませんが、Workgroup Edition では、複数のユーザーが共同作業できます。

価格: Database Edition 195 ドル、Enterprise Edition 395 ドル、Workgroup Edition 495 ドル
bidocumenter.com (英語)

注目のブログ

私は最近、Windows Presentation Foundation (WPF) を利用した既存の基幹業務アプリケーションに新しい機能を追加するプロジェクトに従事しました。このプロジェクト遂行中になくてはならない情報源だったのが Beth Massi のブログです。Beth は、マイクロソフトの Visual Studio コミュニティ チームのプログラム マネージャーで、LINQ、エンティティ フレームワーク、WPF、ADO.NET Data Services、Microsoft Office 開発などのトピックに関する、膨大な量のヒント、秘訣、ビデオ、記事、チュートリアルを、ブログとマイクロソフトの Channel 9 の Web サイト (channel9.msdn.com、英語) で公開しています。

Beth のブログ エントリの大半は、まず、特定のプログラミング シナリオについて説明し、それから順を追ったわかりやすい指示、多くのスクリーンショットとコード スニペット、ブログ記事や詳細記事のリンクを示していきながら、最初に掲げたシナリオを解決する方法を示しています。たとえば、「Master-Detail Data Binding in WPF with Entity Framework」 (エンティティ フレームワークを使った WPF でのマスター詳細データ バインド) というタイトルのブログ エントリでは、まずエンティティ データ モデルを作成する方法を説明し、次に、LINQ を使用して適切な詳細記録を取得するさまざまな方法を提示しています。「Using TableAdapters To Insert Related Data Into An MS Access Database」 (テーブル アダプターを使用して MS Access データベースに関連データを挿入する) や「Tally Rows In A DataSet That Match A Condition」 (データセット内で条件に一致する行数を集計する) などのブログも同じ形式で書かれています。

このブログが他のブログと一線を画している点は、Beth の Visual Basic へのこだわりです。Beth の使用するコード例はすべて VB で書かれており、Visual Basic 10 のコレクション初期化子のサポートなど、新しい言語機能についても頻繁にブログに投稿しています。また、VB を使用している何人かの Microsoft MVP にインタビューし、構築しているアプリケーションや好みの言語機能などについて質問しています。こうしたインタビュー (および類似のインタビュー) は、Channel 9 (channel9.msdn.com/tags/MVP、英語) および "I'm a VB" Web サイト (imavb.net、英語) で見ることができます。

blogs.msdn.com/bethmassi (英語)


Beth Massi のブログ

前提条件と事後条件に関する Fluent API

メソッドが呼び出されるとき、そのメソッドでは実行前の環境が特定の状態であることを想定します。さらに、実行後に特定の状態になることも想定します。こうした想定を前提条件および事後条件といいます。前提条件は、一般にメソッドの入力パラメーターに適用されます。たとえば .NET Framework の File クラスの ReadAllText メソッドは、ファイルのパスを入力として受け取り、ファイルの内容を文字列として返します。入力として渡すファイル パスは、文字列の長さを 0 にすること、空白文字のみを含むこと、および無効な文字を含むことを許可しません。また、null にすることも、システムで定義されたファイル パスの最大長を超えることも許可しません。こうした前提条件が 1 つでも満たされなければ、ReadAllText メソッドは例外をスローします。

前提条件と事後条件は、一般に、図 1 に示すような、一連の条件ステートメントを使用して実装します。Steven van Deursen が始めたオープン ソース プロジェクトの CuttingEdge.Conditions (version 1.0) では、前提条件と事後条件を指定するために Fluent インターフェイスが提供されます (Fluent インターフェイスとは、わかりやすい名前とメソッド チェーンの使用によって読みやすさを最大限に高める API の設計スタイルのことです)。

図 1 一連の条件を使用して実装される前提条件および事後条件

public string ReadAllText(string path)
{
      // Pre-conditions...
      if (path == null)
            throw new ArgumentNullException(...);
      if (path.Length == 0)
            throw new ArgumentException(...);
      if (IsOnlyWhitespace(path) ||
            ContainsInvalidCharacters(path))
            throw new ArgumentException(...);
      if (path.Length >
            GetMaximumFilePathLength())
            throw new PathTooLongException(...);

      // Open file and read and return contents
            as string...
      object contents = GetFileContents(path);

      // Post-conditions
      if (!contents is string)
            throw
                  new InvalidFileTypeException(...);
      if (string.IsNullOrEmpty(
            (string) contents))
            throw new EmptyFileException(...);
}

前提条件を入力パラメーター、入力プロパティ、または入力変数に適用するには、Requires 拡張メソッドを使用します。事後条件の場合は、Ensures 拡張メソッドを使用します。どちらのメソッドも、Validator オブジェクトを返します。Validator オブジェクトは、多くのメソッドの中でも IsNotNull、IsNotEmpty、IsEqualTo のような、ルールのチェックを適用できるメソッドを持つオブジェクトです。図 2 は、図 1 と同じメソッドを示していますが、前提条件と事後条件の実装に CuttingEdge.Conditions API を使用しています。

図 2 CuttingEdge.Conditions を使用して実装される前提条件および事後条件

public string ReadAllText(string path)
{
      // Pre-conditions...
      path.Requires()
            .IsNotNull()
            .IsNotEmpty()
            .Evaluate(!IsOnlyWhitespace(path)) &&
                  !ContainsInvalidCharacters(path),
                  "path contains whitespace only or
      invalid characters")
            .Evaluate(p => p.Length <=
                  GetMaximumFilePathLength());

      // Open file and read and return contents
      // as string...
      object contents = GetFileContents(path);

      // Post-conditions
      contents.Ensures()
            .IsOfType(typeof(string))
            .IsNotNull()
            .IsNotEmpty();
}

各 Validator メソッド呼び出し (IsNotNull や IsNotEmpty など) では、条件が満たされないと例外がスローされます。たとえば、パスが null であれば、IsNotNull メソッド呼び出しで ArgumentNullException がスローされます。このとき、必要に応じて例外メッセージに使用する文字列を指定できます。

Validator クラスに組み込まれているどのメソッドを使用しても、前提条件と事後条件を表現できないこともあります。そのような場合には、Validator クラスに拡張メソッドを作成するか、評価対象のブール式やラムダ式を指定できる Evaluate メソッドを使用することができます。式から true が返されると処理が続行され、false が返されると例外がスローされます。図 2 では、前提条件のセクションに、両形式の Evaluate メソッドを使用しています。

価格: 無料 (オープン ソース)
conditions.codeplex.com (英語)

推薦図書

ASP.NET MVC は、ASP.NET スタックに比較的最近追加されたフレームワークで、開発者が Model-View-Controller (MVC) パターンを使用して Web アプリケーションを作成できるようにします。ASP.NET MVC は、従来の Web フォーム開発とは多くの点で異なっています。まず、ASP.NET MVC を使用すると、レンダリングされるマークアップを細かく制御でき、懸念事項をはっきりと分離できます。Web ページへのアクセスは、SEO 対応の簡潔な URL を通じて行われます。さらに、MVC アーキテクチャにより、テストの容易性が向上します。ASP.NET MVC と Web フォームの違いの詳細については、Dino Esposito による 2009 年 7 月号の記事 (msdn.microsoft.com/magazine/dd942833.aspx、英語) を参照してください。

2 つのフレームワークには異なる点が多くあるため、ASP.NET MVC の使い始めは、たとえ経験のある ASP.NET 開発者でも習得期間を少し要します。たとえば、Visual Studio で ASP.NET MVC アプリケーションを作成する際には、単体テスト プロジェクトを作成することを求めるメッセージが表示されます。ASP.NET MVC では、HTML を少量のヘルパー クラスと併用して、Web ページをデザインします。ページ上にドラッグ アンド ドロップする Web コントロールはありません。また、Web フォームとは異なり、組み込みのポストバックや Web コントロール イベント モデルがありません。つまり、Web フォームから ASP.NET MVC に移行する際には、新しい技術をたくさん身に付ける必要があります。

ASP.NET MVC の習得に関心のある中級レベルの ASP.NET 開発者の方は、Stephen Walther の最新の著作『ASP.NET MVC Framework Unleashed』(Sams、2009年) を参考にしてください。新しい概念とその使用方法がわかりやすく紹介されており、膨大な情報に戸惑うことなく理解できます。


ASP.NET MVC Framework Unleashed

この書籍では、新しいフレームワークの背後にある目的、設計目標、メリットなど、ASP.NET MVC の簡単な概要についてまず説明し、それから 500 ページにわたって、ASP.NET MVC の重要な側面について 1 つずつ解説しています。始めに、Visual Studio で新しい ASP.NET MVC アプリケーションを作成する方法、データベースを追加する方法、モデル、ビュー、およびコントローラーをプロジェクトに追加する方法などについて学びます。それから、モデル、ビュー、およびコントローラーの詳細について 100 ページにわたって解説しています。どの概念も、スクリーンショットと C# および Visual Basic の両方のコード サンプルが添えられており、わかりやすく説明されています。後半の章では、使用できる HTML ヘルパー、フォーム データを検証する手法について説明し、ASP.NET MVC の URL ルーティング機能を詳しく解説しています。認証、AJAX、jQuery、および配置についての章もあります。

いくつかの簡単な演習を使用して、それぞれの章で ASP.NET MVC の中核について詳しく考察した後は、実際の ASP.NET MVC Web アプリケーションを構築する例を土台から説明して締めくくっています。150 ページを超えるこの最後のプロジェクトでは、前半の章で説明した概念を固め、ASP.NET MVC フレームワークにおける多くのメリットを強調しています。

価格: 49.99 ドル
samspublishing.com (英語)

Scott Mitchell は、多数の著書を出版し、4GuysFromRolla.com (英語) の創設者でもあります。また、1998 年からは Microsoft MVP としてマイクロソフトの Web テクノロジに携わっています。現在は、フリーのコンサルタント、トレーナー、およびライターとして活躍しています。Scott の連絡先は、Mitchell@4guysfromrolla.com (英語のみ) です。また、ScottOnWriting.net (英語) にブログを公開しています。