みんな大好きコンソールアプリケーションの新機能

この記事はC# Advent Calendar 2012 : ATNDへの参加エントリーです。

昨日はAILightさんの「dynamic型を利用した時のパフォーマンス調査」、

そしてxin9leさんの「拡張DisplayName属性」でした。

 

街はWindowsストアアプリだのALMだのAzureだのWindows Phone 8だのASP.NET MVC 4だのSignalRだのと大騒ぎですが、なんと言ってもクリスマスイヴといえばコンソールアプリですよね?w

というワケで.NET Framework 4.5になってもいまだライブラリ検証などでは大活躍!

コマンドライン大好きな僕らの味方、コンソールアプリケーションの新機能について紹介したいと思います。

 

コンソールアプリケーションといえば、主役はConsoleクラスですが、.NET Framework 4.5になって新機能が登場しています。

Consoleクラスの新機能

リダイレクトの検出を行うAPIが追加されています。

  • Console.IsInputRedirected
  • Console.IsOutputRedirected
  • Console.IsErrorRedirected

通常のコンソール出力を行う場合は特に必要ないかもしれませんが、たとえば色つきのテキストをコンソールに出力する場合など、リダイレクト時にはあまり必要とならない入出力を行う場合の判定用などに利用できそうです。

そこでせっかくなので確認用のサンプル・コード。

   1:      class Program
   2:      {
   3:          static void Main(string[] args)
   4:          {
   5:              if(Console.IsOutputRedirected == false) Console.ForegroundColor = ConsoleColor.Red;
   6:              Console.WriteLine("Merry Christmas!");
   7:              Console.ReadLine();
   8:          }
   9:      }

 

実行結果は以下のような感じですね。

image

つづけてコマンドライン引数でファイルに対する出力を行うリダイレクトを指定します。

プロジェクトのプロパティを開いて、デバッグタブでコマンドライン引数にリダイレクトの指定を記述します。

image

実行結果は以下のようになりました。

image

もちろん、画面(コンソール)には何も表示されていません。

そして、ソリューションエクスプローラーで「すべてのファイルを表示」ボタンをクリックしてDebugフォルダを確認すると…。

image

ファイルができていますね。 もちろん、中身は…。

image

ちゃんと出力されていますね。

もっともForegroundColorはコンソール出力に対する前景色の指定なので、リダイレクトされた場合のファイルの出力には影響はないのですが、今回は不要な処理を省くという目的で利用しています。

リダイレクトされた場合のみヘッダーを表示する・・・といった具合に特定の用途の判定に利用するには便利そうですね。

 

せっかくなので、Consoleクラスのメンバーも少し。

そして、一緒にConsoleクラスのいくつかの機能もご紹介しましょう。

上記のソースコードにもあるForegroudColorプロパティではConsoleの表示色を設定できます。

MS-DOS時代の色付けはESCシーケンスを駆使したものですが、今は簡単ですねー。

そして、ForegroundができるということはBackgroundもできます。

   1:      class Program
   2:      {
   3:          static void Main(string[] args)
   4:          {
   5:              Console.BackgroundColor = ConsoleColor.Red;
   6:              Console.WriteLine("Merry Christmas!");
   7:              Console.ReadLine();
   8:          }
   9:      }

実行結果は以下の通りです。

image

確かにコードの通り実行されているんですが、あまり派手ではありませんでしたね。

そこで、こんなコードを追加してみました。

   1:          static void Main(string[] args)
   2:          {
   3:              Console.BackgroundColor = ConsoleColor.Red;
   4:              Console.Clear();        //追加
   5:              Console.WriteLine("Merry Christmas!");
   6:              Console.ReadLine();
   7:          }

実行結果は以下の通りです。

image

ちょっと派手すぎましたかね(^^;

というワケでよいクリスマスをお過ごしください!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

“Pinning gives your site a front row seat.”というWebサービスが公開されています。

ネタ元:MICROSOFT GULF COMMUNITY BLOG

“Pinning gives your site a front row seat.”というWebサービスが公開されています。

image

““Pinning gives your site a front row seat.”というWebサービスが公開されています。” の続きを読む

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

Introducing Windows 8: An Overview for IT Professionalsが公開されています。

Introducing Windows 8: An Overview for IT Professionals(英語)が公開されています。

“Introducing Windows 8: An Overview for IT Professionalsが公開されています。” の続きを読む

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

開発を楽しくするVisual Studio Achievements

この記事はVisual Studio Advent Calendar 2012の9日目です。

みなさん、Visual Studio Achievementsってご存じでしょうか?

image

Visual Studio AchievementsはVS2010からあった拡張機能の1つなのですが、VS2012版も登場したようですのでこの機会にご紹介しましょう。

 

どのような機能拡張かというと・・・Four Squareのチェックイン時に取得できるバッチ機能のような感じでVisual Studioの持ついろんな機能を利用して一定条件を満たすするとachievement(実績)としてバッチを取得できます。

achievementの取得条件はさまざまです。

  • Windows 8上でVSを起動したときに取得できる「BRAVE NEW WORLD」
  • Visual Studioの機能拡張を5つ以上インストールしていると取得できる「Extensions Junkie」
  • 1クラスに100フィールド作成してFxCopでチェックした「Field Master」
  • 1ソリューションに50プロジェクト作成の「Complex」
  • Azure のPage Blobを利用して得られる「Attack of the Blob」
  • 土曜の夜にコーディングしていると得られる「Lonely」

などなど、簡単なものから「普段はちょっとあまりやらないなぁ」と思うようなもの、ジョークっぽいものなどとさまざまです。

 

入手・インストール方法は通常の機能拡張と同じですので簡単です。

Visual Studio 2012を起動してメニューの[ツール]→[機能拡張と更新プログラム]を選択します。

image

オンラインを選択してから「Achievement」で検索すると「Visual Studio Achievements For VS 2012」が見つかりますので、選択して「ダウンロード」。

image

ダウンロードが終わるとVSを再起動します。

再起動するとVisual Studio Achievementsのダイアログが表示されますのでMicrosoftアカウントでSign Inします。

ここにも書かれていますが、Visual Studio AchievementsはC#とVBのみ機能します。あとFxCopを使うものもありますので全取得を目指す人は忘れずにインストールしましょう。

image

サインインすると以下のような画面が表示されるので「Yes! Authorize this!」をクリックとするとオーサライズされてバッチの取得が開始します。

image

インストールとオーサライズが完了するとバッチを取得するたびに以下のような通知ウインドウが表示されます。

image

自分が取得したachievementsは[ツール]→[achievements]で確認できます。

image

image

あとはコーディングしてたくさんバッチを集めて下さい。

 

もちろん、やめたい場合は[ツール]→[機能拡張と更新プログラム]から無効化やアンインストールが行えます。

 

このような形であなたのVisual Studioジャンキー度を測れるようですよw

取得できるバッチの種類はVisual Studio Achievementsのサイトで確認できます。 (未公開のバッチもあるのかな?)

バッチを取得すると取得したバッチに応じたポイントが付与される仕組みのようで、上記のサイトでポイントの合計のランキングも確認できるようです。

開発を少し楽しくアドインですので試してみてはいかがでしょうか?

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]

Windowsストアアプリで利用できるライブラリの種類

このポストはWindows Store apps Advent Calendar 2012 8日目の記事です。

 

今日はWindowsストアアプリのライブラリについて少し書いてみたいと思います。

ちなみに私は.NETが専門なのでこの記事ではC++やHTML5については割愛させていただきますね(^^;

さて、それでははじめましょう。

 

ライブラリというと、アプリの中から利用できる機能や再利用を目的としたロジックの集まりですね。

アプリはライブラリを用いることで、重複するコードの記述を避けて再利用を行ったり、ロジックに対して意味的なグループを構成することで整理整頓したりといった場面で用いられる仕組みであることはご存じかと思います。

ひとくちにライブラリといっても、Windowsストアから利用できるライブラリには以下の3種類があります。

  • Windowsランタイムコンポーネント
  • クラスライブラリ(Windows ストア アプリ)
  • ポータブルクラスライブラリ

これらは利用目的に合わせて選択することができるようになっています。

どのような形で使い分ければよいか、順に確認してみましょう。

 

Windowsランタイムコンポーネント

Windowsストアアプリは【XAML+C++】【XAML+C#/VB】【HTML/CSS/JavaScriot】という3種類の言語の組み合わせで開発ができることはご存じかと思います。

WindowsランタイムコンポーネントはWinRT環境のこれらの言語間で再利用できるコンポーネントになります。

通常・C++やC#・VBそしてJavaScriptは特別な仕組みを持たない限りは直接これらのロジックを利用することはできません。

しかし、Windowsストアアプリの基盤であるWinRTにはこれらの相互運用を実現するためWinRT用の特殊な型システム言語プロジェクションという機能が用意されています。

これらの仕組みが規定する制約の上で作成されたロジックであれば、異なる言語間で再利用を行うライブラリの作成が可能です。

このあたりの制約は異なる言語間で利用するので致し方ないところではありますね。

つまり、種類のコンポーネント(ライブラリ)を利用しようという場合は、これらの型システムや言語プロジェクションなどの制約を受けることに注意が必要になります。

この制約については以下のページに記載があるので参考までに・・・。

C++ および Visual Basic での Windows ランタイム コンポーネントの作成
日本語ページ(英語はC#となっているのに、日本語はなぜかC++となっている・・・)
http://msdn.microsoft.com/ja-jp/library/windows/apps/br230301.aspx
Creating Windows Runtime Components in C# and Visual Basic
英語ページ(個人的にはこちらのほうがわかりやすいような・・・)
http://msdn.microsoft.com/en-us/library/windows/apps/br230301(v=VS.110).aspx

 

クラスライブラリ

Windowsランタイムコンポーネントのように異なる言語間での再利用が目的でないのであれば、クラスライブラリとして構成するをお勧めします。

WinRT for .NET環境だけでいいのであれば、クラスライブラリの中でもっとも自由に利用できるライブラリです。 相互運用などの制約はあくまで.NET環境の中で考慮すればよいため、言語上の規約に沿ったロジックであれば問題なく利用できます。

もちろん、利用方法は.NET Frameworkの時に行われていた方法と同じように利用できます。

 

ポータブルクラスライブラリ

上記のようにクラスライブラリはWinRT for .NET環境の中においては、一番自由度の高いライブラリですが、弱点もあります。

たとえば、.NETファミリーのフレームワークには通常の.NET Frameworkの他にもSilverlight、Windows Phone、XBoxといくつかの基盤があります。

これらのそれぞれ基盤では利用できるクラスライブラリの差異などもあり、基本的に異なるフレームワークで作成されたクラスライブラリは利用できません。

しかし、もともと.NETでは共通中間言語(いわゆるCIL)に一度変換されて言語やプラットフォーム間の差異を吸収する仕組みを持ちます。

CIL自体はどの基盤でも共通なので、対象となるフレームワーク特有の機能・ライブラリを利用していない場合、ソースコードレベルであれば再利用は可能です。

つまり、ソースコードのコピーを行って、その基盤に対応するクラスライブラリを作成することで再利用することはできますが、手間ですよね?

そこで.NET 4.5からはポータブルクラスライブラリ(PCL)という仕組みが導入されています。

PCLは異なる.NET系フレームワーク間やバージョン間で相互利用できるライブラリを作成することができるようになりました。

これらは利用先のフレームワークの種類やバージョンの指定が行えますので、対象となる種類・バージョンを狭めることで共通利用できるライブラリの種類を増やすことも可能です。

image

 

ということで、必要に応じてクラスライブラリは使いわけましょう!

ツイートツイート
Facebook にシェア
このエントリーをはてなブックマークに追加
[`evernote` not found]