今回は、
前回宣言した通り、日本の著名なOSS(.NET)が、どんな「開発環境、ツール、ライブラリ」などを使用しているのか?早速、ベンチマーキングしてみました。
まず始めは、ゲーム業界で有名な
@neueccさんの開発したUnity向けの
Rx(Reactive Extensions)として開発された
UniRxです。
Rxを説明すると「Observer パターンを実装するフレームワークだが、特にLINQ to Events もしくは LINQ to Asynchronus と表現できる。」ということで、簡単に言うと「
状態を定義して、GUIイベントを非同期的に発生させ、それを処理できるライブラリ」と言えます。
Rxは当初、マイクロソフトがSilverlight向けに開発・提供を開始し、今ではJavaScriptなど含め、色々なフロントエンド開発が可能な言語に向けて提供されるようになっていますが、このライブラリがハマる代表的なユースケース ≒ ゲームということで、Unity(ゲーム向けのエンジン+IDE)向けに提供したUniRxは世界的に利用者の多いライブラリになっています。
@neueccさんは、この他にも、
MessagePack for C# や
MagicOnionなどのOSSも開発されており、「
Unity(UniRx)<--- (MessagePack) ---> MagicOnion」の様な構成で組み合わせて使うらしいです。要するに、ゲームのフロントエンドとバックエンドを繋ぐ部分の開発をされているのだと思います。リアルタイム性の高いゲーム基盤の抱える性能問題ダケでなく生産性なども意識して解決されているアーキテクト的な人だと思います。
また、このライブラリの
nuspecを拝見しましたが、zero-dependency libraryとなっていました。
次は、
@ugaya40さんの開発した「
WPF のためのMVVM (Model / View / ViewModel) パターン用インフラストラクチャ」の
Livetです。概要を読むと、XAML側のマークアップだけで、様々な双方向バインディングをバシバシ実装できるというものらしいです。一時期メンテナンスされていない状態が続いたようですが、現在は、
@okazukiさんがメンテナンスしているそうで、また、Livetの一部機能は、StatefulModelという別のMVWインフラストラクチャに移行されているらしいです。
このライブラリのユースケースは我々の業務系にはあまりないのですが、一度だけ、突然どこからともなく社外からメールが入ってきて、「
某弊プロダクト(OpenTouryo)とLivetを組み合わせて医療系の案件で使うかも知れない。」みたいな話を聞いたことがあります(その後、どうなったかは知らないですが)。機能とユーザから考察すると、医療系や計測機器など、データをリアルタイムに画面に反映していく必要があるような場合に重宝するのかもしれません。
このライブラリの
nuspec1、
nuspec2を拝見しましたが、こちらも、zero-dependency libraryとなっていました。
KanColleViewerは、この中で唯一、リアルでお会いしたことがある(と言うか前職が同じ会社)、XAML-based開発で有名な
@Grabacr07さんの開発した「
艦これブラウザーのようなもの」のらしいです。「艦これ」とは何か?を知りたければ、
Wikipediaでの説明を見て欲しいのですが、要するにWebブラウザで動作するゲームです。
このプロダクトを説明するとApache Cordovaなどの側(皮?)ネイティブに近い構造になっており、WPFの中のカスタム・コントロール(WebView相当)でブラウザでゲームのクライアント部分をホストします(
昔はFlashで、今は、HTML5で実装されている)。その際ゲームのクライアントはサーバーと通信を行いますが、これをプロキシを使用してフックして、フックしたJSON情報をネイティブ部分に拡張したビューに表示するという、大変興味深いアーキテクチャになっています。
また、このプロダクトは、プラグイン開発をManaged Extensibility Framework (MEF) を使用して実現しているところが興味深いです。プラグインをWebで検索すると、
コチラのサイトがヒットしますが、どうもプラグイン開発には、KanColleViewer.Compositionが必須らしく、こちらの依存関係を持つNuGetパッケージがKanColleViewerのプラグインに該当するようです(プラグインの開発方法の概要は
コチラに情報がありました。配布方法はDLLを直接プラグインフォルダに放り込む運用らしく、プラグインは必ずしもNuGetには登録されていないようです)。
また、このプロダクトの
packages1.config、
packages2.config、
nuspec等を確認すると、WebView相当に
CefSharp.Wpf、通信のフックに
Nekoxy + TrotiNet、また、UI部分には、先ほど紹介した、
Livet、StatefulModel、Rx (Reactive Extensions)等を使用しているようです。
このようなアーキテクチャならば、例えば、株式や為替FXなどの、リアルタイムの各種金融情報提供サービスのフロントエンドに適合するかもしれません。
こちらは
@implem_さんが開発したOSSプロダクトで、上記とは少々異質で「
ノンプログラミングで業務アプリが作成できるWebDBというカテゴリの製品」、「
オンプレ版のkintone」とのことで、エンタープライズ色の強いプロダクトとなっています。
開発経緯を分析してみると、恐らく、社内プロジェクトで、PMOのポジションで開発を行って、それをOSS化して独立されたように見えます。既存の画面には「顧客管理 / 営業支援 / プロジェクト管理 / 問合せ管理 / インシデント管理 / ナレッジ管理 / 画像の管理」などがあるらしいです。
Dynamics CRMを用いた、xRMというモノが一時期、提唱されていましたが、あれは不発だったように思うので、「Pleasanterのノンプログラミング開発」と言うものも体験してみたいな。などと思った次第です。
また、
packages1.config、
packages2.configを分析してみると、「脱エクセル・脱メールを目標としている。」とあるだけあって、Excel操作に「ClosedXML、CsvHelper」を、メール送受信に「Sendgrid」を使用しているようです。あと、ちょっとイイなと思ったのは、「FastMember.Signed」です。私は
式木を用いたリフレクションの高速化を一部自作しましたが、こういうのを使ってみても良いかも知れません。
これは、某弊(
@openhishopjpo)が開発するOSSプロダクトで、こちらも、上記とは少々異質な「
エンタープライズ・アプリケーションのスクラッチ開発案件のQCDF向上を目指して、ICTの生産技術畑で開発されたプロダクト」になります。
プロダクトの紹介については、
この辺をご参照下さい。
また、
nuspec1、
nuspec2、
nuspec3、
packages1.config、
packages2.configを他と比較して分析してみると、改めて、「基幹システム開発向けの画面 - DB間の項目移送(v1.0)」と、「Webサービスをターゲットとした認証 / 認可(v2.0)」を実装するためのワークベンチなんだなぁ...。という気がしてきました。今回のベンチマーキングで色々なOSSがあることが解ったので、v3.0では、また、新しい企画を考えて、新しい分野へ進出していきたいと考えています。
如何でしたでしょうか?.NET界隈のOSSコミュニティ、チョット特殊でしたよね(?)最後に、以下の様な一般的な情報と照らし合わせて、この理由を、以下のリソースを用いて、少々、分析してみたいと思います。
まず、
前回も言及しましたが、
「.NETは、勿論サーバーサイド開発で利用されることもありましたが、サーバーサイドJavaのシェアが大きく、フロントエンド開発や、EUC (End-User Computing) での利用が中心でした。」
と言う事で、.NETのOSSはフロントエンド開発で利用するプロダクトであるケースが多い気がします。次いで、EUC利用と言う事で、ミドルウェアを除いたアプリケーション開発用のプロダクトや、アプリケーションそのもののケースが多い気がします(.NET Coreの登場により、これも変わっていくと思いますが)。
これに対して、一般的には、どのような、OSSがあるのでしょうか?上記のリソースをもとにして分析してみると、
- 日本のOSS勢は、ほぼ、
「プラットフォーム屋さんのOSS利用」と言う雰囲気がありますが、 - 世界的には、「フロントエンドや、それだけではなく、
教育や仕事を効率的に行う技術情報等」がトレンド入りしている。
...ように見えます。
こう見ると、.NETのコミュニティは特殊。と言うダケではなく、世界と比べれば、日本のOSSコミュニティ自体が特殊で、ソレと比べて「特殊」というダケなのかもしれません。既に半分答えは見えている気がしますが、次回、「
新説"サプライサイド限界説"を提唱してみる。」に続きます。
余談: 前述のトレンド入りしているリポジトリの分析で「教育や仕事を効率的に行う技術情報等」がトレンド入りしているのには少々、驚きました。以下に、これに該当しているリポジトリを列挙してみたいと思います。
色々見てみると、最近は、英語か、若しくは中国語のリポジトリが目立っています。最近の中国って凄いですね。既に日式の太刀打ちできない所まで来ていて、今は米中衝突の時代なんでしょうか。そう言えば1/19のNHKスペシャルは「
アメリカ VS 中国 “未来の覇権”争いが始まった。」でしたね(見てないケド)。