Build Insiderオピニオン:河合宜文(1)
最先端のC#環境で働く開発者が感じたVisual Studio 2015移行への期待
最先端のC#環境でゲーム開発を行っているグラニでは、Visual Studio 2015 Previewを見て何を感じたのか。LINQとReactive Programmingで有名なneuecc氏によるコラム、始動。
筆者がCTOを務める株式会社グラニではusing CSharp;
をスローガンに、最先端のC#環境でアプリケーション開発を行っています。しかし、日進月歩のこの世界、.NETもまた速いスピードで進化を続けています。ということは、足を止めてしまえば、すぐに最先端は普通の環境に、普通の環境はレガシーな環境になってしまいます。と、いうのはさすがに言い過ぎとしても、そのぐらいの気概で取り組んでいます。
グラニは、C#では国内でも有数の熱い環境だと自負しますが、今回から始まるこのコラムでは、そんな最先端のC#環境においてどんなテクノロジを利用していくことを検討しているのか、ということを時間差なく紹介していけたらと思っています。新しいテクノロジが登場しても、それが利用されるまでには時間差が当然あるし、実例に挙がってくるまでにはかなりの間が開いてしまいます。そうしたギャップを埋め、読者の皆さんと共に検討していければ良いと思っています。
では、最近グラニ社内で盛り上がった話題をいくつかご紹介しましょう。
ASP.NET 5(vNext)への移行
検討する技術には珍しいものもあれば、スタンダードなものもあります。今回はちょうどVisual Studio 2015(以下、VS 2015)が発表された頃合いなので、Visual Studio 2015が最もホットなテーマでした。特にWeb周りで大きく変化していて(ASP.NET vNext)、最大の問題は「既存アプリの移行どうするの……?」ということでした。
グラニのポリシーは「全ての既存アプリケーションは常に最も新しい環境に移行していくこと」です。新しいアプリケーションを作るときに最先端のものを選択することはできるが(そう、グラニでもこれから先にリリースするものはVS 2015ベースで作っていくことをすでに決定しました)、移行は非常に難しいものです。けれど、それをやらないと会社内での資産にテクノロジの差ができてしまうし、問題への取り組みの方法も分散してしまいます。なので、古い状態のままにすることは絶対に避けなければならないと考えています。
元来、.NETは後方互換性に最大限、気を配っていて、メジャーアップデートも容易に行えるのが利点の1つでした。が、今回のvNextはコア部分に抜本的な変更が入っているため、全く容易ではない! 「進化のためにはしょうがない」と受け入れる気持ちはあるし、実際、既存のASP.NETのベースができた数年前と比べて、クラウドの普及も含めて世界は大きく変わってきているので、(互換性に譲歩して)中途半端なものが出来上がるよりはずっと良いことです。しかし直面するとかなり厳しく「相当本腰を入れて取り組まなければならない」と気を引き締めました。
HttpContextクラスが一新される、などは別に構わないのですが、クリティカルなのは従来のクラスライブラリをそのまま参照できず、NuGet経由での利用を半ば強制されること。現在、グラニでは社内共通ライブラリなどはGitのSubModuleで配布し、プロジェクト参照でライブラリを参照する形にしています。これは、誰もが共通コードに簡単にアクセスできる、ソースコードからF12キーを押せばダイレクトに見ることができる状態を作ることが必須だと考えているからです。
vNextではNuGet経由でない場合、ASP.NET 5 Class Libraryという通常のクラスライブラリとは違う形のプロジェクトを作成することで、プロジェクト単位での参照が可能になります。しかし、なぜクラスライブラリを、それこそポータビリティのないASP.NETのための形式で作らなきゃいけないんだ、と言いたいところです。今後どうなるかは分かりませんが、NuGet経由必須は正直やり過ぎだし、イマイチな一手だと思っています。とはいえ、手を出さないわけにもいきません。Glimpse*1がGlimpse.Prototypeとして早速作り込まれ始めたようなので、これを参考にしながら移行作業の検討をしているところです。
などと壮絶に愚痴っていたら、まさにその問題が登録/解決されたissueがGitHubのaspnet/KRuntimeに上がっていました。それによると「kpm wrap」コマンドにより通常のクラスライブラリが自動的に「ASP.NET 5 Class Library」形式にラップされるようです。恐らく、Previewを超えた次のVS 2015ではコマンドも自動で行えるようになり、無事参照できるようになるでしょう。「ASP.NETはオープンに開発されているし、Visual Studioに乗っているものが最新なわけでは決してない」ということを垣間見た瞬間でした。問題があれば、報告もどんどんオープンに行えそうです。うん、いいことだ。
- *1 サーバー上に配備されているASP.NET Webアプリを診断するためのフレームワーク。
Grani.RoslynTools
今すぐ使える明るい話題としては、VS 2015+Roslynによる拡張は気が利いていて良いと思っているので、社内でも「Grani.RoslynTools」という共通Gitリポジトリを用意し、そこに拡張を作って配布していこうという準備を済ませました(本格展開はまだこれから)。「当初(=Roslynの最初のプレビューからもう数年経っている)予定よりは小じんまりとしたかな」という印象もありますが、結構便利に使えると思っているのでぜひ手を出してみてください。特にAnalyzerは“コーディング規約厳守!”な厳しいところでこそ大活躍しそうです。
また、C# 6.0も早々にいじり始めていて、「nameof(int.Parse)
がコンパイルエラーになる! int
が許されないのはアリなのか(現在のところその挙動はnameof
演算子の仕様)」とか、「今までは変数の識別子に・
が使えたけど、VS 2015では使えなくなっているのは、今までのC#のバグを直したからなのか、それともRoslynがバグっているのかどっちだ?」(カタカナ中点「・」はUnicode上では「Punctuation, Other[Po]」カテゴリであり、C#の識別子として使用可能なconnecting-characterで許されている「Punctuation, Connector[Pc]」カテゴリではないため、今までの挙動が間違っていたというのが正解のよう)などなどの話題で盛り上がりました。
■
今回はVS 2015に絡んで、グラニ社内では上記のような話題について検討が行われました。VS 2015には素晴らしい機能向上がたくさん詰まっています(特に熱いのはウォッチウィンドウでついにラムダ式が書けるようになったこと!)。正式リリースの際は一刻でも早く、全エンジニアの開発環境を置き換えたいし、使い倒していきたい。多少、地雷を踏んででも前のめりの姿勢で、.NET最先端へと挑み続けたいところです。
河合 宜文 (かわい よしふみ)
株式会社グラニ取締役CTO。Microsoft MVP for Visual C#。特にLINQが非常に好き。最近はUnity開発においてもLINQをフル活用するために、Unity用のReactive Extensions「UniRx」を作っています。
・ブログ: http://neue.cc/
・Twitter:@neuecc
1. 【現在、表示中】≫ 最先端のC#環境で働く開発者が感じたVisual Studio 2015移行への期待
最先端のC#環境でゲーム開発を行っているグラニでは、Visual Studio 2015 Previewを見て何を感じたのか。LINQとReactive Programmingで有名なneuecc氏によるコラム、始動。
2. Visual Studio 2015を前のめりに使いこなす! Analyzerの社内導入と展開
「using CSharp;」な企業であるグラニでは、Roslynが提供する「Analyzer」と呼ばれるコードの解析/生成機能をどう活用しているのか。その秘訣をチラリとご紹介。
3. C#における構造化ログの手法、そしてデータ可視化のためのDomoの薦め
最近、より重要性を増しているログ。グラニではログをどのような方法で扱っているのか、そして、その根底にあるグラニのポリシーとはどんなものだろう。
4. 各言語に広まったRx(Reactive Extensions、ReactiveX)の現状・これから
.NETから始まったRx(Reactive Extensions)が、なぜRxJavaやRxJSなど他の開発言語で人気を集めているのか。“ReactiveX”とは何か? そしてRxは、これからどう進化していくのか。