次の方法で共有


ツールボックス

データベースと OR/M ツール、Oren Eini、Visual Studio のカスタム タブ

Scott Mitchell

LINQ to SQL と ADO.NET Entity Framework のデザイナーの強化

LINQ to SQL と ADO.NET Entity Framework はどちらも、マイクロソフトが実装するオブジェクト リレーショナル マッピング (OR/M) です。このような OR/M を使用する場合、リレーショナル モデルとオブジェクト モデルとのマッピングを保持する .dbml ファイルや .edmx ファイルを作成することになります。こうしたマッピングは実際には XML で定義されていますが、Visual Studio のデザイナーを使用すれば、ドラッグ アンド ドロップ程度の簡単な操作でマッピングが作成されます。

LINQ to SQL や Entity Framework をアプリケーションで使用していて、マッピング ファイルの管理を担当しているのであれば、"Huagati DBML/EDMX Tools" (バージョン 1.76) を確認してみてください。このツールにより、Visual Studio の LINQ to SQL デザイナーや Entity Framework デザイナーに多くの機能が追加されます。

ドラッグ アンド ドロップ操作を利用する OR/M ツール共通の課題は、オブジェクト モデルで定められている名前付け規則に従うことです。データベース オブジェクトの名前には、よく、"tbl" や "usp_" といったプレフィックスが付けられていたり、全部大文字や小文字で表現されていたりします。データベース オブジェクトをデザイナーに追加するときに、Visual Studio はプレフィックスや大文字小文字の組み合わせをそのまま使用して対応するクラスを作成します。しかし、このクラス名は、チームの名前付け規則に違反している可能性があります。Huagati DBML/EDMX Tools では、オブジェクト モデル内のすべてのクラスとメンバーの名前を変更しなくても、数回クリックするだけで、プレフィックスやサフィックスの追加と削除、大文字と小文字の適切な変換、アンダースコアの削除などを行うことができます。

Visual Studio の LINQ to SQL デザイナーには 1 つ欠点があり、オブジェクト モデルを更新して、データベースへの最新の変更を反映するメカニズムがありません。たとえば、データベース テーブルを最初にデザイナーにドラッグするときに、テーブルの列に対応するプロパティを備える形でオブジェクトが作成されます。数週間後に、3 つの新しい列が同じテーブルに追加されたとすると、LINQ to SQL デザイナーに戻り、テーブルを削除してから追加し直すか、対応するクラスに 3 つの新しいプロパティを手動で追加しなくてはなりません。この欠点が、Huagati DBML/EDMX Tools によって解消されます。Huagati DBML/EDMX Tools では、リレーショナル モデルとオブジェクト モデルの差異を報告し、オブジェクト モデルをリレーショナル モデルと自動的に同期することができます。また、オブジェクト モデルに合わせてリレーショナル モデルを変更する場合に、必要な SQL ステートメントを生成することも可能です。

さらに、ドキュメント作成ツールとしての便利な機能もあり、データベースからテーブルと列の情報を取得し、オブジェクト モデルの XML ドキュメントに含めることができます。

Huagati DBML/EDMX Tools には、Standard バージョンと Professional バージョンに加え、45 日間の無料試用版もあります。Standard バージョンでは、1 ユーザー ライセンスあたり 50 ドルで、1 モデルあたり最大 80 個のテーブルをサポートします。Professional バージョンでは、1 ユーザー ライセンスあたり 120 ドルですが、テーブル数に制限はありません。

価格: 1 ユーザー ライセンスあたり 50 ~ 120 ドル
huagati.com/dbmltools (英語)

注目のブログ

私の好きな .NET ブログ作成者の 1 人、Oren Eini は、精力的なブログ作成者であり、尊敬すべきソフトウェア開発者でもあります。彼は、Ayende Rahien というハンドルネームで投稿しています。Eini についておそらく最も知られているのは、.NET オープン ソース プロジェクトへの投稿でしょう。彼は、NHibernate の寄稿者です。評判の高いこの OR/M フレームワークについては、MSDN Magazine 2006 年 10 月号で紹介しました (msdn.microsoft.com/magazine/cc163540、英語)。また、Rhino Mocks の作成者でもあります。この .NET モック作成用フレームワークについては、2008 年 1 月号で取り上げました (msdn.microsoft.com/ja-jp/magazine/cc135981.aspx)。

Oren Eini’s blog

Oren Eini のブログ

Eini は、さまざまなトピックを調べてブログに投稿しています。NHibernate、Microsoft Entity Framework といった特定のフレームワークの機能や欠点を調べたトピックもいくつかあります。ほとんどは一般的なトピックで、データベース設計、OR/M の使用、テスト、ソフトウェア アーキテクチャとデザインなどについて、最前線からアドバイスを提供しています。スクリーンショット、ダイアグラム、コード スニペットも数多く投稿しています。

たとえば、リレーショナル モデルとオブジェクト モデルとのマッピング、エンティティの取り込みなど、OR/M 実装に関する課題についのて一連の投稿が見つかります。「Solving the Select N+1 Problem」(えり抜きの N+1 問題の解決方法、英語) についても一読してみてください。親子構造のデータを反復処理することで、知らないうちにパフォーマンスの深刻な問題が引き起こされるしくみを説明しています。

Eini のブログには、通常の開発者向けのブログには見られない種類の投稿もあります。たとえば、いくつかの長い文章しか投稿されていないトピックがたくさんありますが、これらは重要なアイデアを伝えて、読者の意見を取り入れようとしています。"Find the bug" (バグを見つける) というステートメントを添えた非常に長いコード スニペットもあります。このようなさまざまな投稿の中には、実に印象的な投稿があるにもかかわらず、1 日に 3 回以上投稿しているのも珍しいことではありません。.NET 開発者やアーキテクトの皆さんにとっては、Oren のブログは必読書です。

ayende.com/Blog (英語)

複数のデータベースに対するクエリの同時実行

私は自身の経歴の中で、数多くのマルチテナント アプリケーションの構築に携わってきました。マルチテナント アプリケーションとは、ホスト Web サーバー上でインスタンスを 1 つだけ実行し、そのインスタンスが複数の組織から使用されるアプリケーションです。マルチテナント アプリケーションでは、ユーザーが自身の組織に属しているデータしか表示および管理できないようにする必要があります。そのため、通常、機密情報を扱うマルチテナント アプリケーションでは、データを完全に分離させる (これが最大の目的です) ため、各組織のデータを別個のデータベースに格納します。

各組織のデータが別のデータベースに格納されるということは、今度は複数の組織からのデータを集約して表示することが課題になります。開発者が、特定の組織のデータを破壊するバグを見つけたとします。他の顧客のデータにも同様の破損があるかどうか判断するため、開発者は 1 つずつすべてのデータベースにクエリを実行し、データベースごとに個別の結果セットを出力しなければなりません。ご想像のとおり、これは面倒な作業です。各データベースからの結果を 1 つの統一された出力に集約して、並び替えやフィルター処理が行えるのが理想です。

何年もの間、私はさまざまな手法を使用して、複数のデータベースにクエリを実行してきました。ドキュメントに記載されていない "sp_MsForEachDb" ストアド プロシージャを使用したり、バッチ ファイルを作成したり、カスタム ツールを構築したりしてきました。しかし、最近、同僚に Red Gate Software の "SQL Multi Script" (バージョン 1.1) を紹介されてからは、これしか使用していません。SQL Multi Script は期待どおりの威力を発揮します。実行する SQL ステートメントを入力し、クエリの対象となるデータベースを選択します。すると、SQL Multi Script が指定されたデータベースに対して SQL ステートメントを実行し、結果を集約して表示します。

SQL Multi Script

SQL Multi Script

SQL Multi Script は、既定で、データベースに SQL ステートメントを並列に送信します。これにより、特にデータベースが異なるサーバーに配置されているときは、結果が返る時間が大幅に短縮されます。ステートメントを順番に実行するよう指示することもできます。これは、エラーが見つかったときにスクリプトの実行を中断する場合に便利です。

エラーが発生した場合、SQL Multi Script には次の 4 つのエラー処理オプションがあります。スクリプトの続行 (既定の動作)、データベースでの現在のステートメントの実行中断 (他の SQL ステートメントは続行)、データベースでのすべてのステートメントの実行中断 (一覧の次のデータベースに移動)、すべてのデータベースでのすべてのステートメントの実行中断、の 4 つです。

SQL Multi Script の結果ウィンドウには、データベースから返されたメッセージと、データを集約したビューが表示されます。また、現在のセッション中にデータベースに対して実行されたスクリプトの履歴も表示されます。さらに、クエリを行ったデータベースの一覧がチェック ボックス付きで表示されます。データベースのチェック ボックスをオンまたはオフにして、そのデータベースの集計結果を表示または削除することができます。[Save] (保存) をクリックして、集約結果を .CSV ファイルや .TXT ファイルに保存することもできます。

価格: 195 ドル
red-gate.com (英語)

Visual Studio のタブの改良

大規模プロジェクトで作業するときは、Visual Studio 内で多くのファイルが開かれているのは珍しいことではありません。残念ながら、Visual Studio のユーザー インターフェイスは、ドキュメントがたくさん開かれている場合、少し改良の余地があります。Visual Studio の既定では、一連のタブに開いているドキュメントを表示する、シングル ドキュメント インターフェイス (SDI) が使用されます。しかし、このタブは水平方向にレイアウトされているため、画面に表示できる数に限りがあります。Visual Studio をマルチ ドキュメント インターフェイス (MDI) にするとタブが表示されなくなりますが、ユーザーは [ウィンドウ] メニューを使って、開いているドキュメントの表示や、ウィンドウの切り替えを行う必要があります。

Sergey Vlasov が開発した "Tabs Studio" (バージョン 1.6) は、Visual Studio の組み込みのタブを、改良したカスタマイズ可能なタブのセットに置き換えるアドインです。Visual Studio とは異なり、Tabs Studio では SDI 構成でも MDI 構成でも、開いているドキュメントごとにタブを表示します。水平方向の領域が不十分で、すべてのタブを表示できなければ、タブが垂直方向に重ねられます。

Tabs Studio

Tabs Studio

Visual Studio で作成されるさまざまな種類のコンポーネントは、複数のファイルを使用して実装されます。たとえば、Default.aspx という名前の ASP.NET ページを作成すると、実際には、Default.aspx と Default.aspx.cs (または Default.aspx.vb) という 2 つのファイルが作成されます。Tabs Studio では、このようなファイルを使用を容易にする機能が追加されます。

Default.aspx を扱うときは、Default.aspx.cs も開く必要があります。[Default.aspx] タブを右クリックすると、コンテキスト メニューに [Open Default.aspx.cs] がオプションとして含まれています。Tabs Studio では、関連のあるドキュメントを 1 つのタブにグループ化します。Default.aspx と Default.aspx.cs の両方が開いていると、Tabs Studio では、拡張子のないファイル名 (Default) を 2 つの拡張子 (.aspx と .aspx.cs) と共に列挙する 1 つのタブが表示されます。タブの .aspx 拡張子をクリックして Default.aspx を表示するか、.aspx.cs 拡張子をクリックして Default.aspx.cs を表示します。

Tabs Studio にはさまざまな構成オプションもあります。たとえば、XAML を使ってタブのスタイルをカスタマイズできます。タブのフォント、色、形状などを構成できます。XAML を使用して設定を定義しているため、条件付きステートメントなどのプログラム ロジックを含めて、現在選択されているタブのスタイルを指定したり、以前に選択したことのあるタブと選択したことのないタブを色分けしたりすることもできます。Tabs Studio は、アドインを使用してさらにカスタマイズできます。自身でアドインを作成したり、Tabs Studio の Web サイトから入手可能な無料のアドインをダウンロードしたりできます。

Tabs Studio は、Visual Studio 2005、2008、および 2010 の Express Edition 以外で使用可能です。

価格: 34 ドル
tabsstudio.com (英語)

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

すべての価格は発表時のもので、変動する可能性があります。このコラムに記載されている見解は、執筆者の個人的な見解であり、必ずしもマイクロソフトの見解を反映するものではありません。

ご意見やご質問は、toolsmm@microsoft.com (英語のみ) までお送りください。