連載
» 2017年09月05日 05時00分 公開

Dev Basics/Keyword:LINQPad

LINQPadはC#などで書いたコードの動作確認に利用できる軽量なアプリ。LINQを使うコードでも使わないコードでも動作確認でき、使い勝手がよい。

[かわさきしんじ,Insider.NET編集部]
「Dev Basics/Keyword」のインデックス

連載目次

 LINQPadは、C#/Visual Basic/F#のプログラムを手軽に記述、実行して、その動作を確認するために使えるデスクトップアプリだ。その名の通り、データベースに対して「LINQ」を発行することももちろん可能だが、通常の式や文、プログラムの動作確認を行うのにも使える。こうしたことから「The Ultimate .NET Scratchpad」と称している。

LINQPadの使い方

 LINQPadは公式サイトのダウンロードページからダウンロードできる。無償で使えるFreeエディションに加えて、有償のPro/Developer/Premiumエディションが存在する。エディションごとの機能差については「Purchase」ページを参照されたい。本稿では無償で使えるLINQPad 5 Freeエディションを使用して、LINQPadをC#コードの実行確認ツールとしての使い方にフォーカスする。LINQPad 5は.NET Framework 4.6以降を対象としており、C# 7もサポートしている。.NET Framework 4/4.5向けにはLINQPad 4があり、LINQPad 5と4をサイドバイサイドでインストールすることも可能だ。

 LINQPadを起動すると、次のような画面が表示される。

LINQPadの起動画面 LINQPadの起動画面

 左上のペーンはデータベースへの接続を管理するために使用する。左下の2つのタブのうち、[My Queries]タブは自分が作成、保存したクエリにアクセスするために使える。[Samples]タブにはLINQPadのチュートリアルやC#の新機能を理解するためのクエリが標準で提供されている(ここに自分でサンプルを追加することも可能)。なお、LINQPadでは、記述するコードを「クエリ」を単位として扱う。ただし、これはいわゆる「クエリ」ではなく、LINQPadで記述、実行できるコードの総称である。

 ウィンドウの右半分がコードを入力したり、その実行結果を確認したりするための部分となる。ここでは、[Samples]タブにあるコードを幾つか実行しながら、その動作を見てみよう。例えば、以下は[Samples]タブにある[A simple query expression]を選択して、これを実行(評価)したところだ。

文字列に含まれる単語をその長さでソート 文字列に含まれる単語をその長さでソート

 簡単にUIの説明をしておこう。[Execute]ボタン(緑色の横向きの三角形)と[Cancel]ボタン(赤い円)は、プログラムを実行/停止するものだ。その隣にある2つのボタンは、実行結果(評価結果)をリッチテキストとデータグリッドのどちらの形式で表示するかを指定するものだ。上ではselectした結果がリッチテキスト形式で表示されている。実行結果をデータグリッドに表示するようにすると、次のような結果になる。

実行結果をデータグリッドに表示 実行結果をデータグリッドに表示

 selectした結果がIEnumerable<string>型であることも分かる。その隣の[Language]ドロップダウンでは、入力するコードの種類を指定する。C#に関しては以下のものを選択可能だ。

  • C# Expression: C#の式。単独のC#式を記述。末尾にセミコロンは不要
  • C# Statement(s): C#の文(複数行も可)。Mainメソッドの内部を記述するのと同様。コードは上から順に実行される。メソッドの定義は基本的にはできない(C# 7のローカル関数は定義可能)
  • C# Program: C#のプログラム。mainメソッドがあり、それがコード実行のエントリポイントとなる。クラスを別途定義することも可能

 Visual Basicでも同様だ。その他にはSQL、ESQL、F#の式/文を指定できる。

 [Connection]ドロップダウンには、左上のペーンでデータベースに接続している場合に、アクセスするデータベースが一覧されるので、ここから使用するデータベースを選択する。例えば、以下は[Samples]タブで[What about LINQ to SQL!]を選択し、[Connection]ドロップダウンでNorthwindを選んで、コードを実行してみたものだ。

LINQPadでNorthwindデータベースにアクセスするコードを実行したところ LINQPadでNorthwindデータベースにアクセスするコードを実行したところ

 ウィンドウ下部にはコードを実行(評価)した際の結果や、コードをILにコンパイルした結果などが表示される。このときには[Results]タブや[Output]タブに、式の評価結果やコンソールへの出力結果、Dumpメソッドでオブジェクトの内容をダンプした結果などが表示される。文やプログラムを実行してみる場合には、プログラマーの側で値を知りたいものを明示的にコンソールに出力したり、ダンプしたりする必要がある点には注意しよう(式であれば、その評価結果がダイレクトに[Results]タブに表示される)。

 例えば、次のようなコードを[C# Statement(s)]として実行してみよう。

var s = "Hello World";
Console.WriteLine(s);
s.Dump();

var l = s.ToArray();
l.Dump();

サンプルコード

 これは文字列をコンソールに出力/ダンプ/配列に変換してダンプするだけのサンプルだ。これを実行すると、次のようになる。

実行結果 実行結果

 Dump拡張メソッドは非常に便利なメソッドだ。文の実行に際して、オブジェクトに対してこのメソッドを呼び出すだけで、その値を詳細な形で表示できる。上のサンプルコードでは、文字列を文字配列にした結果が分かりやすく表示されている。これはシンプルな例だが、次のように入り組んだオブジェクトでもその内容をクリアにダンプしてくれる。

var foo = new {
  Name = "insider.net",
  Array = new int[] { 1, 2, 3, 4, 5 },
  Date = DateTime.Now
};

foo.Dump();

ちょっと複雑な構造を持つオブジェクトのダンプ

 実行結果は次のようになる。

実行結果 実行結果

 さらにこの結果をグリッドビュー形式で別タブに表示することも可能だ(これには右向きの白い三角形をクリックすればよい。実際の画面は省略する)。LINQPad 5ではC# 7のローカル関数も利用できる。例えば、以下のようなコードをLINQPad 5では[C# Statement(s)]として入力して、実行できる(実行結果は割愛する)。

int dbl(int n) => n * 2;
Console.WriteLine(dbl(2));

ローカル関数

 [Language]ドロップダウンから[C# Program]を選択すると、自動的にMainメソッドが用意されるので、その内部にメインとなるコードを、外部にMainメソッドで使用するメソッドやクラスを記述していく。

void Main()
{
  var f = new Foo() { Name = "Insider.net", Id = 100 };
  f.Dump();
  Hello();
  Console.WriteLine(f.Greet());
}

static void Hello() {
  Console.WriteLine("Hello from static method");
}

class Foo
{
  public string Name { get; set; }
  public int Id { get; set; }
  public string Greet() => $"Hello {Name}";
}

[Language]ドロップダウンで[C# Program]を選択すると、Mainメソッドをエントリポイントとするプログラムを記述できる

 ここではMainメソッドで使用するために、HelloメソッドとFooクラスを定義し、それらを利用したコードを書くようにしている。少し入り組んだコードの動作確認をしたければ、[C# Program]としてコードを入力するのがよいだろう。

 このように、式を書くか、文を書くか、プログラムを書くかで、できることに違いがある点には注意しよう。ちょっとした動作を確認するだけなら、式か文を記述するだけで十分だろう(特にLINQPad 5ではC# 7のローカル関数を使えるので、ある程度の構造化が可能だろう)。また、文やプログラムを記述する場合には、値を知りたいものに対してDumpメソッドを呼び出す必要がある点も忘れないようにしよう。


 LINQPadはC#/VB/F#などのコードがどのような動作をするのかを、簡単に確認できるツールだ。非常に軽量なデスクトップアプリなので、「あのコードって、どんな結果になるかな?」と思ったときに、Visual Studioを起動して、コンソールアプリを新規に作成して……とするよりもはるかに手軽にその動作を確認できる。.NET開発者であれば必携のツールといえるだろう。また、有償版であれば、さらに高度な機能も使えるようになる。

参考資料


「Dev Basics/Keyword」のインデックス

Dev Basics/Keyword

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。