株式会社クリアコード > ククログ

ククログ

«Developer Migration 2013: 「開発者は仕事でリーダブルなコードを書けるのか?」 #devmi 最新 ぐんまRuby会議01: 「プログラマー」 #guruby»
タグ:

開発したいFirefox for AndroidおよびFirefox用アドオン

こんにちは。クリアコードでMozilla FirefoxおよびThunderbirdのサポート業務を主に担当している結城です。

先日このブログで紹介したインターンシップ制度では、クリアコードのメンバーが開発したいと考えているフリーソフトウェアの中から「これは」というものをインターンが選択します。本エントリでは、開発したいと考えているフリーソフトウェアとして、Firefox for AndroidおよびFirefox用アドオンをいくつか挙げます。

Firefox for Android用アドオンとしては以下を開発したいと考えています。

  • Firefox for Android用アドオン「テキストリンク」
  • Firefox for Android用アドオン「ロケーションバーから新しいタブを開く」
  • Firefox for Android用アドオン「XUL/Migemo」

Firefox用アドオンとしては以下を開発(更新)したいと考えています。

  • Firefox用アドオン「XUL/Migemo」

以下に、各アドオンの開発内容の詳細を述べます。

Firefox for Android用アドオン「テキストリンク」の開発

概要

私が以前から個人的に開発しているFirefox用のアドオンの1つに、「テキストリンク」があります。このアドオンは、Webページ中に書かれたリンクになっていないURI文字列を自動的に検出して、通常のリンクのように開けるようにします。

URI文字列をリンク化する他の類似のアドオン(Linkification)とは異なり、このアドオンは、基本的にWebページの内容を改変しないという特徴があります。これは、アドオンがコンテンツに変更を加えてしまう事は望ましくないという、私の個人的なポリシーに基づいています。

私自身、個人的にAndroid端末を利用し始めてみて、この機能があった方が便利だ!という思いを改めて感じています。しかしながら、現在のテキストリンクはデスクトップ版のFirefox用に特化して開発されているため、そのままではFirefox for Androidでは動作しません。そこで、インターンシップの期間を用いてこのアドオンのFirefox for Android対応版を開発したいと考えています。

開発の流れ(現時点での想定)
  • 現在のテキストリンクのコアモジュールの設計を見直し、再起動がいらない種類のアドオンにもモジュールを再利用できるようにする。
  • コアモジュールを再利用して、Firefox for Android対応版テキストリンクを開発する。
  • もし可能であれば、デスクトップ版Firefox用のテキストリンクについても再起動がいらないようにする。
開発に必要な要素技術や知識の分野
  • JavaScript一般の知識。
  • W3C DOMの知識。
  • Firefox/Firefox for Android固有のライブラリやモジュール、アドオン開発の作法。
  • 自動テストの知識。
挑戦ポイント

Firefox for Android用アドオンの開発は、古典的な形式のデスクトップ版Firefox用アドオンの開発とは異なる知識が要求されます。デスクトップ版Firefoxでの経験を踏まえて開発されたFirefox for Androidでは、アドオンを開発しやすいようなAPIが最初から整えられており、これまでFirefox用アドオンを開発してきた経験が無い人でも比較的取っつきやすいのではないかと思います。

また、テキストリンクにはコアモジュールの自動テストが用意されているため、変更が元で既存の機能が動かなくなったといった後退バグ(リグレッション)の検出が容易です。自動テストを伴う開発の例としても参考になるでしょう。

なお、デスクトップ版FirefoxとFirefox for Androidでは操作性がかなり異なっており、現状のテキストリンクをそのまま移植する事がユーザの利便に寄与するとは断言できません。実際に、Firefox for Androidではページ内のダブルタップが「ダブルタップされた要素へのズームイン」という操作に割り当てられているため、2つの動作をどのように並立させるかが問題となります。場合によっては、前述のようなポリシーを脇に置き、ページ内のURIをワンタップでリンクとして開くような設計に変更する必要があるかもしれません。

Firefox for Android用アドオン「ロケーションバーから新しいタブを開く」の開発

概要

私が以前から個人的に開発しているFirefox用のアドオンの1つに、「ロケーションバーから新しいタブを開く」があります。これは、FirefoxのロケーションバーにURIを入力した際に、現在のタブの内容を置き換える(現在のタブで読み込む)代わりに、必ず新しいタブでURIを開くようにします。

私自身、個人的にAndroid端末を利用し始めてみて、この機能があった方が便利だ!という思いを改めて感じています。しかしながら、現在の「ロケーションバーから新しいタブを開く」はデスクトップ版のFirefox用に特化して開発されているため、そのままではFirefox for Androidでは動作しません。そこで、インターンシップの期間を用いてこのアドオンのFirefox for Android対応版を開発したいと考えています。

開発の流れ(現時点での想定)
  • そのようなアドオンを実現する事が技術的に可能なのかどうかを調査する。
  • 実際のアドオンを開発する。
開発に必要な要素技術や知識の分野
  • JavaScript一般の知識。
  • Firefox/Firefox for Android固有のライブラリやモジュール、アドオン開発の作法。
  • Firefox for Androidのソースコードの調査方法。
挑戦ポイント

最大の懸念点は、本当にそのような事をするアドオンを開発できるのかどうか、技術的可否の裏付けが取れていないという点です。

デスクトップ版FirefoxはUIの隅々までカスタマイズできる仕様となっているため、このアドオンのように「FirefoxのUIの挙動を変更する」アドオンも容易に開発できます。しかしながら、Firefox for AndroidはロケーションバーなどのUI部分はJavaで開発されており、アドオンから制御できる部分は、メニューの内容などごく一部だけに限定されています。そのため、このようなアドオンはFirefox for Androidでは実現できないという可能性もあります。

ですので、プロジェクトの最初のステップとして、まず技術的な実現可否の調査からとりかかる必要があります。これは、クリアコードのFLOSSサポート業務でもよく見られるワークフローです。

Firefox for Android用アドオン「XUL/Migemo」の開発

概要

私が以前から個人的にメンテナンスしているFirefox用のアドオンの1つに、「XUL/Migemo」があります。これは、Firefoxのページ内検索などにおいて、ローマ字入力するだけで日本語の文章を検索できるようにするアドオンです。

Firefoxのページ内検索はインクリメンタルサーチと呼ばれる形式をとっており、キー入力が進むごとに、その内容がすぐ検索結果に反映されるようになっています。しかしながら、この種のインクリメンタルサーチと日本語入力(およびその他のIMEを必要とする言語)は相性が良くなく、変換・確定を待ってからでなければ検索できないという問題があります。XUL/Migemoは、内蔵の辞書を用いてこの問題を克服するアドオンです。ローマ字入力が1文字進むごとに、そこから推測された日本語の候補をインクリメンタルサーチすることができます。

Android端末では一般的に、デスクトップ環境以上に文字入力が大きな負担となります。日本語入力においては正しい変換候補を選ぶという手間が必要になりますが、画面サイズが小さいAndroid端末では、文字の入力も候補の選択もどちらも大変なストレスとなりがちです。そこで、インターンシップの期間を用いてこのアドオンのFirefox for Android対応版を開発したいと考えています。

開発の流れ(現時点での想定)
  • そのようなアドオンを実現する事が技術的に可能なのかどうかを調査する。
  • 現在のXUL/Migemoのコアモジュールの設計を見直し、再起動がいらない種類のアドオンにもモジュールを再利用できるようにする。
  • コアモジュールを再利用して、Firefox for Android対応版XUL/Migemoを開発する。
  • デスクトップ版Firefox用のXUL/Migemoにも開発の成果を反映する。
開発に必要な要素技術や知識の分野
  • JavaScript一般の知識。
  • Firefox/Firefox for Android固有のライブラリやモジュール、アドオン開発の作法。
  • Firefox for Androidのソースコードの調査方法。
  • 自動テストの知識。
挑戦ポイント

最大の懸念点は、「ロケーションバーから新しいタブを開く」と同様に、技術的可否の裏付けが取れていないという点です。ですので、プロジェクトの最初のステップとして、まず技術的な実現可否の調査からとりかかる必要があります。

また、現在のXUL/Migemoのコアモジュールは、歴史的な経緯から設計が複雑化しすぎており、再起動のいらないアドオンにすぐに組み込める状態にはなっていません。よって、ユーザが触れる事になるUIの開発に入る前に、コアモジュールのリファクタリングや再設計を行わなくてはなりません。XUL/Migemoのコアモジュールには自動テストが用意されていますが、モジュールの設計の変更に伴って、テスト自体のメンテナンスも並行して進める必要があります。

Firefox用アドオン「XUL/Migemo」の更新

概要

XUL/Migemo」には、Firefox for Androidに対応していないという以前に、最新のFirefoxで動作しなくなっているという問題があります。

XUL/MigemoはFirefoxの検索機能の挙動をシームレスに変更する事を目指して開発してきたため、Firefox自体のUIの設計変更の影響を受けやすい作りになっています。そのため、メンテナンスに十分な時間を割けなくなって以降、最新のFirefoxに追従できていない部分が非常に多くなっています。また、スマートロケーションバーの履歴・ブックマーク・タブを横断した検索機能との統合については、履歴データベースにアクセスする方法が今後大きく変わる予定であるという事がアドオン開発者向けにアナウンスされており、この点の追従にも大きな工数を要すると予想されます。

そのため、インターンシップの期間を用いてこのアドオンを更新したいと考えています。

開発の流れ(現時点での想定)
  • 現在のコアモジュールの設計を見直し、設計を近代化する。
  • FirefoxのUIの挙動を変更する箇所を修正する。
  • スマートロケーションバーの検索機能の実装を更新する。
開発に必要な要素技術や知識の分野
  • JavaScript一般の知識。
  • Firefox固有のライブラリやモジュール、アドオン開発の作法。
  • Firefoxのソースコードの調査方法。
  • 自動テストの知識。
挑戦ポイント

XUL/Migemoは古典的な形式のアドオンであるため、開発にあたってはFirefox内部の作りを詳しく調べる必要があります。これは、既存のFLOSSのソースコードの障害調査や改修でもよくある工程です。

また、現在のXUL/Migemoのコアモジュールは、歴史的な経緯から設計が複雑化しすぎている部分があるため、モジュールのリファクタリングや再設計も行っておきたい所です。XUL/Migemoのコアモジュールには自動テストが用意されていますが、モジュールの設計の変更に伴って、テスト自体のメンテナンスも並行して進める必要があります。

まとめ

インターンシップで開発したいFirefox for AndroidおよびFirefox用アドオンを4つ挙げました。この中に「挑戦してみたい!」と思えるアドオンがあれば、インターン募集ページから是非ともご応募下さい。

クリアコードは、日常的に利用するソフトウェアのちょっとした不満について、自力で工夫して解決してみたいと考える開発者を求めています。

2013-03-06

«Developer Migration 2013: 「開発者は仕事でリーダブルなコードを書けるのか?」 #devmi 最新 ぐんまRuby会議01: 「プログラマー」 #guruby»
2008|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|
タグ:
RubyKaigi 2015 sponsor RubyKaigi 2015 speaker RubyKaigi 2015 committer RubyKaigi 2014 official-sponsor RubyKaigi 2014 speaker RubyKaigi 2014 committer RubyKaigi 2013 OfficialSponsor RubyKaigi 2013 Speaker RubyKaigi 2013 Committer SapporoRubyKaigi 2012 OfficialSponsor SapporoRubyKaigi 2012 Speaker RubyKaigi2010 Sponsor RubyKaigi2010 Speaker RubyKaigi2010 Committer badge_speaker.gif RubyKaigi2010 Sponsor RubyKaigi2010 Speaker RubyKaigi2010 Committer
SapporoRubyKaigi02Sponsor
SapporoRubyKaigi02Speaker
RubyKaigi2009Sponsor
RubyKaigi2009Speaker
RubyKaigi2008Speaker