2014-12-17

Chrome40にservice workersがきた

Chrome 40になってService workersが来たらしい。デモを動かしてみたり自分で書いてみたりして紹介記事でも書こうかなと思っていたが、 +Hajime Morrita はRebuild.fmに出演して紹介してしまったし、ほかにもすでにいくらか紹介記事が出始めてきた(たとえばhttp://qiita.com/kinu/items/2abd61b4390f9bbaffc9)。賑やかしにと自分もスクリーンキャストの動画も撮ってみた。

ここではデモの補足として、Service workersってどんなものなのかをふんわり考えてみる。

Service workers とは

って項目を書いたのだがこの説明が難しい……。新しいウェブのAPI、だけだとだからなにって感じ。Service workersはweb workersの一種なのだが、って説明しはじめると泥沼に嵌りそうだ。

Service workersでブラウザの機能として大きいと思うのは、タブと独立して動くJSの実行環境を手に入れるということだと思う。

Web workersというのはJSのスレッドみたいなものなので、普通にタブのなかのスクリプトから作られるし、タブが閉じられると消える。複数のタブで共有されるshared workerというのもいるけれど、これもタブが全部閉じたら消える。どちらもタブに従属している。

それと違い、Service workerはブラウザにインストールされる。さいしょにインストールするには、登録するページを読まないといけないけれど、登録が済んでしまえばページとは関係なく動作する(細かい補足になるが、動作するといっても、つねにプロセスを起動しっぱなしにするということではない。必要に応じて起動する)。で、ウェブページやウェブアプリと協調動作していろんなうれしい機能を提供する。

そういうバックグラウンドサービスというのは、実はこれまでブラウザにはなかった。拡張機能によってそういうのはなんとかしてきた歴史があったが、そうした無理を解消しつつ標準化していくのがService workersなのかなというのが個人的な認識だ。

Service workersの役目とスコープ

Service workerはウェブのリクエストを取り扱う。そういう意味では、少し前に話題になったフェッチAPIと関係がある。

リクエストの取扱範囲はスコープで制御される。デフォルトは登録元のサイトのトップで、これはようするにサイト全体がひとつのウェブアプリになっていてservice workerはそのウェブアプリに対して動作するということが念頭にあるのかなと思う。ただもちろん、登録時のオプショナル引数でそこからサブディレクトリに制限をかけることもできる。

取り扱い範囲のフェッチリクエストが来ると、まずService workersのfetchイベントハンドラを駆動する。Service workerはそのイベントハンドラを勝手に横取りして自分で勝手にレスポンスを作ってもよい(これがデモでやってみた事例)。なんにもしなければ普通のリクエストに戻っていく。

ただ、スクリーンキャストのなかでぶつぶつしゃべったように、ふつうはダミーデータを作ったりすることは少ないはずだ(ネットワークがつながってないときにエラーメッセージを渡すというのはあるかも)。ありがちなサンプルとしては、
  • 画像やCSSなど静的なデータをキャッシュしておき、ネットワークなしでもページをロードできるようにする(オフライン化)
  • twitterのフィードフェッチなど、複数タブを開いていると無駄になりそうなコネクションの一本化
といったところだろう。この辺はService worker専用のキャッシュAPIなどを使うことになる。と思う。

アプリのオフライン化についてはapplication cacheというAPIがこれまでもあったのだけど、残念ながらいろんな事情からマイナーな仕様にとどまっている。application cacheと比べると、簡単な事例についてはService workersのほうが書く量は増えることになるが、柔軟性が圧倒的に高く管理しやすいので、いろいろ考えるとService workersのほうがいいんじゃないかという気がする。application cacheのつらみはこの記事でよく解説されている(らしい。ごめん読んでない)。

Service workersとevent pages

Service workersの動作や仕様を眺めているとChrome拡張機能のevent pagesと近しい印象を受ける。

Chrome拡張機能にはいろんな機能があるんだけど、background pagesというのがあった。拡張機能はページにくっついたり、ポップアップになったり、自前でタブを開いたりするのだが、ユーザに見える部分とは別にいろんな処理をまとめるバックエンドがあるといろいろ便利で、それがbackground pagesとなる。拡張機能やChromeアプリを作るとき、ユーザに見える部分は単にHTML/CSS/JSでシンプルに作って、イベントハンドラからbackground pagesにメッセージを投げていろんな処理や拡張機能用のAPI呼び出しを一本化したり、といったことに使われてきた。

background pagesは便利だったんだけど、問題がひとつあった。というのは、拡張機能をインストールするとそのbackground pagesのプロセスがずーっと起動しっぱなしになってリソースを無駄遣いするのだ。そこで導入されたのがevent pagesで、ようするに「background pagesなんだけど、ブラウザは適当にプロセス止めてもいいっすよ」というフラグをつけたものと思えばいい。

event pagesはインストール時や初回起動時に実行され、イベントハンドラを登録する。そういうイベントが発生したときや、また拡張機能のUIからbackground pageにメッセージを投げようとすると、プロセスが起こってメッセージを処理し、しばらくするとプロセスが勝手に止まる。

Service workersは、このevent pagesをウェブ流にうまく表現したもの、ということができると思う。Chromeの場合、プロセスを適当なタイミングで閉じて、フェッチが発生したりページからpostMessageしたときだけプロセスが起こるというのもいっしょだ(よく知らないけど実装もけっこう流用できていると思う)。拡張機能を書いてて便利だったことがいろいろできるようになる。はずである。

Service workersの現状と今後

最初に書いたようにChromeでは40から使えるようになった(39でもコマンドラインフラグを指定すれば使えるようになっていたが、フラグフリップしたようだ)。ほかにサポートを表明しているのはFirefoxだが、こちらはフラグがないとまだ動かないらしい。Operaはよく知らないけど、なかみはBlinkなので対応は進むと思われる。それ以外のブラウザは対応を表明していない(Firefoxが支持しているというのは面白いところなんだけど……まあそういう深読みはここでは避ける)。

そういう状況なので、いますぐService workersを使わないとヤバイ、とか、もう準備万端なのでバリバリ使うべき、という話とは程遠い。が、Service workersはキャッシュやオフライン化をオプショナルに、つまり「できる環境でだけうれしい」程度の機能として提供しやすいという面がある。そういう面では、Chromeの安定版で使えるようになるあと数週間後には、触ってみてどんなもんなのか試してみるぐらいの価値はあると思う。

ただ仕様はまだドラフト段階なので、細部は変わる可能性はある。詳しくはgithubのissueにて熟知すべし。なのかな。

なお、Service workersの仕様は、それなりに長いんだけど、機能としては比較的シンプルだということに気づく。ようするに、基本的にはフェッチイベントを受け取ってキャッシュしたデータをサーブする、という機能に特化していてそれ以外の用途にはあんまり向いていない。ほかにもこんなことができたら面白そうなんだけど、という夢みたいな話はあまり入っていない。

たとえばサーバからプッシュ通信を受けつけることができるとしよう。Facebookで誰かがメッセージを送ったらサーバプッシュが届いて、それをservice workersが受けて、タブが開いてなくても通知が出せる、となったら、かなり夢が広がる気がする。Google calendarの通知とか、いいかげんタブ開いてなくても教えてほしい。そういうのはまさに拡張機能が受け持っていた機能だったけど、ブラウザごとに作るのは不毛すぎる。

ほかにも、拡張機能のevent pagesにはchrome.alarmsというAPIがあって、定期的に処理するようなイベントなんだけど、これもService workersには含まれていない。1分ごとにフェッチして変化があったらページに通知して……みたいなやつ。window.setIntervalがあればいいじゃん、て思うかもしれないけれど、それは普通のJSのAPIなのでプロセスが止まったら不都合が生じてしまう(コードの意味が変わってしまう)ため、プロセスを止められなくなる。別なAPIで対応してあげる必要がある。

実はこの辺も議論されている。プッシュ通知はpush APIという別なAPIが提案されているし、定期的にservice workerを起こすというのはbackground sync APIという仕様になるようだ。

というあたりの状況からすると、service workersはいわば導入編であって、これを軸にこれからいろんな面白機能が入ってくるのかなと期待している。そういう意味でもservice workersはいろいろ注目のAPIだと思う。

謝辞

このブログの記事、先週頭ぐらいに書いていたドラフトがあったのだが、いろいろあって完全に書き直してしまった。もとの文章と全然違っちゃったけどそちらにコメントや訂正をいただいた+Eiji Kitamura+Hiroki Nakagawaありがとうございました。むろん、間違いや勘違いの責任は向井にあります。

参考資料
  1. Chrome 40 で今すぐ ServiceWorker を試す: http://qiita.com/kinu/items/2abd61b4390f9bbaffc9 
  2. Service Workers spec: http://slightlyoff.github.io/ServiceWorker/spec/service_worker/
  3. Service workers samples: https://github.com/GoogleChrome/samples/tree/gh-pages/service-worker
  4. AppCache: https://html.spec.whatwg.org/multipage/browsers.html#offline
  5. Chrome extensions event pages: https://developer.chrome.com/extensions/event_pages
  6. push API: https://w3c.github.io/push-api/
  7. Background sync: https://github.com/slightlyoff/BackgroundSync/blob/master/explainer.md

2014-11-23

今季のUSのドラマその後

一言でまとめるとGOTHAMが面白いです。

GOTHAM

5話まで見たがマジで面白い。刑事物とかアクションとしてはアラがあるかもしれないけれど、物事の裏で進行するファルコーネとマローニの対立がストーリーをうまく回している。これに加えてウェイン財閥も綺麗なわけではないようで……。さらにギャング二人の対立構造のなかでペンギンが立ちまわる、という筋立てのため、ほとんど主人公的な立ち位置になっててある種の立身出世ものになっているのが良い。

逆にそれ以外の原作ヴィラン(リドルとかキャットウーマンとか)は今のところ存在感薄いなあ……。これからいろいろあるのだとは思いますが。

刑事物にありがちな「こんな凶悪事件ばっかり起きてて大丈夫なのかこの街」という疑問も「でもゴッサム・シティだからなぁ」で解決できるのは正直便利だなと思いました(笑)。

THE FLASH

まあまあ面白いけど、ヒーロー物としては正統派すぎてふつう。評価高いのなんででしょうか……。日本だと仮面ライダーシリーズ的な立ち位置として思えばまあこんなもんかなと思う。自分はまあそういうのも好きなので良いといえば良いです。

Agents of S.H.I.E.L.D. シーズン2

いまのところ期待はずれ。第一期のラストの、『キャプテン・アメリカ:ウィンター・ソルジャー』上映中と重なったことをふまえた展開は神がかっていて良かったのになあ。

第一期では主人公たちはS.H.I.E.L.D.という巨大組織のある種独立愚連隊的なもんだし、敵も謎めいていたのが良かったわけですが、今回はもう中枢だし、敵の正体もはっきりしていてつまんないですよ。まあ他の展開を期待しつつ待ちたいところ。

映画が出てきたらクロスオーバーで面白いのかもしれませんが。エイジ・オブ・ウルトロンが来年5月で、それまでほかの映画ないんだっけ? そしたらクロスオーバーはなしか。残念……。

乾緑郎『機巧のイヴ』



機巧のイヴ

ちょっと珍しいタイプの時代小説風SF。スチームパンクというか、からくり細工とSFの組み合わせパターン、なのはそこだけ捉えるとありがちなんだけど、こういう世界観はあまり見ないかも。なかなか良かった。

牛山藩に使える江川仁左衛門は、幕府の精錬方手伝、釘宮久蔵を訪ねた。自分の想い人と瓜ふたつの機巧人形を作ってもらうために……という第1話め「機巧のイヴ」は読んでいて妙な既視感があるなぁ……と思ったらそういえば『年間SF傑作選』にて既読でした。機巧細工で人間さえも模倣できるスチームパンクの世界観の面白さと、ちょっと捻った結末が良い。

以降はこの釘宮久蔵を狂言回しにして、同一世界で機巧+時代小説な組み合わせの連作短編全5話という構成。ただし後ろ3話はわりとひとつながりのストーリーになっているので、第2話だけ少しすわりが悪いかな……一応ラストにまでもつながる展開ではあるんですが。

改めて1話めと比較すると少し違う感じになっていませんか?という文句も少し言いたくなる面はあって、「機巧のイヴ」が単体で面白いのと比べると後半は少し弱いとも言えるけれど、徐々に世界観が明らかになっていく後半の展開もこれはこれで別な面白さがあって良いと思いました。

オチは少し弱いかな。

2014-11-20

シリコンバレー、わりとさむい

何度か似たようなことを書いたことがある記憶もあるのだけれど、まあ重複上等ということで。

なんか最近けっこう寒いのです。とくに朝晩。あと雨降ったりもする。今も降っている。もちろん、寒いといっても大したことはなく、東京の11月と同じくらいの気温。たとえば水曜日の天気は雨、最高気温18度で最低気温が9度(ともに摂氏)という感じなんですがね……。

なんというかどうも、ベイエリアは(サンフランシスコを除いて)だいたいいつも晴れてて暖かく過ごしやすい、というイメージがあると思うし(こないだrebuild.fmの66 aftershowでもそんなこと言ってたし)、そのイメージがいまだに自分の中にも残っているので、なんだか毎年ムダにびっくりしている感じ。わざわざ驚くまでもなく、この季節になると実はそこそこ寒いのだった。

ただ、この辺はこれ以上寒くはならないので、これから本格的に寒さを迎える12月から2月くらいにはかえって過ごしやすいように思えるかなと思います。

統計を見てみると

というだけではつまらないので軽く統計を眺めてみると、Wikipediaに記載されているサンノゼ市の気候統計によると、1981年から2010年までの統計で11月の月間平均最高気温は摂氏17.9度、平均最低気温は7.8度となっていて、ここ数日の天気がまさしく平年並みであることを教えてくれました。そっかこんなもんか。

なお東京も同じくWikipediaから転載してみると、同じくで11月の月間平均最高気温は16.9度、平均最低気温が9.9度となっています。朝晩はむしろ寒いぐらいだなあと思っていたけど、やっぱり東京よりやや寒いんですね。逆に日中は少し温かい。

サンノゼでは12月と1月は同統計によると最高14度強、最低5度強となり、2月には11月と同程度に回復するようなので、これからもう少しだけ寒くなるというのが正確なところ。東京の気候は12月が5.1-12.4度、1月が2.5-9.9度、2月が2.9-10.4度、3月でも5.6-13.3度と推移するので、この辺の期間は東京よりはずっと過ごしやすいということになるのかなと。

ちなみに夏を比較すると、最高気温はけっこう暑いのですが(とはいえ8月でも最高気温の平均は30度を超えないので、真夏日にはほとんどならないでしょうが)、大きく違うのは最低気温で、8月でも最低気温は14.6度となっており、熱帯夜のような日がありえないということがわかります。最低気温14度程度というのは東京だと5月か10月くらいの水準です。ようは春か秋くらいの感じ。あと基本的に雨が降らず乾燥しているので不快指数的な違いは大きいですね。

雨季と降雨量

ついでに「いつも晴れている」ということについても書いておくと、ベイエリアは夏はカラッといつでも晴れていますが冬が雨季といわれていて、そこそこ雨が降ります。雨はそんなに珍しくありません。

前掲の統計にも降雨についての情報がありますが、11月における雨の日は平均で7.2日。4日に1日くらいは雨ふってる感じです。12月から1月は10日を超えているので3日に1回ぐらい雨が降っています。月間10日雨って東京の5月ころと同じぐらいの頻度です。けっこう多いな。

ただ降雨量に着目すると、たしかにほぼゼロな夏よりは多いですが、11月で降雨量42.7mm、12月66.3mm、1月78mm、2月79mm、3月64.5mmといった具合の推移で、これは日本人的な感覚としてはかなり少ないと思われます。

たとえば、東京は冬場は乾燥しますが、それでも降雨量は50mm強で推移していますから、雨季でそれより少し程度の雨量というのは、この辺がいかに乾燥しているかわかりますね。東京の6月の降雨量は平均でこの3倍ぐらい(167.7mm)あるようです。

じっさい、雨といっても霧雨か小雨といった程度であることが多いですし、それなりの強さの雨だとラジオなんかではストームだとか言っております。雨の感覚は狂う。

ちなみに雪は降りません。こちらに来て3年目、まだ市街地での雪は見たことがないですし、雪は降らないと聞きます。いま前掲Wikipediaを見てみたら、サンノゼ市で地面に雪が残る程度の降雪の一番新しい記録は1976年2月5日だそうで。ほう。

まとめ

比較するといろいろ面白かったですが、11月くらいの気候は東京とかなり近いようですね。なお東京と比較したのは自分が住んでたからなので、他の日本の都市のことはよくわかりません。それともちろん、統計は統計なのであって個別な例外はいっぱいあります。

ところで完璧に余談ですが、先日寒いなあと家に帰りがてら、アパートの住民らしき女性が水着の上にパーカーだけ羽織って出かけるのとすれ違いましたが、外もすっかり暗くなってましたがあれからプールで泳いだんですかね……寒さに強い人間の考えることはようわからん……

2014-11-17

イスラム系スーパーヒロインの新生『ミス・マーベル』



Ms. Marvel Volume 1: No Normal

なんかの記事で見かけて面白そうだったので買ってみたが、なかなか良かった。

アメコミヒーローシリーズの『ミス・マーベル』が4代目になって新しくなった第1巻なんですが、大きな特徴は主人公がパキスタン系でムスリムの家庭の女の子であること。

カマラ・カーンはジャージーシティに住む16歳のふつうの女の子。ムスリムの家庭ではあるけれど、彼女じたいは伝統や慣習よりはアヴェンジャーズなどのコミックが好き(ファンフィクを書いたりしてる)。ただ、厳格な両親やムスリムとしての生活を受け入れた兄はそういうことに理解がないし、学校の白人の友達たちからは少し疎外感を味わっていて、週末のムスリム系の学校(補習校?)でも厳しい先生とはいまひとつそりがあってない。

ある日、親のいいつけを破って友達に誘われて夜のパーティに行った帰り、不思議な霧の中で彼女は幻覚を見、自分の姿形を自由に変形させる超常能力を得る(わけわからんなーと思ったけど、この霧じたいもInhumanityというマーベルユニバース全体のクロスオーバーシリーズの設定らしい)。幻覚に見えたミス・マーベル(初代)を見ながら「あなたみたいになりたい」と思った彼女は、ほんとうにそういう姿形に変化し、人助けをしたことから、人々のあいだにミス・マーベルの都市伝説が生まれる……といったものがオリジン。

褐色の肌で黒髪なパキスタン系のアメリカ人、しかもムスリムというスーパーヒロインはそれだけでもセンセーショナルな題材だし(マーヴェル・コミックスではタイトル持ちヒーローでムスリムは初とのこと)、白人リア充たちにちょっと憧れつつ彼らのようにはなれないことを思い知らされたり、なかなか攻めたテーマ設定にも思える。

ただ実際のところは、厳しい親の抑圧と自己の関係、理解のない家族や友だちとの人間関係、学校でもどちらかといえばスクールカースト下位なキャラクターが突然スーパーヒロインになるといった設定など、戦うヒロインものとしては比較的普遍的な(言い方をかえるとわりとふつうの)テーマを描いていて、そこが主眼なのかなという印象。ムスリムといった彩りはこうしたテーマとわかちがたく結びついているけれども、そこだけをセンセーショナルに取り上げた作品ではないなという感じ。

アートワークもなかなか良くて、アメコミみたいなガチムチな感じから離れて線もおとなしめ、マンガっぽい表現もあるし、特殊能力として体のあちこちが変化したりするのがディフォルメぽい演出になっていたりもして、良い感じです。

2014-11-07

『謎の独立国家ソマリランド』ちょっと他に類を見ない強烈なルポタージュ



謎の独立国家ソマリランド

+Shunichi Arai さんがべた褒めしていた本なので気になっていたが、めでたく電子化されたということで読了。たしかにめっぽう面白い。

独裁政権が倒れてから20年以上も無政府状態のまま内戦が続き、群雄割拠の戦国時代と化したソマリアと、そのなかにあってなぜか武装解除を実現し、平和を保つことに成功した自称独立国家のソマリランドに赴き、その実態を描いたルポタージュ。ごくごく薄いつてを辿って現地に入り、現地民と一緒にカートという麻薬を一緒にのみながら(食べながら?)交流しつつ、外部にはほとんど伝わってこないソマリランドとソマリアの実態を紹介していく。

面白い本なのは間違いないが、なにがどう面白いのか、ということを一言で表現するのは難しい。

一言で表現することが難しい理由のひとつは、内容は多岐にわたっているということもあるだろう。ソマリアの歴史、ソマリランド分離独立の根拠や歴史、そしてなぜ、ソマリアのほかの地域が紛争に明け暮れているのにソマリランドでだけ武装解除が可能だったのか。これが本書のメインの主題なのだがそれだけではない。

隣接するプントランドはほとんど「海賊国家」と化していて、ソマリア海賊の本拠地となっている(らしい)。それはなぜか? 逆に、なんでソマリランドには海賊がいないのか? 「リアル北斗の拳」などとすら言われる南部ソマリアはいったいどうなっているのか? かつての首都はどうなっているのか? アルカイダの支援があるというイスラム原理主義組織は現地民に受け入れられているのか?

著者は平和とされているソマリランドだけではなく、こうした紛争地帯のような場所にも足を運び、現地の人々に取材をし、こうした疑問に挑んでいく。

取材というが、そういう単語では言い表せなさそうなもっと壮絶なものだ。エピローグで軽い感じで紹介されているが、著者はソマリア取材中にイスラム原理主義勢力に襲撃され、護衛の車が爆破され複数人が負傷するような事態にも巻き込まれたのだという。読んでいても、このままこの人死ぬんちゃうかな……いやでも本が出てるから大丈夫なはずだな……という考えが脳裏をかすめる。とんでもない世界だ。

そしてその足でふたたびソマリランドに戻ってきた時、その奇跡のような平和さを読者も追体験することになる。一周してソマリランドを2回紹介する構成なので不思議な構成の本だと思うが、こういう意味では的確な構成でもあるように思う。そうしてソマリたちの制度や慣習、ソマリランドの制度を調査紹介していくうちに、最終的にはソマリランドの制度がむしろよく出来ていると褒め称えるぐらいになっている。……それはまあカートの見せた幻想だろうと話半分にするとしても、現地に入り込んだ人間にしかかけないリアリティはある。

個人的には一番すごいなと思ったのは、著者が案内人といっしょに実際に海賊行為の算段をはじめ、見積もりを取り始めるところ。ホテルの隣室にたまたま海賊が泊まってたよ、といって実際に何が必要なのかを聞いてきて、コストと利益を比較する。そうやって海賊行為がどういう計算のもとにどうして行われているのか、外国人が裏で暗躍するというのがどういうことか理解できたとするだが……ことここにいたり、これはちょっと類を見ないタイプの本だなと思った。

---

なお、ソマリアに多数いる氏族や分家の勢力関係をわかりやすく表現するために、なぜか著者は平家や源氏、北条氏、はては武田や伊達などといった武将の家名や名前をラベル付に利用している。これがこの本の一種独特な雰囲気というかフィクションぽさを強めているように思えて、嫌いな人は嫌いなんじゃないかと思うが、実際たしかにこのほうが頭に入りやすいのは確かだなぁと思ったので俺は良いと思います。

2014-11-06

ジョン、全裸連盟へ行く



ジョン、全裸連盟へ行く

BBCのドラマ『SHERLOCK』にインスパイアされた、現代イギリスを舞台としたホームズパスティーシュ短篇集。といってもイギリスでの刊行物ではなく、著者はシャーロック・ホームズものコレクターとしても著名な北原尚彦氏。ミステリマガジン誌で掲載した短編をまとめたものらしい。でもいちおうBBC公認だそうです。

わたしはシャーロキアンではないので細かいことはよくわからないけれど、(たぶん)原典などをうまく取り入れつつ、BBCの『SHERLOCK』っぽいところも出しつつ、パロディっぽい突拍子のなさもありつつ、うまい塩梅の短篇集となっていると思います。

一番のお気に入りは表題作の「全裸連盟」ですかね。問題の謎はすぐわかるんだけど、タイトルとテーマのおかしさが良い。あと、その発想はなかったというかさすがに無茶すぎるだろうとも思うけれども「まだらの綱」も良かったかな。

--

なお、いちおう公認とのことですが、本作は件のドラマのノベライズではなく、あくまでも「現代もののホームズ・パスティーシュ」ですので、お間違いないように。ファングッズとしての価値はかなり薄いと思います。

ただ読んでいて思ったんですが、ドラマにしても本作にしても、原典へのリスペクトがあってこそのおもしろさなんだなと。ちょっと再確認した次第です。