Google は、2 月 21 日より、社会課題をテクノロジーで解決に導くスタートアップを対象とした 3 か月集中型のプログラム 「Google for Startups Accelerator Class 4」を実施します。 このプログラムは Google による技術、組織運営など幅広い分野にわたるトレーニングや個別のメンターシップを提供し、参加企業のさらなる成長を支援します。昨年 9 月 より募集を開始し、多くの素晴らしい目標を持ったスタートアップにご応募を頂き、厳正な選考の結果、本プログラムに下記 8 社のスタートアップが参加します。


Google は、2 月 21 日より、社会課題をテクノロジーで解決に導くスタートアップを対象とした 3 か月集中型のプログラム 「Google for Startups Accelerator Class 4」を実施します。 このプログラムは Google による技術、組織運営など幅広い分野にわたるトレーニングや個別のメンターシップを提供し、参加企業のさらなる成長を支援します。昨年 9 月 より募集を開始し、多くの素晴らしい目標を持ったスタートアップにご応募を頂き、厳正な選考の結果、本プログラムに下記 8 社のスタートアップが参加します。



参加企業一覧(アルファベット順)

CogSmart : 頭部 MRI 画像などを利用した脳健康測定、BrainSuite プログラムを通じて、「認知症にならない健康脳づくり」「生涯健康脳」の社会的な普及を目指しているヘルスケア サービス (Healthcare / Brain)

Hubble : 契約書の管理・共有をスマートにするリーガルテック SaaS (Legal Tech)

Latona : IoT やエッジコンピューティングの技術を使ったビジネス プラットフォームを開発し、企業に提供することで、ワークプロセスの自動化・生産性の向上を目指しているサービス (AI, ML) 

NearMe : タクシーをシェアしてお得にドアツードア移動できる「相乗り」サービス。NearMe(ニアミー)は、独自の AI によりルーティングを最適化したスマートシャトルなどを展開し、リアルタイムの位置情報を活用して地域活性化に貢献する “瞬間マッチング” プラットフォーム作りを目指している。(Mobility as a Service, Sharing Economy)

PocketMarche : 全国の農家・漁師と直接やり取りしながら旬の食材を購入できる産直アプリ。生産者や地域と継続してつながるふるさと納税サービス。(EC, Marketplace)

Study Valley : 来年度から必修化される探究学習を効率的に行えるようにし、また社会との接点を創出する学習プラットフォーム (Ed Tech)

Tutorial : PC 端末にインストールせず、いつでもどこでも利用できる、クラウド型 RPA Robotic Crowd を提供 (Robotics)

unerry : 月 200 億件超の位置情報ビッグデータを扱う AI プラットフォームを開発・運営 (Geo Location AI)


​​今後の流れ

今後 3 か月に渡って、社会課題解決に特化したセッションをはじめ、機械学習などのテクノロジーに関するセッション、世界の外部メンターや Google 社員によるオンライン メンタリングなどを提供していきます。

プログラムについての詳細は、Google for Startups のページをご参照ください。

この記事は Chrome デベロッパー、David Bienvenu による Chromium Blog の記事 "Chrome on Windows performance improvements and the journey of Native Window Occlusion" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

この記事は Chrome デベロッパー、David Bienvenu による Chromium Blog の記事 "Chrome on Windows performance improvements and the journey of Native Window Occlusion" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。




ブラウザをタブグループで整理している方でも、ウィンドウに名前を付けている方でも、タブ検索やその他の方法を使っている方でも、目的のタブにたどり着くためにたくさんの機能を使うことができます。速さと好奇心の今回の投稿では、どのウィンドウが表示されているかを利用してどのように Chrome を最適化したかについて説明します。その結果、起動が 25.8% 速くなり、クラッシュは 4.5% 減少しました。

背景

Chrome では、数年間にわたるユーザー エクスペリエンス改善の取り組みの中で、バックグラウンド タブの優先度を下げてきました [1]。たとえばバックグラウンド タブでは、JavaScript の速度を制限したり、ウェブ コンテンツのレンダリングを抑制したりしています。これにより、CPU や GPU、メモリの使用量が減少し、実際にユーザーに表示されるフォアグラウンド タブで利用できるメモリや CPU、GPU が増加します。一方で、このロジックの対象になるのは、ウィンドウでフォーカスが当たっていないタブ、最小化されているウィンドウ、画面外のウィンドウのみです。

実験を通して、Chrome のウィンドウの 20% 近くが、完全に別のウィンドウのうしろに隠れている(オクルージョンされている)ことがわかりました。私たちは、こういったオクルージョンされているウィンドウをバックグラウンド タブと同じように扱うことができれば、パフォーマンスは大幅に向上するに違いないという仮説を立てました。そこで、今から 3 年ほど前に、各 Chrome ウィンドウのオクルージョン状態をリアルタイムに追跡し、オクルージョン対象のウィンドウのタブの優先度を下げるというプロジェクトを始めました。このプロジェクトを行うには、ユーザーの画面に表示されている Chrome 以外のウィンドウのネイティブ位置を知る必要があります。そこで、プロジェクトをネイティブ ウィンドウ オクルージョンと名付けました(位置情報は、オクルージョンの計算に使った後、即座に破棄しています)。

ネイティブ ウィンドウ オクルージョンの計算

Windows OS では、あるウィンドウが完全に他のウィンドウに隠れているかどうかを直接的に知る方法は提供されていません。そのため、Chrome は独自に検知する必要があります。他の Chrome ウィンドウだけを考えればよいのなら、これは簡単です。Chrome のウィンドウがどこにあるかはわかっているからです。しかしここでは、ユーザーが開いているかもしれない Chrome 以外のウィンドウをすべて考慮し、Chrome のウィンドウのオクルージョン状態が変わるかもしれないイベントをすべて検知する必要があります。

どの Chrome ウィンドウがオクルージョン対象かを継続的に追跡するには、主に 2 つのことが必要です。1 つ目はオクルージョンの計算です。ここでは、デスクトップで開いているウィンドウについて z-order 順(前から後)に反復処理を行い、そのウィンドウが Chrome ウィンドウを完全に隠しているかどうかを確認します。2 つ目は、そのオクルージョンの計算をいつ行うかを決めることです。

オクルージョンの計算

理論的には、どのウィンドウがオクルージョン対象かを判断するのは簡単です。しかし実際には、マルチモニタ環境仮想デスクトップ透過ウィンドウクロークされたウィンドウなど、複雑な要素がたくさん存在します。この点には、慎重に対処しなければなりません。実際にユーザーに表示されているウィンドウをオクルージョン対象と判断してしまうと、ウェブ コンテンツが表示されるはずの場所が白くなってしまうからです。また、オクルージョンの計算をしている間に UI スレッドをブロックすることは、Chrome の応答性とユーザー エクスペリエンスが悪化する可能性があるため、避けなければなりません。そこで、次のようにして別のスレッドでオクルージョンの計算をしています。
  1. 最小化されたウィンドウは表示されないので、無視する。
  2. 別の仮想デスクトップ上にある Chrome ウィンドウはオクルージョン対象とマークする。
  3. ディスプレイのモニターを組み合わせた仮想画面の矩形を計算する。これがオクルージョンされていない画面の矩形になります。
  4. デスクトップで開いているウィンドウについて、前から後の順番に反復処理を行う。見えないウィンドウ、透明なウィンドウ、フローティング ウィンドウ(スタイルが WS_EX_TOOLBAR であるウィンドウ)、クロークされたウィンドウ、他の仮想デスクトップのウィンドウ、非矩形ウィンドウ [2] などは無視する。重要な点として、このようなウィンドウを無視すると、オクルージョン対象のウィンドウの一部が表示されているものと見なされる(偽陰性)可能性がありますが、表示されているウィンドウがオクルージョン対象と見なされる(偽陽性)ことはありません。各ウィンドウについて以下を行います。
    • オクルージョンされていない画面の矩形から対象のウィンドウの領域を引く。
    • 対象のウィンドウが Chrome ウィンドウである場合は、その領域がオクルージョンされていない領域と重なっているかどうかを確認する。重なっていない場合、その Chrome ウィンドウは前にあるウィンドウによって完全に覆われているため、オクルージョン対象になります。
  5. すべての Chrome ウィンドウの計算が終わるまで繰り返す。
  6. この時点で、オクルージョン対象とマークされていない Chrome ウィンドウは表示されていることになり、オクルージョンの計算は終了する。ここで、UI スレッドにタスクをポストし、Chrome ウィンドウの表示状態を更新します。
  7. この操作は、すべて同期ロックを使わずに行われるので、オクルージョンの計算は UI スレッドに最低限の影響しか与えない。たとえば、UI スレッドをブロックしてユーザー エクスペリエンスを悪化させることはありません。
実装についてさらに詳しく知りたい方は、ドキュメントをご覧ください。


オクルージョンの計算タイミングの決定

オクルージョンの計算をし続けると、Chrome のパフォーマンスが低下することになるので、それは避けたいことです。つまり、ウィンドウが表示対象またはオクルージョン対象になるタイミングを検知する必要があります。ありがたいことに Windows では、ウィンドウの移動、リサイズ、最大化、最小化などのさまざまなシステム イベントをトラッキングできます。オクルージョン計算スレッドは、これらのイベントを追跡したいことを Windows に伝えます。そしてイベントが通知されると、イベントを精査して新たにオクルージョン計算を行うかどうかを決定します。非常に短い時間内に複数のイベントを受け取る可能性があるため、オクルージョンの計算は 16 ミリ秒に 1 回を超える頻度では行いません。この時間は、フレームレートが 1 秒あたり 60 フレーム(fps)である場合に 1 フレームが表示される時間に対応します。

リッスンするイベントは、ウィンドウのアクティブ化や非アクティブ化、ウィンドウの移動やリサイズ、ユーザーの画面ロックやロック解除、モニターの電源オフなどです。オクルージョンの計算は必要以上に行いたくありませんが、ウィンドウが表示されるイベントを見逃すわけにはいきません。見逃してしまうと、ウェブ コンテンツが表示されるはずの場所が白くなってしまうからです。これは絶妙なバランスです [3]

リッスンするイベントは、Chrome ウィンドウがオクルージョンされるかどうかに関わるものです。たとえば、マウスを動かすとたくさんのイベントが発生し、カーソルも点滅するたびにイベントを発行しています。そういったイベントはウィンドウ オブジェクトとは関係ないので、無視します。また、ツールチップの表示によってオクルージョンの計算がトリガーされることはないので、大半のポップアップ ウィンドウのイベントも無視します。

オクルージョン スレッドは、さまざまな Windows イベントを検知したいことを Windows に伝えます。UI スレッドは、主要な状態変化(モニターの電源オフ、ユーザーによる画面ロック)が発生した場合にそれを検知したいことを Windows に伝えます。





結果

この機能は、効果を測定する実験と合わせて開発され、2020 年 10 月に M86 リリースの一部としてすべての Chrome Windows ユーザーにロールアウトされました。指標から、この機能をオンにした場合にパフォーマンスが大幅に改善されることがわかります。
  • 起動時間が 8.5% から 25.8% 短縮
  • GPU メモリ使用量を 3.1% 削減
  • レンダラー全体の描画フレーム数を 20.4% 削減
  • レンダラーのクラッシュが発生したクライアントが 4.5% 減少
  • First Input Delay(初回入力までの遅延時間)が 3.0% 向上
  • First Contentful Paint(視覚コンテンツの初期表示時間)と Largest Contentful Paint(最大視覚コンテンツの表示時間)が 6.7% 向上
起動時間と初回入力までの遅延時間が改善したのは、Chrome が起動時に 2 つ以上の全画面ウィンドウを復元する場合、いずれかのウィンドウがオクルージョンされる可能性が高いためです。Chrome はそのウィンドウに関する大半の作業を省略できるので、より重要なフォアグラウンド ウィンドウのためにリソースを節約できます。

すべての統計情報の出典 : Chrome クライアントから匿名で集計した実データ
[1] 音声や動画を再生しているタブなど、一部のタブは優先度が下がりません。
[2] 非矩形ウィンドウの計算は複雑です。これはあまり使われないと考えられていましたが、Windows 7 のデフォルト テーマの特性上、Windows 7 では一般的に使われています。
[3] 最初にこれをリリースしたとき、Citrix で別のユーザーが画面をロックすると、Windows が現在のセッションではないセッションの変化通知を送信してくるため、白いウィンドウが表示されることがすぐにわかりました。詳細はこちらをご覧ください。

Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Bento エンジニアリング、Alan Orozco による The AMP Blog の記事 "Introducing Bento" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Bento コンポーネント ライブラリを公開

AMP コミュニティから特に多く寄せられている要望の 1 つは、AMP の高パフォーマンスなコンポーネントを AMP 以外のページでも利用できるようにすることです。この度、Bento コンポーネントの第 1 ラウンドが完全リリースされたことをお知らせします。Bento コンポーネントは、高パフォーマンス、高ユーザー エクスペリエンスのコンポーネントで、ウェブ デベロッパーがページに機能を追加して優れたユーザー エクスペリエンスを実現する際に、直面する現実的な問題を解消できるようになっています。ぜひ試してみて、フィードバックをお送りください。Bento の詳細は、新しい Bento ブログで確認できます。

この記事は Bento エンジニアリング、Alan Orozco による The AMP Blog の記事 "Introducing Bento" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Bento コンポーネント ライブラリを公開

AMP コミュニティから特に多く寄せられている要望の 1 つは、AMP の高パフォーマンスなコンポーネントを AMP 以外のページでも利用できるようにすることです。この度、Bento コンポーネントの第 1 ラウンドが完全リリースされたことをお知らせします。Bento コンポーネントは、高パフォーマンス、高ユーザー エクスペリエンスのコンポーネントで、ウェブ デベロッパーがページに機能を追加して優れたユーザー エクスペリエンスを実現する際に、直面する現実的な問題を解消できるようになっています。ぜひ試してみて、フィードバックをお送りください。Bento の詳細は、新しい Bento ブログで確認できます。

あらゆる場所で AMP コンポーネントを使う

AMP Project の目的は、常にユーザーファーストな体験を作れるようにデベロッパーをサポートすることです。この価値提案の中核にあるのは、高パフォーマンスでユーザー中心の AMP コンポーネントです。そこに Bento が加わり、これまで AMP でしか使えなかった高パフォーマンスな Web Component をお気に入りのフレームワークや CMS で使えるようになります。

たとえば、非 AMP ページにカルーセルを追加するなど、1 度限りのケースに Bento コンポーネントを使うことができます。また、AMP に注目し、徐々にページを有効な AMP に変換しようと考えているデベロッパーにも便利です。 

Bento と AMP の今後の方向性 

AMP は今後も、すぐに使えるソリューションをウェブサイトに提供し、ウェブページで優れたユーザー エクスペリエンスを実現し続けます。また、AMP Project では、AMP 形式のサポートと強化を継続します。同時に、ウェブサイトのパブリッシャーには、AMP と互換性のないサイトで機能を使いたいというニーズもあることも理解しています。そういったパブリッシャーは、サイトで Bento コンポーネントを使い、他の機能に妥協することなく、具体的な UX の課題に対処できるようになります。 

私たちが思い描いているのは、パブリッシャーが自由に AMP を活用して優れたユーザー エクスペリエンスを実現したり、Bento を使って個々のパフォーマンスの問題に対処したり、AMP や Bento の助けを借りることなくページ エクスペリエンスの目標を達成したりできる未来です。 

今すぐ Bento をお試しください!

Bento コンポーネントを試してみたい方は、スタートガイドをご覧ください。チームは、GitHub や Slack チャンネルからフィードバックを送ることを推奨しています。フィードバックは大歓迎です。ぜひご協力ください。質問や問題がある方も、遠慮なくご連絡ください。


Reviewed by Eiji Kitamura - Developer Relations Team


この記事は Developer Programs Engineer の Christopher Arriola による Google Cloud Blog の記事 "Announcing version 6.0 of the Maps and Places SDKs for iOS" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

12 月 1 日(米国時間)、Maps SDK for iOS と Places SDK for iOS の新しいバージョンをリリースいたしました。バージョン 6.0 では、サポート対象の iOS のバージョンが iOS 12 からとなり、Apple M1 マシン上で iOS 14 以降のシミュレータを使用して開発する際に必要なバイナリを含む XCFramework のプレビュー サポートを提供し、デベロッパーの開発速度向上を実現します。また、このバージョンには、デベロッパーの皆様からのリクエストに基づいて、マーカーを地図に追加した際のアニメーション動作に関する新機能も追加しています。


この記事は Developer Programs Engineer の Christopher Arriola による Google Cloud Blog の記事 "Announcing version 6.0 of the Maps and Places SDKs for iOS" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

12 月 1 日(米国時間)、Maps SDK for iOS と Places SDK for iOS の新しいバージョンをリリースいたしました。バージョン 6.0 では、サポート対象の iOS のバージョンが iOS 12 からとなり、Apple M1 マシン上で iOS 14 以降のシミュレータを使用して開発する際に必要なバイナリを含む XCFramework のプレビュー サポートを提供し、デベロッパーの開発速度向上を実現します。また、このバージョンには、デベロッパーの皆様からのリクエストに基づいて、マーカーを地図に追加した際のアニメーション動作に関する新機能も追加しています。

マーカーのフェードイン アニメーション

バージョン 6.0 では、マーカーをマップに追加した際の表示をアニメーション化できるように、kGMSMarkerAnimationFadeIn という新しい GMSMarkerAnimation タイプが導入されました。


サンプルアプリで MarkersViewController をご覧ください

これを使用するには、マーカーをマップに追加する前に、マーカーの appearAnimation プロパティを設定します。
Swift

 let position = CLLocationCoordinate2D(latitude: -33.86, longitude: 151.2)

let marker = GMSMarker(position: position)

marker.appearAnimation = .fadeIn


Objective-C

 CLLocationCoordinate2D position = CLLocationCoordinate2DMake(-33.86, 151.2);

GMSMarker *marker = [GMSMarker markerwithPosition:position];

marker.appearAnimation = kGMSMarkerAnimationFadeIn;



XCFramework のサポート

従来、Maps SDK for iOS と Places SDK for iOS は、アプリの開発とリリースに必要なアーキテクチャを含む単一の .framework ファイルとして配布されていました。しかし、Apple M1 マシンを使用する場合、新しいバリアントである arm64 シミュレータに対応させるため、SDK を新しい XCFramework 形式に再パッケージ化する必要がありました。

Apple M1 マシンで以前のバージョンの SDK の使用を試みたことがある方は、以下のエラーに見覚えがあるはずです。

ld: building for iOS Simulator, but linking in object file built for iOS, file '[...]/GoogleMaps/Frameworks/GoogleMaps.framework/GoogleMaps for architecture arm64

Maps SDK for iOS と Places SDK for iOS のバージョン 6.0 のリリースでは、XCFramework のプレビュー サポートを提供し、Apple M1 マシンで発生していた上記のエラーを解消しています。プレビュー サポートの使用方法について詳しくは、Maps と Places のスタートガイドをご覧ください。

Maps SDK と Places SDK の XCFramework バージョンはベータ版のため、これらのバージョンは開発目的でのみ使用し、アプリをリリースする際には .framework バージョンを使用することをおすすめします。今後の SDK では、XCFramework のサポートを一般提供する予定です。

バージョン 6.0 をインストールしサンプルを確認する

CocoaPods や Carthage を使用して Maps SDK for iOSPlaces SDK for iOS のバージョン 6.0 をインストールできるようになりました。SDK の XCFramework プレビュー版をインストールする場合は、[Installing the XCFramework] タブをご覧ください。サポートする iOS バージョンは iOS 12 からとなるため、バージョン 6.0 を使用して開発するには Xcode 12 以降を使用する必要があります。iOS 11 のサポートは現在中止していますが、Maps SDK for iOS と Places SDK for iOS の古いバージョンを指定することで、引き続きご利用いただけます。

Google Maps Platform に関する詳しい情報はこちらをご覧ください。ご質問やフィードバックはページ右上の「お問い合わせ」より承っております。



Posted by 丸山 智康 (Tomoyasu Maruyama) - Developer Relations Team 

この記事は Chrome ソフトウェア エンジニア、Clark Duvall による Chromium Blog の記事 "Partitioning Chrome's Code for Faster Launch Times on Android" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。


通常、モバイル デバイスは、ノートパソコンやデスクトップよりもリソースが限られています。モバイル ユーザーが Chrome を高速に使えるようにするには、Chrome のリソース使用の最適化が欠かせません。Android 版の Chrome に機能を追加するにつれて、アプリにパッケージ化される Java コードの量は増え続けています。今回の速さと好奇心の投稿では、Isolated Splits によって Android 版 Chrome のスピードとメモリ使用量をどのように改善したのかについて説明します。この改善により、Android 版 Chrome のメモリ使用量が 5-7% 減少し、起動とページ読み込みの速度もさらに向上しました。 ...
この記事は Chrome ソフトウェア エンジニア、Clark Duvall による Chromium Blog の記事 "Partitioning Chrome's Code for Faster Launch Times on Android" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。


通常、モバイル デバイスは、ノートパソコンやデスクトップよりもリソースが限られています。モバイル ユーザーが Chrome を高速に使えるようにするには、Chrome のリソース使用の最適化が欠かせません。Android 版の Chrome に機能を追加するにつれて、アプリにパッケージ化される Java コードの量は増え続けています。今回の速さと好奇心の投稿では、Isolated Splits によって Android 版 Chrome のスピードとメモリ使用量をどのように改善したのかについて説明します。この改善により、Android 版 Chrome のメモリ使用量が 5-7% 減少し、起動とページ読み込みの速度もさらに向上しました。

問題

Android アプリ(Android 版 Chrome も含む)では、コンパイルされた Java コードが .dex ファイルに格納されます。Android 版 Chrome にはマルチプロセス アーキテクチャが採用されているため、そのユーザー エクスペリエンスが .dex サイズの増加に特に影響されやすくなります。通常、Android の Chrome では、ブラウザ プロセス、GPU プロセス、1 つ以上のレンダラ プロセスという 3 つ以上のプロセスが常に実行されています。Chrome の Java コードの大半はブラウザ プロセスでのみ使われます。しかし、そのコードを読み込むためのパフォーマンスとメモリのコストは、すべてのプロセスが支払うことになります。
 

バンドルと機能モジュール

プロセスを実行するために必要な最小チャンクの Java を読み込むことができれば理想的です。Android App Bundle を使ってコードを機能モジュールに分割することで、それに近づくことができます。機能モジュールを使うと、コードやリソース、アセットを個別の APK に分割し、オンデマンドでもアプリのインストール時でも、ベース APK とともにインストールできます。

ということは、まさに必要としているものが手に入りそうです。つまり、ブラウザ プロセスのコード用機能モジュールを作り、必要なときにそれを読み込むことができるかもしれません。しかし、Android はそのようにして機能モジュールを読み込むわけではありません。デフォルトで、すべてのインストールされている機能モジュールは起動時に読み込まれます。ベース モジュールと 3 つの機能モジュール "a"、"b"、"c" があるアプリなら、Android の Context と、次のような ClassLoader が得られます。





状況によっては、インストールするモジュールを最低限にとどめ、起動時にこれらのモジュールすべてを即座に読み込むという方法が役立つこともあります。たとえば、一部のユーザーしか必要としない大きな機能がある場合、必要のないユーザーはそれをまったくインストールしないようにします。しかし、一般的に使われる機能の場合、実行時に機能をダウンロードしなければならないと、ユーザーは不便を感じる可能性があります。たとえば、動作が遅くなったり、モバイルデータが利用できないときに問題になったりします。理想的な方法は、標準モジュールをすべて事前にインストールしておいて、実際に必要になったときのみ読み込むことです。

解決策は Isolated Splits

数日間 Android ソースコードを探し続けた結果、android:isolatedSplits という属性が見つかりました。これを "true" に設定すると、インストールされた分割 APK が起動時に読み込まれなくなり、明示的な読み込みが必要になります。これこそ、プロセスのリソース使用量を減らすために必要としていたものです。これにより、先ほどの ClassLoader は次のようになります。





Chrome では、レンダラーや GPU プロセスに必要な少量のコードを引き続きベース モジュールに配置し、ブラウザなどの高価な機能のコードは機能モジュールに分割し、必要なときに読み込みます。この方法を使うことで、子プロセスに読み込まれる .dex サイズを 75% 減らし、最大 2.5 MB にすることができました。その結果、起動が速くなり、メモリ使用量も減りました。

このアーキテクチャによって、ブラウザ プロセスの最適化も可能になります。アプリケーションの初期化中にブラウザ プロセスのコードの大部分をバックグラウンド スレッドでプリロードした場合も起動時間を短縮でき、読み込み時間が 7.6% 高速になりました。ブラウザのコードが必要なアクティビティなどのコンポーネントが起動するときには、すでに読み込みが終わっています。機能モジュールへの機能の割り当てを最適化すると、オンデマンドで機能を読み込むことができます。これにより、機能が実際に使われるまで、メモリや読み込みのコストを節約できます。

結果

M89 で Chrome に Isolated Splits が搭載されて以来、数か月にわたる実際のデータが蓄積されており、Android Oreo 以降を実行しているすべての Android ユーザーの Chrome で、メモリ使用量、起動時間、ページ読み込みのスピード、安定性が大きく改善されたことがわかりました。
  • 合計メモリ使用量の中央値が 5.2% 改善
  • レンダラー プロセスのメモリ使用量の中央値が 7.9% 改善
  • GPU プロセスのメモリ使用量の中央値が 7.6% 改善
  • ブラウザ プロセスのメモリ使用量の中央値が 1.2% 改善
  • 起動時間の 95 パーセンタイルが 7.6% 改善
  • ページ読み込みスピードの 95 パーセンタイルが 2.3% 改善
  • ブラウザのクラッシュ率とレンダラーのハング率の両方が大幅に改善
すべての統計情報の出典 : Chrome クライアントから匿名で集計した実データ

Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Theodore Olsauskas-Warren による Chromium Blog の記事 "Simplified Storage Controls" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
この記事は Theodore Olsauskas-Warren による Chromium Blog の記事 "Simplified Storage Controls" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

Chrome チームでは、ユーザーがウェブのプライバシーについての理解を深め、その管理を改善することができる方法を常に探しています。直近の変更によって、サイトのストレージ設定の管理がわかりやすくなります。

今回(元記事投稿当時より)、この変更を M97 ベータ版にロールアウトし、サイトが格納できるデータ(Cookie など)に関連するプライバシーやセキュリティの設定を再構成します。ユーザーは、個々のサイトが保存したすべてのデータを削除できます。この操作は、[ 設定 ] > [ プライバシーとセキュリティ ] > [ サイトの設定 ] > [ すべてのサイトに保存されている権限とデータを表示 ] を開いて行います。この操作では、chrome://settings/content/all が表示されます。[ 設定 ] > [ プライバシーとセキュリティ ] > [ Cookie と他のサイトのデータ ] > [ すべての Cookie とサイトデータを表示 ] に移動したときに表示される詳細コントロールは、削除する予定です。これは、[ 設定 ] の chrome://settings/siteData からも参照できます。このレベルで詳細を確認する機能はデベロッパーを対象にしたものです。デベロッパーは、今後も DevTools からこの機能にアクセスできます。

旧 : このページは削除予定。ウェブ関連のストレージの管理は、chrome://settings/content/all から行う。


新 : こちらの chrome://settings/content/all で、ユーザーがウェブ関連のストレージを削除できる。


変更点

私たちは、[ 設定 ] での細かい管理を簡素化することで、ユーザーにわかりやすい操作を実現できると考えています。ユーザーが個々の Cookie を削除できる場合、サイトの実装の詳細を意図せずに変更することになり、サイトの動作がおかしくなる可能性があります。これは予測が難しい問題です。さらに能力の高いユーザーが、Cookie の目的を不正に推測して、いくつかのプライバシー保護を侵害するリスクがあります。

この機能を使うのは主にデベロッパーなので、必要な DevTools のツール群と合わせてデベロッパー向けに提供を続けます。デベロッパーは DevTools にアクセスすることで、今後も必要に応じて Cookie ごとやストレージごとのレベルで詳細情報にアクセスできます。

詳細な Cookie の管理は引き続き DevTools で実行可能


Google は Chrome をさらに便利なものにしたいと考えているので、いつものように皆さんのフィードバックをお待ちしています。私たちの次のステップは、すべての詳細な Cookie の管理機能を DevTools で維持しつつ、この機能をページ情報から削除することです。ストレージ管理についてその他の質問やコメントがある方は、こちらからお知らせください。


Reviewed by Eiji Kitamura - Developer Relations Team

この記事は Chromium Blog の記事 "Chrome 97: WebTransport, New Array Static Methods and More" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

特に記載のない限り、下記の変更は Android、Chrome OS、Linux、macOS、Windows 向けの最新の Chrome ベータ版チャンネル リリースに適用されます。

3 桁のバージョン番号に対する準備

来年には、Chrome でバージョン 100 がリリースされます。つまり、Chrome のユーザー エージェント文字列で報告されるバージョン番号の桁が増えます。サイトオーナーが新しい文字列をテストしやすくするために、Chrome 96 では、Chrome のユーザー エージェント文字列として「100」が返されるようにするランタイム フラグが導入されています。chrome://flags/#force-major-version-to-100 と呼ばれるこの新しいフラグは、Chrome 96 以降で利用できます。詳細については、Chrome の User-Agent 文字列のメジャー バージョンを強制的に 100 にするをご覧ください。 

この記事は Chromium Blog の記事 "Chrome 97: WebTransport, New Array Static Methods and More" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

特に記載のない限り、下記の変更は Android、Chrome OS、Linux、macOS、Windows 向けの最新の Chrome ベータ版チャンネル リリースに適用されます。

3 桁のバージョン番号に対する準備

来年には、Chrome でバージョン 100 がリリースされます。つまり、Chrome のユーザー エージェント文字列で報告されるバージョン番号の桁が増えます。サイトオーナーが新しい文字列をテストしやすくするために、Chrome 96 では、Chrome のユーザー エージェント文字列として「100」が返されるようにするランタイム フラグが導入されています。chrome://flags/#force-major-version-to-100 と呼ばれるこの新しいフラグは、Chrome 96 以降で利用できます。詳細については、Chrome の User-Agent 文字列のメジャー バージョンを強制的に 100 にするをご覧ください。 

今回のリリースに追加された機能

details 要素の自動展開

閉じられた details 要素に対する検索やリンクができるようになります。また、こういった非表示の要素は、find-in-pageScrollToTextFragment のタイミング、あるいは要素のフラグメント ナビゲーションが使われたときに、自動的に展開されます。

レスポンス ヘッダーによる専用ワーカーへの Content-Security-Policy の提供

専用ワーカーが Content Security Policy の影響を受けるようになります。これまで、Chrome は、オーナーのドキュメントの Content Security Policy を誤って適用していました。

CSS

font-synthesis プロパティ

font-synthesis CSS プロパティは、フォント ファミリーに斜体、太字、小型英大文字のフェイスがない場合、ユーザー エージェントが斜体、太字、小型英大文字のフォント フェイスを合成できるようにするかどうかをコントロールします。font-synthesis プロパティがない場合、必要なバリエーションのフォント ファミリーがないウェブページで、不自然な形状のフォントになる可能性があります。

transform: perspective(none)

perspective() 関数の引数として、値 'none' がサポートされます。その場合、関数は無限大の引数を渡された場合のように動作します。これにより、perspective() 関数が関係しているアニメーションのエンドポイントの片方が単位行列であるアニメーションが簡単になります(場合によっては、実現可能になります)。

Keyboard API の Feature Policy

Chrome は、Feature Policy の許可リストで新しく keyboard-mapをサポートします。Keyboard.getLayoutMap() を使うと、英語やフランス語など、異なるキーボード レイアウトで押されたキーを特定できます。このメソッドは、iframe 要素では利用できません。また、Keyboard API を利用できなかった一部のウェブアプリ(Excel、Word、PowerPoint)のアーキテクチャで、このメソッドが利用できるようになります。

HTMLScriptElement.supports() メソッド

HTMLScriptElement.supports() メソッドは、script 要素を利用する新機能を統一的な方法で検出します。現在のところ、HTMLScriptElement の type 属性で利用できる種類を簡単に判定する方法はありません。

フォーム送信時の遅い段階での改行正規化

フォーム エントリの改行が Gecko や WebKit と同じように正規化されるようになります。これにより、Gecko と WebKit は改行を遅い段階で正規化するにもかかわらず、Chrome は早い段階で正規化するという、長期にわたって存在していた相互運用性の問題が解決します。Chrome 97 以降では、早い段階での正規化が削除され、遅い段階での正規化がすべてのエンコーディング タイプに拡張されます。

既存の Client Hint 名の標準化

Chrome 97 は、Sec-CH- プレフィックスを付けて Client Hint 名を標準化します。影響を受ける Client Hint は、dprwidthviewport-widthdevice-memoryrttdownlinkect です。Chrome では、以上のヒントの既存バージョンのサポートも継続されます。しかし、ウェブ デベロッパーは、今後のサポートの終了や削除に向けた準備をする必要があります。

WebTransport

WebTransport は、ウェブのセキュリティ モデルの制約を受けるクライアントがリモート サーバーと通信する際に、安全な多重化転送を可能にするプロトコル フレームワークです。

現在、ウェブ アプリケーション デベロッパーがリモート サーバーと双方向通信をする場合、WebSocketsRTCDataChannel という 2 つの API を使うことができます。WebSockets は TCP ベースなので、すべての TCP の欠点(ヘッドオブライン ブロッキング、信頼できないデータ転送の未サポート)を引き継ぐことになり、レイテンシが重要なアプリケーションには適しません。RTCDataChannel は Stream Control Transmission Protocol(SCTP)ベースなので、そのような欠点はありません。しかし、ピアツーピアで使うことを念頭に置いて設計されているので、クライアントサーバー設定で使われることはほとんどありません。WebTransport は、信頼できないデータと信頼できるデータの両方の双方向通信をサポートするクライアントサーバー API で、UDP 的なデータグラムによるキャンセル可能なストリームを利用します。WebTransport の呼び出しは DevTools の [Network] パネルで確認できます。[Type] 列を見ると、このプロトコルが使われていることがわかります。

詳しくは、WebTransport の試験運用をご覧ください。

JavaScript

このバージョンの Chrome には、V8 JavaScript エンジンのバージョン x.x が組み込まれます。具体的には、以下の変更点が含まれます。最新の機能リストをすべて確認したい方は、V8 リリースノートをご覧ください。

Array と TypedArray の findLast() と findLastIndex()

ArrayTypedArrayfindLast() と fileLastIndex() 静的メソッドをサポートします。この 2 つの関数は find() と findIndex() と同じですが、配列の最初からではなく最後から検索します。

サポートの終了と機能の削除

このバージョンの Chrome では、以下のサポートの終了と機能の削除が行われます。現在サポートが終了している機能以前に削除された機能のリストは、ChromeStatus.com をご覧ください。

WebRTC での SDES 鍵交換の削除

2013 年以降、WebRTC の SDES 鍵交換メカニズムは、関連する IETF 標準で使用禁止と宣言されています。IETF は、SDES 仕様を過去のものと宣言しています。近年では、Chrome での使用も大幅に減少しました。そのため、Chrome 97 で削除されます

サードパーティ コンテキストでの WebSQL の削除

サードパーティ コンテキストでの WebSQL が削除されます。Web SQL Database 標準が最初に提案されたのは 2009 年 4 月で、2010 年 11 月に検討が中止されました。Gecko はこの機能を実装しておらず、WebKit では 2019 年に非推奨となりました。W3C は、代替手段として Web StorageIndexed Database を推奨しています。

SDP Plan B の削除

WebRTC でセッションを確立するために使われる Session Description Protocol(SDP)は、Chromium では 2 種類の方言 Unified Plan と Plan B によって実装されています。Plan B はクロスブラウザの互換性がないため、削除されます


Reviewed by Eiji Kitamura - Developer Relations Team