。。。
2002年、.NETがリリースされました。その後、12年以上にわたって、.NET開発者コミュニティは辛抱強く、安定したペースで成長したように見えました。その後、事態は急速に進化を始めました。エコシステムの変化を予見したMicrosoftは、オープンソース開発の考え方を取り入れて、ついにはGitHubを買収するまでになりました。このような変化を目の当たりにした.NET Framework開発者たちは、始まったばかりの進化の高まりに身構えました。Microsoftは後に、世界をリードするソフトウェア開発者プラットフォームであるGitHubを買収しました。そして、世界の.NET Framework開発者たちは、さらなる急激な変化に備えたのです。
2014年11月、.NET Coreが誕生しました。.NETエコシステムの新しい、革命的なオープンソース時代の始まりでしたが、苦痛を伴わない訳ではありませんでした。それに伴って、混乱とフラストレーションの大きな波が生じました。開発者たちがこの劇的な変化に適応できなかったのです。この混乱を収拾しようと試みたのは、他でもない、.NETチームのプロダクトマネージャであったImmo Landwerth氏でした。氏は聡明にも、.NET Standard、.NET Core、.NET Framework、そして新しい.NETエコシステムのさまざまな部分を詳細に説明するビデオシリーズを作成する作業に着手したのです。穏健な対応とも思えますが、Microsoft PMが何かを説明して事態を収拾しようとしたのは、同社の懸念の現れであると言ってもよいでしょう。
.NET Standard
開発者は.NET Standardを学ばなければなりませんでしたが、数年後、.NET Standardは依然として、その使用方法を理解しない人々を混乱させていました — .NET Standardが単なる仕様ではなく、ランタイムであると誤解していたのです。ターゲットフレームワークモニカ(TFM)として.NET Standardを対象としたクラスライブラリを開発して、.NET Coreや.NET Frameworkを対象としたアプリケーションで利用可能なパッケージにすることが可能でした。つまり、マルチターゲティングであるということです。コンパイラディレクティブを使用すれば、.NET Coreあるいは.NET Framework用にコンパイルする条件付きコードを書くことができます。この標準化によって、多くの実装が標準を満足できるのです。.NET Standardのバージョンは、.NET Coreと.NET Frameworkの実装に一致するように調整されています。
".NET Standardは仕様です。すべての.NETプラットフォームが実装すべきAPIセットを表現したものなのです。" — Immo Landwerth
このコードのメンテナンスはどうなるのでしょう。あなたはどう思いますか? — コンセプトは面白いのですが、不安がない訳ではありません。
.NET Coreと.NET Frameworkの統合
Landwerth氏は素晴らしい仕事をし、そのビデオは非常に役に立ちました。しかし今、Microsoftは、再び重要な役割を果たそうとしています。Microsoft Build 2019カンファレンスで、同社は.NET 5を発表して、.NET Coreと.NET Frameworkを統合しました。
"今後、.NETはただひとつになります。Windows、Linux、macOS、iOS、Android、tvOS、watchOS、WebAssemblyなどをターゲットにできるようになるのです。" — Richard Lander
そう、あなたが目にしたとおりです。もう一度言いましょう、.NET 5は、.NET Frameworkと.NET Coreの統合を目的としたものなのです。この発表を現実にするためには、まだたくさんの開発作業があります。2019年内には実現しません。2020年まで待つ必要があります。この統合による簡略化は、開発者コミュニティにとって、非常に有益なものになるはずです!
Microsoftは、Monoランタイムと.NET Coreの開発成果も活用しています。最初は恐ろしく思えるかもしれません(繰り返しますが、開発者は恐れるのではなく、変化を受け入れなくてはなりません)が、.NET 5に至るまでのすべての開発は.NET CoreとMonoの成功に基づいて構築されたものなのですから、不安に思うことはありません。.NETの統合は、過去数年間にわたって開発者コミュニティを悩ませていた.NETエコシステムの分断化に対して、本当の意味での終幕をもたらすものです。.NET Standardがその後も存在するかどうか、現時点では明らかではありません。
今後について
過去とらわれたり、かつての懸念や不満について不平を言うのは簡単ですが、私たちは前に進むべきです。おそらくは、最も論理的な方向のひとつが、.NET Coreと.NET Frameworkを統合することなのです... あえて言いましょう、".NETをもう一度、すばらしいものにしよう!" と。言い過ぎかも知れません。ですが、未来を語り合おうではありませんか。Microsoftは私たちをどこに連れて行くのでしょう?
どこへ行くのかを語る前に、少し戻って、私たちがどこから来たのかを論じてみましょう。すべての.NET開発者が、コードがどのようにコンパイルされるのか、本当に生成されるのは何なのか、を認識している訳ではありません。
".NETは最初からJIT(Just-In-Time)コンパイラを導入して、中間言語(IL)コードを最適化されたマシンコードに変換していました。" — Richard Lander
先程のMonoプロジェクトをもう一度見直せば、.NETがAOT(Ahead-of-Time)コンパイルに多大な努力を払ってきたことが分かると思います。Monoは、その業界トップのLLVMコンパイラインフラストラクチャで、それを実現しました。
"Mono AOTコンパイラによって、.NETコードをC++コードのように、マシン上で実行できる単一のネイティブコード実行可能ファイルに組み込むことが可能になりました。" — Richard Lander
忘れてはならないのは、.NET 3.0以降、.NET Frameworkの機能は移植されないということです。繰り返しますが、.NET 5の導入スケジュールは2020年11月なので、タイミングは重要な要素です。ずっと先のようですが、すぐに来るでしょう。"それまで何をすればいいのか?"と自問するかも知れません。次には、それを説明します。
パフォーマンス中心のイノベーション
"それまで何をすればいいのか?"に対する、Microsoftからの公式勧告はこうです — .NETCoreで新しいアプリケーション開発を始めましょう。可能であれば、既存の.NET Frameworkアプリケーションの.NET Coreへの移植を検討するのもよいでしょう。
"新たに開発するアプリケーションは、.NET Core上に構築する必要があります。.NETCoreは、.NETへの今後の投資が行われる場所です。" — Scott Hunter
.NETエコシステム内で、イノベーションの中心にあるのは.NET Coreです。.NET Frameworkに代わるランタイムであり、ゼロから完全に書き換えられています。これによって、特にパフォーマンスに関して、アグレッシブなイノベーションが可能になりました。.NET CoreとASP.NET Coreのイテレーションには、それぞれ一貫性と改善が期待されています。 "割り当ての削減"は、パフォーマンス向上の結果として現れた、極めて一般的なテーマのひとつです。新しい業界用語が生まれました。
"Allocaty (形容詞:allo・caty) — 必要以上にメモリを割り当てるコード。" — David Fowler
メモリ割り当ての削減によるパフォーマンス向上に重点を置いたCoreCLRおよびCoreFXのGitHubリポジトリからは、かなりの数のプルリクエストが寄せられています。Tech Empowerベンチマークによると、これらの活動によってASP.NET Coreは、世界最速のWebサーバのひとつになりました。これほどの改善の目撃を証言するのは信じられませんが、すべては時間と労力、そしてコミュニティの関与によるものです。Microsoftはオープン開発を行っているので、オープンソースの開発者コミュニティがこれらの革新にコントリビュートできるのです。パフォーマンス向上は、メモリ割り当ての削減だけではありません。 ハードウェア組み込み関数を活用することによって、さらに低レベルな部分も成長しています。
進化するC#
当然ですが、私はC#言語の大ファンです。.Net CoreはC#、特にそのパフォーマンスに重点を置いて開発されています。ですから、ここでそれを少し説明しても、驚くことはないでしょう。
".NET Coreで明らかになったテーマとして、新たなパフォーマンス重視の機能を単に公開するだけでなく、内部も可能な限り使用する必要があります。" — Stephen Toub
C#7とその後のポイントリリース、および現在のC#8は、すべてコミュニティの採用許容度の限界に近づいています。私は言語の進化を強く支持しています。そう主張すると同時に、採用を妨げるビジネス上の制限に縛られている開発者にも共感を覚えます。"価値提案(value proposition)とは何か"を自問しなければならない環境は、私にもよく分かります。いくつかの新機能はパフォーマンス重視であるため、自身のニーズに応じて考慮すべきものかも知れません。
先日のTwitterのスレッドで、Nick Craver氏が"C# 8 is dead to me"とツィートしたことから、 "StackExchangeは今後ずっと、C# 8にアップグレードすることはないだろう"と解釈されています。理由の一部は、特定のC#の機能がCLR(Common Language Runtime)のアップグレードに依存していることに起因しています。その一例が、現時点では.NET Core 3に依存する"デフォルトインターフェースメンバ)です。これ以外の機能の大半はC#コンパイラのみに依存しているので、問題はありません。
.NET Foundation
あらゆる.NET用語がWeb上を飛び交っていますが、ここでもうひとつ紹介することにしましょう。
.NET Foundationは、.NETエコシステムに関するオープンな開発とコラボレーションを促進する独立組織です。コミュニティとビジネス開発者双方のフォーラムとして機能し、オープン性とコミュニティ参加を推進してイノベーションを促進することによって、.NETエコシステムの未来を広げ、より強固なものにします。
ぜひサイトにアクセスして参加するか、ンバになってください。メンバになれば、理事会に投票する資格を持つことができます — それだけではなく、年次で行われる選挙において、理事会の候補になることも可能です。実際に私は、2019年の理事候補者のひとりでした。現在の常任理事会は次のとおりです。
ニュースレターに登録して、最新情報を入手するようにお勧めします。
有意義な道程
.NETエコシステムは絶えず変化していますが、素晴らしい方向に向かっていると私は信じています。オープンソースとクロスプラットフォームという2つの重要な優先事項が、安心を与えてくれるのです。個人的には、.NETエコシステムに負担となっていた.NET Coreと.NET Frameworkが、結果的に.NET 5として統合されたことを評価しています。この数年間は苦痛でしたが、このようなイノベーションも可能にしたのです。.NET Coreに移植し、.NET Coreで新しい開発を始めるようにお勧めします。未来はそこにあります。.NET Standardの方向は不明ですが、将来的に通知があるまで、引き続き提案されることになります。どのような決定が下されるにせよ、影響が少ないことを期待しています。
著者について
David Pineは、Microsoftに勤務するMicrosoft MVP、Google Developer Expert、Content Developerです。技術コミュニティとの知識共有が大好きで、ミートアップ、ユーザーグループ、技術会議などで国際的な講演活動をしています。執筆を通じて自分の考えを共有することにも情熱を傾けており、davidpine.netのブログを積極的にメンテナンスしています。 Davidの記事は、ASP.NET、MSDN Web-Dev、MSDN .NET、Dot Net Curry、InfoQで紹介されています。 Dコミュニティに還元するもうひとつの手段として、氏は、オープンソースプロジェクトとStackOverflow.comにも積極的にコントリビューションしています。氏は技術系の役員として、ほぼ4年間、Cream City Codeの主要な主催者のひとりでありました。キーボードを操作していないときの氏は、妻と3人の息子Lyric、Londyn、Lennyxとの時間を過ごしています。Twitter @davipine7 で氏をフォローしてください。