「ネイティブアプリケーションでできることをWebアプリケーションでもできるようにする」というゴールを掲げ、APIの機能拡充を図っているChromiumのプロジェクトのひとつに「Project Fugu🐡」があります。日本語の「河豚」から名前を付けたというこのプロジェクトが、現在どんな活動をしているのか、TechFeed公認エキスパートののびすけさんに詳しく聞いてみました。
今回話を伺ったエキスパート
フォローしよう!
のびすけさんのこちらのスライドで、Project Fugu🐡について知りました。Project Fugu🐡とはどんなものですか? 概要を教えてください。
Project Fugu 🐡は「ウェブ・ケイパビリティ・プロジェクト(Web Capabilities)」とも呼ばれるChoromiumのプロジェクトチームのひとつです。ちなみにChromiumのプロジェクトチームは14個あるみたいですが、そのうちのひとつが"Project Fugu 🐡になります。
年々、いろいろなハードウェア機能にアクセスするAPIがJavaScriptから扱えるようになってきています。PWA(Progressive Web Apps)などではすでにネイティブアプリのようなWebアプリケーションを作ることができるようになってきていますが、機能面ではまだ一部の対応という段階で、ネイティブアプリとWebアプリケーションでやれることの差は大きいです。
Project Fugu 🐡 はこういった差を埋めていくことを目指したプロジェクトです。
本家だと以下のように記載してあり、
Project Fugu 🐡 is an effort to close gaps in the web's capabilities enabling new classes of applications to run on the web.
Project Fugu🐡は、ウェブ上で動作する新しいクラスのアプリケーションを実現するために、ウェブの機能のギャップを埋めるための取り組みです。
Felix氏のブログの解説だと以下のように書いてあります。
Also known as the web capabilities project, project fugu improves the web platform by adding features that—until now— have been possible on native applications only.
これまでネイティブアプリケーションでしか実現できなかった機能を追加し、Webプラットフォームを改善するものです。
公式な見解では、 「ネイティブアプリでできることとWebアプリケーションでできることのギャップを解消するプロジェクト」だと言っていますが、語弊を恐れずに言うとJavaScript(Web)でいろいろやれるようにしちゃおうプロジェクト としても良いと思います。
目指しているゴールとしてはネイティブとWebのギャップを埋めることなのですが、すべてのネイティブで扱えるAPIをWebに取り入れていくのはものすごく時間がかかります。そこでまずはニーズとユースケースを特定するために、Web開発者以外にも話を聴きながらWebで何が必要とされているのかを把握するといったことも行われています。
そういった現状の進め方なども含めて僕なりの解釈だと
従来ネイティブアプリでしか扱えなかったデバイスの機能にJavaScript(Web)からアクセスできるようにするAPIの機能検討プロジェクトで、Webの未来をディスカッションしている場のひとつ
なのかなと思っています。
ちなみになぜFuguなのかというと、本当に日本の河豚から名付けられています(W3Cから引用)。
Fugu is the Japanese word for a pufferfish, so this is something people eat, but it's kind of dangerous. If it's not prepared correctly, you don't have the right education, you might actually end up killing people and we wouldn't want to do that.
河豚は美味しいけど毒があり、正しく教育を受けて調理しないと人を殺してしまいます。Webでいろいろやれるようにしてしまうと、セキュリティやプライバシー、信頼性など気をつけないと大変なことになります。それこそ事件が起きるとWebは危険だみたいな認識になってWebも人も殺してしまうかもしれません。
そうならないように 自戒の念を込めた名前として河豚という名前を付けているらしいです。「危ないってことは僕らもわかっているし、気をつけているんだよ!」というメッセージなんだと思います(笑)
Project Fugu🐡では、具体的にどのようなことが可能になるのでしょうか?いくつか例を教えてください。コード例などを示してくださってもかまいませんし、スライドにリンクしてもらってもいいです。
有名な例をいくつかピックアップしますが、個人的にIoTやハードウェア制御の文脈が好きなので、そういった部分に偏ったピックアップになっていることをご了承ください。
Web Bluetooth API
こちらは名前の通りですがJavaScriptからBluetoothを扱うことができます。
navigator.bluetooth.requestDevicでBluetoothデバイスを探してアクセスできます。
このAPIを使うことでブラウザからBluetoothデバイスに直接データアクセスができるようになります。今まではブラウザでBluetoothデバイスのセンサーが使えるハードウェアを繋ごうとした場合、たいていはWi-FiとBluetoothの両方の機能を持ったハブとなるデバイスを経由してサーバにデータを送るといったことをしていました。ブラウザから直接Bluetoothデバイスのデータを取得できるので、そういったハブとなるデバイスもネイティブアプリの開発も不要になります。
WebHID API
WebからHID(Human Interface Device)プロトコルに対応したデバイスにアクセスすることができるAPIです。もともと、キーボードやマウス、ゲームパッドなどの標準的なHIDデバイスはJavaScriptでアクセスが可能でしたが、アクセスできる機能に制限があったり、標準的ではないHIDデバイスへのアクセスはできないことが多かったです。たとえば、Nintendo SwitchのJoyConはGamepad APIでボタンやスティックの値を取得はできましたが、加速度やジャイロ機能などはGamepad APIでは値を取得できませんでした。こういった機能もWebHID APIを使うことでブラウザから制御できます。ほかにもMacBookのキーボードバックライトの制御もWebHID APIで行えたり、HIDデバイスであれば幅広く制御可能です。
Web USB API
その名の通りWebからUSBデバイスの制御できるAPIです。接続しているUSBデバイスを認識してブラウザとUSBデバイスでデータやり取りが行えます。過去に僕が作った作例だと、自身のスマートフォンとパソコンをUSBケーブルで接続することでログインできるログインフォームを作ったことがあります。
WebNFC API
その名の通りWebからNFCの制御できるAPIです。最近だとマイナンバーカードをスマートフォンで読み取って各種申請を行うネイティブアプリが公開されていたり、交通系ICカードなどNFC機能を持ったネイティブアプリが公開されていたりしますが、WebNFC APIではそういったNFC機能をJavaScriptから扱えます。任天堂が出しているフィギアのamiiboの情報もWeb NFCで読み取ることができます。
Ambient Light Sensor API
スマートフォンやノートパソコンなどには環境光センサー(例→Mac)が内蔵されているものもあり、その光の値をJavaScriptから制御することができます。部屋の明るさによって表示を変えるようなWebの表現をすることもできます。
Project Fugu🐡の実装/進捗はどのような状況でしょうか?
Project Fugu🐡の機能の進捗は以下の5つのステータスに分かれています。
- Stable(Shipped) … すでに実装されていてChromeで利用できる
- Origin Trial … 申請をした限定的なOriginで利用できる
- Behind a flag(Developer Trial) … chrome://flagsでフラグを許可することで利用できる
- Started … 実装に向けた動きが始まったばかり
- Under consideration … 実装に向けた着手前で投票などが行われている状態
たとえば先ほど例に挙げたAmbient Light Sensorは2022年8月時点でフラグ付きで利用できる状態にあります。こういった進捗はFugu API Trakerを見ると一覧化されているので、興味のある人は覗いてみてください。
個人的にはUnder Considerationのまだ提案段階くらいの会話が夢が詰まっていておもしろいなと思っています。たとえばBetter Printingの議論ではWebの印刷環境をより良くするために「アクセシブルなPDF生成のAPI」「プリンタの情報取得」「印刷用のCanvas API」などが議論されています。
IR Blaster Capabilityはその名の通り赤外線の信号を発信するといった機能の話題です。JavaScriptから赤外線制御ができればブラウザから直接テレビやエアコンの操作ができるかもしれませんね。
Web Bluetoothも現状ではセントラルとして利用することしかできませんでしたが、それでは物足りないという話なのでしょうか、ペリフェラルとして利用できるようにする議論なども出ています。古く使わなくなったスマートフォンをBLE対応のセンサーとして利用したいというユースケースがあるのかもしれませんね。
Project Fugu🐡についての現状の課題があれば教えてください。
中の会話まではちゃんと追えてないですが、提案段階やOrigin Trialなどの限定的な公開の状態になってから、実際に施行されるまでに長い時間がかかっている印象です。
Fugu API Timelineを見るとわかりますが、2018年10月にBehind a flag(以下、Developer Trial)の状態になりましたが、2020年5月にShippedのステータスに変わりました。1年半ほどかかっています。
Ambient Light SensorのAPIは2017年10月にはDeveloper Trialで利用できる状態となっていましたが、直近でも変化はなく、2023年1月までDeveloper Trialの状態のままの模様です。5年半ほどは変化がない状態とも言えます。お試しでやれる状態には早く持っていき、河豚の調理方法の自戒の話もありましたが、実際の導入は少し慎重に進めているような印象です。もっとディスカッションに参加する人が増えたり認知度が増えて動きが加速してほしいですね。
ちなみに、Chromiumのプロジェクトということで、もともとはGoogleが主導していましたが、現在はMicrosoft、Intel、Samsungなども参画しています。ネイティブアプリが多く、普及してほしいポジションであるAppleがここに名前が挙がっていないのはビジネス的な思惑も感じます。(たしか)WebRTCへの対応もAppleはかなり遅く、ビデオ通話をさせるようなアプリケーションを作ろうとしてもiPhoneだとネイティブアプリを作るしかないいという状況が長かった印象です。
Googleを始めとした多くの有名企業が賛同し、Webでいろいろやれるようになっていったとしても(世界だとAndroidのシェアの方が高いのでそうでもないのかもしれませんが)、iPhoneの利用者が多い日本だと、iPhone(iOS、Safari)が対応しない限りはWebとネイティブのギャップは埋まりにくいんだろうなと思います。
開発者が試してみるレベルではいろいろなことがやれるようになってきていますが、Stable(Shipped)ステータスになったとしてもあくまでもProject Fugu内での進捗であり、世の中的にWebとネイティブのギャップを埋めることができたか?というと、まだまだ遠い未来に感じます。
Project Fugu🐡についての今後の(明るい)展望を教えてください。
僕はIoTLTという電子工作やハードウェア周りのLTを行うコミュニティを運営してますが、WebでネイティブのAPIが扱えるようになるとこれまでハードウェアデバイスとスマートフォンやPCの連携ではネイティブアプリ開発が必須でしたが、Webから直接ハードウェアデバイスを制御できる時代が来るかもしれないと思って期待しています。
いろいろな細かいところを無視して期待っぽいところだけを書くと、Webから直接ハードウェアデバイスを制御できるとまずは開発や運用コストを下げていくことができると思います。
現状のIoT領域はハードウェアデバイスを作ったとして必ずと言っていいほど付属するスマートフォンアプリの開発も必須となっています。現状だとNFCやBluetoothの機能を使う場合はネイティブアプリ開発を行うのが一般的で、こういった開発にはAndroidとiOSの両方の対応が求められるため、新規開発も運用コストも大きいです。Web開発だとJavaScriptだけで開発が可能になるので開発や運用時のコストを下げることを期待できます。
また、少し飛躍した話かもしれませんが、新しいビジネスやアイデアが生まれやすくなる可能性を秘めていると感じています。Project Fuguが進むことによってWeb開発の表現の幅も広がっていきます。今まではブラウザ画面上でしか出来なかった表現が現実世界もハック対象となり、そういったリアルとデジタルを交差させた表現やWebアプリケーションがあたりまえになっていくはずです。アイデアは既存の要素と既存の要素の掛け算で発生しますが、Webはエンジニアなどに限らず一般の多くの人が触れる要素になっているので、現状のWebでやれることからビジネスアイデアを考えてしまう人は多い印象です。Webアプリケーションの表現の幅が広がることで掛け算に使える要素の数が多くなり、従来のWebサイトを閲覧したりSNSなどの利用を前提としたWebではなく、リアルとデジタルを交差させた表現のWebを基準にして新しいアイデアを考えることが出来るようになります。
もともとWebを使うのは人間なので、人間の生活の変化や働き方の変化によってWebに求める機能の要望やユースケースは変わっていきます。ただProject Fuguやこういった思想が無い時代では求めるユースケースが変わってもWebにそういった機能を求めにくく、WebはWebとして切り離されていたように感じます。
検討中の機能で、「Ability to create virtual microphone and camera devicesと「Remote Desktop Control」を見かけましたが、前者は仮想カメラとマイクの生成、後者はビデオ会議などでリモートの誰かに自身のPCをコントロールさせたいといったコロナ禍でのオンラインの働き方やコミュニケーションで加速したユースケースをもとに提案が行われています。
Project Fugu🐡によってWebとリアルな世界との親和性が高まっていることを感じますが、リアルな世界の事象がWeb本体にも反映されやすくなっていくと思います。もしくは、そういった声を上げやすい風土を作ってくれている気がします。
とはいえ、以前JxckさんのWebの自重の話がありましたが、すべてをWebでやれると良いのか?という議論もあると思います。これもProject Fuguが懸念する河豚の毒のひとつなのかなと思っています。ユースケースの拡大も受け入れる姿勢を見せつつ、無邪気に何でもWebでやれたら良いよねって話にもせず、バランスを考えて扱っていく必要もあると思います。
Webの未来がこの先どうなっていくのかは、誰かがトップダウン的に決めるではなく、皆さんの生活や働き方から定められていて、実は現実世界のちょっとした不便さなども声を上げてWebの機能に反映していくことはできる可能性があることを知ってもらえたら良いのかなと思っています。
個人的にはJavaScriptを使っているWeb界隈の人が少しでもハードウェアや現実世界ハックに興味を持ってもらうキッカケになると嬉しいなと思っています(笑)
It is interesting that the scratch games programs provide more access for learners to more advanced knowledge. Can develop skills to build a perfect product together. I like the knowledge sharing the website brings.