Nanokoは,UbidreamsとDynamis Technologiesが開発したJavaScriptビルドプロセスである。既存ツールを置き換えるのではなく,モジュール性と再利用性を提供することによって補完するように設計されている。
InfoQはUbidreams創業者のRomain Pellerin氏にコンタクトを取り,このプラットフォームのさらなる詳細について探ることにした。
INFOQ: 大規模なクライアントサイドアプリケーションの開発で,ember.jsやangular.jsに代えてNanokoを使うことのメリットは何でしょう?
NanokoはMVCやMVVMなどのフレームワークではありません。angularやemberとは違い,[Nanokoの]提供するビルドプロセスには再現性が保証されています。テストやアグリゲーション,ミニフィケーション,さらにはLessやCoffeeScriptなどWeb言語も統合しています。モジュラーアプリケーションをビルドし,実行するためのフレームワークも提供します。工業的なビルドプロセスとモジュール化されたランタイム,この2つの組み合わせがNanokoのメリットの源泉です。
NanokoはUI中心のアーキテクチャスタイルを意図してはいません。ですが,サービス指向を採用することによって,開発は従来よりもフレキシブルですし,インテグレーションもとても簡単です。
INFOQ: 現時点で,Nanokoを使用した製品アプリケーションは何かありますか? もしあれば,その実例を教えてください。
はい,あります。 UbidreamsでRemy Cointreau(フランスの酒類メーカ)向けに,"Gourmandise"というクロスプラットフォームのアプリケーションを開発しています。顧客とのミーティングでセールス部門が使用する,モバイルカタログのアプリケーションです。これはiPad用のアプリケーションですが,もうひとつ,Webアプリケーション(CMS) をNanokoスタックで開発しました。このCMSは任意のブラウザ(IE8も含みます)上で動作します。
興味深い事実として,この2つのアプリケーションはソースコード (JavaScript) の80%を共有しています。UI部分だけが違うのです。これもNanokoが進めているアーキテクチャスタイルの成果です。
INFOQ: Nanokoはどのようなアプリケーションアーキテクチャに属するのでしょう? MVC, MVM, MVVM, あるいはこれら以外のものでしょうか? FAQには,Nanokoは既存のMV*フレームワークを補完するもの,とありますが。
Nanokoは,車輪を再発明しようというものではありません。実際に素晴らしい仕事をするJavascriptライブラリがたくさんあるのですから,パターンを選択したり,そのためのライブラリを入手するのに不自由することはないはずです。あとはそれを1つの,あるいは複数のNanokoコンポーネントでカプセル化すればよいのです。このようなコンポーネントが,Webサービスに近い(が,もっと簡単な)疎結合アプローチを使って,相互に通信を行っています。
Nanokoを使えば,どのようなアーキテクチャスタイルでも簡単に作ることができます。例えばUbidreamsでは,次のような方法でMVCパターンを実装しています。
- モデルは,サーバから取得したJSONデータ構造をベースとする。
- ビューは,EnyoおよびTwitter Bootstrapの各コンポーネントを使って実装する。これらのコンポーネントは,デバイスあるいはブラウザの機能に応じて有効あるいは無効になる。
- コントローラには,Nanokoのコンポーネント(実際にはh-ubuのコンポーネント)そのものを使用して,モデルとビューの間のリンクを管理する。 サービスを使用することも可能。
- サービスは,再利用可能な機能(セキュリティ,ネットワークタスク,スケジューリングなど)として,同じくNanokoのコンポーネントとして実装され,コントローラによって使用される。
INFOQ: Nanokoが補完的なものということは,それ自体はフレームワークではなく,むしろアプリケーションを分離されたモジュール群として組織化する方法である,と理解すればよいのでしょうか?
そうですね,Nanokoのメリットをよく捉えた見方だと思います。angular.jsやbackbone.jsのようなフレームワークというよりも,プラットフォームという方が適切でしょう。当然ですが,この表現は"フレームワーク"をどう定義するかにもよります。いずれにしてもNanokoは,モジュール/コンポーネントベースのアプリケーション構築用のプラットフォームとして見た方が,理解しやすいはずです。
INFOQ: Nanokoはフレームワークではない,という見解には賛成ですか,反対ですか? その理由も説明してください。
賛成です。Nanokoは異種テクノロジの橋渡しなのです。その背景となっているのは,開発作業の工業化と効率改善という,Nanokoの目標です。
INFOQ: Mavenとはどのように通信するのでしょう? GruntよりもMavenを選んだ理由は何ですか?
Mavenは,Nanokoの非常に強力な継続的ビルド/デリバリチェーンの中核を占めています。Mavenは評価の分かれるツールですが,MavenによってJavaソフトウェアの構築方法が根本的に,それもよい方向に変わったことは,紛れもない事実です。Mavenの厳密性と手法こそが,Web開発の工業化への道を開くものだと,私たちは考えています。一方のGruntには,Javaに対して数年前のAntが持っていたような,多くの自由度があります。しかしながら,厳格に定義されたライフサイクル,パワフルな依存性管理,企業レベルの生成物リポジトリ,こういったものがなければ,カオスとまではいかないまでも,工業化を実現するのは難しいでしょう。
Mavenを採用したことには,アプリケーションのバックエンドとWeb部分にまったく同じビルドシステムを使う,という意味もあります。これには非常に重要な意味があります。この2つの間の依存性も非常にシンプルで,Mavenの依存性として定義できます。
リリースプロセスとドキュメントの管理面でも,Nanokoプラットフォームの基礎としてMavenが位置していることは,言うまでもありません。
INFOQ: J2EEアプリケーション開発との関係について説明してください。このようなサーバサイド技術とNanokoとの互換性はどのようなものでしょうか?
Nanokoは本来,JavaEEなどのバックエンドテクノロジのためのものではありません。ですが,Nanokoスタックをこれらのテクノロジに組み込むことは簡単です。Nanokoはサービス指向を採用しているので,その機能は "サービス" として提供されます。バックエンドサービスも同じように,RESTfulあるいはWebサービスとして機能を公開します。ですから,これらのサービスを具体化するのは簡単です – コンポーネントが公開するインターフェースとほとんど同じですから。他のコンポーネントも,サーバ機能へのアクセスにはこのコンポーネントを使用します。
INFOQ: node.jsやrequire.jsとNanokoはどのように違うのでしょうか?
まず,Nanokoはrequire.jsやnode.js.と共用可能です。それどころか,推奨している位なのです。requireやnodeのモジュールをビルド,あるいはバインドする手段として,Nanokoが使用できます。
Nanokoはサービス指向を採用しています。モジュールは事前定義されたサービス(Nanokoではcontractと呼んでいます)を使って互いに通信します。このような疎結合のおかげで,モジュールを他のものと(ランタイムでも)置き換えることが可能になっています。そのメリットは,次のような例を考えれば納得して頂けるでしょう – プラットフォームや実行コンテキストに応じたモジュールの有効/無効の切り替え,モジュールの非同期な更新,テストが容易であること,など。
INFOQ: Nanokoをオープンソースにしようと考えた理由は何ですか? どのようなライセンスを適用していますか?
Nanokoは,オープンソースを基本理念とする複数の企業 (Ubidreams, dynamis-technologies, Grenoble University ...) による共同作業の成果です。ですから私たちにとって,Nanokoをオープンソースにするのはごく自然なことでした。他の創設者たちと協議した結果,OW2コンソーシアムを選択することにしました。私たちの考えにOW2哲学が極めて近かったからです。
NanokoのソースコードはApache License 2.0のもとで公開されています。ビジネスで使用する場合の障害をすべて取り除きたかったのです。コードベース全体は GitHub で公開しています。リリースはMaven Central経由で公開されるので,Nanokoのコンポーネントを利用するのはとても簡単です。
INFOQ: このプロジェクトはどこで管理されているのでしょうか?
プロジェクトをリードしているのはフランスのラロシェル (Ubidreams本社) とグレノーブル (Dynamis technologies本社) の2カ所です。国際的な知名度を高める目的で,OW2オープンソースコンソシアムともジョイントしています。OW2とメンバすべてからの絶大なサポートのおかげで,Nanokoの将来には期待が持てると思っています。