ツールボックス
簡単な LINQ クエリ、優れた開発者になる、ログ記録の支援
Scott Mitchell
記載価格は 2008 年 7 月 14 日時点のものであり、変更されている可能性があります。このコラムに記載されている見解は、執筆者の個人的な見解であり、必ずしもマイクロソフトの見解を反映するものではありません。

目次
LINQPad で LINQ スキルを磨く
Microsoft® .NET Framework 3.5 の主要な追加機能の 1 つが LINQ です。LINQ とは、汎用的なデータ クエリ構文を提供するために設計されたクラスおよび言語拡張のセットです。LINQ to Objects、LINQ to XML、および LINQ to SQL を使用すると、配列とコレクション、XML ドキュメント、およびデータベース テーブルの照会を行えます。いずれの場合も、IntelliSense® やコンパイル時の型チェックのような多彩な機能を持つ類似の構文を使用できます。ただし、従来のプログラミングで主に SQL によるデータ照会を実施してきた開発者にとって、LINQ 構文の導入が多大な混乱をもたらす可能性があります。
LINQ の学習には専門書の購入をお勧めします。各章を念入り読み、それぞれの例を実演し、結果を確認してみてください。もちろん LINQ サンプルは Visual Studio® 2008 で実施できますが、ここでは、私のお気に入りのツール、LINQPad (Version 1.24) を紹介したいと思います。Joseph Albahari 氏が作成した LINQPad は、LINQ クエリの記述とテストを行える無料のスタンドアロン プログラムです。
LINQPad のユーザー インターフェイスは、4 つのペインで構成されています。左上のペインには、データベース サーバーの一覧が表示されます。この一覧を展開すると、データベースとそのテーブル、ビュー、およびストアド プロシージャが表示されます。右上のペインでは、クエリを入力して LINQ クエリをテストできます。LINQ クエリを直接入力するか、または C# や Visual Basic® の LINQ クエリを実行するコードを入力します。クエリ対象のデータベースを左上のペインから選択して、LINQ to SQL クエリの記述とテストを行うこともできます。
右下のペインには、クエリの結果が表示されます。ここには 3 つのビューがあり、結果、対応するラムダ式、および同等の SQL ステートメントが表示されます。左下のペインは、よく使用するクエリを整理するためのワークスペースになっています。このペインの [Samples] (サンプル) タブには、Albahari 氏の著書『C# 3.0 in a Nutshell』(O'Reilly、2007 年) から引用された 200 以上の C# および Visual Basic のサンプル LINQ が含まれています。LINQ クエリに対応する SQL ステートメントを確認できる機能とこれらのサンプルは、LINQ を初めて扱うユーザーにとって非常に貴重な学習ツールです。
LINQPad は、SQL Server® Management Studio の小規模な LINQ ベース実装と言えます。データをアプリケーションで表示する SQL クエリを記述する場合は、通常、Visual Studio で最初からクエリを記述するよりも、Management Studio で記述してから Visual Studio で自分のコードにコピー & ペーストする方が簡単です。なぜなら、Visual Studio からクエリをテストするにはアプリケーションの実行が必要だからです。同様に、LINQ クエリの記述とテストは Visual Studio よりも LINQPad で行う方が簡単です。
LINQPad エディタでは、Visual Studio と同じように、キーワード、変数、文字列、およびコメントについてコードの色分けが行われ、エラーに下線 (赤と緑の破線) が引かれますが、IntelliSense はサポートされていません (将来の拡張として計画されています)。IntelliSense はありませんが、LINQPad はその直感的で軽いユーザー インターフェイス、多数の機能、およびたくさんのサンプルにより、LINQ クエリの学習、記述、およびテストのための優れたツールとなっています。
価格 : 無料
図 5 LINQPad.net ユーザー インターフェイス (クリックすると拡大画像が表示されます)
注目のブログ
私は日々の作業の中で、より優れた開発者になるという目的意識を持ち、技術的な競争力およびプログラミング スキルの向上に努めています。尊敬を集める開発者のブログでコーディングのヒントや秘訣を見つけたり、市販のコンピュータ書籍から知識を得たりします。オンライン フォーラムに質問や回答を書き込むこともあります。しかし、より優れた開発者になるには、新しい技術的なスキルの獲得だけでなく、もっと別の能力も必要とされるようです。Rob Waling 氏のブログにそのヒントがあります。
Rob 氏は、.NET Framework に関連するさまざまな分野で仕事をしてきました。現在は、小規模な開発企業を経営し、各種 ASP.NET アプリケーションのコンサルティングと販売を手がけています。彼は熱心なブログ作成者でもあります。ほとんどの開発者向けブログでは、最新技術の検証やプログラミングのヒントや秘訣の提供が行われていますが、Rob 氏のブログはそうではありません。彼のブログのユニークな点は、開発者としての成功に必要なビジネスおよび人間関係の側面を取り上げていることです。より優れた開発者になるための 11 の項目で構成されているシリーズでは、さまざまな領域にわたる解説が掲載されています。チームで構築を行うこと、プロジェクトや会社での自分の役割を理解すること、自分の長所と短所を把握すること、同僚のコードを建設的に評価することなど、各項目が示唆に富んだ内容であり、よくまとめられています。それぞれの開発者が肩書きや経験に関係なく、この読み物から何かを得ることができるでしょう。
Rob 氏のブログは、フリーになることを検討している開発者や、自分のアイデア、ツール、またはアプリケーションを製品化することに興味のある開発者にとって価値のある情報が満載です。個人事業を組織化する場合のアドバイス、提供する時間と製品に対する請求金額を算出するガイドライン、フリーランス開発者または小さな独立系ソフトウェアとして成功を勝ち取るために役立つお勧めのツールとビジネス プロセスが紹介されています。
重要な情報、警告、およびエラーをログに記録する
運用環境でエラーが発生した場合に重要なことは、開発者が後でエラーを調べて修正できるように、詳細がログに記録されて永続的なストアに格納されていることです。この件については、2008 年 4 月号の「ツールボックス」(msdn.microsoft.com/magazine/cc500592.aspx を参照) で取り上げ、ASP.NET Web アプリケーションでエラーを自動的にログに記録する 2 つの異なるシステムを検証しました。それらのシステムとは、ASP.NET 状態監視システムおよびエラー ログのモジュールとハンドラ (ELMAH: Error Logging Modules and Handlers) です。では、デスクトップ アプリケーションではエラー詳細のログ記録にどのようなツールを利用できるでしょうか。エラー以外の情報のログ記録についてはどうでしょうか。多くの行政、金融、および医療のアプリケーションでは、システムにアクセスした人物および参照または変更されたデータに関する情報を記録する監査ログの保持が必要とされています。
.NET ベースのアプリケーションに利用できるロギング ライブラリが数多く存在していますが、その中で最も成熟度が高く、広範に利用されているのが Enterprise Library と log4net です。Enterprise Library は、Microsoft patterns & practices グループにより作成されたアプリケーション ブロックのセットです。各アプリケーション ブロックは、ログ記録、データ アクセス、例外処理など一般的なエンタープライズ開発タスクの実行を支援するクラスのセットです。Logging Application Block を使用すると、任意の数のログ ストアに情報を簡単に記録できます。
アプリケーションから情報をログに記録するには、最初に、Logging Application Block を構成し、少なくとも使用するトレース リスナを指定する必要があります。トレース リスナは、ソースから情報を受け取って格納するオブジェクトであり、ログ エントリを特定のログ ストアに書き込むためのメカニズムです。Enterprise Library に付属する組み込みのトレース リスナを使用して、Windows® イベント ログ、データベース、テキスト ファイル、電子メール メッセージなどにログ エントリを格納することができます。また、自分でカスタム トレース リスナを作成して組み込むこともできます。
Logging Application Block の構成には、カテゴリ、フィルタ、およびフォーマッタを含めることもできます。カテゴリは、"データ アクセス エラー" や "デバッグ メッセージ" のようなログ エントリの種類の分類を定義する場合に使用できます。各ログ エントリは、カテゴリだけでなく、優先度や重要度などさまざまなプロパティにも関連付けられます。たとえば、ステージング サーバーで、優先度が 5 以上のエントリのみをログに記録する場合があるでしょう。運用サーバーで、"デバッグ メッセージ" のカテゴリに属するログ エントリを省略する場合もあるかもしれません。フィルタを使用して、記録するログ エントリを制限することもできます。また、フォーマッタを使用すると、ログ エントリの詳細を記録するときにテキストにシリアル化する方法をカスタマイズできます。
アプリケーションを構成した後で、Logging Application Block の API を使用してログ エントリをプログラムで作成します。たとえば、例外の詳細をログに記録するには、新しい LogEntry オブジェクトを try/catch ブロックの catch 部分に作成し、例外の詳細がキャプチャされるように LogEntry のプロパティを設定します。さらに、Logger クラスの Write メソッドを呼び出すことによりエントリをログに記録し、LogEntry インスタンスに渡します。次に、Logging Application Block では、ログ エントリをフィルタ、カテゴリ、およびフォーマッタに対して評価してログ エントリを格納するかどうかを判断し、格納すると判断した場合にはどのようにフォーマットするかを決定します。
Log4net は、Apache Software Foundation により管理されている、オープン ソースのロギング ライブラリです。これは log4j の .NET への移植であり、Java で記述されたアプリケーション用のロギング ライブラリです。Logging Application Block と log4net は使用している用語が異なっている場合もありますが、Logging Application Block の中核となる概念の多くが log4net でも採用されています。たとえば、log4net では、ログ エントリは (トレース リスナではなく) アペンダと呼ばれるオブジェクトによって記録されます。log4net には、Enterprise Library よりも多くのアペンダが付属しています。ADO.NET データ ソース、ASP.NET トレース、コンソール ウィンドウ、Windows イベント ログ、メモリ内バッファ、電子メール メッセージ、テキスト ファイルなど、さまざまなソースにログ記録するためのアペンダがあります。log4net では、Logging Application Block のフォーマッタに似たフィルタとレイアウトが提供されています。
log4net の構成の中で、複数のロガーを定義できます。Logging Application Block (および他の多数のロギング システム) との主な相違点の 1 つとして log4net に備わっているのが、ロガーの階層を作成する機能です。アプリケーション内から情報をログ記録するには、API の GetLogger メソッドを呼び出し、アクセスするロガーの名前またはタイプを渡します。ロガーは、呼び出されたときに特定のレベルのログ エントリを作成するさまざまなメソッドを提供します。DEBUG、INFO、WARN、FATAL などの値を持つレベルは、ログ エントリの優先度を示します。特定のロガーで所定のレベルを持つログ エントリにのみ応答するように、log4net の構成で指定できます。
ログ記録は、どのようなアプリケーションにおいても重要な側面です。少なくとも、エラーの詳細をログに記録する必要があります。また、デバッグ時や監査記録にもログ記録は役立ちます。Logging Application Block と log4net は、新しい .NET 対応アプリケーションで、または既存のアプリケーションに統合して使用できる、成熟したオープン ソースのロギング システムです。
価格 : 無料 (オープン ソース)
Enterprise Library 4.0 を構成する (クリックすると拡大画像が表示されます)
すべての価格は {取得日} の時点で確認された額です。