この連載の趣旨と目次のページへ

jig.jp
代表取締役社長,CEO兼CTO
福野泰介

 「jigブラウザ」を2004年10月1日にリリースしてからちょうど1年目,2005年9月30日に「jigブラウザ2」のベータ版をリリースしました(図1)。jigブラウザがぶつかった限界を突破するために,ソフトウエアの基本構造を変えて新たに作ったものです。今回は,このjigブラウザ2βで施した工夫に関して説明します。

図1 jigブラウザ2βの画面 複数の閲覧画面を同時に立ち上げ,切り替えて表示できる。後述する「jiglet」のアイコンが表示されている。

 この連載の第1回で説明したように,1年で約80回のペースでバージョンアップを繰り返すうちに,jigブラウザが搭載する機能はどんどん増えていきました。利用者から寄せられる要望や,普段自分で使っていく中で欲しいと思った機能を,バージョンアップのたびに次々に搭載していったからです(表1図2)。

表1 「jigブラウザ」の主要バージョンの推移
公開日時 バージョン番号 主な追加機能
2004/10/1 1.0.0 jigブラウザ公開
2004/11/25 2.0.0 RSSリーダー追加
2004/12/17 3.0.0 検索機能追加
2005/4/21 4.0.0 PCメール機能追加(検索をTOOLに変更)
2005/8/8 5.0.0 タブブラウジング機能追加
2005/9/30 6.0.0 プラグイン機能追加(jigブラウザ2β)

図2 jigブラウザのメニュー・バーの変遷 jigブラウザのメニュー・バーの変遷。上から順にバージョン1からバージョン5まで。機能が追加されていく様子が分かる。

 iアプリには,プログラム・サイズが100Kバイトまでという制約があります(DoJa4.0の場合)。開発当初は潤沢だと思えた数字ですが,機能を追加していくうちに容量の限界が近づいてきました。容量の制限内に収めるための作業量が増え,機能拡張スピードが鈍くなるという懸念が浮かび上がってきました。

 iアプリなど携帯電話機上のアプリケーション・プログラム実行環境には,登場した時からプログラム・サイズの上限がありました。その歴史は,プログラム・サイズとの戦いでもありました。2000年に「iアプリ」の最初の仕様であるDoJa1.0が発表された時点では,プログラムに使える容量が10Kバイト,データ保存に使える容量10Kバイトと非常に厳しい制限がありました。多くのコンテンツ・プロバイダがこの制限に苦しみました。

 その後,携帯電話機の性能や,通信速度の向上に合わせるようにプログラム・サイズも拡大し,例えばNTTドコモのFOMA現行機種が採用するiアプリ仕様DoJa4.0では,プログラムが100Kバイト,データ保存に使える容量が400Kバイトと,当初に比べ10倍以上の容量が使用可能になっています。

 しかし,容量に制限があることには変わりなく,いずれ限界が来ます。私たちの開発チームでは,Javaソース・コードに対するプリプロセサの利用,クラス数やメソッド数を極力抑えるプログラム構造,クラス・ファイルをより小さく圧縮する手法など,独自に積み重ねたプログラム容量を圧縮する技法を使ってきました。しかし,思いのほか早く限界が来てしまったのです。

プラグインによる解決を図る

 そこで私たちが取り入れたのは,プラグインの考え方でした。ブラウザ・ソフトにすべての機能を詰め込むのではなく,基本機能と,プラグインが提供する機能に分離する方法です。この方法は,後述するように当初考えていた以上のメリットをもたらしてくれました。

 現在,パソコン用ブラウザの分野では,多数のプラグインが公開されていて,ユーザーは,それぞれの使い方に合わせて取捨選択して利用するようになっています。それと同じことを携帯電話機向けブラウザでも実現しようとしたわけです。

 プラグイン化のメリットとしてまず挙げられるのは「高機能化」と「高速・軽快・シンプル」の共存です。ブラウザ・アプリケーションは,当たり前のように使われるアプリケーションであり,その使われ方は千差万別です。その一人ひとりにこだわりがあり,求めている機能が微妙に異なります。そのとき,考えられる使われ方すべてをカバーするようなアプリケーションにしようとすると,複雑化の一途をたどり,動作が重く,分かりにくくなってしまいがちです。

 現に,jigブラウザに寄せられる声の中に「高機能の追究よりも速度を」という声が多々あり,その要望にも応えたいという思いがありました。プラグインの形を採ることで,ユーザーが必要な機能を必要な分だけ選ぶことができ,基本となる部分はひたすら高速性を追究した作りにすることができるため,都合が良かったわけです。

携帯電話でプラグインを実現する方法

 プラグインを携帯電話機上のアプリケーション・プログラム実行環境の枠組みの中で実現するために必要だったのは,処理系,つまりプラグインのプログラムを動作させるためのプラットフォームです。Java技術にはプログラムの実行時に,新たなプログラム・モジュール(クラス)を動的に読み込む仕組みであるクラス・ローダが備わっていますが,現在の携帯電話機用のプロファイルであるDoJaやMIDPの土台となっているJ2ME CLDCには搭載されていません(図3)。そのため,動的な機能拡張の仕組みを独自に用意する必要があったわけです。

図3 J2ME CLDCとJ2SEの違い Java技術としての基本的な機能は共通だが,J2MEにはクラス・ローダなどの機能が含まれていない。

 プログラムの実行時に動的に機能を拡張する仕組みとして,私たちが採用したのは仮想マシン(virtual machine)です。携帯電話機上のJavaアプリケーションという制約の中で選択できる方法は他にあまりなく,また今までの経験から,この方法であれば実現できる見通しがありました。

 仮想マシンとは,コンピュータ・ハードウエアの動作をソフトウエアにより実現する方法です。Smalltalk,Java,.NETなどはいずれも仮想マシンを使った処理系です。Javaをはじめとする仮想マシンでは,プログラムを中間コード(Javaの場合はJavaバイトコード)にコンパイルすることで,実行ファイルのサイズを小さくする工夫をしています。「仮想マシンは実行速度が遅い」という弱点がよく指摘されますが,長年に渡って高速化手法の改善が進んだ結果,最近の仮想マシンは十分に高速です。こうした背景も私たちの目的に合っていました。

 私たちが設計した独自の仮想マシンをjigletVMと呼び,その上で動作するプログラムをjigletと呼ぶことにしました(図4)。~letというのは,Applet,Bookmarkletなど慣習的に小さいプログラムを表します。利用者にはこのjigletを好みに合わせて選択し,プラグインして使ってもらうわけです。

図4 jigブラウザ2βの基本構造 独自の仮想マシン「jigletVM」と,独自APIセット「jigletAPI」を備え,jiglet実行のための機能を提供する。

 jigletは,jigletAPIを使って作成します。jigletAPIは,キー操作や画面描画など基本的な機能や,ブラウザ本体が提供する機能(指定URLからのデータ取得など)との連携機能を提供する独自APIです。

 jigブラウザ2βには,ベース部分であるブラウザに,仮想マシンであるjigletVMと,jigletAPIを組み込みました。このjigletAPIの仕様は,私たちが普段の開発で使っているライブラリの機能群を整理する形で作ることができました。100Kバイトというプログラム容量の制限内にjigletVMとjigletAPIを組み入れるため,必要十分のシンプルな仕様としています。

 jigブラウザ2βは「iアプリ」など携帯電話機上のJavaアプリケーションであり,Javaの仮想マシン上で動作しています。つまりjigletは2重の仮想マシン上で動作していることになります。当然,その速度低下は懸念されるところですが,この連載の第1回で示したベンチマークで見られるように,携帯電話機における処理速度の向上は4年で1000倍程度と目覚ましく,結果的には十分実用的な速度が得られています。

プラグインによって広がる拡張性

 プラグイン化のメリットは,これだけではなりませんでした。当初,私たちが考えていたのは,前述したようにブラウザ本体とプラグインに機能を分離することで,高機能と高速・軽快・シンプルであることを両立させることでした。しかし既に「副産物」といえるメリットが2つ生まれています。第1に,プログラム容量の限界を最大5倍に拡大できたこと。第2に,利用者自身の手でjigブラウザを拡張できる可能性が出てきたことです。

 前述したように,プログラム容量の上限が100Kバイトという制限は,携帯電話機向けプログラム開発の上での足かせになっています。しかし,データ容量に目を転じてみると,その上限は400Kバイトもあります。プログラム容量の4倍の「未開拓地」があったわけです。

 jigブラウザ2βにおけるプラグイン「jiglet」は,iアプリを実行するJava仮想マシンからは単なるデータとして扱われます。このため,jigletは実際にはプログラムなのですがデータ領域に格納できます。つまり,プログラム容量として最大で合計500Kバイトと,今までの5倍の容量が利用できることになります。

 もちろん,これは「理論値」です。ブックマークなどのデータを保存するための領域が必要なため,実際に使える容量はこの数字より減ります。しかし,利用者が必要な機能を取捨選択することができたり,その容量の使い方をコントロールできるなど,利用方法と開発手法のいずれにおいても自由度は確実に上がりました。

 もうひとつのメリットは,jigletAPIの仕様や開発方法を公開することで,利用者自身の手でjigブラウザの機能を拡張することが可能になったことです。様々な機能を私たち自身が提供するのはもちろんのこと,利用者自身がjigブラウザを改良,作成,提案することが可能になります。

 ちょっとした「小さな便利さ」でも,肌身離さず利用する携帯電話機であれば,その利便性が際立ちます。ブラウザと連携し,すぐに起動できるプラグインならではの様々なアプリケーションが生み出されるような環境を作っていきたいと思っています。次回は,このjigletの作り方や使い方,そして私たちが今までに取り組んできた製品での開発に関する考え方について,説明したいと思います。