こんにちは、ギャップラー小林です。

 今回は、先週開催された ABC 2015 Summer に参加した弊社エンジニア「こっしー」によるレポートをお伝えします!


去る 7月20日に開催された、ABC 2015 Summer に行ってきました。

公式サイト のタイムテーブルにもあるように、今回はハンズオンが非常に充実している会でした。 Pepperにメイドさんに、いつも通りの「何でもあり」感。

基調講演大ホールで行われたセッション などは、当日の模様が動画でも確認できますので紹介を割愛いたしまして、今回はセッションの中から独断と偏見で気になった2本を詳解したいと思います。

今、Androidのブラウザの中で起きていること!?

川田 寛 様のセッション、「今、Androidのブラウザの中で起きていること!?」。 タイトルから「WebView や Android版Chrome の話をするのかな?」と想像していたのですが実際はもっと根底の話。 Android 4.4からは、WebView が Chromium ベースに切り替わったのですが、最近は Chromiumプロジェクトや、そのレンダリングエンジンである Blinkのプロジェクトでも、「モバイル」を重要視しているのだとか。 そういう流れもあり、WebViewの元である Chromiumプロジェクトや Blinkプロジェクトの最近の動向を見ておけば、この先のWebViewの動きが分かる!…という先を見据えた話でした。

最近の Chromium/Blinkプロジェクトでの大きな動きとして、以下の7点を軸にお話されていました。

  1. スケジューラ
  2. アニメーション
  3. UI
  4. バックグラウンド処理
  5. ネットワーク
  6. JavaScript
  7. ペイント

その中でも特に気になったものをピックアップして紹介します。

パフォーマンスアップ

モバイルは、どんどんハイスペック化してきているとは言え、やはりPCと比べるとCPUもメモリも貧弱。 モバイル上での快適なブラウジングのためには、抜本的なパフォーマンスアップは不可欠です。

Blinkプロジェクトでは、ユーザ操作に対する反応が100ms以下になるように改善を進めているそうです。 反応までのディレイが100ms以下ならば、ユーザは「待ち」を感じないんだとか。 そのために、タスクスケジューラの改善を行っているようです。 具体的には、タスク種類ごとの優先度の見直し。 スクリプト実行の優先度を下げ、ユーザインタラクションハンドリングの優先度を上げることで、体感速度を向上させる狙いのようです。

さて、JavaScriptエンジンはシングルスレッド。 故に、重い処理でスレッドを固めるのは御法度で、タイマなどで適宜処理を分割する必要があります。 この「sleepを挟んでの処理の登録」用に、RequestIdleCallback API を策定中で、これを使えば「タスクキューが空の場合のみに実行させる」という優先度最低の処理の登録ができるみたいです。

もう1つはメモリ。 JavaScript でDOM Objectの操作を行う場合、ネイティブのレンダリングエンジンが持つDOMオブジェクトとは別に、JavaScript VM上にDOMオブジェクトのインスタンスが存在することになります。 「同じ内容なのに2つ持つのは無駄!」ということで、ネイティブヒープ上のオブジェクトと JavaScript VM上のオブジェクトを共用にするという、何とも大胆な思想が Oil-can Heap プロジェクト。 まだまだ実験段階のようですが、今後に期待大です。

アニメーション

アニメーションのはいハイパフォーマンス化は、「いかにCPUを使わず、GPUに任せるか?」という観点が重要ですが、そういう意味でもてはやされた CSS3アニメーション。 しかしながら、中断などの制御がしにくいという問題点がありました。 これに代わる機構として、Web Animations というAPIが策定中のようです。 開始や中断などの制御はJavaScriptから出来つつ、アニメーションの進行にはJavaScriptが絡まないようになっているようです。

Android M の新しいパーミッションモデルと、アンドロイドセキュリティ

谷口 岳 様のセッション、「Android M の新しいパーミッションモデルと、アンドロイドセキュリティ」。

現在、developer preview2 まで出ている、Android 時期バージョン「M」。 ユーザにも開発者にも影響が大きい変更として、「パーミッションモデルの変更」があります。

セッションでは、新しいパーミッションモデルへの対応法や、互換性について説明されていました。

新旧パーミッションモデルの違い

従来のAndroidのパーミッション取得は、「Install time permission」。 Playストアからのインストールの際に、許可を求めるダイアログが表示される、アレです。 ユーザにとっては、「1回許可すればよいので煩わしくない」、開発者にとっては「許可は取れている前提でアプリの実装をすればよい」と、メリットも多い方式だったのですが、「全て受け入れる or インストールを諦める、の両極端しかない」と言った小回りの効かなさもあり、変更されることになりました。

新しいパーミッションの取得機構は、実行時に問われる「Run time permission」。 iOSのそれによく似た形で、開発者側がAPIで「現在の許可状況の確認」と「許可を求めるダイアログを出す」ことができます。 また、ユーザは実行後も、設定画面から任意のタイミングで、許可の取り消しや 再付与ができるようになっています。 これによって、「電話帳アクセスはOKだケド、GPSアクセスはイヤ!」のような、部分的な許可もできるようになりました。

さて、気になる互換性なのですが、動作環境が Android Lでも、アプリが以前のもの(targetSdkVersion が L未満のもの)ならば、旧来の「インストール時のパーミッション要求」が継続されるようです。 「よかった、じゃあ古いアプリの改修は要らないんだね」と安心したのも束の間! 「任意タイミングでの許可取り消し」は有効なようで、取り消せてしまうようです。 …ということは対応が必要になりそうですね、トホホ…。

Android Mに向けて

例年の流れですと、Android Mの正式版がリリースされるのは、恐らく今年のから年末に掛けて。 その間に出る Developer Previewでの動作を確認しつつ、Mのリリースに今から備えましょう!

ギャップロでは、Android M特集も予定しています!