連載:C# 4入門最終回 C# 4の使いどころはどこか株式会社ピーデー 川俣 晶2011/03/10 |
|
|
■乗り換え可能なTFS 2010
そもそも、ソース・コードの世代管理を行うために、マイクロソフトは社内用ツールを持っていた。これは、SCCSやRCSよりも良くできている(CVSはまだ生まれていない時代)と豪語する優れたツールである。これを使いたいという要望は、(その存在を知っている少数のユーザーより)出されていたが、なかなかそれは実現されなかった。かなり待たされた後で出てきたのが「Microsoft Delta」という製品であるが、日本語版は発売されず、しかも登場があまりにも遅すぎて、すぐ色あせてしまった。
後継ソフトが望まれたものの、マイクロソフト自身は開発せず、出来のよいサードパーティ製品を会社ごと買い取ってマイクロソフトが販売した。これがVisual SourceSafeである。そのため、マイクロソフトのVisual SourceSafeは最初からバージョン“3”で登場している。それ以前はマイクロソフト製品ではなかったわけである。
ちなみに、現在のVisual Studioの祖先である「MS-C」もバージョン3から登場しているように見えるが、これは事情が違う。MS-Cのバージョン1と2は、自社開発ではなく「Lattice C」のOEMであったのだ。マイクロソフト自ら最初に開発した独自ソフトがMS-Cのバージョン3である。
しかし、Visual SourceSafeも賞味期限は長くはなかった。すぐに機能が色あせてしまったのである。ところが、後継ソフトであるTFSが高価で機能も大幅に多すぎ、インストールも難しいため、簡単に移行できないという問題が発生してしまった。そのため、Visual SourceSafeは多くの問題をはらみつつも延命してしまったのである。多くの開発者は、不満を抱えつつもVisual SourceSafeを使い続けている。
筆者もそのような開発者の1人であった。この風向きが変わってきたのは、やはり2010年に入ってからだ。
TFS 2010は大幅に簡素化されたインストール機能と低価格提供を通じて、ようやく本格的にVisual SourceSafeの置き換えの対象になるレンジに降りてきた。実際、TFS 2010のインストールはとても簡単である。セットアップを走らせるだけで、ほとんど終わってしまう。筆者はわざわざ別途専用のSQL Serverをインストールしたので、それに要した手間の方が大きいほどであった。
実は、このことの波及効果は大きい。なぜなら、TFS 2010との統合機能はVisual Studio 2008にも2010にも提供されるが、完全な機能性は2010にしか提供されないのである。その結果として、古いプロジェクトは2008のまま残し、新しいプロジェクトだけ2010で開発するといった形態が取りにくく、Visual Studio 2010がどうしても標準になってしまう。さらにその結果として、Visual Studio 2010が標準になると、フレームワークのバージョンにこだわらないソフトはすべて.NET Framework4対応で作成してしまうという状況に陥るわけである。そして、それがある程度の期間続くとそれなりに利用実績ができてしまい、なおさら旧バージョンが使いにくくなるのである。
つまり、Visual SourceSafeからTFS 2010に乗り換える決心が付けられる時期がやっと来たものの、その決心はVisual Studio 2010と.NET Framework 4の全面利用も一緒に連れてきてしまうというわけである。
■Visual Studio 2010、C# 4、.NET Frameworkのメリット
しかし、話はまだ終わらない。
実は、Visual Studio 2010そのものにも誘惑がある。例えば、IntelliSenseで中間一致もヒットするといった使い方は意義が大きい。具体例を挙げると、XmlWriterクラスは従来のIntelliSense泣かせの名前付けをしていた。「Write〜」で始まるメソッドが膨大だからだ。つまり、“Write”と最初に打たねば実質的にメソッドを選別できなかったのだ。
例えば、以下の3つまで候補を絞り込むために、従来は“WriteStar”と9文字を打つ必要があった。
- WriteStartAttribute
- WriteStartDocument
- WriteStartElement
しかし、Visual Studio 2010では中間一致も有効なので、“Star”の4文字だけで候補をこれだけに絞り込める。
そして、そういうメリット故にVisual Studio 2010を常用するようになると、自然にC# 4も標準になってしまう。
では、本当にそれだけがC# 4を使う理由なのだろうか。
実際、パラレルの機能も次バージョンでの非同期処理の強化を待たないと使いにくそうだし、ダイナミックといっても趣味じゃないプログラマーも多いし、Officeとの連携も利用者の立場に強く依存するメリットだ。
実際に、筆者もそれらの機能は実際の開発でほとんど使用していない。
しかし、C# 4の機能を使用していないわけではない。
実際には、引数の省略という機能には大きな恩恵を受けている。従来なら、引数違いで複数のメソッドを並べる場面で、メソッドを1つに減らせるケースが増えてきたのだ。引数の数が違うというだけでメソッドのバリエーションをそろえるのは意外と面倒でつまらない作業だが、それを丸ごとカットできる。これはありがたい特長だ。しかも、ほとんどのメソッドで同じ値を渡すだけの形式的な引数もすべて省略できて、ソース・コード全体がすっきりする。本当に使い込んで手放せなくなった機能はこれである。
では、C# 4で使えるようになる.NET Framework 4に、これはという機能はあるのだろうか。
意外なことに、思いがけないところに結構ある。目玉の新機能、新クラスよりも、昔からある何ということのないクラスであったりする。
例えば、筆者がよく活用するのが以下のメソッドだ。
- StringクラスのIsNullOrWhiteSpaceメソッド
このメソッドは文字列がnullかホワイト・スペースだけならtrueとなる。なぜこのメソッドがそれほど便利なのだろうか。
実は、汎用的なメソッドを書いていて困るのが「無効データ」の扱いである。というのは、プログラムから呼び出す際はnullで示すことが多いが、ユーザーからの入力を受け付ける場合は長さゼロの文字列であることが多いからだ。しかも、間違ってスペースだけを入力してあるからといって、それにデータを入力したという意志はたいていの場合ない。つまり、「null」も「空白だけの文字列」も「長さゼロの文字列」も一律に無効扱いしたいのだが、それを判定する簡単な方法がなかった。しかも、手順を誤るとすぐ例外になる。nullなら文字列の中身は調べられないのである。
ところが、このIsNullOrWhiteSpaceメソッドが1つあれば、その面倒な判定が1つで終わる。名前は長いが、IntelliSenseを使えばあっという間に入力できる。楽なものである。使えばコードは短くなるし、潜在的な危険も消える。使い勝手は非常によい。些細(ささい)なことだが、使い込むと手放せないよい機能である。しかも、これはほんの一例でしかない。
以上をまとめると、結論はすでに述べたとおり、周辺を含めてどこを切ってももうC# 4は手放せない。すでに常用して染み付いている。何か特別な理由がない限り、旧バージョンを使うこともなくなった。では、その“特別な理由”について考えてみよう。
C# 3.0でもよい場合
C# 3.0を使うという選択はまだそれほど悪くはないと思う。なぜなら、ラムダ式やLINQなど、短く書くためのキー技術はすでに提供されているし、実行環境についても.NET Framework 3.5がOS標準で提供されているケースも多い。安全性や汎用性も高ければ、実績も豊富である。
また現時点では、C# 3.0を前提に開発を始めてしまった進行中のプロジェクトがあり得る時期である。おいそれとは前提を変えられないかもしれない。
C# 4への移行もそれほど難しくないという意味で、まだC# 3.0という選択はあってもよいと思う。
しかし、本当の価値はVisual Studioの動作スピードの差にあるのかもしれない。Visual Studioは動作の際に要求されるリソースが多く、旧版よりも新版の方がCPUやメモリを食う傾向にある。このため環境が同じなら、動作が重くなってしまう可能性がある。もちろん、開発効率が高いから重くなっても移行する価値があるのだが、度を超えると苦痛かもしれない。そういう場合に、Visual Studio 2008+C# 3.0という選択はありかもしれない。
C# 2.0でもよい場合
Visual Studio 2005+C# 2.0の世代まで戻ることは、筆者としてはあまりお勧めしない。というのは、LINQやラムダ式といった、コードの構造を決定するカギとなるような基本的な機能に多くの欠落があり、コードの書き方に大きな制約が出るからだ。そのため、Web上のサンプル・コードなどをそのまま取り込んで利用できない可能性も大きい。
しかし、それでもジェネリックは導入されているので、最低限の互換性だけはあるといえる。例えば「List<T>クラス」を使ったソース・コードはC# 2.0でもC# 4でもコンパイルして実行できる可能性がある。つまり、C# 2.0用として書いたソース・コードが資産としてC# 4でも活用できる可能性がある。いまからC# 2.0用として書いても、そのコードに最低限の再利用できる資産価値は含まれる。
C# 1.Xはもうやめよう
C# 1.0/1.1の世界である。つまり、Visual Studio .NET 2002/2003の世界である。
ここまで戻ることはあまり意味がない。この世界はLINQやラムダ式がないどころか、ジェネリックもないのでコレクションの互換性すらない。コレクションの挙動が同じではないので、機械的な置き換えすらできない。もちろん、ソース・コードの互換性は取られているので、この世代のコレクションを使用したソース・コードをC# 4でコンパイルして実行できる可能性は十分にあるのだが、新世代のソース・コードとの溝は大きい。
INDEX | ||
C# 4入門 | ||
最終回 C# 4の使いどころはどこか | ||
1.C# 4をなぜわたしは使うのか | ||
2.TFS 2010、VS 2010、C# 4のメリット/3.0、2.0でもよい場合/C# 1.Xはもうやめよう | ||
3.分水嶺はどこにあるのか/パラダイムはひっくり返った/もう1回ひっくり返る | ||
「C# 4入門」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|