ふろしき.js

Web + Mobile + UX + Performance Tech

オープンソースのJavaScriptライブラリでベンダサポートを受ける方法

f:id:furoshiki0223:20131117021946p:plain

サーバサイドのOSS開発ではRedHat社のようなOSSサポートベンダがいますが、フロントエンドはイマイチ充実していない印象があるようです。エンタープライズでの活用の場合、近年のHTML5ベースなRIA開発を行う上でベンダサポートは切実な問題になるでしょう。

結論だけ先に言うと、フロントエンドのOSS製品は黎明期のLinuxのような状況で、サポートはあまり充実していません。ただし、皆無というわけではありません。以下のような手段があります。

Microsoft - NuGet

Microsoftは「NuGet」というサービスを提供しています。NuGetをサーバサイドOSSで例えるなら、RedHatの「RPM」のような位置づけです。NuGetはJSライブラリを含め様々なパッケージを扱うパッケージ管理システムです。同じJSライブラリのパッケージ管理システムには「Bower」がありますが、カバーする機能の範囲は少しだけズレています。こちらは例えるなら、RPMの対抗馬である「dpkg(Debianパッケージ)」的な位置づけでしょう。

NuGetの多くのパッケージはMicrosoft独自のテクノロジーが含まれていますが、純粋なOSS製品も含まれています。これらのOSS製品については、Microsoftによるサポートを受けることができます。ただし、全てというわけではありません。

2013年11月現在、OSS製品では以下に限定されます。

Twitter bootstrap ボタンの装飾やレスポンシブWebデザインなど、Webサイト制作に必要な多くの機能をまとめたライブラリ。
jQuery マルチブラウザ対応でDOM操作Ajaxなどの操作を扱えるようにするライブラリ。
jQuery Validation jQueryにバリデーション機能を与えるライブラリ。
jQuery UI jQueryに入力フォームのリッチ化などのUI改善を行う機能を与えるライブラリ。
knockout.js MVVMなフレームワーク。SilverLight開発者が扱いやすいという特徴を持つ。
knockout.validator knockout.jsへバリデーション機能を与えるライブラリ。
Respond JS max/min-widthなどのレスポンシブWebデザインに必要なCSS機能を、レガシーIEでも扱えるようにするポリフィル・ライブラリ。
WebGrease JavaScript/CSS/イメージファイルの最適化を行う開発ツール

MicrosoftはNuGetのパッケージリポジトリを2つに分割しており、Microsoft側で独自に切ったソースのみが対象になります。Visual Studio2013付属のNuGetのGUI画面では、以下2箇所に含まれるものが該当します。

f:id:furoshiki0223:20131117010548p:plain

前者の「インストール済みのパッケージ」は、プロジェクト作成の際にテンプレートとして含まれていたものです。後者、オンラインの「Microsoft and .NET」は、.NET開発に必要な様々なパッケージが含まれており、この中に純粋なOSS製品が含まれています。Microsoftがサポートするのは、この範囲内のみです。

オンラインの「nuget.org」については、Microsoftが提供するパッケージ管理サービスですが、オープンに開けたものであり多くの野良OSSが含まれています。

nuget.orgには、先ほど挙げたMicrosoft社のサポート対象製品も含まれており、より新しいバージョンも選択できる場合がありますが、当然それはサポート外です。AngularJSについては、Visual Studioのインテリセンス機能により「ng-」で始まる属性の補完までできてしまいますが、Microsoftはこの動作を完全に保証しているわけではありません。中にはMVC 5などのMicrosoftテクノロジーとOSS製品を連携させるようなものもありますが、これもサポート対象外です。名前だけ見ると、サポートされてしまいそうな気がしてしまいますので、注意が必要です。

なお、サポートを受けるには、Visual Studio 2010, 2012, 2013のProfessional, Premium, Ultimateのライセンス購入が必要です。

ここからは私の予想です。

Microsoft的にこの辺りのOSS製品は、RedHatライクなビジネスモデルを狙っているように思えます。デファクトへ昇格したJSライブラリ/フレームワークについては、サポートされるようになる可能性があります。実際にMicrosoftは、jQuery開発へSilverLightの開発者をフルタイムで動員するなど高い貢献をすることで、OSS製品のノウハウを蓄積し、Visual Studio側でのサポートという形でうまくビジネスモデル化させています。まさに、RedHatのようなやり方です。

ただ、現段階ではBackbone.jsのような広く利用されているフレームワークに対して、協力・サポートのアナウンスは一切行われていません。この辺り、もう少し様子を見る必要があるでしょう。フロントエンドのJSライブラリはカオスで、現在の基本お作法ですら数年後にどうなっているかわからない状況です。Microsoftとしても、手が出しにくいという状況に思えます。

フロントエンド開発におけるベンダサポートの考え方

HTML5ベースなRIAの開発で、OSSのJSライブラリの活用はどちらかと言えばベンダサポートを必要としない開発の場合に特化していると言っても過言ではありません。ベンダサポートを必要とする場合、そもそもこの手のOSS製品に頼るのは正攻法ではありません。ベンダが開発したプラットフォームに乗っかるのが正しいやり方です。

以下はHTML5アプリ関連ベンダです。

  • Sencha(Sencha Framework)
  • Microsoft(ASP.NET)
  • 4D(wakanda)
  • IBM(Dojo Toolkit)

上記以外にもHTML5アプリ関連ベンダはいますが、これだけの例でもしっかりと特徴が出ています。「開発ツール込み」でサービスが提供されているのです。断片的には、サポートを提供しません。やはり、まだまだHTML5はハックの領域なのでしょう。上手く品質をハンドルさせるには、開発プロセス全体でトータルなサポートをしないことには上手く成立できないのでしょう。JSライブラリを単体でサポートを探すのでなく、JSライブラリも含めてオールインワンな対応を行うHTML5アプリ開発ツールを探す必要があります。

「ベンダロックインなのでは?」という質問を受けることがありますが、単刀直入に言えばまさにその通りです。サーバサイドの何かしらの仕組みにガッツリと依存していたり、名目上標準と呼ばれる独自機能との連携が必須になっているなど、ガッツリとロックインされます。そもそも、殆どの製品は独自の開発思想・アーキテクチャへの理解を必要とするため、開発者は各開発ツールの専門家になる必要があります。結局のところ、プラグインベースのRIA時代とあまり状況は変わっていないように思えます。

こうしたやり方はオープン系を好む開発者にとっては好ましくないと感じられるようです。しかし、開発ベンダの取り組みは、リスクの高いWeb技術を安定動作させ、それどころかエンタープライズで活用できレベルにまで技術を昇格させるなど、Web技術の発展で重要な役割を担っています。各ベンダの力の見せ所でもあります。

結論

ベンダサポートが必要であれば、OSSのJSライブラリに頼らず、HTML5アプリ・ツールを開発しているベンダに乗っかりましょう。そのうち、何かしらの改善されるかもしれませんが。