見出し画像

hidekのエンジニアと長話 第4-1回【全文書き起こし】

stand.fmで配信中の「hidekのエンジニアと長話」4人目のゲストは、​スマートニュースEMの天野仁史さんです。

「hidekのエンジニアと長話」は、メルペイVPoEのhidek(木村秀夫)さんをメインパーソナリティにお招きし、ゲストエンジニアとともに作っていくスペシャルトーク番組です。

今回は、​天野仁史さんをお招きして、JavaScriptを選んだ理由やウェブアプリケーションとネイティブアプリなどについて語りました。

※本記事は、2021年1月29日にstand.fmで配信を開始した番組を書き起こしたものです。

——-

Profile
<ゲスト>
​天野仁史(amachang)氏
​スマートニュース株式会社 Mobile App Team エンジニアリングマネジャー

<「hidekのエンジニアと長話」メインパーソナリティ>
hidek(木村秀夫)氏
株式会社メルペイ VPoE(Vice President of Engineering)

<「hidekのエンジニアと長話」アシスタント役>
gami(池上)氏
株式会社プレイド エンジニア

——-

自己紹介

gamiさん(以下、敬称略):皆さんこんにちは。「hidekのエンジニアと長話」進行役を務めます、gamiと申します。今回もhidekさんと一緒にゲストの方のお話を聞いていければと思います。もしよければ番組への感想などは、stand.fmのコメント機能かTwitterハッシュタグ、#hidekのエンジニアと長話、この番組のタイトルと同じハッシュタグでいただければと思います。ということで、メインパーソナリティはこの方、hidekさんです。よろしくお願いします。

hidekさん(以下、敬称略):よろしくお願いします。今回もよろしくお願いします。あけましておめでとうございます、ですね。

gami:よろしくお願いします。あ、そうですね。おめでとうございます。

hidek:本年もよろしくお願いいたします。

gami:今年はどんな年にしたい、とかありますか?

hidek:今年ですか? 去年がコロナですごく大変だったじゃないですか。でも、これもまだ終息する感じもないし、ちょっと鬱々とした気分なので、何かこう、明るい話題が技術界隈でも、仕事でも、プライベートでも、何かあったらいいなぁ、くらいのぼんやりした、相変わらず計画性のない人生を送っております。

gami:(笑)。たしかに、たしかに。勉強会とかもなくなっちゃったし、減ってたりすると思うので、盛り上がりが何かほしいですよね。

hidek:はい。

gami:なるほど。ありがとうございます。そうしたらですね、本日もゲストの方をお迎えしております。amachangさんこと、天野仁史さんです。よろしくお願いします。

​天野さん(以下、敬称略):お願いします。

hidek:お願いします。

​天野:hidekさん、お久しぶりです。

hidek:お久しぶりでもないですよね。

​天野:え、そうですか?

hidek:一回、去年「EM Talk」って、藤本さんと、イベントで。あれがすごく久々でしたね。

​天野:すごく久しぶりだった。

hidek:ですよね。

​天野:でも全然、顔が若い。全然変わってない。出会ったころから。

hidek:あらら。​amachangも変わってないですよ。

​天野:僕、結構もう。結構、うん。池上さんも、はじめまして、なのかな?

gami:そうですね。はじめまして。

​天野:gamiさんですか? よろしくお願いします。

gami:よろしくお願いします。ネットの記事とかでは拝見していますけど。

​天野:ありがとうございます、今日はお呼びいただいて。

gami:いえいえ。

hidek:最初はちょっと自己紹介を軽くしてもらって……。

gami:そうですね。

​天野:スマートニュースという会社でエンジニアリングマネジャーと、東京オフィスのサイトディレクターという仕事もしているのですが。よろしくお願いします。ブログでは、​amachangという名前で、昔ブログを書いていたりして。インターネットでは、古いエンジニア? 古いエンジニアというか……。

hidek:(笑)。ミドルエンジニア?

​天野:ミドルウェアじゃなくて、ミドル「エージ」エンジニア。

hidek:そうね(笑)。

全員:よろしくお願いします。

元祖炎上ブロガー?

hidek:今回は、前回の嘉織さんから、嘉織さんって「さん」づけしたら本人から怒られるから、嘉織からの紹介ということで、嘉織からメッセージを預かっています。読みますね。「また、昔みたいに迂闊な発言で大炎上してください。嘘。コロナ落ち着いて、子どもも大きくなったら、また、朝までカラオケ行こうぜ」ということで。何か炎上したんですか?

​天野:炎上かぁ。これは発言していいのだろうか。ちょっと気づくかもしれないからあれなんですけど。いろいろ炎上しましたね、昔。やっぱ、今、ユーチューバーの人が炎上とかしているのを見ると、ブログが炎上するメディアではなくなった、というのがちょっと寂しかったりもしますね、なんかね。

hidek:「元祖炎上はわしや」と(笑)。

​天野:そうそう。はじめてTwitterで炎上したりしたのが界隈だった気がしますよね。

hidek:え、話せる範囲でそれちょっと聞いてみたい。

​天野:え、どうだろう。たぶん、でも、今の世代からすると「炎上」っていう範囲じゃないかもしれないけど。いや、これカットかもしれないんだが、誰かが誰かにお金貸して、家のない人にお金をあげたりして……。

hidek:あー、あった気がする!

天野:あと、Twitterって、ひとつひとつの細かいマイクロな発言にURLがついているっていうのが、その当時、結構意外なことだったと思っていて。

hidek:そうですね。

​天野:そのURLで発言を拾って、「これどうよ?」っていうのをすごく言うようなカルチャーがTwitterから生まれたような気がして。いろいろな炎上事件があれからあったなぁ、っていう。2007年くらいって、エンジニアしかTwitter使ってなかったりもしたので。

hidek:そうですね。いわゆる、アルファギークみたいな人たちが最初に触ったのがTwitter。

​天野:そうそう。あ、今、僕、はっきり思い出しました。Twitterで最初に炎上した事件を思い出したんですけど。

hidek:話せる?

​天野:いや、話してカットでもいいんですけど。僕がJavaScriptエンジニアだったので、当時。割とデザイナー関連のイベントとかに参加して、CSSの方と交流することも多かったんですけど。

hidek:はい。

​天野:その界隈で、「CSSだけだと、今後食べていくの結構難しいんじゃない?」みたいなことをTwitterでつぶやいて。もっとひどい言葉だったと思うんですけど。それで炎上したことがたしかあって。かなり炎上して、それで。その節は、本当に皆さん申し訳ございませんでした。

hidek:(笑)

​天野:別に皆さんの職業をバカにするということではなかったんですけどね。

hidek:でも、そうそう。Twitterに限らないけどネットの炎上の多くって、正論なんですよね。言ってることはそんなに間違ってないんだけど、伝え方みたいな、言い方とか、言葉のチョイスとか、なんかそういうので結構炎上しちゃってるのがあって、もったいないなぁ、とか思ってた。

​天野:そうねー。

JavaScriptを選んだ理由

hidek:それこそ僕も、最初に​amachangを知ったのが、2006年くらいですかね。Perlっていうプログラミング言語のコミュニティでウロウロしていて、そしたらJavaScript界隈で​amachangっていう人が、「IT戦記」ですよね、ブログをグリグリ書いて。で、カンファレンスの登壇とかもしているのを見に行ったら、話もめちゃくちゃ上手で、「すごいなぁ」と思って見ていたのが​amachangで。当時、​amachangのキャリアで言うと、ガイアックスとかサイボウズ・ラボとか、そのあたりかな?

​天野:そうですね。ガイアックスっていう、何で有名な会社なんだろう?

hidek:うーん。

​天野:まあ、いろいろなサービスをやっている会社なんですけど、その当時はSNSをたくさん作っている会社で。企業内SNSとかそういったものが、そのころは結構、事業として成り立つような時期でして、そういうのをやってた会社かな。

hidek:うんうん。

​天野:ちょうどそのJavaScriptの技術がね、脚光を浴び出した時期でもあって。

hidek:うんうん。

​天野:僕もJavaScriptの技術がやりたくてウェブ系の会社に転職した、っていう、ちょうどそういう時期でした。

hidek:あ、そうなんだ。ガイアックスを選んだのが、きっかけとしてはJavaScript、ウェブフロントエンドみたいなところだったんだ?

​天野:そうそう。「ウェブフロントエンド」っていう概念が存在しなかったんですけど。その当時、それをやりたくて、そういうのをやれそうなC向けのサービスで、JavaScriptってウェブに動きをつけるものだから、C向けのサービスでウェブでやりたいな、っていうので入ったって感じかな。

hidek:そもそも、聞いてみたかったのが、JavaScriptっていう言語をチョイスしたきっかけって何かあるの?

​天野:これ、面白い話になるかわかんないんですけど、僕、高専卒で20歳くらいの時に東京に出てきたんですけど、最初に入った会社っていうのが、電話の交換機を作る組み込み系の会社だった。で、ずっとC言語で組み込み系プログラミングをしていて。で、その電話の交換機に「ボイスガイダンスを流す機能を作ろう」という話になって。それで、ボイスガイダンスってシナリオみたいなのを書くわけですよ。「こんにちは」って言って、「1」のボタンを押したらこのメニューが出て、みたいな。

hidek:はいはい。

​天野:で、「それを書くための言語をどうしよう」ってなった時に、さまざまなマークアップ言語とかを調べて。

hidek:うんうん。

​天野:その中にVoiceXMLっていう仕様があったんですよ。

hidek:はいはい。

​天野:で、その中にJavaScriptが書けたんですね。

hidek:ふーん。

​天野:ECMAScriptと言われていたんですけど、その仕様の中では。で、そのVoiceXMLを電話の交換機に載せるためには、SpiderMonekyというJavaScriptエンジンをコンパイルして載せなきゃいけないんですよ。

hidek:うんうん。

​天野:っていうところの技術調査をしたことがあったんですよ。

hidek:なるほど。

​天野:で、その時、JavaScriptって「ページの装飾を変えるもの」くらいのイメージしかない中で、割としっかりとプログラミング言語としてJavaScriptを学ぶ機会があった、っていうのが最初のきっかけっちゃきっかけですね。

hidek:なるほどね。じゃあ、JavaScriptを触るきっかけっていうのは、いわゆるウェブブラウザでの実装、ウェブコンテンツの実装ではなくて、組み込みだったんですね?

​天野:そうそう。

hidek:意外、それは。面白い。

​天野:そうなんですよ。それで、これは、前の会社のよくないところでもあるかもしれないけど、そういう新しいものをやりたい、って言った時に、結構「ダメ」って言われて。

hidek:あー、なるほどね。

​天野:うん。それで、まあ、ちょっとモヤモヤしたままJavaScriptの調査みたいなのは終わっちゃった、っていうのがあった時に、結構、JavaScriptでいろいろできるよ、っていうのを再発見されて、っていう流れかな。

hidek:なるほどね。当時、JavaScriptってWeb 2.0、Ajax?

​天野:うんうん。

hidek:みたいなトレンドがあって。そうか、Ajaxって若い人わかんないか。「Asynchronous JavaScript And XML」だっけ?

​天野:そうそう。そんな感じかな。

hidek:「Asynchronous JavaScript And XML」。たしかそう。で、いわゆるJavaScriptで非同期にコンテンツをダイナミックにブラウザ側で更新する仕組みですよね。

​天野:うんうん。そう。

hidek:それまでは、結構、サーバサイドでHTMLをレンダリングして、基本的にはそれをクライアントのブラウザで描画をして、その中の細かいダイナミックさはあるけど、大きくサーバとして、通信として、っていうのはAjaxで達成された、っていう。

ウェブアプリケーションとネイティブアプリ

​天野:そうですね。イメージとしては、「1リクエストの中で持ってきたデータしか触れない」のがJavaScriptだったんですよね。

hidek:はい。

​天野:だから、今だとJavaScriptで無限に近いデータをインターネット側から持ってきて使うことができるんだけど、JavaScript側で何かやりたかったら、全部データを一回のリクエストで持ってこないといけない。

hidek:うん。

​天野:まあ、iframeとか使えばできたはできたんですけど。そういう手法とかも一般的ではなく。そういった中でマイクロソフトが実装していた、xHttpRequestだったかな?

hidek:はいはい。

​天野:そういうオブジェクトが実はありまして。それをFirefoxも実装したことによって、ある程度ウェブ標準として、まあ、if文とかは結構いっぱい書かなきゃいけなかったんですけど、その通信を標準化して使えるということを誰かが発見して。で、GoogleマップとかGmailとかが作られたんですよね。

hidek:そうですよね。あれでだいぶウェブアプリケーションという、それまでは「ウェブコンテンツ」っぽかったのが、「ウェブアプリケーション」って、本当にいわゆるクライアントとサーバサイドの通信によるアプリケーションっていうのが達成された。あれ、結構パラダイムシフトだったな、と僕は思ってて。

​天野:そうですね。JavaScriptが、データを扱える量が1リクエスト分から無限になったっていうことが。アプリケーションを作る条件が整った、っていうことですよね。

hidek:うん。当時はまだ、iOSだとかiPhoneだとかAndroidだとか、プラットフォーム端末がない中で、ブラウザ、ウェブっていうのが非常にクライアントサイドでは大きい領域を占めている中で、そのダイナミックさが出たっていうのは、本当にパラダイムシフトで、あれは面白かったですね。

​天野:そうそう。その当時のことを思い出すと、その当時流行ってたものって、「リッチクライアント」って呼ばれる……。

hidek:あ、そうだ!

​天野:覚えてます?

hidek:Flashとか。

​天野:FlashとかSWTだったかな。Eclipseが使っているやつとか。さまざまな、「ウェブブラウザをやめて標準的な通信ができるアプリに移行しよう」みたいな文脈でリッチクライアントが流行ったんですよ。

hidek:Javaアプレットとかですよね。

​天野:そう。アプレットとかさまざまなものがあったんです。Flash/Flexとかいろいろあって。でもウェブ標準ではないし。そんな中でウェブ標準のみでできるっていうのは、結構その当時はインパクトを持って受け入れられた。

hidek:そうですね。今までは、サーバサイドの方でビジネスロジックの実装で、フロントエンドはどちらかと言うと「描画」みたいなところでデザイン領域の方が広かったんですけど、それがあれによってフロントエンドの方でビジネスロジックを実装する、っていう流れになっていって。結構、「クライアントとサーバの分業化」みたいなのが進んだのはあのタイミングなのかなぁ、とか振り返ると思うんですけど。

​天野:そうですね。また、iPhoneが最初からスマホの完成版を出してきたのと同じで、GoogleがGmailとかGoogleマップを完成版、このAjaxの答えを出してきたのが大事だと思うんですよね。

hidek:「キラーアプリがあった」っていうのはすごく大きいよね。

​天野:そうそう。お手本があったんですよね、完全に。で、あっという間に「リッチクライアント」という言葉を聞かなくなって。

hidek:そうですね。

​天野:そうそう。ただ、今の人が聞くと思うことは、「なんでじゃあ『アプリストアからインストールする』みたいにならなかったんだろう」と思うかもしれないんですけど、その当時、「アプリをインストールする」って結構大変なことだったんですよね。

hidek:大変だった。

​天野:インストールしたらアンインストールするのが面倒くさいし、いろいろなゴミファイルが残っちゃったり、ファイルがコンフリクトしてうまくいかなかったり。結構「Windowsのアプリをインストールする」って今のアプリのインストール体験と全然違うものだったので。みんなウェブアプリではあったんですよ、その使いにくい状態でも。

hidek:うん。

​天野:そこに「デスクトップアプリ並みの表現力+データもちゃんと扱えます」っていうのが出てきたって感じ。

hidek:そうですよね。あれは結構大きい。あの時のいわゆるJavaScriptのフレームワークってjQuery?

​天野:えーっと、Prototype.jsが最初かな?

hidek:なるほど、なるほど。そうか、Prototype.jsか。そこからjQueryとかですよね。

​天野:そうですね。まあ、jQueryまで結構いろいろあってのjQueryで一旦ひとつの落ち着きがあったかな。

hidek:あ、そうだ。

​天野:なんか、scriptaculous.jsとかね。

hidek:あー、ありましたね。結構、あの時ってフレームワークの乱立で。今でもフロントエンド技術って移ろいが激しいというか、うん、言われがちだけど、あの時は本当に混迷期でいろいろ出て。jQueryは一定のデファクトになりましたよね。

​天野:そうですね。「CSSセレクターから書いて、そこに関数のリテラルを書いて」みたいな書き方が、CSSを書いていたデザイナーの方の市場にもちゃんと食い込んでいって、結構「jQueryがJavaScriptの新しい書き方を提案した」みたいなのが大きかったですよね、あの時代。

hidek:たしかに。関数呼び出しとか、いわゆるJavaScript起因だったりしますよね。

​天野:うんうん。

hidek:なるほどね。その辺を、そういう技術の話っていうか、特にJavaScript周りを、結構、amachang、当時からブログで発信してたりとか。デブサミとかも登壇してましたよね?

​天野:してましたね。

hidek:なんか賞もらってなかった?

​天野:あー、賞。そうですね。2007年にベストスピーカー賞をもらったんですけど。その当時は「JavaScriptのプログラミング言語の仕様」みたいな話もしたし、あと「今後はモバイルでもJavaScriptが使われていくんじゃないか」という話をしました。

hidek:あー。

​天野:その当時、携帯って、JavaScript動かなかったんですよね、携帯のブラウザって。

hidek:ガラケーって動かなかったですね。

​天野:そうそう。ただ、JavaScriptのシングルページアプリとかがスマホとかで使われるのにかなりの時間がかかったな、っていう印象です、でも。

hidek:あー、たしかに。

​天野:もっと早く来るかな、と思ったんだけど。やっぱ、アプリストアが優秀だったから、かなり。

hidek:あー、たしかに。一時期それでウェブっていうのがだいぶ押されちゃったというか、うん。挙げ句の果てにGoogleっていう、そこを押していたところがネイティブアプリケーションのプラットフォームを作ってしまったりとかして、結構、そこが低迷した時期っていうのは実際ありましたよね。

​天野:そうですね。「インストールをいかに面倒くさくなくすか」ってことが実は正攻法だった、みたいな流れなのかな、と。

hidek:うんうん。

​天野:Windowsは本当にインストールが面倒くさかったので。

hidek:(笑)

​天野:まあ、そのウェブアプリが流行ったわけですけど。僕らはそれで「ウェブアプリだ」と思ったけど、iPhoneは「インストールを面倒くさくなくすから、ネイティブアプリをもう一回使おう」という流れに持っていって。それが意外というか、僕は本当に意外だったんだけど、それがうまく機能した結果、ウェブとアプリというものの立場が逆転して。

hidek:そうですね。

​天野:アプリが優勢な時代になった、って感じかな。

hidek:あと、表現力だとかメモリのフットプリントをどれくらい使うか、みたいなところでちょっと重くなっちゃったりだとか、そういうのの結果。まあ、でも、今後たぶんウェブアセンブリ(wasm)みたいなものが出ていったら、また。僕、結構ウェブ好きなんですよね。プラットフォームレスな、そういう世界観が結構好きなので、またそれが、それこそウェブがもう一回復権するといいな、なんていう風に思って。

ウェブアプリケーションの今後

​天野:そうそう。それは本当にそう。僕もファンだから、ウェブのファンだから、ウェブが好きなんですけど。ウェブのメリットとインストールのメリットを整理して考えると、やっぱり、アプリケーションのストリーミング配信だと僕は思っているんですね、ウェブって。

hidek:なるほどね。

​天野:スマホのアプリって、今はもう安心してインストールもできるし、アンインストールもできるし。過去、僕らがWindowsのアプリをインストールする時の苦痛、っていうのはもう最小限になっていて。

hidek:はい。

​天野:唯一、ウェブのメリットっていうのは、クリックしたらインストールレスで、必要なアプリのコンポーネントがウェブから、「ブラウザにインストールされる」って表現は微妙かもしれないけど、「キャッシュに入る」ということを「インストール」と呼べば、ストリーミング的にインストールされて実行される、みたいなところだと思うんですよ。だから、決まったコードだけが動くものではなくて、その先々にクリックしていくことで、違うアプリに次々と移っていくような体験だと思っているんですね。

hidek:なるほどね。

​天野:そこを活かした、何か面白いアプリが出てきるといいなぁ、なんて。

hidek:うん。でも本当に今、SNSとかあるじゃないですか。それとウェブってすごく相性がいいと思っていて。SNSで共有する時にアプリを立ち上げるようなURLだったら、アプリがインストールされてないと基本的にはそこにはリーチしないんだけど、これがウェブで表現されてたら、まあ、ブラウザってどんなプラットフォームでもあるじゃないですか、なのでそれを共有できる、っていう、そこの広がりの強さ。「ウェブの本来の強さ」みたいなところは、SNSとすごく相性がいいと思っていて。だから、「もう一回そういう観点で復権してくれねぇかな」という風には思っていますけどね。

​天野:そうですね。僕が好きな世界はそっちですね。ただ、次「起業する」とかなったら、たぶんアプリだと思いますけどね、また。

hidek:ああ、なるほどね。

​天野:ネイティブアプリだと思う。好きな世界はそっちだな。


この記事が気に入ったらサポートをしてみませんか?