イベント終わった。
今回はゲーム出展が多そうな雰囲気があったので、ブラウザゲー的な物の配置もやめてイベント中に何か作ればいいかと思ってた。 蓋を開けてみたら遊べるゲームが沢山出てたので旧作の配置をやめたのは正解だったようだ。
ゲームは沢山あるのですぐ使えるツール的なのが欲しいかと考えて、簡単なブラウザ拡張を作ってみたが、意外に苦労せず出来て十分実用的なものになったので満足だ。
イベントに出す物として何か簡単なツールが欲しいなと考えてた。いつも使ってるGitHub Notifierというブラウザ拡張が便利なのでそんな感じでピアキャスのイベント開催状況を通知してくれる拡張が作れるといいな。
まずは普段使ってるOpera用の拡張を作りたいが、今のOperaはChromeとだいたい同じなのでChromeの拡張作成方法を調べた方が情報が多いだろう。 調べみるといくらか解説してるサイトが見つかり、テンプレみたいな物も配布されてたのでそれを参考に作ってみる。
基本的にOpera/Chromeの拡張作成は簡単で、manifest.jsonというファイルに設定を書いてスクリプト等のリソースと同じディレクトリにつっこんでおけば完成だった。あとはOperaの拡張機能ページから読み込んだりパッケージ化してデバッグできる。
イベントデータを取得するのに取得元へのアクセスを許可しないといけないのと、KnockoutJSでevalを使ってるからevalを許可しないといけないあたりが気をつける点で、あとは何の問題も無かったと言えよう。いずれも許可設定はmanifest.jsonにちょこっと書くだけ。eval許可はあんまりおすすめしないよって書いてあったが仕方ない。
ツールバーアイコンに最近のイベント数を表示したかったが、そこはGitHub Notifierを参考にしたらすぐ出来た。簡単だなー。
Operaでパッケージを作ったら~.nexというファイルができて、あちこちにcrxと書いてあるのと違うんでちょっとびっくりしたが、Opera用の拡張はnexらしい。特にOpera専用APIは使ってないのでcrxに拡張子変えちゃっても大丈夫だろう。Operaはcrxでもインストールしてくれた。
完成したっぽいので配布したが特に問題は報告されてないので大丈夫だったみたい。よしよし。
俺使ってるのOpera12なんだけどっていう人がいたが、気持ちは分かるが今更それに対応するのもなーということで諦めた。
Operaの拡張が簡単だったので気を良くして次はFirefoxの拡張を作り始めた。IEは調べてないけどたぶんActiveXなんでしょ?
しかしFirefoxの拡張は調べてもあまり情報が出てこない。これは古い情報ですとかいうのばっかりだぞ。 それでも調べるとどうもAdd-On SDKというのを使えばいいらしいということでこれを使うことに。
Add-On SDKを落としてみるとPythonが必要と書いてあるんだが、Python 2.5か2.6が必要で3.0と3.1には対応していなくて、Windowsでは2.7.6でも動かないと書いてある。最新のPythonは何かと見ると3.4.0と2.7.6だ。どれ使えばいいんだよ! 3.0と3.1は対応していないってことは3.3とか3.4は対応しているんだろうか? いやでも普通に考えればPython 2系にしか対応してないってことだよな。 でもその後でWindowsでは2.7.6で動かないって書いてあるってことはここの情報は最近まで更新されてる? だったら2.5か2.6が必要って書いてあって2.7が無いのはおかしくないか? ていうか2.7.6がダメなのはわかるけどじゃあ2.7.5は大丈夫なの? 中途半端に情報更新するのはやめてほしいなぁ……。 結局のところWindows用のPython 2.7.5を入れてみたらちゃんと動いた。
どうやって作るのか公式のドキュメントを見ながら調べてみるが結構めんどくさそう。 イベントのハンドリングとかなんだかUIと通信みたいなことやってて面倒っぽいなぁ。 単にポップアップ表示してその中でHTMLのアプリが動けばいいだけなんだが。
とりあえずポップアップ(Firefoxだとpanelと呼ぶらしい)にOpera用拡張のHTMLをそのまま指定してみたら出た。 HTML内で作られたローディング画面のままにはなるが、これはOpera拡張でもあった外との通信が許可されてないせいだろう。 許可する設定さえしちゃえば動いちゃう?
ドキュメント読みづらいなぁと思いつつも見るとpackage.jsonに外との通信許可設定があった。これを有効にして出来t……あれー出来ないなぁ……。 もしやと思ってドキュメントを良く読むと、これ設定してもコンテント内スクリプトでは外と通信できねーから、ですと。うおおおおおおお! 外との通信はmain.jsとかその辺でやって、パネル内と通信して表示しないといけないらしい。うわぁクソめんどくせぇ。 どうもポップアップパネル内は一つのタブみたいな物で、そのドメイン内でしか通信できないみたいね。 作りとしては理解できるがめんどくさいよ。
作りかえるのはだいぶ大変そうだしどうしようかと思っていると、ドキュメントにあるサンプルでおかしなことをやってるのを思い出した。ポップアップで表示するページとして外部のページをそのまま指定していた。 これができるならイベントデータ取得元のサイトに拡張の中で表示したいページ自体も置いて、同じサイトからデータ取得すればいいんじゃね!? で、やってみたら出来ちゃった。えーこれでいいのー? パネルの中は単に普通のタブと同じ権限でしか動いてないからいいんだろうか。 でもアップデートもしてないのにいつの間にか拡張の内容が変わったりしちゃうじゃん?Webアプリなんてそんなもんだからいいのかも。
最終的に拡張としてはpackage.jsonとボタンを追加するだけのmain.jsとアイコンファイルだけが入った物となった。 まあ確かにこれで十分と言えばそうなんですが……。 Opera拡張でやったバッジみたいなのは作るのめんどくさそうなので諦めた。
アドオンバーにしか出てこないのは残念なんでツールバーボタンを作る方法を調べてみると、そもそもアドオンバーにボタンを追加するwidgetというオブジェクトはFirefox29では廃止ですと。おいそんな物ドキュメントで薦めてくるなよ。じゃあ変わりのuiというのを見るとこれはツールバーにボタンが追加できるっぽい。やったー……ってFirefox29からしか使えないって?!おいふざけんな移行期間とかないのかよ!あ、widgetはFirefox29で非推奨か。使えはするんだな。deprecatedとobsoleteがごっちゃになってましたすみません。
両対応するのは面倒そうだし、よく読むと一部Firefox30からしか使えない機能もあるとか書いてあったのでとりあえず諦めてアドオンバーだけにしておいた。29で上手く動かなければその時なんとかしよう。気付かない可能性も高いけど。
Firefoxの拡張はなんだかんだとめんどくさいし難しい。 究めればなんでもできるのかもしれないけど、一般人には厳しい世界だったよ……。