終わってしまうChromeアプリ
既に2ヶ月前の2016年9月8日、Google Developers Japan Blogに、僕にとって非常に興味深いブログが掲載されました。
簡単にまとめると、「Chromeアプリは(ChromeOSを除いて)終了します」という内容でした。薄々感じ取ってはいたものの、改めて正式に言われてしまうと、とてもショックです。まあ、でも、確かに仕方のないことなんですけど、特に日本においてはChromebookを目にする機会はほとんどありませんし、そのためChromeアプリ開発者の数も非常に少なかったと思います。OpenSocialといい、Chromeアプリといい、そろそろ僕も「お前が注目した技術は数年後になくなる」とか声が聞こえてきそうですが、2年近く、かなり本気を出して取り組んできたChromeアプリの世界だけに、立ち直れるまでかなりの時間がかかったというか、今も信じられません。
そんな僕の思いを皆さんに伝えられる場が、実はありました。先月の10月9日に行われたDevFest Tokyo 2016です。その中のLightning Talk枠を僕はいただくことができたのですが、持ち時間5分のところを、あふれる思いを抑えきれず、スライドを61枚も作ってしまい、もちろん半分くらいのところでTime Upとなってしまいました。もちろん、完全に自業自得なのですが、これでは僕の中のChromeアプリ熱が成仏できません。
そこで、本来話そうとしていたことを、このエントリでお伝えしようと思います。では、始まり始まり〜。
さて、今日は皆さんに、素晴らしいChromeアプリの世界をぜひ知って帰っていただきたいと思います。
自己紹介はしなくていいですよね。時間ないので飛ばします。
さて皆さん、Chromeアプリってご存じですか?知ってる方手を上げて!はい、皆さん知ってますよね?では、作ったことある人?(ほとんど手が上がらず)はい、まあ、そんなもんですよね。
こういうテキストエディタがChromeアプリで作れます。
そして、Photoshopとほとんど同じ機能を持つアプリもあります。もちろんChromeアプリです。ちなみに、この写真は僕の娘です。似てますか?可愛いですよね。
LINEだってChromeアプリ版があります。
Chrome Dev EditorというWebアプリ開発環境もChromeアプリとして提供されていたんです。残念ながらもう開発は止まってますが。
そして、美しい3DグラフィックスのゲームもChromeアプリとして数多く登場しました。これはその時のキャプチャですが、本当になめらかにグルングルン回ります。酔うほどに。
そして、Chromeウェブストアにいけば、日本人向けのこういったChromeアプリ達をインストールして遊ぶことができるわけです。だんだんChromeアプリの素敵な世界がわかってきましたね?
これらのChromeアプリは、HTML、JavaScript、CSSといった、ウェブ標準技術で作られています。そう、Chromeアプリなら、Chromeがインストールさえすれば、今まで紹介したChromeアプリ達はどこでも同じように動作するわけです。Write Once, Run Anywhereです。
Chromeアプリ内で使えるAPIは、こんなにあります。
その中でも、簡単なChromeアプリであれば、これくらいのAPIの使い方さえ知っていれば十分です。
特徴的なのは、BluetoothやUSB、CPUなど、ハードウェアにアクセス可能なAPIが比較的充実していたことです。つまり、これらを駆使すれば、WindowsやMacなどのネイティブアプリに匹敵するChromeアプリを作ることができます。
その中でも僕が目を付けたAPIが、sockets.tcp APIです。そうなんです。生ソケットを使えるんです!
生ソケットが使えると言うことは、何でも作れるということです!作れないものなんてないんです。無限の時間を僕にくれれば、この生ソケットを使って何だって作ってあげます。はい、すぐに作れるなんて言ってませんよ。無限の時間があれば、です。
僕はChromeアプリとsocket.tcp APIに惚れ込みました。そして、「普通だったらそんなもん作れないだろ」というものを作りたくなりました。そのときに、真っ先に思いついたのが、MySQLのドライバでも作ってみようかな、でした。幸いにも、MySQLの開発者向けページにプロトコルの説明が載っていましたので、
せっせとこんなJavaScriptのコードを書いていったところ、
はい、できました。socket.tcp APIを使って、MySQLと直接お話ができるドライバを100% JavaScriptで書きました。それだけでは面白くないので、
mysqlコマンドみたいなコンソールアプリを作ってみたり、
Mac向けに提供されているSequelProっていうMySQLのクライアントアプリがあるんですけど、それからインスパイアされて、AngularJSとかBootstrap使って、MySQLのクライアントアプリをChromeアプリとして作りました。これらはChromeウェブストアで公開しているので、興味のある方はぜひインストールしてみてください。ちゃんと動きますよもちろん。
そして、どうしてもJavaScriptでは書けない処理、例えばSSHの暗号化通信で出てくる素数計算とかは、桁数がデカすぎてJavaScriptでは辛いとかあるわけです。そういう場合は、C++でもコードを書くことができます。Native Client Library、略してNaClと呼ばれている技術です。
先ほどのMySQLのクライアントアプリの中では、とある外国人が「SSHのポートフォワーディングでないとMySQLに繋げられないから何とかしろ」とわがままを言ってきたので、libssh2というC言語向けのライブラリを組み込んで、それを実現しています。
また、Secure ShellというChromeアプリがあって、SSHクライアントアプリなのですが、
その中には、OpenSSHというライブラリがそっくりそのまま入ってます。
そして、先ほどの3Dゲームの中では、
Unityが使われています。
さて、昨年、一昨年で、かなりの個数のChromeアプリを作りました。File Systemなんたらっていうのは、Chromebookから遠隔地にあるファイルシステム、例えばDropboxとかOneDriveとか、SFTPとか、そういったものをあたかもChromebookのローカルストレージとしてマウントすることができるっていうChromeアプリです。おかげさまで、海外ではかなり使われています。例えば、File System for Windowsでは、SMBプロトコルをパケットキャプチャで解析しながら全部自前で実装しました。そりゃー大変でした。
朝と夜それぞれ2時間を実装にあてる、という生活を毎日送ったおかげで、いろいろ病気にもなりました。夏に患った横行結腸憩室炎では、1週間ほど入院も経験しました。睡眠不足は良くないですね。皆さん、気をつけましょう。
一度書けばどこでも動くChromeアプリ、
すごくないですか?半端ないですよね?もう世の中これだけでいいんじゃないでしょうか?
・・・
しかし・・・
今年の8月16日に、Chromuim Blogにて、こんな投稿がありました。
遅れること9月8日、Google Developers Japanブログにて、日本語訳が公開されました。そこに書かれていたことは何だったかというと、
なんと、Chromeアプリの終了のお知らせだったのです!
世界中が驚きました。つまり、
Chromeアプリは、一度書けばChromeOさえあればどこでも動く、というものになってしまったのです。しかも、先ほどのブログをよく読むと、
当面の間、という表現で書かれています。ってことは、そのうちChromeOSでも動かなくなってしまう、つまり完全終了のタイミングが来るってことですか?
更に追い打ちをかける事態となっています。これからは、ChromeOS上でAndroidアプリが動作するようになります。既に一部のChromebookでは、GooglePlayをサポートし始めています。
昔こんな画像がありましたが、
僕にはこう見えてなりません。
今日の司会を担当されている方が、自身の本でこんなことを書いていましたが、
次に出す本には、こう書こうと思います。「お前もChromeアプリにしてやろうか」と。
ちなみに、弊社ではQiitaを共に作ってくれるソフトウェアエンジニアを募集中です。興味があればぜひ。
これから、ネイティブアプリに近いアプリをウェブ技術でこれからどう作ればいいんですか、という質問には、
プログレッシブウェブアプリを作りましょう、という答えになります。そして、
HTMLやJavaScriptだけでは作れないものを作りたくなったときは、
asm.jsや、これからはWebAssemblyが来るわけです。しかし!
生ソケットはきっと代替案がない!どうしてくれるんだ!僕のMySQLドライバは!
というわけで、Chromeアプリがなくなってしまうとできなくなってしまうことがあったらこちらへ、っていうフォームがあったので、
「俺の生ソケットを返せ」と投稿しておきましたが、
Electronで十分です。
完敗です。
僕の中でのChromeアプリは、終わりを告げました。
実際のところ、Chromeアプリはそろそろ終わってしまいそうですが、プログレッシブウェブアプリもそうですし、ウェブ標準技術の進化が最近めざましく、確かにChromeアプリがこのままいくよりは、普通のウェブページでも同様のことができるようになっていくことの方を歓迎すべきかな、と思います。そんなわけで、
Chromeアプリ開発から、僕は引退しようと思います。
今日、私は引退してしまいますが、
僕が愛したChromeアプリは、永久に不滅です!
ご清聴ありがとうございました。