Mojito(モヒート)は、Javascriptで記述されたWebアプリケーション用のフレームワークです。米Yahoo!がオープンソースとして公開しました(2012/4/1)。
Javascriptを使う機会が増えてきた昨今、非常に興味深いフレームワークです。MojitoはMVC構造を採用しており、コードのきり分けを明確にしています。また、1つのソースで複数のデバイスへ対応させるなど、挑戦的な試みも行っています。
今回は、Mojitoを使ってHello worldアプリを作成してみます。
OSはLinux系(ここではMac OS X使用)、Node.jsが入っていることを前提とします。インストールには、npmコアマンド(Node.jsのパッケージ管理ツール)を使います。
$ sudo npm install mojito -g
ちなみに、今回使用したMojitoのバージョンは0.3.26です。バージョンは以下のコマンドで確認できます。
$ mojito version
早速、Hello worldアプリを作成してみましょう。mojitoでのアプリケーション作成は次の手順となります。
① アプリの生成
② 機能単位の生成(mojit)
③ 各種機能の実装
④ デバイス毎の実行
ここではサーバ側で稼働するアプリを作成します。
① アプリの生成
適当なディレクトリを作成・移動し、以下のコマンドを実行します。Mojitoの処理は、このmojitoコマンドで実行します(詳しくは、YahooのドキュメントMojito Command Line)。
$ mojito create app sample_app
これでカレントディレクトリの中にsample_appディレクトリが作成されます。このsample_appディレクトリ内に、mojitoアプリ用のファイルやディレクトリが生成されています。ディレクトリを移動しましょう。
$ cd sample_app
ディレクトリ中を見てみると以下のようになっています。
├── application.json [アプリ全体の設定]
├── assets [アプリ共通のリソース]
│ └── favicon.ico
├── index.js [アプリをサーバ上で起動するスクリプト]
├── mojits [アプリの各種機能]
├── package.json [デプロイ時の設定]
├── routes.json [ルーティング設定]
└── server.js [Mojitoサーバ生成スクリプト]
この段階では、サーバ側で表示する内容が何もありません。各種設定ファイルは後ほど編集します。次に実行することは、実際に表示する内容を作成することです。
② 各種機能(mojit)の生成
アプリを生成した後は、必要な機能を生成していきます。Mojitoでは、機能単位としてmojitを生成します。名前が紛らわしいのですが、mojit(最後の"o"がありません)であり、mojitoではありません。mojitとは、モジュールのようなものです。公式サイトによると、mojitという単語は、モジュール(module)とウィジェット(widget)を組み合わせて作られたそうです。
実際に作ってみます。以下のコマンドでHelloWorld mojitを生成します。
$ mojito create mojit HelloWorld
mojitはmojitsディレクトリ内に生成されます。実際に、mojitsディレクトリを確認すると次のようになっています。
mojits
└── HelloWorld [mojitのルートディレクトリ]
├── assets [mojit内のリソース]
│ └── index.css
├── binders
│ └── index.js
├── controller.server.js [サーバ用のコントローラ]
├── definition.json
├── models [モデルディレクトリ]
│ └── foo.server.js
├── tests [ユニットテスト用ディレクトリ]
│ ├── binders
│ │ └── index.common-tests.js
│ ├── controller.server-tests.js
│ └── models
│ └── foo.server-tests.js
└── views [ビューディレクトリ]
└── index.mu.html
mojit(ここではHelloWorld)はその内部にMVC構造を持っています。ここからコントローラ、モデル、ビューや各種設定を編集していきます。
③ 各種機能の実装
単純にHello Worldと表示する機能を実装します。mojits/HelloWorld/controller.server.jsを以下のように編集します。実際には、index: function(ac) {...}の部分を変更しただけです(コメント部分は割愛しています)。
mojit/HelloWorld/controller.server.js
YUI.add('HelloWorld', function(Y, NAME) {
Y.mojito.controllers[NAME] = {
init: function(config) {
this.config = config;
},
index: function(ac) {
ac.done('Hello world');
}
};
}, '0.0.1', {requires: ['mojito', 'HelloWorldModelFoo']});
Javascriptファイルの編集はこれだけです。後は、アプリケーションの設定を行います。アプリのルートディレクトリにある、2つの設定ファイル(application.json、route.json)を編集します。まずは、application.jsonに、インスタンス(アプリ内で使用するmojit)を設定します。
application.json
[
{
"settings": [ "master" ],
"appPort": 8666,
"specs": {
"hello": {
"type": "HelloWorld"
}
}
},
{
"settings": [ "environment:development" ],
"staticHandling": {
"forceUpdate": true
}
}
]
appPortで使用するポート番号を設定できます。また、specsで指定したオブジェクトにインスタンス名("hello")とその内容("HelloWorld" mojitを使用)を記述します。これでHelloWorld mojitを使用する準備が整いました。
次に、URLとインスタンスを紐づけるルーティングの設定を行います。route.jsonを次のように編集します。
route.json
[{
"settings": [ "master" ],
"hello-world": {
"verbs": ["get"],
"path" : "/",
"call" : "hello.index"
}
}]
hello-worldルートを作り、対象メソッドにGET、パスに"/"を指定しています。そして"call"部分で、このルートに紐付けるmojitとメソッドを設定します。ここではhello.indexと記述することで、helloインスタンス(HelloWorld mojit)のindexメソッドを指定しています(localhost:8666/にアクセスされると実行)。
④ デバイス毎の実行
最後に、サーバを起動してブラウザからアクセスしてみます。サーバの起動は、sample_appディレクトリ直下にて次のコマンドを実行します。
$ mojito start
ブラウザから、localhost:8666にアクセスすると、Hello worldと表示されます。もし、何らかのエラーが発生したら、コンソール画面に表示されます(console.logもコンソール画面に表示されます)。
ちなみに、ここまでで作成したコードからHTML5アプリを生成することもできます(Hello worldではあまり意味ないですけど)。
$ mojito build html5app
すると、sample_app内にartifactsディレクトリが生成され、この中のhtml5appディレクトリ内にHTML5アプリが作成されます。内部を少し見ると、以下のようになります。route.jsonの中で、"/"パスに指定した画面がindex.htmlとして生成されています。
├── application.json
├── artifacts
│ └── builds
│ └── html5app
│ ├── cache.manifest
│ ├── index.html
│ ├── index.js
│ └── static
│ ├── HTMLFrameMojit
│ │ └── definition.json
│ ├── HelloWorld
│ │ ├── assets
│ │ │ └── index.css
│ │ ├── binders
│ │ │ └── index.js
│ │ ├── controller.server.js
│ │ ├── definition.json
│ │ ├── models
│ │ │ └── foo.server.js
│ │ └── views
│ │ └── index.mu.html
...
今回は、サーバ側の単純なアプリ作成の紹介でした。実際には、モデルやビューを作成して画面を作ることになり、もっと本格的なアプリを作ることも可能です。また、mojitoからxcodeプロジェクトを作成することもできるようです。