WEB+DB PRESS本誌では久しぶりとなる連載インタビュー企画。新型コロナ禍のさなか対面での取材を避け、リモートで行います。ホストは関満徳が務めます。記念すべき第1回目のゲストとしてお迎えしたのは、Node.js日本ユーザグループ代表理事の古川陽介氏です。
古川氏は、日本トップクラスのJavaScriptエンジニアとして知られ、大学院を卒業後、数社での勤務を経て、社員のマネジメントとWebアプリケーション作成用のユーティリティツールやフレームワークの開発を担当されています。その傍ら、Japan Node.js Association代表理事として、国内外のカンファレンスへの登壇、Node.jsの勉強会やイベント運営など積極的に活動されています。
関: Node.jsと出会ったのはいつぐらいなのでしょうか?
古川: 私のキャリアのスタートはJavaでした。Node.jsが最初にリリースされたのが2009年で、私が使い始めたのは2010年です。もともとJavaをやっていましたが、今はフロントエンジニアやグループマネジメントをやっており、Node.jsやJavaScriptを仕事で使うことが多いです。入社したときからコミュニティ活動はしていました。今は「JSConf JP」( 注1 )という名称ですが、2018年までは「東京Node学園祭」という名称で2代目リーダーをやっていました。2011年はただの参加者でしたけどね。その後、スタッフ活動を経て、2013年に2代目のリーダーを襲名した、という経緯になります。
[1] JSConf JPは、Japan Node.js Associationが主催するイベント。2019年からJavaScriptの国際的なコミュニティカンファレンスJSConfファミリーの一員として開催。
JavaScriptを襲った暗黒時代
関: Node.jsが2009年にリリースされる前のJavaScriptは、「 セキュリティ上まずいから、JavaScriptは無効にしてね」という風潮がありました。何がきっかけでJavaScriptが見なおされるようになったのでしょうか?
古川: 当時JavaScriptのほかにFlash、ActiveX、Silverlight、DirectXなど、リッチな方法論がいろいろありました。JavaScriptは、非常に残念なことに、ほかに比べてよからぬことに使われていたことが多く、そのために無効にすることを推奨されていたのですが、その期間が長かったのです。JavaScriptは、今のような使われ方ではなく、画面の表示を派手にしたり、マウスカーソル周りを装飾したりなど、どちらかというとお遊び的な使われ方をされることが多く、UX面でも良い影響を与えていませんでした。
JavaScriptが見なおされるようになったのは、2000年代後半から2010年代前半です。ちょうどNode.jsがリリースされたころですね。その少し前からAjaxと呼ばれるキーワードが発生し、一番影響が大きかったのはHTML5です。Flashをはじめとしたリッチなクライアント技術では、ブラウザのプラグインを使った追加インストールが前提でした。かつ、セキュリティ設定の変更やアップデートが面倒だったのに対し、HTML5はそれらが一切不要だったというのが大きいです。JavaScriptの標準化仕様に対する各社の動きも、変わったのはこのころです。当時は標準化仕様をめぐって各社が対立していたのですが、HTML5ブームをきっかけに“ もっとオープンなやり方でやっていきましょう” という転換がありました。その後、Google MapsやGmail、Google DocsなどがリッチなJavaScriptを使ったアプリケーションとして実装されたことで、ここまでできるのか、という驚きと便利さが普及を後押ししました。次にきたのがスマートフォンの台頭です。特に、iPhoneがFlash非対応という宣言を出したことで、JavaScriptへの転換を余儀なくされたことも大きいです。
JavaScript新時代の幕開け
関: HTML5ブームやスマートフォンの台頭で、JavaScriptはどのように変わったのでしょうか?
古川: それまでのフロントエンドの考え方としては、MVC(Model-View-Controller )やMVVM(Model-View-ViewModel )などの設計思想に代表されるように、サーバサイドでモデルやコントローラ/ビューモデルを作り、JavaScriptはビュー上でちょっと動かしてリッチなものを作るのが主流でした。しかし、HTML5ブーム、iPhoneによるFlashの廃止、クライアントの端末の高性能化により、ビューの部分はJavaScriptでも作れることがわかってきました。ここからクライアント側でビューを作る動きが活発になってきます。
その結果、これまで慣れ親しんできたサーバサイドでHTMLを作るパターンから、ReactやVue.jsのようにクライアントサイドでHTMLを作るパターンが増えてきました。この変化に伴って、クライアントサイドでのコードの記述量が増え、設計方法が複数生まれて多様化していきます。Redux [2] などの単方向データフローで状態を管理するライブラリが使われだしたのもこの流れです。言い換えれば、今まではHTML、CSS、JavaScriptを作成したあとにサーバ側でHTMLのテンプレートに変換しなければいけなかったものが、納品したらすぐに使えるようになりました。非常に合理的ですよね。今までの、いわゆるクライアントとサーバに分けて役割分担をして運用する考え方に慣れ親しんだエンジニアからすれば、この動きはわかりにくいかもしれません。なんでテンプレートエンジンが不要なんだろう? とか、HTMLをJavaScriptで表示したら重くなったりしないの?というギャップを感じるかもしれません。
[2] Redux(リダックス)は、アプリケーションの状態を管理するためのJavaScriptライブラリ。ユーザーインタフェースを構築するために、ReactやAngularなどのライブラリで最もよく使用される。
JavaScriptは今後どうなるのか
関: JavaScriptを取り巻く環境は、今後どのように変わっていきそうなのでしょうか?
古川: JavaScriptを取り巻く環境は周辺のツールやライブラリによって変わります。これまでは複数のライブラリやツールが多種多様、玉石混交に生まれ、組み合わせて利用しなければいけない状況でした。今後は、ある程度まとまった形で提供されることで改善していくでしょう。今まではReactやRedux、webpack [3] などを自分で設定したり、組み合わせも自分でやったり、設定の妙が必要だったり、という状況でしたが、Next.jsのように徐々に全部まとまったものが出てきており、私たちはそれを使えばいい、という形に変わってきています。最初乱立していたいろんなものが、集約してまとまるフェーズに変わっていく、とも言えます。昔に比べたら、今からやる人はゼロから構築しなくてよくなった分、とても楽になっています。
関満徳 氏
関: JavaScriptをこれからやってみようかな、という方にとっては、どれから着手するとよさそうでしょうか?
古川: Next.jsやNuxt.jsなどから着手するとよいでしょう。JSConf JPの参加者に聞いたところ、6~7割はTypeScriptを使っていました。TypeScriptの型をガチガチにするというよりは、ヘルパとして使っていますね。メンテナンス性に注目されている、というのも理由の1つです。今まではVimやEmacsなどのエディタを使って開発をしていました。今は、Microsoftが開発したIDE(Integrated Development Environment 、統合開発環境)であるVisual Studio Codeを使って開発しています。Microsoftは、C#やTypeScriptもそうですが、言語やツールを作らせたら一級品ですよね。エンジニアフレンドリーでとても使いやすいIDEになっており、JavaScript界隈でもVisual Studio Codeは人気です。
[3] webpackは、JavaScriptの静的モジュールバンドラ。依存関係のあるJavaScriptのモジュールを取得し、それらのモジュールをもとに静的ファイルを生成する。ローダやプラグインという機能で、ファイルをバンドルするときにpug(Jade)やHAML、EJSといったテンプレートエンジンのコンパイル、SASSなどのCSSプリプロセッサのプリコンパイル、TypeScriptなどのAltJSやBabelを用いたJavaScriptへのトランスパイル、Linterを用いたJavaScriptの構文チェック、AngularやVue.js(Vue-cli)といったフレームワークの実行などのカスタムタスクを実行できる。
コロナ禍によるJavaScriptコミュニティへの影響
関: コロナ禍の状況で、JavaScriptコミュニティを取り巻く環境は、どのように変わったのでしょうか?
古川: コロナ禍による影響とすれば、今は海外の人が日本に来られない、日本の人が海外に行けない、という点ですね。その影響もあり、2020年9月に開催予定だったJSConf JP 2020は、残念ながら開催を断念しました。インターナショナルな交流が持てないから、というのが理由の一つです。そうした影響からか、国際的な交流は減ってきたように思います。JSConf JPがあるから海外の方は日本に来てくれていましたし、我々も海外のイベントに行って海外スピーカーをスカウトしていました。JSConf JP 2021については、ウィズコロナやアフターコロナと言われているようにコロナと一緒に付き合っていく必要があるのであれば、それらも考慮して何らかの形で開催できたらと個人的には考えています。
コロナ禍で変わるエンジニア像
関: ウィズコロナやアフターコロナと言われているこのご時世、エンジニアとしての振る舞いはどのように変えていくとよいのでしょうか?
古川: これからは、仕事ができるだけでは難しいと思います。信頼関係をどう作るかが問われるように感じています。すでに出社しなくてもよくなったりしていますし、プログラミングしたり、会議したりといったことはオンラインでもできますが、雑談を通してなにげないふとした情報や知見を共有できた方は、実力が伸びることが多いのです。また、Slackなどのチャットツール上で分報などのチャンネルを作って、普段から何気なく情報展開したり相談したりする人、非業務コミュニケーションができる人も伸びますし、マネージャーや周りの方からすれば、安心できるんですよね。わざわざ聞きにいかなくても相手の状況がわかりますから。逆に普段から何も発信しない人のことは、マネージャーから取りに行かないといけないです。そのため、普段から情報の発信が技術面や仕事面でも自然にできるタイプのエンジニアは重宝されると思います。
写真1 Node.jsスタッフのMartin Heideggerさん(左)とJSConf JPで司会進行中の古川さん(右)
今後の注目技術領域
関: 個人的に気になっている技術はありますか?
古川: いろいろと気になる技術はあります。一番気になっているのは、やはりWeb関連、特にプライバシーセキュリティ周りです。今やブラウザ業界を巻き込んでたいへんなことになっていますし、情報はウォッチするようにしています。たとえば、ECサイトで検索した本が、急にほかのサイトの広告で出てきたりしますよね。あれって、正直気持ち悪いと思いませんか。そういうのをトラッキングと呼ぶのですが、トラッキングの方法そのものを見なおしていく流れになりそうです。代替案についてブラウザベンダーからはまだ明確なものが出されている状況ではありません。そういったこともあり、最近ブラウザのソースコードを見ることも多くなりました。
ほかにやっていることとして、競技プログラミングにハマるようになりました。アルゴリズムは昔からやっていたのですが、最近マネージャーになったこともあり、面接をする機会も増えたんですよね。その面接でプログラミングの問題を出す機会も増えたのですが、いざ自分で作った問題を解こうとしたときに、はたしてこちらが設定した時間内に解けるのかな、というのが気になり始めました。そこで、今はアルゴリズムの勉強をかねて、競技プログラミングをほぼ毎日やっています。簡単なものは1時間かからないのが多いですね。ちょっと難しくても1、2時間なので、ちょっとした合間にもできるのが個人的には気に入っています。まだやり始めて数ヵ月ですが、コーディングスキル自体は上がったような気がしています。初心にかえって学んでいる感じです。競技プログラミングをやってみてわかったことは、難しいアルゴリズムの問題はJavaScriptには向いていないということ。Javaだったらコレクションクラスがたくさんあるのに、JavaScriptにはそういうのがないので、コレクションを実装するところからやらないといけなくてたいへんだったりします。そういう意味では、競技プログラミングにはC++やRustが向いているなと思いました。
今後はC++やRustも勉強していきたいですね。
読者へのメッセージ
関: 最後に、本誌読者のみなさんへのメッセージをいただいてもよいでしょうか?
古川: 最近のWEB+DB PRESSでもTypeScriptやReactを取り上げるようになってきました。以前と比べるとフロントエンドの技術が整理されてきて、まとめやすくなってきたと思います。今後、Next.jsについても、ある程度ステーブルな情報を提供できたらいいなと考えています。ぜひ一緒にWeb業界を盛り上げていきましょう。
特集1
イミュータブルデータモデルで始める
実践データモデリング
業務の複雑さをシンプルに表現!
特集2
いまはじめるFlutter
iOS/Android両対応アプリを開発してみよう
特集3
作って学ぶWeb3
ブロックチェーン、スマートコントラクト、NFT