Quantcast
Channel: monoe's blog
Viewing all 51 articles
Browse latest View live

Microsoft Edge 拡張の作り方:pageAction 編

$
0
0

前回の記事に引き続き、Microsoft Edge の以下のアクションの拡張を作成する方法について紹介します。

今回はページアクションの拡張について紹介します。

(※Edge 拡張の概要と、コンテキストメニューの実装サンプルについてはこちらの記事をご覧ください。)

ページアクション

ページアクションの拡張は Web ブラウザーのアドレスバーに表示されるアイコンから機能を呼び出します。

アドレスバーの横にアイコンが表示されるという動作上、特定の URL のコンテンツに対しなにがしかの作業を行う用途に使用するのが良いでしょう。(もしくは、短縮 URL を生成するとか、でしょうか)

image

 

以降、ソースを使用して説明を行いますが、お手元で実際に動作させるには e-19.png という名前の 19 x 19 ピクセルのアイコン用の画像ファイルが必要です。

作成するのが面倒な方は以下の画像を保存して使用してください。

image

 

ページアクションの manifest.json

ブラウザーアクションの manifest.json は以下のようになります。

manifest.json のキー “page_action” の内容に注目してください。

default_icon” キーで、ツールバーに表示されるサイズのアイコンを、”default_title” でアイコン上に表示されるタイトルを指定しています。

このへんの指定は前回紹介したブラウザーアクションと一緒です。必要があればブラウザーアクションと同様に “default_popup” キーにポップアップとして使用する html ファイルを指定することもできます。

background” キーの “scripts”  では、ブラウザーの背後で動作する JS ファイルを指定しています。 サンプルでは background.js という名前をファイルを指定していますが、名前は任意のものでもかまいません。

同 “background” キー内の “persistent” は Background スクリプトやページを永続化させるかどうかを指定します。 なお “persistent” は Edge では必須となっており、 これを指定しないと動作しませんので注意が必要です。

permissions” キーでは権限を指定します。今回のサンプルではブラウザーのタブにアクセスし、タブ内のコンテンツにアクセスするので “tabs” と URL (“*://*/*”) を指定しています。

 

ページアクションの background.js (サンプル)

ページアクションの拡張の機能を記述する background.js  のソースは以下のとおりです。

browser.tabs.onUpdated イベントリスナでタブの更新を監視しており、更新された際にはタブから URL を取得します。

URL に “edge” という文字列が含まれていた場合は、browser.pageAction.show メソッドでアドレスバーの横にアイコンを表示します。

表示されたアイコンへのアクションは browser.pageAction.onClicked リスナーが監視しており、クリックされると引数として渡されたハンドラーが呼び出されます。

今回のサンプルコードでは browser.tabs.executeScript メソッドを使用して、引数に文字列として指定されたコードをタブ内のコンテンツにインジェクションして実行させます。

 

ページアクションのサンプルの実行

前述のサンプルコードを実際に Microsoft Edge で動作させるには、以下の手順を実行します。

  1. 拡張用の各ファイルを配置するための空の作業フォルダを作成します。
     
  2. フォルダ内に icon という名前でフォルダを作成し、e-19.png という名前で 19 x 19 ピクセルの画像を保存します。
     
  3. テキストエディタに ブラウザアクションの manifest.json のサンプルコードの内容を貼り付け、manifest.json という名前で作業フォルダに保存します。
     
  4. テキストエディタで新しいテキストを作成し、ページアクションの background.js (サンプル) のサンプルコードの内容を貼り付け background.js という名前で作業フォルダに保存します。
     
  5. Edge 拡張のテストインストール の内容を参考に Edge に拡張をインストールします。
     
  6. http://bit.ly/mk_ext_edge などの URL に “edge” という文字を含むページをブラウズし、アドレスバーの横にアイコンが表示されるのを確認します。

    image
     
  7. アドレスバーの横に表示されたアイコンをクリックし、ページの文字の色が緑色に変化することを確認してください。

 

タブ内のコンテンツへの JS ファイルでのインジェクション

今回のサンプルでは、browser.tabs.executeScript メソッドの引数に、文字列で渡されたコードをタブ内のコンテンツにインジェクションしていますが、この方式だとステップ数の多い長いコードを実行するのが大変です。

そのため browser.tabs.executeScript メソッドではインジェクションするコードを JS ファイルで渡す書式もサポートしています。

具体的には以下のような書式になります。

browser.tabs.executeScript(null,{
        “file”: “injectionCode.js”
    });


 

この書式を使用して、Edge のタブ内に表示されているコンテンツに新しいエレメントを追加するように改造してみましょう。


 

手順は以下のとおりです。

  1. background.js のソース内の browser.tabs.executeScript の引数のコメントアウトの行を以下のように変更します。
     
    browser.tabs.executeScript(null,{
            //”code”: “document.body.style.color=’green'”,
            “file”: “add_h1.js”
        });


     

  2. テキストエディタで新しいテキストを作成し、以下のコードを貼り付けて add_h1.js という名前で作業フォルダに保存します。

以上で拡張の改造は完了です。

現在インストールされている拡張を再読み込みして実行します。

Edge 拡張の再読み込みの手順に再読み込みを行ったあと、アドレスバーの横のアイコンをクリックし、表示されているコンテンツをいちばん下までスクロールしてください。

h1 タグが表示され、以下のような文字が表示さているのが確認できます。

image

まとめ

今回は Microsoft Edge のページアクション拡張について紹介しました。

ページアクションを使用すると、アドレスバー横のアイコンから拡張の機能を呼び出すことができます。

次回はコンテントスクリプツ拡張について紹介します。

 

Real Time Analytics

Clicky


Microsoft Edge 拡張の作り方:contentScripts 編

$
0
0

前回前回前回の記事に引き続き、Microsoft Edge の以下のアクションの拡張を作成する方法について紹介します。

(※Edge 拡張の概要と、コンテキストメニューの実装サンプルについてはこちらの記事をご覧ください。)

今回はコンテントスクリプツ の拡張について紹介します。

コンテントスクリプツ

コンテントスクリプツの拡張は、マニフェストファイルに記載されたリストにあるパターンにマッチした URL に対し、コンテンツのスクリプトファイルをロードするようブラウザに指示します。
ユーザーがその機能を呼び出すための UI は持ちません。

image

スクリプトファイルと URL パターンの関連付けが JavaScript コードの記述なしでできるので、簡易的なホワイト/ブラックリストを管理する拡張などが作成できます。

以降、ソースを使用して説明を行います。

 

コンテントスクリプツの manifest.json

コンテントスクリプツの manifest.json は以下のようになります。

manifest.json のキー “content_scripts” の内容に注目してください。

matches” キーで拡張の機能を動作させる URL を、”js” で JavaScript ファイルを指定しています。

 

コンテンツスクリプツで呼び出される JS ファイル

コンテンツスクリプツの拡張から呼び出される JS ファイル内のコードについて、特別な記述はとくに必要ありません。

一般的な Web コンテンツ上で使用される JavaScript 構文から拡張が提供する API を呼びだすことができます。

今回のサンプルでは、URL ごとに呼び出された JS ファイルが判別できるように、各々以下のようなしごく単純なコードを記述しています。

コンテンツスクリプツ拡張サンプルの実行

前述のサンプルコードを実際に Microsoft Edge で動作させるには、以下の手順を実行します。

  1. 拡張用の各ファイルを配置するための空の作業フォルダを作成します。
     
  2. テキストエディタに ブラウザアクションの manifest.json のサンプルコードの内容を貼り付け、manifest.json という名前で作業フォルダに保存します。
     
  3. テキストエディタで新しいテキストを作成し、コンテンツスクリプツで呼び出される JS ファイル のサンプルコードの内容を各々貼り付け、forMSDN_Blog.js、forMsEdge.js、forMsEdgeDev.js という名前で作業フォルダに保存します。
     
  4. Edge 拡張のテストインストール の内容を参考に Edge に拡張をインストールします。
     
  5. マニフェストファイルのリストされている以下の URL にアクセスします。
  6. 各ページごと以下のように alert ボックスが表示されるのを確認してください。
     
    image

まとめ

今回は、Microsoft Edge 用の拡張としてコンテンツスクリプツの機能について紹介しました。

コンテンツスクリプツを使用すると、マニフェストファイルに記載したパターンにマッチした URL の Web コンテンツに対し機能を実行することができます。

ブラウザーのインストールして使うという拡張の仕様上、頻繁なパターンリストが必要な用途には向きませんが、URL と機能の普遍的な組み合わせについては手軽に設定が可能です。

Real Time Analytics

Clicky

Microsoft Edge 拡張の相互運用性

$
0
0

以前の記事の「拡張機能の相互運用性」 で記述したとおり Edge の拡張用 API は Microsoft、Mozilla、Opera 3 社の提案する共通のコア API をサポートしており、その API は Chrome 拡張 API を強く意識したものになっています。

したがって共通化された拡張のコア API のみを使用して拡張を作成すれば、理屈上は Edge、Chrome、Firefox、Opera といったメジャー Web ブラウザーのどれでも動作する拡張が作成できることになります。(※)

(※)ただし、前述の 3 社が提案するコア API の仕様は、ブラウザベンダーが独自の API を追加することは許容されているので、そういった特定のブラウザーだげに実装されている機能については動作しない可能性があります。また、共通の API であってもすべてのブラウザーのサポートが完了していない場合はこの限りではありません。

 

今回の記事では Microsoft Edge の相互運用性ということで、Edge と Google Chrome の両方で使用できる拡張を作成する方法について紹介します。

 

マニフェストファイルにおける必須スキーマの違い

拡張の情報を Web ブラウザーに登録するためのマニフェストファイルにはわずかですが Edge とChrome で必須とするスキーマの違いがあります。

具体的には、マニフェストファイルにおいて Edge で必須となるスキーマのキーは name と author と version ですが、Chrome では manifest_version キーが必須であり、その値はつねに 2 である必要があります。逆に author キーの指定は Chrome では必須でありません。(2016 年 11 月現在)

image


また、background キーの指定でも Edge では persistent キーの指定が必須となります。


image



名前空間の違い

Edge と Chrome では拡張の API を提供する名前空間が異なります。

Edge は browser であるのに対し Chrome は chrome を使用します。

この際は以下のようなコードで吸収することができます。

image


上記のコードでは、Edge にロードされた場合に名前空間のインスタンスが格納されている browser という変数を調べ、値が設定されていなければ Chrome で使用された際に名前空間のインスタンスが格納されている chrome の内容を browser にセットしています。

このコードを使用すると、このコード以降、変数 browser を名前空間として記述したコードが Chrome でも動作します。

なお、サンプルで示したコードは最低限の要件を満たす簡易的な記述なので、変数 browser や Chrome  が別の用途に使用されている可能性がある場合はより安全で周到な記述を行うことをお勧めします。

 

その他の細かな互換性の際について

API のサポート状況やその動作についての差異はマイクロソフトの提供する拡張 API のドキュメントであれば以下のような記載があり、

image


リンク先となっている MDM のドキュメントでは以下のように記載があるので

image

なんらかの特定のブラウザーでのみ動作しない状況に遭遇した場合には、これらドキュメントを参照することをお勧めします。

 

Chrome 拡張を Edge 拡張に移行するためのツール

Chrome 拡張を Edge 拡張に移行するためのツール Microsoft Edge Extension Toolkit が用意されており、以下から入手することができます。

 

image


Microsoft Edge Extension Toolkit はターゲットとなる Chrome 拡張を調べ、Edge 拡張として互換性に問題がある部分を検出しエラーとして出力します。

開発者はそのエラー箇所を手動で修正とます。

Microsoft Edge Extension Toolkit の使い方については以下のドキュメントをご参照くださいませ。

 

まとめ

Microsoft Edge 用の拡張は、複数のブラウザーベンダー間の標準化の提案に準拠した API を採用しています。

そのため、各ブラウザー拡張 API の細かな差異を吸収すれば、複数のブラウザーで動作可能な拡張を作成することができます。

特定のブラウザーの独自実装や、API のサポート状況などの差異などはいかんともしがたいところではありますが、この共通化された仕様の恩恵は開発者にとってけして小さいものではないでしょう。

なお、Edge 拡張の API サポート状況と今後のロードマップは以下のページでご覧いただけます。

 

 

Real Time Analytics

Clicky

Edge 拡張の Windows ストアへの提出 (2016年11月現在)

$
0
0

最近、「Edge の拡張を作ったのだけれど、Windows Store への提出方法がわからない」というお問い合わせが増えてきましたので、メモ的に書いておきましょう。

image

Windows ストアに Edge 拡張を提出するには?

以下、リンク先の FAQ ページの “I have an extension ready for Edge. How can I get it submitted to the store?” の回答にあるとおり、Edge 拡張については、今現在 (2016年11月)、信頼性やパフォーマンスのテレメトリーを取得したり、フィードバックを得るために意図的に小さなセットでの提供を行っており、一般の開発者からの提出はまだ受け付けていません。

Frequently Asked Questions – Microsoft Edge Development

準備が整いましたら Tech Preview などから受付が開始されると思いますので、もう少々お待ちくださいませ。

なお、どうしても先行して提出したいという場合は、以下のリンクからリクエストをあげることができます。

もし、その拡張が Edge の利便性において有用だと開発チームに判断されれば、開発チームより連絡がある、らしいです。

https://aka.ms/extension-request‎

かような状況につき、もう少々お待ちいただければと思います。

もし、一分一秒でも早く提出可能になったことを知りたい場合は、私が感知しだいツイートしますので、私の Twitter アカウント @osamum_MS をフォローしていただければと思います。

Real Time Analytics

Clicky

Microsoft Edge Dev Blog の翻訳記事を Microsoft Edge Japan ブログで公開します。

$
0
0

 

会社の大きなトランスフォーメーションの波にのまれてすっかり宙に浮いた状態になってしまっていた Microsoft Edge Japan ブログですが、Windows の PM (ブラウザーの専任 PM は日本のポジションからなくなってしまったので) に許可をとり、私のほうで本社の Edge 開発チームのブログ Microsoft Edge Dev Blog の翻訳記事をポストすることにしました。

個人での活動のため Best-effort での投稿となり、また、すべての記事ではなく、開発や運用に有用なものから優先順位をつけてポストしていくため掲載順も前後するかもしれませんが何卒よろしくお願いいたします。

 

翻訳について

翻訳については、最近 AI の力によって賢くなった Microsoft Translator を使用します

image
(Microsoft Translator の画面)


 

今回、翻訳記事を載せようと思いついたのも Microsoft Translator の性能向上がきっかけです。

Microsoft Edge Dev Blog に記事がポストされるたびに、内容を把握するためにいくつかの翻訳ツールを使用して個人的に翻訳して読んでいたのですが、今回のアップデートで格段に翻訳作業が楽になり、せっかくなので記事を投稿しよう、となったわけです。

よって、翻訳記事の内容は基本的には Microsoft Translator が翻訳したものになります。

名称や言い回し等で明らかに正しくないもの、わかりづらいものについてはこちらで修正しますが、私もそれほど英語に長けているわけではないので、慣用的表現などはついては、もしかしたらとんちんかんな訳になってしまう可能性のありますが何卒ご了承くださいませ。

 

年末にむけていくつかの記事を Microsoft Edge Japan ブログにて公開予定ですのでどうぞお楽しみに。

 

 

 

Real Time Analytics

Clicky

Microsoft HoloJS とは?

$
0
0

 

Microsoft の GitHub リポジトリに突如として現れた Microsoft HoloJS について簡単に紹介しましょう。

HoloJS という名前から一般的な Web ブラウザーで動作する JavaScript のライブラリを連想した人も多いかもしれませんが、残念ながらこれは Universal Windows Platform (UWP) アプリを開発するためのフレームワークです。したがって Web コンテンツの作成には使用できませんし、Windows 10 でしか動作しません。

Windows 10 がお手元ない人はダウンロードして環境を作るか、いっそあきらめて WebVR (※)の勉強でもすると良いでしょう。(※WebVR は Edge も対応すべく絶賛開発中ですので、2017 年中には WebVR がそれなりに使える環境も整ってくるでしょう。)

HoloJS とは

HoloJS は、JavaScript と WebGL を使用して UWP アプリケーションを作成するためのフレームワークです。

HoloJS は、JavaScript コードを実行するための Chakra をホストする C++ ライブラリであり、また、 OpenGL ES のグラフィックスの呼び出しを処理するための ANGLE をホストしています。OpenGL ES の呼び出しは、JavaScript アプリによって WebGL  呼び出しから変換されます。Microsoft HoloLens で実行している場合、HoloJS はホログラフィックレンダリングをサポートします。

HoloJS は以下から入手することができます。

 

 

サンプルコード

上記の HoloJS のリポジトリには Windows Holographic 用のサンプルプロジェクトが含まれています。

このサンプルは、HoloJS ホストレイヤーからホログラフィックビューマトリクスを取得することにより、Windows Holographicで動作します。

ANGLE for Windows Holographic は、ホログラムデバイスの正しい投影行列を各頂点に自動的に適用したあと、ジオメトリ シェーダーを使用して、左と右のビューに出力を分割します Windows Holographic は、ジオメトリシェーダーを使用して出力を左右のビューに分割した後、各頂点にホログラムデバイスの正しい投影行列を自動的に適用します。

その他

このライブラリには、Visual Studio 2015 Update 3 が必要であり、Windows 10 や Windows ホログラフィックなどの Windows ユニバーサルプラットフォームをサポートしています。Windows Holographicデバイスには、Microsoft HoloLens と Microsoft HoloLens エミュレーターが含まれます。

Windows 10 開発に関する情報を入手するには、Windows デベロッパーセンターにアクセスしてください。
Microsoft Visual Studio 2015 Update 3 および Microsoft HoloLens エミュレーターなど、Windows ホログラフィック開発に使用されるツールに関する情報を取得するには、ツールのインストールに進みます。

リファレンス

以下の Windows Universal API はこのサンプルコードの中で、空間位置を示しすのと holographic レンダリングに使用されます。

システム要件

HoloJS は以下のいずれかのプラットフォームで動作します。

Client: Windows 10, Windows 10 Holographic

Phone: Not tested

Visual Studio 2015 のオプション設定

サンプルプロジェクトをビルドするには Visual Studio 2015 の以下のオプション設定が必要です。

  • Windows 8.1 SDK と Universal CRT SDK
  • Visual C++ 2015 用の共通ツール
  • ユニバーサル Windows アプリ開発ツール
  • Windows 10 SDK 10.0.10.10240 と 10.0.10586

サンプルのビルド

入手したサンプルコードをビルドするには、以下の手順を実行します。

なお、この時点で HoloJS のリポジトリはクローンするかダウンロードするなどして入手できているものとします。

  1. Angle のリポジトリをクローンするかダウンロードします。
     
  2. HoloJS のリポジトリ HoloJS-master\angle に、手順 1 で入手した Angle のリポジトリ angle-ms-holographic-experimental の中身をすべてコピーします。 
     
  3. HoloJS リポジトリのクローンを作成したフォルダから、HoloJS サブフォルダに移動し、HoloJS.sln ファイルをダブルクリックします。
     
  4. Visual Studio 2015 が起動し、サンプルプロジェクトがロードされた状態になるので、キーボードの [Ctrl] + [Shift] + [B] を押下するか、Visual Studio IDE のメニュー [ビルド] – [ソリューションのビルド](註:初回は [ソリューションのリビルド] がおすすめです。)

サンプルの実行

Microsoft HoloLens エミュレーターを使用してサンプルプロジェクトを実行してみましょう。

  1. Visual Studio 2015 のソリューションエクスプローラーでプロジェクト SampleApp (Universal Windows ) を右クリックし、表示されたコンテキストメニューから [スタートアッププロジェクトに設定] を選択します。
     
  2. デバッグターゲット ドロップダウンリストをクリックし、[Microsoft HoloLens Emulator] を選択します。
    Emulator
     
  3. [F5] キーを押下してデバッグ実行を開始します。
    「これらのプロジェクトは変更されています」「ビルドしますか?」というメッセージが表示されるかもしれませんが [はい] をクリックして実行してください。

以上の手順で HoloLens エミュレーターが起動し、初期画面が表示されます。

image


しばらく待っているとサンプルプロジェクトのデプロイが完了し、エミュレーターの中央に「Hello script」と書かれた緑色の四角形が表示されます。

image


エミュレーターの画面内とマウスでドラッグすると緑色の四角形が動きます。

もしかして、「え、あんなにがんばって環境を作ってビルドしたのに、たったこれだけ?」、と思われるかもしれません。

はい、これだけです。

SampleApp プロジェクトの Scripts フォルダの中の app.js を覗いて JavaScript がどのように書かれているか見てみましょう。(きっと気分は晴れないと思いますが)

 

まとめ

今回は、Microsoft の GitHub リポジトリに突如として現れた Microsoft HoloJS の紹介と、サンプルプロジェクトをビルドして動作するまでを紹介しました。

引き続き Microsoft HoloJS  について紹介するかどうかは分かりません。

なにかもう少し、気持ちがそそられるようなアップデートがあった際には紹介したいと思います。

 

Real Time Analytics

Clicky

Windows 10 Creators Update に搭載される Edge の新機能

$
0
0

会社の大きなトランスフォーメーションの波にのまれ、私もチームが変わり、本家 Microsoft Edge Dev Blog の記事を訳すのがやっとというありさまで、すっかりこちらの更新がご無沙汰となってしまっておりました。(なんと!、こちらのブログには今年初の投稿です)

今回の記事では 4 月 11 日 (2017 年) からの配布がアナウンスされている Windows 10 Creators Update に搭載される Edge の新機能について紹介します。

Windows 10 Creators Update は、Windows 10 更新アシスタントを利用した手動アップグレードが 4 月 5 日(米国時間) から可能だそうなので、配布が待ちきれない人はそちらから入手していちはやくお試しになるのも良いでしょう。

今回も皆様のフィードバッグからさまざまな機能追加や修正がなされています。

もちろん、某 Faceb〇〇k に投稿する際に入力文字のお化けが出てしまう件も修正されています。(開発メンバーが「fix it」、と言っていたし、私の手元でも今のところ問題が発生していないので、修正されていることと思います。)

この場をかりて、さまざまなフィードバックをいただいたすべての皆様に感謝いたします。

Windows 10 Creators Update での
Microsoft Edge の新機能

Windows 10 Creators Update で追加される新機能はたくさんありますが、ユーザーが触れるところから、ということで UI があるところから紹介していきましょう。

タブ機能の強化

前回の Windows 10 Anniversary Update で、Edge のタブには「お気に入り」や「プレビュー」機能が追加されましたが、Windows 10 Creators Update ではさらに使い勝手を向上させるための機能が追加されています。

表示中のタブの終了と保存、そして復元

Microsoft Edge ウィンドウの左上の端から 2 番目の [表示中のタブを保存して閉じる]  アイコンをクリックすると、表示中のタブをすべて一度にまとめて閉じることができます。

Save_and_CloseTab3

 

閉じられたタブが表示していた Web サイトの URL は保存されており、これにアクセスするにはウィンドウ左上隅にある [保存して閉じたタブ] アイコンをクリックします。

Saved_and_ClosedTab

 

同タブをクリックすると、保存された Web サイトのサムネイル画像を含んだブレードが表示されます。

RepairTab_Blade24

 

タブは、保存されたタイミング単位で複数のものがまとまって保存されています。

保存されたタブを再度表示するには、サムネイルをクリックします。もしくは、同じタイミングで保存されたタブを一度に戻すには 、同ブレードの右端にある [タブの復元] リンクをクリックします。

RepairTab_Blade_Menu23

 

また [タブの復元] メニューの横にある […](その他) メニューをクリックするとタブの URL を [お気に入り] に追加したり、タブを他のアプリで共有したりできます。

この機能は、一時的な [お気に入り]としても使えるかもしれませんね。

タブのプレビューの一覧

前回の Windows 10 Anniversary Update では、タブがロードしている Web コンテンツのプレビューを表示する機能が追加されましたが、Windows 10 Creators Update では、これを一覧表示できるようになりました。

この機能を使用するには、Edge ウィンドウ内にあるタブの右端にある [タブ プレビューを表示] アイコンをクリックします。

TabPreviewButton

各タブの下にプレビュー画面がサムネイル表示されます。

TabPreviewBar3

 

もとに戻すには再度 [タブ プレビューを表示] アイコンをクリックします。

Web-to-App のサポート

Web からアプリへのリンク (Web-to-App) をサポートするウェブサイトへのリンクをクリックすると、設定アプリのウェブサイトのアプリセクションで設定されているように、それぞれのアプリでそのページを開くようになりました。

Web-to-App がどういうものであるか知りたい方は以下のドキュメントをご覧くださいませ。

ジャンプリストから直接 InPrivate ウィンドウへ

Internet Explorer のように、タスクバーのアイコンを右クリックした際に表示されるジャンプリストから、直接 InPrivate ウィンドウを開くことができるようになりました。

jumpList

 

InPrivate ウィンドウを使用すると、履歴などプライバシーに関わる情報を保護することができます。他人知られたくない Web サイトを閲覧をするときはもちろんですが、Web サイトのサービスへ、別アカウントでログインする際や、自動で認証されているアカウントの影響により操作がうまくいかないといった場合にも役に立ちます。

Web ノートの機能強化

Microsoft Edge のもっとも特徴的な機能である Web ノートに、そのアイコンの変更が示すとおり(?)ささやかですが新機能と変更が加えられています。

WebNote_Share

 

Web ノートのメニューの位置はそれまで、画面左上に表示されていましたが、今回のアップデートでは画面右上に移動されています。

タッチによる手書きのサポート

[タッチによる手書き] メニューが追加されました。これまでも、メニューがないだけで、タッチによる Web ノートの書き込みを行うことができましたが、これをオフにすることができませんでした。今回のアップデートでは、[タッチによる手書き] メニューをクリックすることで、機能のオン/オフを切り替えることができます。

Touch_Write

ペンの色とサイズの強化

[ボールペン] や [蛍光ペン] メニューをクリックした際に選択可能な色が増え、ペン先の太さもスライダーで変更できるように強化されました。

ここで選択された内容は、前出の [タッチによる手書き] にも反映されます。

ball_Pen3

共有機能の変更

アイコンのデザインに合わせたのかどうかは定かではありませんが、Web ノートの共有機能のデザインが変更になっています。

以前は Windows 8.x の “チャーム” のようなブレードがウィンドウの右側からせり出してきていましたが、今回のアップデートではダイアログボックスが表示されるようになっています。

WebNote_Share_dialog3

EPUB のサポート

Edge で EPUB 形式の電子書籍ファイルがサポートされました。

EPUB 用に特別にアプリケーションをインストールしなくても、直接ファイルの内容を閲覧することができます。

著作権の関係で、文面の表示された画面ショットをお見せできませんが、日本語の表示はもろろん、縦書きも問題なく表示されます。

image3

 

目次、ブックマーク、検索しもちろんのこと、文章の読み上げや、

e-pub_reading3

 

テキストのサイズや文字間隔、フォントスタイルやテーマなども柔軟に変更することができます。

e-pub_text3

 

Edge の EPUB 機能については、Jun Tajima さんが詳しいレビューを書かれておりますので、ご興味のあるかたはぜひご覧くださいませ。

Flash コンテンツの挙動の変更

Windows 10 Creators Update から、信頼できない Flash コンテンツは既定でブロックされており、ユーザーが明示的にプレイするまで実行されないようになりました。これにより、セキュリティ、安定性、パフォーマンスが向上し、選択した時点で Flash を実行するというオプションが選択できます。

Flash コンテンツがブロックされたときに明確にするために URL バーはダイアログボックスが表示されます。一度、または同じサイトに戻るたびに Flash を許可するパズル アイコンをクリックします。

flashBlock3


 

Windows 10 Creators Update における Edge での Flash コンテンツの動作については Microsoft Edge Dev Blog: Extending User Control of Adobe Flash with Click-to-Run. をご覧ください。

フルカラー emoji のサポート

Microsoft Edgeでは、絵文字 (emoji) を使用している Web サイトにフルカラーの新しくなった絵文字が既定で表示されるようになりました。

この絵文字は、Windows 10 のソフトウェアキーボードなどからも入力することができます。

fb-Post3
Touch-Keybord3

 

これら絵文字は一般的な SNS などでは画像で変換されてスマートフォンなどからでもきちんと見ることができます。

API のサポート

Windows 10 Creators Update で Edge がサポートした API は、細かくはさまざまなものがありますが、ざっくりとは以下のとおりです。

これらのいくつかについては、Microsoft Edge Dev Blog に記事が投稿されているので、私が抄訳したものとあわせ紹介させていただきます。

Progressive Web Apps 対応は?

Progressive Web Apps への対応は、多くの開発者が気になるところでしょう。Microsoft Edge Development の Platform Status で確認すると、Progressive Web Apps を構成する所要機能のいくつかのステータスが IN DEVELOPMENT (開発中) のままになってします。

 

image13


 

しかし、これらの機能は、試験的に Windows 10 Creators Update の Edge に搭載されており、検証に使用することができます。

これらの機能を試すには、アドレスバーに about:flags と入力して [開発者向け設定画面] を表示し、以下の該当する機能のチェックボックスにチェックをつけ、Edge を再起動します。

pwa3

 

拡張について

Windows 10 Creators Update により、Edge 拡張はネイティブメッセージングを使用して、ユニバーサル Windows プラットフォーム(UWP)アプリケーションと通信することができます。Edge 拡張は Chrome や Firefox の拡張と同じネイティブメッセージングAPIを使用します。ただし、Edge のネイティブメッセージングホストは、Universal Windows Platformを使用して実装する必要があります。

この機能を使用すると、Web アプリケーションでは実現できないプラットフォーム固有やハードウェアリソースを利用したソリューションを UWP アプリと連携して実現することができます。

詳しくは以下のドキュメントをご参照ください。

なお、一般の開発者が作った Edge 拡張の Windows ストアでの公開については、2 月に Edge 開発者の人間に聞いたところ「とくに新しい情報はきてないよ」とのことだったのて、もう少し先になると思われます。

 

管理者向け機能

Windows 10 Creators Update により Microsoft Edge には、12 個の新しいグループポリシーが追加されましした。

Edge-gp

どのようなものが追加されたか?、については、後日このブログで詳しく紹介したいと思います、

その他

Windows 10 Creators Update についての細かな機能追加や修正、変更については、Microsoft Edge Development の Changelog で確認することができますので、Edge の変化についてより詳しく知りたい方はぜひアクセスしてみてください。

また、Windows マシンをお持ちでない方は、ぜひ無償の検証用仮想マシンリモート環境をお試しください。

  Real Time Analytics

Clicky

Node.js ではじめる Bot 開発 (基本編)

$
0
0

hNode.js と Microsoft Bot Framework を使用した Bot 開発について紹介します。

同様の内容は、既に VAL 研究所の丸山さんが、ほほ完璧な記事をブログに公開していますので、サクッと開発して Azure のデプロイして Web に公開したい方はぜひこちらを参考にしてください。

私のほうはツールの使い方やデバッグの方法など交えつつ書いていきたいと思います。

Microsoft Bot Framework とは

Microsoft Bot Framework は Chat Bot を効率よく開発するためのフレームワークです。

プログラムコードから利用する Bot Developer SDK と、さまざまなメッセージングサービスに Bot を公開するための Bot Connector、Bing や Cortana などから利用できる Bot Directory で構成されています。

Bot Framework を使用するメリット

Bot Framework を使用するメリットは、SDK が用意されているので Bot のインターフェースや仕組みをわざわざ自分で開発しなくても良い、というのはもちろんですが、なんと言っても、Bot をひとつ作れば、Facebook Messenger や Skype、Slackといったメジャーなメッセージングサービスに公開できるということでしょう。

image

LINE や Facebook Messenger いったメッセンジャーアプリは、今やどのスマートフォンに当たり前にインストールされており、IT に明るくない人たちにとっては、それはもうスマートフォンそのものの機能と言っても過言ではないでしょう。

充分に普及した、ある種インフラと化したアプリの中から Bot を介してユーザーに自社のサービスを提供することは、インストールされるどうかもわからないアプリをわざわざ開発してアプリストアで公開するよりも効率的かもしれません。

しかも、アプリや Web のような凝ったデザインや仕組みを用意する必要はありません。

もちろん、 Bot Framework で作った Chat Bot アプリは、iframe で簡単に Web ページに張り付けることができますし、Direct Line という仕組みを使って Web API として利用することができます。(WebSocket もサポートしていますよ)

つまり、Bot Framework を使って開発すれば、Web やメジャーなメッセージングアプリにサービスを公開でき、SPA やネイティブアプリのバックエンドとしても使用することができるのです。

開発言語

Bot Framework は C# (.NET)、JavaScript (Node.js) に SDK が用意されており、C# の場合は Visual Studio に Bot 開発用のプロジェクトテンプレートをインストールし、nuget で SDK を入手します。

JavaScript で開発する場合は npm コマンドで Bot SDK のモジュールをインストールします。

JavaScript は Node.js で動作するので、開発環境が Windows に限定されることはありません。開発で必要になる Bot Framework エミュレーターも Windows 以外で Mac、Linux 用が用意されています。

ここからは Node.js と Bot Framework を使用した Bot の具体的な開発方法について記述していきます。

開発の方法

ローカル環境で開発を行い、Azure Web Apps のデプロイする方法と、Azure の サーバレス環境で動作する Azure Bot Service を使用した開発方法があります。

今回の記事ではローカル環境で開発をする方法について紹介します。

Azure Bot Service での開発に興味がある方は以下のドキュメントをご参照ください。


準備するもの

開発に際し以下のものが正常に動作するよう環境を整えておきます。

(※1) エディターは他のものでも構いませんが、Visual Studio Code や Visual Studio 2017 のように Node.js のデバッガをサポートしたものが便利です。
(※2) git は Azure
に開発した Bot をデプロイするために使用します。Visual Studio 2017 を使用する場合は、Visual Studio 2017 に Azure へのデプロイ機能が搭載されているので不要です。

シンプルな Bot の開発

作業用のフォルダに npm init コマンドでアプリケーションの基本的な設定を行ったあと、npm コマンドで Bot Framework SDK のモジュールをインストールします。

具体的な手順は以下のとおりです。

  1. 空のフォルダーを作成します。
     
  2. コマンドプロンプトで、作業用ディレクトリを作成したフォルダに切り替えます。
      
  3. git init コマンドを実行します。これは Azure へデプロイするための準備です。


    git init


  4. npm init コマンドでアプリケーションの設定を行います。設定はエントリーポイント以外は既定のままでかまいません。
    entry point は app.js としてください。


    npm init


     

  5. 以下の 2 つのコマンドを実行して必要なライブラリをインストールします。

    npm install --save botbuilder


    npm install --save restify


     

  6. 以下のコマンドを実行すると Visual Studio Code が作業フォルダをルートディレクトリとして起動します。

    code .


  7. Visual Studio Code のメニュー [ファイル] - [新規作成] を使用して app.js という名前でファイルを作成します。
     
  8. 作成した app.js ファイルに以下のドキュメント内 「Edit your bot」のサンプルコードを貼り付けます。

    Create a bot with the Bot Builder SDK for Node.js
     

ここまでの手順でコードの準備は完了です。

このサンプルコードはユーザーからの入力をそのまま返すだけの単純なものですが、Bot Framework を使用した開発に必要となる基本的な機能をすべて含んでいます。

Bot エミュレーターでの実行

ローカル環境で Bot を動作させるには Bot エミュレーターを使用します。

実行の手順は以下のとおりです。

  1. コマンドプロンプトで以下のコマンドを実行し、作成した Bot のサービスを開始します。
     
    node app.js

     


    Bot サービスが開始されると、リクエストをリスンするポート番号がコマンドプロンプトに表示されます。
     

  2. Bot Framework Channel エミュレーターを起動し、ウィンドウ上部の「Enter your endpoint URL」をクリックし、以下の URL を入力します。

    http://localhost:ポート番号/api/messages

  3. [Microsoft App ID] と [Microsoft App Password] を指定する画面が表示されますが、空欄のまま [Connect] ボタンをクリックします。


以上でエミュレーターを使用する準備ができました。エミュレーター下部のメッセージ入力欄に文字列を記述し、送信ボタンをクリックするか [Enter] キーを押下してください。


You said: (入力された文字列) が返れば成功です。

image


Visual Studio Code でのデバッグ

Visual Studio Code では Node.js のアプリケーションに対し、ブレークポイントの設定やステップ実行、スタックトレースなどのデバッグ機能を提供します。

Visual Studio Code でのデバッグ機能を試すには、以下の手順を実行します。

  1. 前の手順で記述したコードの 21 行目の行番号の左側をクリックし、赤いマーカーが表示されるのを確認します。




     

  2. Visual Studio Code の左端のデバッグメニューをクリックするか、キーボードの [Ctrl] + [Shift] + [D] キーをクリックします。




  3. Visual Studio 下部の [デバッグコンソール] に restify listening to http://[::]:ポート番号 が表示されたのを確認して Bot Framework Channel エミュレーターを起動します



  4. エミュレーターからなんらかの文字を入力して [Enter] キーを押下すると、Visual Studio Code から、設定したブレークポイントでコードの実行が停止しているのが確認できます。
     
  5. session.message.text にマウスカーソルをホバーするとその内容を確認することができます。



    キーボードの [F11] キーを押下すると 1 ステップずつ実行することができます。
    また、画面左の [コールスタック] では、現在のコールスタックの状況を確認することができます。




その他、ウオッチ式や条件付きブレークポイントなどが使用できます。

また、メニュー[表示] – [統合ターミナル] を選択すると、Visual Studio Code のウィンドウ右下部分にコマンドラインによる命令を実行できるウィンドウが表示れさます。

Node.js で Bot の開発を進めていくと npm コマンドや、Azure に配置する際の git コマンドを頻繁に使用することになるのでぜひ利用してください。


まとめ

今回は Node.js と Bot Framework を使用した Bot 開発について、環境の準備と基本的なコードの準備、エミュレーターを使用した実行方法について紹介しました。

次回は Azure への配置と Bot ディレクトリへの配置のついて紹介します。



Real Time Analytics

Clicky


Windows 10 Fall Creators Update に搭載される Microsoft Edge の新機能

$
0
0

社内の大きなトランスフォーメーションにより所属が変わり、直接 Edge には関わらなくなってしまいましたが、できるかぎり Edge の情報をお伝えしていきますよ、ということで 10 月 17 日 (日本では 18日) から提供されている Windows 10 Fall Creators Update に搭載される Edge の新機能について紹介します。

Windows Fall Creator Update とは?

Windows 10 に対して行われる年 2 回の機能アップデートのうちのひとつです。

Windows Blog の記事によれば「September and March of each year」となっていますが今は 10月の半ばです。不思議ですネ。

今回の Windows Fall Creator Update で提供される新機能は以下のページで紹介されておりますのでぜひご覧ください。

この記事では Windows 10 Fall Creators Update に搭載される Microsoft Edge の新機能について紹介します。

Microsoft Edge (EdgeHTML16)の新機能

Windows 10 Fall Creators Update に搭載される Edge は、一目でその存在がわかるような派手な機能の追加はありませんが、着実にブラッシュアップアップされています。

とはいえ、実際にユーザーの目に触れる UI とデザイン箇所の新機能から順に紹介していきたいと思います。

UI デザインと機能

ボタンアニメーションの改善

Fluent Design System にインスパイアされ、Microsoft Edge のブラウザーフレームをよりモダンにリフレッシュしました。アクリルマテリアルの使用は、タブバーや他のコントロールに奥行きと透明性を提供し、より応答性と楽しさを感じるようにボタンのアニメーションを改善しました。

単語と行の強調表示による読み上げ

WebサイトやPDFからのテキストを選択して右クリックし、コンテキストメニューから「読み上げ」を選択すると、テキストが音声で読み上げられます。選択内容が読み込まれ、その際に単語や行が強調表示されます。

コンテンツの読み上げ

Microsoft Edgeのフルスクリーンモード(F11)

フルスクリーン機能が正式に導入されています。Edge では、これまでもキーボードの [Shift] + [Win] + [Enter] キーを押下して全画面表示が可能でしたが、この方法は正式にはアナウンスされおらず、ある意味隠しコマンド的なものでした。

今回のアップデートからは、[F11]キーを押下するか、設定メニューの新しいフルスクリーンアイコンを選択するだけで、Web サイトをフルスクリーンで表示できます。[F11]キーをもう一度押すか、右上隅にある復元アイコンをクリックして、全画面表示を終了することができます。

フルスクリーンモードのメニュー

JavaScript ダイアログボックスが表示されていても終了可能に

これまでの Edge または他の Web ブラウザーでも、JavaScript の alert コマンドで表示されるダイアログボックスが表示された状態では、終了することができませんでた。

一部の悪質な Web サイトでは、この仕様を悪用して任意の操作を行うまでダイアログを表示し続けるということが現在も行われています。

しかし、今回のアップデートでは、JavaScript ダイアログボックスが表示されている場合でも閉じるボタンを使用して正常に Edge を終了することができるようになりました。

Web サイトのアクセス許可設定

Web サイトには、閲覧者の位置情報や Web カメラへのアクセス、またはデスクトップ通知の送信などの許可を求めるものがあります。

今回のアップデートでは、これまで Web サイトごとに行ったアクセス許可設定が確認できるようになっています。

これまで Web サイトに付与したアクセス許可を確認するには、アドレスバーに表示される鍵マークのアイコン、丸中にエクスクラメーションマーク (!) が描かれたアイコンのいずれかをクリックします。

いずれのアイコンも表示されていない場合は、メニューバーの […](設定) – [詳細設定を表示] の画面で「Web サイトのアクセス許可」の [管理] ボタンをクリックします。


アドレスバーとタブ

アドレスバーのデザインを調整

ユーザーからのフィードバックに基づいてアドレスバーのデザインを調整しました。これで、アドレスバーにフォーカスがない場合でも、テキストをクリックしてドラッグしたときに開始されても、カーソルの下に残ります。以前は、「http://」の表示に合わせてテキストがシフトしました。この変更により、URLの一部を簡単に編集することが容易になりました。

また、URL バーにフォーカスが当たったときに URLバーのテキストが移動し、URL の特定の部分を編集しにくくなる問題が修正されました。このビルドから、URL をクリックしてもカーソルの下のテキストは同じままになります。

タブの閉じ方をより詳細に制御

前述の「JavaScript ダイアログボックスが表示されていても終了可能に」のところでも紹介しましたが、Microsoft Edge で JavaScript(警告、プロンプトなど)のダイアログが表示されている場合でも、タブを閉じるためにタブバンドの X を常に使用できるようになりました。

ダイアログが表示されている間も、多くのブラウザ機能(お気に入りバー、設定など)にアクセスすることもできます。

開閉時のアニメーション表示

新しいタブは、開閉時にタブバー上にスムーズにアニメーション表示されるようになりました。

セッションの復元の動作が改善され、(たとえば電子メールからの)リンクをクリックしてマルチウィンドウの Edge のセッションを復元すると、復元の最後にフォーカスが当てられたウィンドウが新しいリンクを含むウィンドウになります。

スプラッシュページの色の遷移がスムーズに

Microsoft Edgeのスプラッシュページ(新しく起動したときに表示される)の色がよりスムーズにスタートと新しいタブ ページに遷移できるように。

改善されたお気に入りのエクスペリエンス

新しいお気に入りを保存するときの新しいエクスペリエンス

新しいお気に入りを保存するときに、お気に入りをディレクトリツリーとして表示できるようになり、[お気に入りに追加] ダイアログボックスからフォルダを折りたたんだり展開したりすることができます。

お気に入りのURLを編集

お気に入りメニューまたはお気に入りバーで任意のお気に入りのURLを編集できるようになりました。これを使用して、移動したサイトの場所を更新したり、ブックマークレットをお気に入りバーに作成したりすることができます。


エンタープライズのお気に入り管理機能

IT 管理者は、グループ ポリシーを定義し、ユーザーのお気に入りに加えて事前構成済みのお気に入りをロックする機能など、モバイル デバイスの管理を介してお気に入りを構成できます。

お気に入りのウェブサイトをタスクバーにピン留め

ユーザーのフィードバックにより、タスクバーとスタートページへの Web サイトのピン留め機能が復活しました。サイトのアイコンを使用して、タスクバーからすぐにお気に入りのサイトにすばやくアクセスできるようにします。使い方は Edgeの設定メニューから「このページをタスクバーに固定する」を選択するだけです。

PDF 関連の機能

Microsoft Edge PDFの改善

PDF で [Cortana に質問] にハイライトカラーとオプションを追加しました。

PDF フォームの入力

PDF ベースのフォームを記入し、保存して印刷する機能が追加されました。

PDF のアノテーション(注釈)

Web ノートアノテーション機能は、Web ページだけでなく PDF でも動作するようになりました。ブラウザフレームの右上にある「Web ノートを作成」ボタンを使用して、アノテーションバーを呼び出すことができます。

アノテーションバーで異なるモードを使用すると、PDF にインクを印刷したり、テキストをハイライト表示したり、アノテーションを消去したりできます。後で使用するために、作業状況を PDF ファイルに保存することができます。

目次

目次を含む PDF 文書の場合、PDF ツールバーの左側に目次用の新しいボタンが表示されます。サイドペインの見出しをクリックすると、ドキュメントのその部分に移動します。

Screen capture showing the ToC in Edge

より優れた表示とナビゲーション

より読みやすくするために PDF ドキュメントを回転させるコントロールを追加し、1 ページから 2 ページのレイアウトに切り替えたり、長いドキュメントのナビゲーションエクスペリエンスを改善するために、連続したページごとのスクロールの間隔を変更したりします。

EPUBの読書の改善

コピーと Cortana への質問

テキストを選択すると、コピーや Cortana に質問できるだけでなく、ノートを追加したり、強調表示したり下線を引いたりすることができます。EPUBの本を読んでいる間、Cortana はユーザーの研究を手助けします。

Screen capture showing Ask Cortana in an EPUB document

インクノート

これまで、ノートを追加し、ペンで書き込んだり、描画したりする機能は Web ページのみで可能でしたが、EPUB でも可能になりました。

Screen capture showing Ink Notes in an EPUB document

ブックに注釈を付ける

4 色でハイライト、下線、およびコメントの追加によって EPUB 書籍を注釈を付ける機能を追加しました。開始するには、テキストを選択し、メニューからオプションを選択します。

Screen capture showing an annotated EPUB book in Microsoft Edge

本をデバイス間でローミング

Windows ストアからの書籍は Windows 10 デバイスで間で読み取りの進行状況、ブックマーク、およびメモが同期され保持されます。

ただし、Windows ストアででの EPUB 書籍の販売は現在米国の Windows ストアでのみ行われています。

開発者向けの機能

Web プラットフォーム

Progressive Web Apps (PWA) のサポートは?
Microsoft Edge Dev Blog のこの記事によれば、will be coming to preview builds of Microsoft Edge for developer testing this summer. とのことでしたが、PWA を構成する Service Worker や Web Application Manifest、Push API、Background Sync API などのステータスが [IN DEVELOPMENT] のままなので、もう少々かかるようです。

管理者向けの機能

グループポリシーオブジェクト

Microsoft Edge には Windows ドメイン環境下で管理者が設定を一括管理するためのグループポリシーが用意されています。

Windows 10 Creators Updateにより、Microsoft Edge には、3 個の新しいグループポリシーが追加されました。

説明 設定
Microsoft Edge に書籍ライブラリを常に表示する Windows 設定の [国または地域] 領域で構成したデバイスの国または地域設定に関係なく、[書籍] タブを表示するかどうかを決定
お気に入りのプロビジョニング ユーザーに表示されるお気に入りの既定のセットを構成できる
Microsoft Edge 上のお気に入りを変更できないようにする この設定を有効にした場合、ユーザーはお気に入りリストの内容を追加、インポート、または変更できません

その他、Microsoft Edgeに指定可能な既存のグループポリシー設定については、以下のドキュメントをご参照くださいませ。

その他の進歩

描画性能の向上 - 独立したレンダリング

EdgeHTML 16 ではグラフィックス処理を追加のCPUスレッドに選択的にオフロードすることができるため、シルク - スムーズスクロール、応答性の高い対話、fluid アニメーションなど、ユーザーインターフェイス スレッドと全体的な可視パフォーマンス特性ページへの影響を最小限に抑えてレンダリングできます。EdgeHTML 16 では、以下の要素を完全にサポートすることで、より多くのサイトで独立したレンダリングが可能になりました。

  • <select>コントロール
  • <canvas>要素
  • 特定の<svg>要素

この改善点の詳細については以下の記事をご覧ください。

Windows Defender Application Guard

昨年9月にMicrosoft Edge Blogで発表されました Windows Defender Application Guard for Microsoft Edge がエンタープライズユーザー向けに利用できるようになりました。

Application Guard 上で実行される Microsoft Edgeは、Windows に対するゼロデイ攻撃とマルウェアからの最大レベルの保護を企業に提供します。

また、Application Guard の使用中に Microsoft Edge データの永続性がサポートされました。有効にすると、お気に入り、Cookie、保存されたパスワードなどのデータは、Application Guard セッション全体で保持されます。永続化されたデータはホスト上で共有されたり表示されたりすることはありませんが、将来の Microsoft Edge では Application Guard セッションで使用できるようになります。

Screen capture showing a WDAG tab in Edge

まとめ

今回の記事では、Windows 10 Fall Creators Update に搭載される Microsoft Edge (EdgeHTML16) の新機能について紹介しました。

これら新機能については、Edge の開発者チームのブログ Microsoft Edge Dev でも紹介されていますので、こちらも合わせてご覧ください。

Microsoft Edge は、ユーザーからのフィードバックを参考に着実に進化しています。

Microsoft Edge へのフィードバックと評価は、メニュー[…](設定) – [フィードバックの送信] からお願いします。

また、開発チームからの反応や、その後の進捗の状況が気になる方は Microsoft Edge Platform Suggestion Box に投稿を行うのをお勧めします。

また私も引き続き Edge、Web 関連の情報を発信していきますので、@samum_MS のフォローもよろしくお願いします。



Real Time Analytics

Clicky

de:code2018セッションフォローアップ「進化する Web ~ Progressive Web Apps の実装と応用 ~」

$
0
0

ひさびさにブログを書く時間が取れたので、今ごろですが de:code 2018 で私が担当した AD09「進化する Web ~ Progressive Web Apps の実装と応用 ~」のについてのフォローアップ記事を書きます。

二日目の最終セッションにもかかわらず、ご参加くださいました皆様、誠にありがとうございました。

アンケートの内容を見るに、多くの方にご満足いただけたようで非常にうれしく思います。

この記事では、同セッションの内容について記述していきます。

進化する Web ~ Progressive Web Apps の実装と応用 ~

この記事では、昨今話題に上ることが多い PWA こと Progressive Web アプリケーションについて、実際の作り方を解説しながら、それがいったいどういったものであるかを詳(つまび)らかに紹介することを目的としています。

Web では、「ネイティブアプリと同じことができる」、「ネイティブアプリを置き換える」など、期待に胸を膨らませずにいられない浪漫に満ちた噂がありますが、それが本当かどうか記事をご覧いただくとご理解いただけると思います。

Progressive Web Apps のつくり方を紹介する前に、簡単に概要を紹介しましょう。

Progressive Web Apps とは?

Progressive Web Apps (以下 PWA と記述) は、一言でいうならば「ネイティブアプリのような UX を提供する Web アプリの概念」といったところでしょう。2015 年の 11 月に開催された Chrome Dev Summit 2015 のキーノートで発表されて話題となりました。

もともとは、その年の 10 月に Alex Russell 氏(Google) がブログ記事に投稿した、クライアントの性能に合わせて段階的に進歩する Web アプリケーションのコンセプトでした。

PWA というと、"ネイティブアプリのような体験" という特徴ばかりが注目されますが、大きな特徴がもうひとつあります。それは、PWA という名前にも含まれている Progressive というところです。

これは HTML5 が普及しはじめたころにあった、「HTML5 が解釈できるモダンブラウザーにはリッチな体験を、そうでないブラウザーには従来とおなじ体験を」というデザインの考え方 Progressive Enhancement に由来します。

PWA はこの思想を踏襲し、性能の低い Web ブラウザーを切り捨てることなく、クライアントの性能に合わせた機能提供を行います。

PWA は、性能の低い Web ブラウザーからアクセスがあった場合は従来と同じ Web ページとして動作し、PWA が動作する機能を備えた Web ブラウザーからアクセスがあった場合は、その機能を活かし、これまでの Web アプリには無かったネイティブアプリのような体験を提供します。

Web アプリケーションの Progressive Enhancement

Progressive Web Apps を実現する機能

それでは、"これまでの Web アプリには無かったネイティブアプリのような体験" というのはどのようなものがあるでしょう?

代表的なものとしては以下の 4 つが挙げられます。

  1. オフラインサポート
  2. プッシュ通知
  3. バックグラウンド処理
  4. デバイスへのインストール(デバイスのホーム画面から起動できる)

これらはの機能はそれぞれ以下のような新しい API によって実現されます。

  1. オフラインサポート - Cache API
  2. プッシュ通知 - Push API
  3. バックグラウンド処理 - Background Sync
  4. デバイスへのインストール(OS のメニューから起動できる) - Web App Manifest

そして、これらの機能を提供しているのが 1 ~ 3 が Service Worker で、 4 が Web App Manifest です。

新しいAPIの提供の図

PWA の定義に明確なものはありませんが、上記の機能の中からオフラインサポートと、インストール(アイコンをデバイスのホーム画面に追加)機能をサポートしていれば、PWA を名乗ってもそう否定されることはないでしょう。

これらの機能により、デバイスのホーム画面から、ナビゲーションバーなどのブラウザー UI が無い状態でアプリケーションを起動し、オフラインの状態でも使用できる、という体験をユーザーに提供できます。

これらの体験は、これまでの Web アプリケーションには無かったネイティブアプリのならではのメリットと言えるでしょう。

それでは、逆に Web ならではのメリットとはなんでしょう?

Web のメリット

ネイティブアプリにはない Web ならではのメリットを、Google さんのイベントではよく以下の SLICEという言葉で表しています。

  • Secure (安全)
  • Linkable (リンク可能)
  • Indexable (インデックス可能)
  • Composable (再構成可能)
  • Ephemeral (一時的な利用)

これら従来の Web とネイティブアプリの体験上のメリットを合わせたものが PWA のメリットとなります。

Progressive Web Apps が提供する価値

PWA の提供する価値について、Google さんのイベントではよく FIRE という言葉で紹介されていますが、

  • Fast: パフォーマンスの良い、軽快な動作
  • Integrated: OS と統合されたユーザー体験
  • Reliable: オフラインでも動作する利便性と信頼性
  • Engaging: Web サイトの価値向上

この記事ではもう少しかみ砕いて紹介しましょう。

発見性

PWA であれば、アプリを公開するのにアプリ ストアにわざわざお金を払ってアプリを提出したり、審査を通すための不自由なルールに縛られる必要はありません。

これまでの Web アプリと同じようにインターネットに公開しておけば、検索エンジンがクロールして見つけてくれます。

いままでの SEO のスキルがそのまま使えるうえ、Web は、アプリ ストアとは比べものにならない数のユーザーが、比べものにならないくらいの回数、常に検索を行っています。

この圧倒的なオポチュニティ(機会)の違いは、自分自身が今日何回 Web を検索したか、アプリストアを検索したか、比べてみればよくわかるでしょう。

インストール可能

PWA はさまざまなデバイスにインストール可能ですが、そのためにプラットフォームごとに違う開発言語で書き直したりパッケージンクしなおしたりする必要はありません。

PWA をサポートしている Web ブラウザーであれば、同じアプリケーションをその全部にインストールして使うことができます。

また、"インストールしなくても使える" 点もメリットです。

もともとが Web ページなので、ちょっとだけ使ってみるということが可能です。

サービスを試用してみようと思ったときに、"アプリのインストールが障壁になって利用を中断してしまった"、という経験は誰にでもあることでしょう

また、スマートフォンでコンテンツを閲覧中に、突然、アプリのストア画面が表示され、アプリのインストールを促されて不快な思いをしたこともあるかと思いますが、そういったことを避けられます。

PWA であれば提供者もユーザーもアプリのインストールについてのネガティブな点を回避することができます。

再エンゲージ可能

従来の Web ページであれば、ユーザーがコンテンツから離脱したあとは、再び訪問してくれることを祈るくらいしかできませんでしたが PWA はサーバー側から通知を Push することができます。

これによりユーザーに即時的な価値を提供できます。例えば、EC ショップであればタイムセールの開始であるとか、オークションサイトであればオークションの開始や、最高落札額の更新などを知らせることができます。通知機能を適切に利用することで、ユーザー側の機会獲得を増やし、再エンゲージを促すことができます。逆にどうでも良いことを通知しすぎるとユーザーの心象を害するので注意が必要です。

とくに、初めてページを訪問したユーザーに「プッシュ通知を許可しますか?」というメッセージを表示するのは避けたいところです。

ネットワーク非依存

PWA はオフラインでの使用が可能ですので、ネットワークの状態に左右されないように作ることができます。また、常に使用されるアセットをローカルにキャッシュすることで表示のスピードアップや、回線の使用料を減らすことにも貢献します。

プログレッシブとレスポンシブ

PWA はきちんとその思想を理解してつくれば、低機能なブラウザーや PWA をサポートしないデバイスにもサービスを提供できます。また、さまざまな画面サイズに対応するためのレスポンシブな機能については、Web には Media Queries 等、そのためのナレッジもリソースも豊富に存在するため、既存のスキルを活かして機能を実装できます。

安全

PWA は Web コンテンツと同じ Web ブラウザーの強力なサンドボックス内で動作するため、ネイティブアプリのようにユーザーの強い権限で動作して誤動作や悪意のあるコードによってシステムに深刻なダメージを与えることはありません。また https でしか動作しないためサーバーとのやりとりを安全に行うことでできます。

リンク可能

PWA はインターネット上でユニークな URL をもっており、ハイパーリンクのあるさまざまなところからサービスに接続することができます。PWA を使用するのにアプリ ストアも、面倒なインストールプロセスも必要ありません。

PWA のメリットは、Web とネイティブ アプリのメリットを合わせたということだけでなく、それらを状況に合わせて取捨選択できることです。

Progressive Web Apps を実現する API

ここからは PWA を実現するための API と、それらをどのように使ってアプリケーションを構築していくかについて紹介します。

Service Worker

PWA を実現するうえで中心となる機能を提供するのが Service Worker です。

Service Worker とはなにか?、端的に言うと、「バックグラウンドで動作する "プログラミング可能な"ネットワークプロキシ」です。

Service Worker は Web Worker の一つで、Web ページのスクリプトとは独立して動作しており、DOM にアクセスしたりすることはできませんが、Web ページのネットワーク リクエストすべてをインターセプトできます。

つまり、Web ページからのリクエストを横取りしてキャッシュしたものを返したり、改ざんしたりといったことができます。そのため localhost、127.0.0.1 接続以外は https の使用が必須となります。

Service Worker が提供する機能

Service Workerが提供する機能は主に以下の四つです。

  • キャッシュ
  • リクエストのハンドリング
  • Push 通知
  • バックグラウンド同期

これらの機能を図で紹介します。

キャッシュとリクエストのハンドリング

Service Worker は Web ページからのリクエストの中に、自分のキャッシュリストに含まれるアセットを見つけると、レスポンスからこれを取得してキャッシュします。

それ以降、Web ページからリクエストされたアセットがキャッシュ内に存在する場合は、そのキャッシュされたアセットを返します。ネットワークから取得しないので、アセットの取得は高速に完了し、通信コストは発生しません。

Push 通知

関連付けられた Web ページがアクティブでなくても、サーバーからの Push を受け取り Notification API 等を使用してユーザーに通知を行えます。

バックグラウンド同期

オフライン中にユーザーが行った操作をキャッシュし、

オンライン時にその内容を同期することができます。

このように Service Worker はプログラミング可能なネットワークプロキシとして、これまでにないさまざまな機能を提供します。

これらの機能の 2018 年 6 月時点のサポート状況は以下のとおりです。

ここからは Service Worker の具体的使い方について解説していきます。

Service Worker を使う準備

Service Worker を使った開発を行う際に用意しなければならないものがあります。

Service Worker を利用させる Web アプリケーション、もしくは Web コンテンツが必要です。これはけして SPA (Single Page Application) のようなアプリケーション然としたものである必要はなく、既存の一般的な Web ページであってもかまいません。

この Web ページ、もしくは Web アプリケーションは、html や css、js、や画像に代表されるメディアといった複数のファイルで構成されていると思いますが、それとはべつに Service Worker 用の JavaScript ファイルをひとつ用意します。ここでは便宜上 sw.js と名付けます。

この Service Worker 用の JavaScript ファイルは Web コンテンツ側の JavaScript コードから登録され稼働を開始します。

Service Worker は、自身のファイルが配置された以下のディレクトリに対しスコープを持つので、コンテンツ/アプリケーション全体をキャッシュするなど管理下におきたい場合は Web サイトのルートに配置します。

Service Worker の登録

Service Worker の登録は Web コンテンツの JavaScript から行います。

登録に必要なコードは非常にシンプルで、最低限、以下のコードで問題を発生させることなく Service Worker の登録が行えます。

Web コンテンツ側

//Service Worker がサポートされているかチェック
if (navigator.serviceWorker) {
   //Service Worker を登録
   navigator.serviceWorker.register('/sw.js');
}

 

Web コンテンツ側のコードから navigator.serviceWorker.register メソッドにより Service Worker の登録が行われると、Service Worker 用の JavaScript コード (ここでは sw.js) では install イベントが発生します。

sw.js 側

//キャッシュするアセットのリスト
var urlsToCache = [
   '/',
   '/index.html',
   '/css/index.css',
   '/script/index.js'
];
//install イベントのハンドラ
Self.addEventListener('install', function(event) {
   event.waitUntil(
      //キャッシュを開く
      caches.open('キャッシュの名前')
         .then(function(cache) {
            //アセットのリストをキャッシュに登録
            return cache.addAll(urlsToCache);
   }));
});

 

install イベントハンドラ内では、キャッシュを開き

//キャッシュするアセットのリスト
var urlsToCache = [
   '/',
   '/index.html',
   '/css/index.css',
   '/script/index.js'

];
//install イベントのハンドラ
Self.addEventListener('install', function(event) {
   event.waitUntil(
      //キャッシュを開く
      caches.open('キャッシュの名前')
         .then(function(cache) {
            //アセットのリストをキャッシュに登録
            return cache.addAll(urlsToCache);
   }));
});

 

キャッシュにアセットのリストを登録します。

//キャッシュするアセットのリスト
var urlsToCache = [
   '/',
   '/index.html',
   '/css/index.css',
   '/script/index.js'

];
//install イベントのハンドラ
Self.addEventListener('install', function(event) {
   event.waitUntil(
      //キャッシュを開く
      caches.open('キャッシュの名前')
         .then(function(cache) {
            //アセットのリストをキャッシュに登録
            return cache.addAll(urlsToCache);
   }));
});

 

Service Worker が登録され、install イベント内の処理が無事に完了すると、次に activate イベントが発生します。(もし install イベント内の処理が失敗した際には error イベントが発生します。)

self.addEventListener('activate', function(e) {
  e.waitUntil(
    caches.keys().then(function(keyList) {
      return Promise.all(keyList.map(function(key) {
        if (key !== 'キャッシュの名前') {
          return caches.delete(key);
        }
      }));
    })
  );
});

 

install イベント内で"しなければいけない処理"というものはとくにないのですが、一般的に古いキャッシュを削除するのに使用されます。このサンプルコードではキャッシュからキーの一覧を取り出し、

self.addEventListener('activate', function(e) {
  e.waitUntil(
    caches.keys().then(function(keyList) {
      return Promise.all(keyList.map(function(key) {
        if (key !== 'キャッシュの名前') {
          return caches.delete(key);
        }
      }));
    })
  );

});

 

キャッシュの名前 (新しく指定された) と比較し、異なるものをすべて削除しています。

self.addEventListener('activate', function(e) {
  e.waitUntil(
    caches.keys().then(function(keyList) {
      return Promise.all(keyList.map(function(key{
        if (key !== 'キャッシュの名前') {
          return caches.delete(
key)
        }
      }));
;
    })
  );
});

 

上記サンプルコードの、"キーの一覧と新しく登録されたキャッシュの名前を比較して異なるものをすべて削除してしまう"、というやり方は少々乱暴かもしれませんので、実際に実装を行う際にはどのようにキャッシュの削除を行うかは充分に考慮してください。

なぜ activate イベントでキャッシュを削除するのか?

Service Worker 自体は、Service Worker 用の JS ファイルを更新することで再登録されますが、キャッシュが削除されるわけではありません。よって、いずれどこかのタイミングで用済みとなった古いキャッシュを削除する必要が出てきます。

たとえば、キャッシュの対象となっている index.html に更新があった場合は、更新前の index.html を保持しているキャッシュを削除しないかぎりユーザーにはいつまでも更新前の index.html が表示されることになります。

Service Worker 用の JS ファイルが更新されたあと、新しい Service Worker はバックグラウンドでインストールされますがまだ動作はしません。新しい Service Worker に制御が移るタイミングは古い Service Worker が制御しているすべてのページが閉じた後からになります。そのため install イベントで古いキャッシュを削除してしまうと、まだ動作している古い Service Worker はキャッシュを使用できなくなってしまいます。

いっぽう activate イベントではページの制御が新しい Service Worker に移っているので、古い Service Worker が使用していたキャッシュを削除することができます。

なにをキャッシュさせるか?

キャッシュさせるべきは App Shell です。App Shell はアプリケーションの UI が機能するために必要な最小限のリソースです。

App Shell をローカルにキャッシュすることで、アプリケーションの UI 表示と使用可能となるまでの時間を短縮することができ、オフラインでの使用も可能になります。

また要件に応じて、キャッシュが有効となるアセット類を指定しても良いでしょう。

しかし、なんでもキャッシュさせれば良いというものでもありません。

たとえば、WebGL ベースのゲームは、一般的に使用するアセット類のサイズが大きく、これを毎度起動する際にサーバーからダウンロードするのは、時間もかかり通信コストもかさみます。

たしかに、これらをキャッシュさせておけば、通信コストを下げ、ゲーム開始までの時間も短縮できます。

しかし、キャッシュストレージの容量には制限があり、また、cache オブジェクトの代わりに容量の大きい IndexedDB を使用したとしてもクライアントのストレージを占有することになります。

PC などのストレージ容量の大きいデバイスではあまり問題にならないかもしれませんが、スマートフォンのようなモバイル デバイスではストレージ容量を圧迫することにつながります。

よって、なにをキャッシュさせるかは充分に考慮する必要があります。

リクエストのハンドリング

Service Worker は有効化(activate)された後、アイドル状態となり Web ページからのリクエストやサーバーからの Push を待ちます。

アイドル状態のとき、制御下にある Web ページでリンクをクリックするなどしてネットワークリクエストが発生すると Service Worker では fetch イベントが発生します。

self.addEventListener('fetch', function(e) {
    e.respondWith(
        caches.match(e.request)
           .then(function(response) {
              return response || fetch(e.request);
    }));
})

 

fetch イベントハンドラの引数として渡されるオブジェクトに、発生したリクエストが含まれるので、同リクエストがキャッシュ内に存在するのか調べ、

self.addEventListener('fetch', function(e) {
    e.respondWith(
        caches.match(e.request)
           .then(function(response) {
              return response || fetch(e.request);
    }));
})

 

キャッシュ内にリクエストが存在すればそれを返し、存在しなければ fetch メソッドを使用してネットワークにリクエストを投げます。

self.addEventListener('fetch', function(e) {
    e.respondWith(
        caches.match(e.request)
           .then(function(response) {
              return
 response || fetch(e.request);
    }));
})

 

それぞれの処理結果をリクエスト元の Web コンテンツ側に返します。

self.addEventListener('fetch', function(e) {
    e.respondWith(
        caches.match(e.request)
           .then(function(response {
              return response || fetch(e.request);
    }));
})

 

この動作により Web コンテンツ側では Service Worker やキャッシュを意識することなく、これまで通りの方法でページの制作を行うことができます。

また既存の Web コンテンツに Service Worker の機能を追加する場合も、Service Worker を登録するためコードを追加する以外の作業は、基本的に必要ありません。

de:code 2018 のセッション動画で Service Worker を追加するデモを行っていますので、ぜひ実際の動作をご覧ください。

Web App Manifest

Web App Manifest は、デバイスのブラウザーによって [ホーム画面に追加] される際のアイコンや、ホーム画面から起動した際のスプラッシュアイコンや背景色、アプリケーションが動作するウィンドウのスタイルを定義します。

manifest は、json 形式で記述し、以下のような link タグを Web コンテンツ/アプリケーション側に追加して参照させます。

<link rel="manifest" href="/manifest.json">

 

Web App Manifest については、詳しい解説が MDN にあるのでそちらを参照することをお勧めしますが、以下に簡単な説明を兼ねたサンプルを掲示します。

{
   "lang": "ja", ← 言語
    "name": "The enemy of galaxy", ← アプリケーションの名前
    "short_name": "T.E.O.G", ← アプリケーションのショートネーム
    "start_url": "/?utm_source=pwd", ← 開始するときの URL (※1)
    "display": "standalone", ← ウィンドウのスタイル
    "background_color": "black", ← 背景色
    "description": "銀河に平和を取り戻すためのゲームです。", ← 説明文
    "orientation": "portrait" ← 画面の向き
    "icons": [{ (※2)
        "src": "images/homescreen48.png", ← 画像ファイルのパス
        "sizes": "48x48", ← サイズ
        "type": "image/png" ← 画像の種類
      }, {
      "src": "images/homescreen72.png",
      "sizes": "72x72",
      "type": "image/png"
   }]
}

(※1)Google Analytics 等を使用しているときはクエリーストリングを使用することで PWA として起動されたのか、ブラウザからページにアクセスしたのか判断が可能

(※2)iPhone や iPad でアイコンが反映されない場合は apple-touch-icon を使用

de:code 2018 のセッション動画で Web App Manifest を追加するデモを行ってぜひ実際の動作をご覧ください。

現在の Windows 10 バージョン 1803 の Progressive Web Apps の動作

なお、2018 年 6 月現在の Windows 10 バージョン 1803 (OS ビルド 17134.112) では残念ながら Web App Manifest によるウィンドウの制御は有効になりません。

たとえば Windows 10 の Microsoft Edge で Progressive Web Apps のページをタスクバーにピン留めして起動したとしても Web ブラウザーの UI を表示したまま起動してきます。

Windows 10 で Progressive Web Apps にそれらしい動作をさせるには UWP (Universal Windows Platform) アプリでラップする必要があります。

しかし、Windows 10 の次のアップデートでは、Web App Manifest の display の設定に対し、PWA のウィンドウは以下のような表示になるそうです。



 

マイクロソフトの Progressive Web Apps への
取り組み

Windows 10 の [Microsoft Store] から Progressive Web Apps が入手することができます。

Web App Manifest のところで書いたとおり、現在の Windows 10 にプレーンな Progressive Web Apps をインストールしても、ネイティブアプリのような外観にはなりません。そのためMicrosoft Store から入手できる Progressive Web Apps は UWP アプリにラップされています。

Microsoft ストアでの Progressive Web Apps の公開

Microsoft ストアで Progressive Web Apps を公開するには 2 つの方法があります。

1 つめが Bing による自動インデックスによる登録と、2 つめが Progressive Web Apps の提供者が Microsoft ストアに Progressive Web Apps を提出するセルフパブリッシングです。

以下でこの 2 つの方法について紹介します。

Bing による自動インデックス(BETA)

現在はまだ BETA の状態ですが、Bing が Web 上の Progressive Web Apps を検出し、レビューを行い、自動的に Microsoft ストアに公開します。

Bing に自動インデックスされるための条件は、現在のところ以下のようなものがあります。

  • HTTPS, セキュアなエンドポイント
  • 高品質の manifest
  • オフラインサポート
  • ストアの審査をパス
    • デジタルグッズを販売しないこと
    • アダルトコンテンツを含まないこと
    • 不快なコンテンツは不可
  • Windows ならではの差別化がされている

上記リストの最後の "Windows ならではの差別化がされている" というのは少しわかりづらいかもしれません。

Microsoft Store で公開される Progressive Web Apps は UWP アプリにラップされるので WinRT (Windows Runtime) API を使用することができます。

つまり WinRT API を使用することで、Windows 10 で使用した際には、純粋な Progressive Web Apps からはアクセスできないプラットプラットフォームやハードウェアリソースの機能を使用することができるため、これらを利用した機能を実装することで差別化を図ることができます。

Microsoft ストア向け Progressive Web Apps の検証

けして Progressive Web Apps の検証に限ったものでなく、ましてや Microsoft ストア向けの Web コンテンツ用に限定するものではありませんが Web サイトや Progressive Web Apps の品質をチェックするための sonarwhal というサービスが公開されています。

sonarwhal は Progressive Web Apps が Microsoft ストア向けの準備がてきているか、だけでなく、一般的な Web サイトやアプリケーションのパフォーマンスやユーザーエクスペリエンス、セキュリティの向上の役に立つ情報を提供してくれます。

Bing に検出されないようにするには

ここまで、どのように Progressive Web Apps を作れば Bing に自動的に発見されて Microsoft ストアで公開されるか、について紹介してきました。

しかし Microsoft ストアで公開されたくないということもあるでしょう。

Progressive Web Apps が以下のいずれかの条件に合致していた場合、Bing は自動インデックスを行いません。

  • manifest なし
  • https なし、もしくは オフラインで動作しない
  • Robot.txt ファイルが設定されている
  • manifest の display 設定が browser

既に Microsoft ストアで公開されているものを取り消しい場合は、アプリを削除するよう reportapp@microsoft.com宛にサービスリクエストを出します。

セルフパブリッシングによる Microsoft ストアでの公開

Bing の自動インデックスに期待するのではなく、明示的に Microsoft ストアで Progressive Web Apps を公開するにはdev.microsoft.comで開発者アカウントを取得し、パッケージ(appx)化して Microsoft ストアに提出します。アプリの内容が Microsoft ストアの審査をパスすれば Microsoft ストアで公開されます。

Progressive Web Apps をパッケージ化するには以下の方法があります。

 

PWABuilder について

PWABuilder はインターネットにホストされているサービスで、おなじくインターネットにホストされている Web アプリケーションのための manifest ファイルや Service Worker のコード、Service Worker を登録するためのコードを生成します。

また UWP の Hosted アプリのパッケージも生成できるので、Progressive Web Apps を Microsoft ストアで公開する際にはこれをストアに提出します。

PWABuilder を使用した既存の Web アプリケーション用の manifest ファイルや Service Worker のコードを生成する手順については de:code 2018 のセッション動画のデモをご覧ください。

Windows ストア(UWP) アプリの価値

前述しましたが、Progressive Web Apps を UWP アプリ(Hosted Web アプリ)としてラップすることで WinRT が提供するすべての機能を利用することができます。

これは予定表やアドレス帳といったプラットフォームが提供するソフトウェア的なリソースはもちろん、USB やセンサー類といったハードウェアリソースも含まれます。

アプリケーションが通常の Web ブラウザー上で動作しているのか、UWP で動作しているかは JavaScript の if 文で簡単に判断できるので、WinRT API にアクセスするためのコードをインターネットでホストされているコンテンツに含めておくことができます。

//UWP として動作しているかどうか
if(window.Windows){
   //セカンダリータイルをピン留めする
   tile = new Windows.UI.StartScreen.SecondaryTile(
       tileId, text, text,  activationArguments,
       newTileDesiredSize, logoUri);
}

JavaScript で記述した UWP から WinRT API を使用するサンプルコードは以下に豊富に用意されているので、Windows 10 限定となってしまいますが、純粋な Progressive Web Apps の機能だけでは実現できない要件がある場合は、こういった方法もあるということを覚えておくと良いかもしれません。

・コードサンプル - Windows アプリの開発

Visual Studio 2018 を使用して Progressive Web Apps を UWP でラップし、WindowsRT API を使用する方法については、de:code 2018 のセッション動画のデモをご覧ください。

その他、Progressive Web Apps を UWP として Microsoft ストアに公開することで、Microsoft ストアの提供するマーケティングデータ (ダウンロード数、ユーザーの性別、年齢層、国、etc..) や、決済のためのストアの API が利用できたり、人気があれば Microsoft ストアまトップページに掲示されたり、とさまざまなメリットもあります。

しかも Hosted アプリであれば、共通のコンテンツでありながら純粋なままの Progressive Web Apps が Web サイトでホストされているため、アプリストアを通さない場合のメリットも享受できます。

【参考】
・Windows デベロッパーセンター - PWAとWindows10

この記事では UWP の Hosted アプリについて紹介しましたが、Apache Cordova でもさまざまなモバイル プラットプラットフォーム向けに Hosted アプリを開発することができます。興味のある方は以下の記事をご覧ください。

・Create a hosted web app using Apache Cordova

Progressive Web Apps の価値を高める API

ここまで Windows 10 で動作する UWP アプリでラップされた Progressive Web Apps の紹介をしていましたが、ここからはふたたびプレーンな Progressive Web Apps についてです。

ここまでの説明でご理解いただけたかと思いますが、Progressive Web Apps は、「ネイティブアプリのような体験を提供する」と言っても、Web ブラウザーの機能を超えて動作することはできません。

例えば、表示速度や動作速度はネイティブアプリと比較するとどうしても劣ります。

しかし、Web ブラウザーで新しくサポートされた以下のような機能を使用すれば、その能力的な差を縮めることができます。

またこれまでの Web コンテンツには無かった新しい体験をユーザーに提供したり、決済の仕組みも Web 標準の API を使用してこれまでよりも少ない工数で組み込むことができるので、これらを使用してアプリケーションの価値を高めることができます。

  • CSS3
    3D Transform 関連等 GPU を使用する設定があり、これを意識的に利用することで描画速度を向上させることができます。
  • WebAssembly
    C 言語などで記述し、あらかじめコンパイルしたものを Web ブラウザーで動作させるため高速な計算が可能となります。
  • WebVR
    VR デバイスの提供する API をサポートし、ユーザーにより Immersive な体験を提供できます。
  • Web Payments
    決済画面その他、支払いに関する機能を提供します。これと Paypal や Stripe などが提供する決済用の API を繋げれば少ない工数で独自に決済期の機能を実装できます。自前の決済の仕組みがあれば、もうなにかを販売するたびにアプリ ストアに使用料を支払う必要はありません

この他にも、最新の Web ブラウザーにはこれまでできなかった機能が日々搭載されてきます。そういった新機能をいち早く利用できるのも、逆にレガシーな Web ブラウザーには引き算した機能を提供できるのも Progressive Web Apps の良いところです。(もちろん、そう作れば、ですが。)

Progressive Web Apps の位置づけ

PWA こと Progressive Web Apps は「ネイティブアプリのような体験を提供する」という言葉が独り歩きしてしまい、まるで「ネイティブアプリを置き換える」といった印象を持っている人も多いようです。かと言って「ネイティブアプリを置き換えることはできない」というのも真ではないでしょう。

例えば、スマートフォン アプリには、アプリとしてインストールさせるためだけに外側を Web View でラップしたいわゆる「ガワアプリ」と呼ばれるものがあります。

こういったものは今後は Progressive Web Apps に置き換えられていくでしょう。

実際にイベントサイトや、カンファレンスのセッションスケジュールの部分を PWA 化してユーザーが持ち歩けるようにしているサイトはすでにいくつか存在します。

こういったものも Progressive Web Apps が出てくる以前は Web ページとは別にスマートフォン用のアプリを、場合によってはプラットフォームごとに別々の言語で開発し、それぞれのアプリストアに提出して審査を受けるといったことをしていました。

Web ページとアプリの開発が共通化でき、配布の手間も掛からないということは予算や時間的にも非常に大きなメリットがあります。

しかし、Web ブラウザー内の JavaScript からアクセスできないプラットフォームの機能を利用するアプリケーションや、高速な動作や描画を必要とする用途には今後もネイティブ アプリが選択されることでしょう。

Progressive Web Apps は Web アプリケーションとネイティブアプリの体験的なメリットを受け継ぎ、ちょうどその中間に位置し、その隙間を埋めるものです。

Web のページでは poor だったもの、逆にネイティブアプリでは too much だったものが Progressive Web Apps には最適なのかもしれません。

少し作って試すだけの実装ならそれほど難しくありませんので気になる人はぜひ Progressive Web Apps を作ってみることをお勧めします。

 

Real Time Analytics

Clicky

Windows 10 October 2018 Update に搭載されたMicrosoft Edge(EdgeHTML 18)の新機能

$
0
0

10 月 3 日に Windows 10 October 2018 Update が公開されました。

このアップデートは Windows Update により順番に配信されていきますが、Update Assistant を使用した手動でのアップデートも可能ですので配信が待ちきれないという方はこちらこちらを利用してぜひ最新の Windows 10 と Microsoft Edge をご体験ください。

今回の記事では、この Windows 10 October 2018 Update に含まれる Microsoft Edge の新機能について「ユーザーインターフェース編」と「Web プラットフォーム編」という 2 つの観点で紹介します。

ユーザーインターフェース編

ユーザーが操作可能な、UI を持ったアプリケーションとしての Edge の新機能について紹介します。

Microsoft Edge Development のChange Logの内容と比較すると、Insider Preview からいくつかドロップした機能があるようです。

以下は Windows 10 October 2018 Update の Microsoft Edge で実際に動作を確認した機能です。

 

ジャンプリスト

タスクバー上の Microsoft Edge アイコンの上でマウスの右ボタンをクリックするとジャンプリストが表示されるようになりました。

このリストには頻繁に訪問している Web サイトが列挙され、リストをクリックすることで普段よく利用する Web サイトに素早くアクセスすることができます。

また Web サイトは、プッシュピンアイコン(マウスホバー時に表示されます)をクリックすることで、固定や固定を解除することができます。

ジャンプリストから Web サイトを削除するには、目的の Web サイトの名前の上で右クリックし、表示されたコンテキストメニューから [この一覧から削除] を選択します。

 

再デザインされた[...](設定など)メニュー

ユーザーからの強い要望をうけ("We’ve heard your feedback...") Microsoft Edge のツールバーの右端のメニュー[...](設定など)が、項目を見つけやすくする目的で再デザインされました。

一般的によく使用されるアクションを前面と中央に配置し、カテゴリー別にサブメニューを設けました。

メニューには各項目のアイコン、およびショートカットキーがグループ化されて表示されるようになり、メニューから直接ツールバーによく使用する機能のアイコンの表示を指定できるようになりました。

 

メディアの自動再生について

Spring アップデートでは、タブから再生中のメディアをミュートすることが可能になりましたが、今回のアップデートでもメディアの再生を制御する機能が追加されています。

メディアが自動的に再生できるかどうかを制御

Web ページに埋め込まれた動画の自動再生について許可するかどうかを指定できるようになりました。

この設定は [...] メニューの [設定] - [詳細設定]の中の「メディアの自動再生」で行います。

各設定の内訳は以下のとおりです。

説明
許可 メディアが埋め込まれた Web ページをロードしたタブがフォアグラウンドで表示されたときにそのサイトの裁量で再生が行われます。これは既定の設定です。
制限 ビデオがミュートされているときにのみ動作するように自動再生を制限します。そのため音に驚かされることがありません。ページ上の任意の場所をクリックすると、自動再生が再び有効になり、そのタブでそのドメイン内で引き続き許可されます。
禁止 メディアコンテンツと対話するまで、すべてのサイトで自動再生ができなくなります。これは厳格な設定のために一部のサイトが正しく動作しない可能性があることに注意してください-ビデオやオーディオが正しく再生されるためには複数回クリックする必要があります。サイトによっては、まったく機能しない場合があります。このような場合は、[Web サイトのアクセス許可] ウィンドウからケースバイケースベースで自動再生を有効または禁止することができます (アドレスバーのアドレスの横にあるアイコンをクリックします)。

 

サイトごとのメディアの自動再生の制御

メディアの自動再生は Web サイトごとに設定することもできます。

この設定を行うにはアドレスバー内の URL の直前にある鍵マークのアイコンをクリックし、表示された画面の [Web サイトのアクセス許可] セクションの[メディアの自動再生]ドロップダウンリストで許可レベルを設定します。

 

ダウンロード ペインへのメニューの追加

ダウンロード ペインのに表示されるダウンロード済みファイルのリストで右クリックした際に表示されるコンテキストメニューに [リンクのコピー] と [フォルダーに表示] メニューが追加されました。

 

読み取りビューの強化

Microsoft Edge では通常の Web ブラウザーの表示画面とは別に、ドキュメントの読みやすさと没入感を高めための [読み取りビュー] という機能を用意しており、アドレスバーの右側にある本のマークのアイコンをクリックすることでこの画面に切り替えることができます。

Microsoft Edge ではこの [読み取りビュー] にも機能強化を行っています。

行フォーカス

英語ドキュメントのように狭い領域にびっしりと文字が詰め込まれたドキュメントを読む際、ドキュメントから視線を外して戻すと読んでいる箇所を見失うということがあります。

読み取りビューに追加された 行フォーカス の機能を使用すると、ドキュメントから現在読んでいる箇所以外の部分をマスクすることができます。

この機能を使用するには、読み取りビューに切り替えたあと、メニューバーの [学習ツール] をクリックし、表示されたペインから [読み取りの設定] タブを選択して [行フォーカス] のトグルボタンをオンにします。

 

文書校正ツール

文書校正ツールを使用すると、単語を音節で区切ったり、文章から品詞を抜き出して表示します。

 

ただしこの機能は残念ながらまだ日本語には対応していません。

 

ページのテーマ

読み取りビューでは、ユーザーの色覚の能力に合わせた読書体験ができるようにページのテーマカラーを変更できます。

Windows 10 October 2018 Update では選択できるカラーがさらに追加されました。

この機能を使用するには、読み取りビューに切り替えたあと、メニューバーの [学習ツール] をクリックし、表示されたペインから [テキストのオプション] タブを選択して [ページのテーマ] 一覧から任意のテーマを選択します。

 

単語の定義ルックアップ

読み取りビューで表示したドキュメント内で単語を選択すると単語の定義がポップアップアップウィンドウに表示されます。

同ポップアップウィンドウでは音声で発音を確認することができ、[詳細] リンクをクリックすると、単語の詳しい説明が表示されます。

これらは読み取りビューだけでなく PDF ドキュメントでも使用できる大変魅力的なきのうですが、残念ながら日本語ドキュメントでは動作しません。

 

Web プラットフォーム編

アプリケーションの実行プラットフォームとしての Edge の新機能についてです。

このあたりは開発者ガイドにまとまっているので、特徴的なもののみ取り上げています。

 

WebDriverの改善

WebDriver を利用した Microsoft Edge での自動テストがより簡単になりました。

これまで WebDriver を使用して自動テストを行う場合、ダウンロード用の Web サイトに赴き、テストする Edge のバージョンに合わせて個別のパッケージを別途入手する必要がありましたが今回のアップデートにより Windows Feature on Demand(FOD)、つまり Windows 10 の [設定] - [アプリと機能] の中にある [オプション機能の管理]からインストールして使うことができるようになりました。しかも Windows Update により WebDriver のバイナリも自動的に更新されます。

 

Web Authentication (WebAuthN) CR (Candidate Recommendation)版のサポート

Microsoft Edgeには、プレフィックス無しの新しい Web Authentication API(a.k.a.WebAuthN)がサポートされます。 これは WebAuthN 仕様に対する以前のサポートを発展させて、デフォルトでアップデート版の API を有効にします。

Web Authentication は、認証を容易にするためのオープンでスケーラブルで相互運用可能なソリューションを提供します。これにより、パスワードをよりハードウェアに厳しい資格で置き換えます。

Microsoft Edgeの実装により、ユーザーはWindows Hello(PINまたはバイオメトリクス経由)とFIDO2セキュリティキーやFIDO U2Fセキュリティキーなどの外部認証ツールを使用して、Webサイトを安全に認証できます。

Microsoft Edge のこの新しい Web Authentication API のサポートについては以下の記事を参照してください。

 

XSS Filter の廃止

Microsoft Edge の XSS フィルターは廃止されました。ユーザーは、コンテンツセキュリティポリシーのような最新の標準によって保護されており、これらは最新のブラウザ間で高い互換性を持ち、コンテンツインジェクション攻撃から保護するために、より強力なパフォーマンス、およびセキュリティで保護されたメカニズムを提供します。

 

その他の開発者と IT プロ向けの情報について

Windows 10 October 2018 アップデートの公開に合わせ Edge の開発者ガイドも EdgeHTML18 のものに更新されました。

開発者の皆様はぜひ以下の開発者ガイドをご覧くださいませ。

 

今回の Windows 10 October 2018 Update で追加された Microsoft Edge のグループポリシーの一覧が以下のページで公開されておりますので、IT 管理者の方はぜひご覧くださいませ。

 

 

執筆後記

ひさびさの Microsoft Edge の新機能についての記事です。

テクニカルエバンジェリストという肩書はあるものの、以前とは仕事の内容がまったく違うので、このあたりの情報がまったく入ってこず、前回の Windows 10 April 2018 Update のときはEdge の新機能についての記事を投稿できませんでした。

そんな悔しさもあり、今回は配信当日に記事を公開しようと気合を入れて準備していたのですが、またもや不意を突かれたかたちとなってしまいました。

しかしながら担当案件が炎上中にも関わらず、1 ~ 2 日遅れで記事が投稿できたことは非常に喜ばしく思っております。

これかも時間と上司が許すかぎり Web 関連の情報を投稿いたいと思いますのでよろしくお願いいたします。

 

[2018/10/05 追記]

Microsodt Edge Dev Blog でも Windows 10 October 2018 Update で追加された Microsoft Edge の新機能についての記事が公開されていますので、こちらも併せてご覧くださいませ。

 

Real Time Analytics

Clicky

Viewing all 51 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>