まずは.NET Framework 4.6.1をターゲットとするコンソールアプリを作り、先ほど見たMyBrainfuckLibプロジェクトへの参照を追加する。実際に記述したコードは以下の通りだ。
using static MyBrainfuckLib.MyBrainfuck;
using static System.Console;
…… 中略 ……
static void Main(string[] args)
{
string i_buf = "++++++++[>++++++++<-]>.++++++++ +.++++++++++ +.";
WriteLine(ExecuteBrainfuckCode(i_buf));
ReadKey();
}
これは「@IT」と出力するだけなので、実行結果は省略する。
次に、.NET Framework 4.5をターゲットとすること以外は全く同じコンソールアプリを作成してみた。これをビルドしたり、デバッグ実行したりしようとすると、エラーとなる。エラーメッセージからも分かるように、.NET Framework 4.5がサポートしているのは.NET Standard 1.1までだからだ。
.NET Coreをターゲットとしたコンソールアプリでは同様なコードが実行できる(.NET Core 2.0 Previewが入っている場合)。
では、Windows Formsアプリではどうだろう。以下のようなUIを持つアプリを作成した。[Exec Code]ボタンをクリックすると、上のテキストボックスに入力した内容をインタープリタによって実行され、その実行結果が下のテキストボックスに表示される。
コードを記述したのは[Exec Code]ボタンのイベントハンドラーだけである。
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = MyBrainfuckLib.MyBrainfuck.ExecuteBrainfuckCode(textBox1.Text);
}
実行結果を以下に示す(入力したコードはWikipediaに掲載されているBrainfuckのHello Worldだ)。
ASP.NET Core 2.0 Previewをターゲットとしたアプリも作成してみた。コード自体はプロジェクトテンプレートを流用した手抜きコードなので、ここでは割愛するが、こちらについても以下のように動作している。
本稿では、.NET Standardの概要と実際に.NET Standard 2.0ベースのクラスライブラリを作成して、それを幾つかのプロジェクトで使用してみた。.NET Standard 2.0では多くのAPIが追加されると共に、従来の.NET Frameworkとの親和性が高まっている。これは.NET Framework製のコードの.NET Standardへの移行、他プラットフォームでの活用へ可能性を大きく高めるものだ。
その一方で、注意する点もある。例えば、ターゲットとする.NET Standardのバージョンを高いものとすれば、切り捨てられる環境が発生する。本稿で作成したMyBrainfuckLibプロジェクトは.NET Standard 1.6ベースのものとしても作成できるだろう。そうすれば、より多くの.NET環境をサポートできる。逆に、ターゲットとする.NET Standardのバージョンが低ければ、より多くの環境をサポートできるが、利用できるAPIが狭い範囲のものとなる。このバランスをどう取っていくか、あるいは緩やかに新バージョンへ移行していくにはどうすればよいのか。そういった点が、.NET Standardをうまく利用する際のポイントとなるかもしれない。
何にせよ、マイクロソフトがこれから先に注力していくのは、.NET Coreや.NET Standardなど、クロスプラットフォームな.NET実行環境とそのために必要なあれこれになるであろうことを考えると、.NET Standard 2.0が正式リリースされたら、そろそろ旧来のコードベースの.NET Standard化についても検討を始めるのがよいかもしれない。
Copyright© Digital Advantage Corp. All Rights Reserved.