次の方法で共有


ツールボックス

Microsoft グラフ コントロール、Visual Studio 自動コード スニペット、その他

Scott Mitchell

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

目次

グラフには 1,000 語の価値がある
注目のブログ
コード スニペットを作成して管理する
推薦図書

グラフには 1,000 語の価値がある

よくできたグラフを見ると、データの概要がひとめで明確にわかり、数値データだけの表ではわかりにくい周期や傾向や他のパターンを識別できます。最近まで、Web ページや Windows クライアント アプリケーションにグラフを追加するには、オープン ソースやサードパーティのグラフ作成パッケージを使用する必要がありました。そのようなサードパーティ製グラフ作成コンポーネントの 1 つに Dundas Charts があり、2006 年 1 月号 (msdn.microsoft.com/magazine/cc163668) で解説しました。Visual Studio 2008 および Microsoft .NET Framework 3.5 SP1 以降では、開発者は Microsoft グラフ コントロールを使用して、ASP.NET と Windows フォーム アプリケーションの両方でグラフを設計および表示できます。

最初に、Microsoft グラフ コントロールVisual Studio 用グラフ コントロール アドオンをダウンロードしてインストールしてください。最初のダウンロードでグラフ作成ライブラリとコントロールを含むアセンブリがインストールされ、次のダウンロードで Visual Studio のツールボックスの統合と IntelliSense のサポートが追加されます。(注: Microsoft グラフ コントロールには .NET Framework 3.5 SP1 が必要です。Visual Studio アドインは Visual Studio 2008 の Express 以外のバージョン用です。)

次に、Visual Studio を起動して Windows フォーム アプリケーションまたは ASP.NET アプリケーションを開き、グラフ コントロールをツールボックスからデザイン画面にドラッグします。グラフのサイズ、種類、色、系列、凡例、その他の表示関連の条件を、プロパティで指定できます。グラフのデータは、静的に指定することも、配列、データベース、XML ファイル、CSV ファイル、Microsoft Excel スプレッドシートなどの動的ソースから取得することもできます。

Microsoft グラフ コントロールで最も印象的なのは、その幅広い機能です。標準的な折れ線、棒、円の各グラフから、それほど標準的ではないレーダー、ヒストグラム、ピラミッド、パレート、バブルなどのグラフまで、多くの種類のグラフを使用できます。グラフのデータのグループ化、並べ替え、フィルタ処理、検索が可能です。1 行のコードで、グラフのデータを XML ファイルにエクスポートしたり、移動平均、範囲インジケータ、およびトレンド ラインを含むようにグラフを拡張したりできます。マーカー、注釈、タイトル、凡例、他のビジュアルも、グラフ サーフェイスに簡単に追加できます。さらに、PrePaint や PostPaint などのグラフ コントロール イベントのイベント ハンドラを作成することで、グラフの出力をカスタマイズできます。

Microsoft グラフ コントロールには、対話型グラフ用の機能も組み込まれています。たとえば、ユーザーがデータ ポイントをクリックしたときに、同じグラフ領域内または別のグラフやグリッドに、そのデータ ポイントについての詳細情報を表示できます。Windows フォーム アプリケーション用のグラフ コントロールは、ユーザーがグラフのデータをズームまたはスクロールできるように構成できます。どちらのバージョンのグラフ コントロールも、リアルタイム グラフをサポートします。これは、データが継続的に生成され、外観が継続的に更新されて新しいデータを表示するグラフです。ASP.NET アプリケーション用のグラフ コントロールは、ASP.NET AJAX フレームワークを使用して、ほとんどの対話機能を自動的に実行します。つまり、開発者は JavaScript の専門家である必要はありません。ただし、必要な場合は、ユーザーのクリックに対応してカスタム JavaScript を実行できます。

ほとんどのソフトウェア ライブラリの最初のリリースにはつきものですが、グラフ コントロールにもいくつかの欠点があります。前に説明したように、グラフ コントロールと Visual Studio の統合は、単一の統合されたパッケージではなく異なるダウンロードになっています。ライブラリのドキュメントとサンプル環境を取得するには、さらに 2 つのダウンロードが必要です。また、現時点では、Silverlight または Windows Presentation Foundation のアプリケーションはサポートされていません (ただし、Silverlight ツールキットには独自のグラフ コントロールがあります)。最後に、グラフの外観の作成とカスタマイズを支援するウィザードはありません。確かに、多くのコード サンプルがあり、グラフのプロパティはわかりやすく簡単に構成できますが、外観に関するプロパティが多いので、変更するプロパティを見つけるのに時間がかかる場合があります (たとえば、主 X 軸のラベルのフォント サイズの調節など)。これらの欠点が将来のリリースで対処されることを願います。

価格: 無償

go.microsoft.com/fwlink/?LinkId=142580

go.microsoft.com/fwlink/?LinkId=142581

fig01.gif

Microsoft グラフ コントロールで作成されたグラフ (クリックすると拡大画像が表示されます)

注目のブログ

ほとんどの .NET 開発者と同様に、私も 1 日の大半を Visual Studio に費やしています。ツールのことはよくわかっているつもりですが、それでも知らなかった機能、オプション、ウィンドウ、ウィザードなどについて常に学んでいます。これまでに知らなかった機能を試行錯誤で発見することもありますが、Visual Studio に関する知識の多くは CodePlex.com のプログラム マネージャである Sara Ford などのブログから得ています。彼女は何年にもわたって Visual Studio についてのヒントを蓄積し、ブログでそれを公開してきました。

各ヒントはあまり知られていない Visual Studio の機能についての簡潔な説明であり、多くには動作しているヒントを示すスクリーンショットが 1 つか 2 つ付いています。一部のヒントは、簡単なキーボード ショートカットのヒントです。たとえば、Tip #346 では、Ctrl + Shift + C を押すとクラス ビューに移動できます。その他のヒントは、特定の頭痛の種を取り除く方法についてのものです。たとえば、Tip #168 は、出力ウィンドウが構築中に表示されないようにする方法です。また、Tip #239 では、条件ブレークポイントを設定し、デバッグについてのヒントを提供できます。

これらのヒントの情報は非常に役に立ちます。次に 1、2 時間手が空いたときは、Sara のブログでヒントを探してみてください。何か新しいことが見つかることを保証します。Visual Studio のヒントの共有に 1 年半をかけた後 (最後のヒントは 2008 年 12 月の #382)、現在の彼女のブログは CodePlex と .NET コミュニティが対象になっています。

blogs.msdn.com/saraford

fig02.gif

Sara Ford のブログ (クリックすると拡大画像が表示されます)

コード スニペットを作成して管理する

Visual Studio には、より生産性の高いプログラマーになる確実な手段を提供する多くの機能が含まれます。最も強力な生産性向上機能の 1 つはコード スニペットです。これは、タスク指向のコード ブロックであり、置き換え可能な領域を含むことができます。たとえば、LINQ クエリ コードを生成するコード スニペットがあり、foreach ループの定型コードを追加したり、テキスト ファイルを操作するためのコードを記述したりします。クラス ファイルにコード スニペットを追加するとコード スニペットのコードが挿入され、開発者は置き換え可能な領域のテキストを指定できます。

Visual Studio には何十もの組み込みのコード スニペットが含まれており (C# より Visual Basic の方が多くあります)、コード スニペットをインポートしたり、独自のコード スニペットを最初から作成したりすることもできます。残念ながら、Visual Studio にはコード スニペットの作成を支援する機能はありません。コード スニペットのコードと置き換え可能な領域を正しい形式の XML ファイルで作成し、ファイルを Visual Studio にインポートする必要があります。

コード スニペットの作成は、Snippet Designer (Version 1.1) を使用するとかなり簡単になります。これは、IDE 内でコード スニペットの作成と編集を直接行うための、Visual Studio 2008 用のオープンソースのアドインです。このアドインをインストールすると、[ファイル] メニューから新しいコード スニペット ファイルを作成するだけで、簡単に新しいコード スニペットを作成できます。Visual Studio でウィンドウが開き、そこでは、コード スニペットのコードを入力し、マウス クリックで置き換え可能な領域を指定し、プロパティ ウィンドウでコード スニペットの情報をカスタマイズできます。Snippet Designer を使用すると、既存のコードから新しいスニペットを簡単に作成できます。使用するコードを選択し、右クリックして、コンテキスト メニューの [Export as Snippet] (スニペットとしてエクスポート) をクリックします。これにより、Code Snippet インターフェイスが読み込まれ、選択したコードがインポートされます。

統合されたコード スニペット エディタに加えて、Snippet Designer には Snippet Explorer ウィンドウもあります。これは、Visual Studio に組み込まれているコード スニペット マネージャのウィンドウより多くの機能を備えています。Snippet Explorer ウィンドウでは、1 つまたは複数の言語を指定してすべてのスニペットを一覧表示でき、ウィンドウにあるテキスト ボックスで結果をフィルタ処理できます。検索結果からコード スニペットを選択すると、そのコード スニペットのコードが表示されます。統合された Snippet Designer のエディタでコード スニペットを編集するには、コード スニペットを右クリックして [開く] をクリックします。

価格: 無償

www.codeplex.com/SnippetDesigner

fig03.gif

Visual Studio でのコード スニペットの管理 (クリックすると拡大画像が表示されます)

推薦図書

C# の新しいバージョンがリリースされるたびに、言語の新機能についての多くの書籍が出版されます。それらの本では、各新機能が追加された理由が説明され、その使用方法の例が提供されていますが、読者にはいくつかの疑問が残ることがよくあります。つまり、この新機能はどのようなときに使うと有効なのか、ベスト プラクティスを実装するには新機能をどのように使用するのが最善なのか、新機能を使用するときに隠れた落とし穴はあるのか、などの疑問です。

この種の疑問の答えを見つける場合に役立つのは、Addison-Wesley の Effective Software Development シリーズです。このシリーズで最初に手にしたのは Bill Wagner の『Effective C#』でした。2004 年に書かれた『Effective C#』では、C# Version 1.0 を有効に利用するための 50 の詳細なガイドラインが示されています。Bill は最近になって新しい本『More Effective C#』を書き、C# Version 2.0 および 3.0 に追加された言語機能を使用して、より良い C# コードを作成するための新しい 50 のガイドラインを示しています。たとえば、ジェネリックの使用については 10 個、C# 3.0 言語の拡張については 8 個、LINQ については 9 個のガイドラインがあります。

『More Effective C#』では、読者は既に C# およびジェネリック、LINQ、マルチスレッドなどの言語機能について習熟していることが想定されています。ジェネリックとは何かや、ラムダ式の構文などについては説明されていません。この本では、"IEnumerable データ ソースと IQueryable データ ソースの違い" のような具体的なガイドラインが示され、わかりやすい文章と役に立つコード スニペットでガイドラインの理由が詳細に解説されています。また、各ガイドラインは独立しており、先に別のガイドラインを読まなくても理解できます。つまり、興味のあるガイドラインや現在のプロジェクトに関連のあるガイドラインを拾い読みできます。

この本のページごとの情報量は驚くほどです。付記、図表、絵、余分な逸話、おもしろいサイド ストーリーは一切なく、文章を区切る余白もほとんどありません。大量の情報は非常に簡単明瞭な形式で提供されています。

『More Effective C#』は、ジェネリック、拡張メソッド、ラムダ式、匿名型、LINQ などの C# 言語機能に既に習熟していて、このような機能の最適な使用方法についてのガイドラインを知りたい熟練 C# 開発者には必読書です。

価格: 44.99 米ドル-

www.informit.com/esds

データ駆動型アプリケーションの応答性を改善する場合は、SQL Profiler や他のツールを使用して実行時間が最長のクエリを特定し、新しいインデックスを追加したり既存のインデックスを変更したりして問題のあるクエリを修正することがよくあります。しかし、ときとしてインデックスは部分的な解決策にしかなりません。

SQL クエリ自体を書き直してさらにパフォーマンスを改善できる場合もあります。でも、どこから手を付ければよいのでしょうか。

アプリケーションのソース コードに対して小規模な変更を段階的に行うための、実績のある方法論が既に存在します。それがリファクタリングです。リファクタリングは、プログラムの出力または機能をそっくり変更するのではなく、既存のソース コードを段階的に改善するプロセスであり、アジャイル ソフトウェア開発の中心となる作業です。

C# や Visual Basic などのオブジェクト ベースの言語ではリファクタリングが従来から使用されてきましたが、その概念は SQL にも適用できます。『Refactoring SQL Applications』(Stéphane Faroult および Pascal L'Hermite、O'Reilly、2008 年) では、データ駆動型アプリケーションの既存の SQL クエリ、ビュー、ユーザー定義関数 (UDF)、データ アクセス ロジックを作り直すことで、パフォーマンスを改善する方法のガイダンスが示されています。

『Refactoring SQL Applications』では、最初に、リファクタリングを実施する価値があるかどうかを判断するために行う、リファクタリングの影響分析について解説されています。この分析では、1 つのループ構造によって実行されている複数の SQL クエリがアプリケーションに存在するか、複数のクエリを 1 つのストアド プロシージャにパッケージ化できるか、などの質問に答えます。このような質問の答えを明らかにするには、データ駆動型アプリケーションについての深い理解が必要です。その理解は、部分的には、データベースの活動をログに記録して細かく調べることによって得ることができます。

リファクタリングのアドバイスに関しては 5 つの章が当てられています。最初の章では、UDF とビューのリファクタリングが解説されています。別の章では、SQL ステートメントのリファクタリングが取り上げられ、FROM 句の簡素化、どのような場合にサブクエリを使用するかについてのヒント、フィルタ条件を簡潔にする方法、その他の最適化に関するガイダンスが提供されています。また、データ駆動型アプリケーションとデータベースの対話のしくみを改善する方法が解説されている、リファクタリング作業に関する章もあります。

可能な場合はデータベースの集約関数を使用して、データ アクセス コードをループの外側に移動し、必要なすべてのデータを一度にフェッチすることで、パフォーマンスの大幅な向上が可能です。もう 1 つの章では、並列処理を使用して SQL クエリをリファクタリングする方法が示されています。リファクタリングの実践に関する最後の章では、SQL アプリケーションのリファクタリングを行うときにたずねる質問と調査する項目が示されています。

コードをリファクタリングするときは、リファクタリングの間に行う変更がプログラムの他の機能に影響を与えないようにすることが肝要です。リファクタリング後のコードで意図した出力が変わらずに生成されることを確認するために単体テストがよく使用されますが、単体テストはデータベースの結果を比較するには適していないことがあります。

著者は、SQL クエリをリファクタリングするときにカスタム テスト フレームワークを作成して使用する方法を紹介しています。この解説には、現実的なテスト データを大量に生成する方法、および元のクエリとリファクタリング後のクエリで返される結果セットが同等であることを検証するための別の技法が含まれます。

価格: 44.99 米ドル

oreilly.com

toolfigure 4.gif

Refactoring SQL Applications

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

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