Unpoly開発者Henning Koch氏へのインタビュー

Intercooler.jsと並行して開発されたハイパーメディア指向のJavaScriptライブラリ、Unpolyの開発者であるHenning Koch氏へのインタビューを行うことができ、大変嬉しく思っています。

インタビューにご協力いただきありがとうございます!

Q:まず初めに、ご自身の専門的および技術的な経歴についてお聞かせいただけますか?

もちろんです!現在、2009年に共同設立したRuby on Railsコンサルティング会社であるmakandraで開発責任者を務めています。長年フリーランスのWeb開発者として活動した後、この会社を設立しました。そのため、私の経験は、多くの異なるWebアプリケーションを同時に開発し、長期間にわたってそれらを保守するというものです。ある週には、教育から自動車、サイバーセキュリティまで、さまざまな業界の10以上のプロジェクトに携わることもあります。Unpolyは、クライアントプロジェクトで繰り返し見られるパターンから抽出されたものです。

Q:私がIntercooler.jsを作成した大きな理由の一つは、当時流行していたSPAライブラリ(AngularやExtJSなど)を扱うことに抵抗があったことです。Unpolyにも同様の経緯がありましたか?

私たちのチームは、それまであった大量のjQueryスパゲッティコードを置き換えるために、しばらくの間AngularJSに全面的に取り組んでいました。GoogleがAngular 2の書き換えによってAngularJSを廃止したとき、その時期を振り返る会を開催し、さまざまな結果が出ました。SPAモデルに最適なアプリもいくつか構築しましたが、多くのプロジェクトは、より大きなコードベース、より多くの依存関係、クライアントとサーバー間で分割されたロジック、データ移動のための多くの定型的なAPI(既に存在するサーバーから必要なブラウザへ)といった問題を抱えていました。

そこで、プログレッシブエンハンスメントに再び挑戦しましたが、今回はより高度な構造を提供することで、アプリが手動のAJAXリクエストを行ったり、個々のDOM要素を操作したりする必要がなくなりました。基本的に、「HTML6がサーバーレンダリングされたアプリを中心に構成されているとしたらどうなるか?」というHTML6の空想仕様を考えました。その思考実験がUnpolyにつながりました。

Q:Unpolyは、プログレッシブエンハンスメントに対する優れたサポートを備えた、非常に「バッテリー込み」のライブラリです。Rails開発者でもあると伺っています。それがUnpolyへのアプローチに影響を与えましたか?

間違いなく!Railsと同様に、Unpolyはすべてに強力なデフォルト値を提供し、明示的な設定よりも目立たない慣習を優先します。例えば、Unpolyにすべてのリンクとフォームを処理させたい場合は、グローバルに設定でき、HTMLをまったく変更する必要はありません。

最近のRailsのモットーには、「最新のWebアプリケーションの複雑さを圧縮する」や「一人開発者フレームワーク」などがあります。makandraでの私のもう一つの責任は若い開発者を育成することですが、それは私にとって非常に共感できるものです。私は、単独の開発者がフルスタック開発者となり、一貫して良い結果を出すことができるスタックを維持することに非常に気を配っています。

また、Rubyistとして、コードの呼び出し方における人間工学と美学に過剰なまでにこだわる傾向があります。クライアントコードで使用されたときの機能の見た目にも非常に気を配ります。小さなアイデアに不釣り合いな量のコードが必要な場合、私は寝られなくなってしまいます。

Q:Unpolyの開発において、ハイパーメディア、RESTなどについて検討されましたか?それらを有用だと思いますか?興味深いと思いますか?

コンテンツと共にUIをストリーミングするインタラクティブなドキュメントに対するあなたの愛情を、私も共有しています。私にとって、これは1990年代の文字ベースのBBS UIやWinHelpファイルから始まり、最終的にウェブがそれらをすべて取って代わりました。

今日、私はそれについて非常に哲学的な考えを持っているわけではありませんが、ハイパーメディアアプローチは、非常に少なく、ほとんど退屈なコードで優れたUIの忠実度を得ることができるスイートスポットだと信じています。中程度のアプリの場合、ハイパーメディアはSPAモデルよりも良い結果をもたらす可能性が高いでしょう。SPAモデルの理論的な上限と、ほとんどのSPAが提供するものとの間に、膨大なずれがあるように感じています。SPAは楽観的なUIを可能にします(これは素晴らしいことです!)が、JSONエンドポイントを待つよりも多くのコードが必要です。そのため、接続状態が悪い状態で意味のある操作を行うと、多くのSPAはスピナーと空白ページに劣化します。

Q:Unpolyから得られた最も重要な技術的な教訓は何ですか?

JavaScriptを追加して壊す前に、ブラウザは多くのエッジケースを正しく処理することを学びました。フォーカス、同時入力、不安定な接続の管理などです。例えば、JavaScriptでページ遷移をエミュレートする場合、同じレベルの正確さを実現することは簡単ではありません。それを実現するには多くのコードが必要です。2000バイトでReactを再実装すると主張する小さなマイクロライブラリを見ると、いつもこのことを思い出します。処理の正確性を犠牲にすることなく、バンドルサイズを半分に縮小することはできません。