はじめに
本書について
第1章 フルスクラッチGUI入門
第2章 バウンディングボックスことはじめ──移動・拡縮・回転
第3章 スクロールに連動して高さが変わるヘッダビューを作る
第4章 ドラッグ&ドロップ並び替え入門
第5章 座談会──STUDIO CPOとするGUIの話
本書は、Webブラウザーにおける本格的なGUIの入門書です。とは言っても、本書で扱うGUIは、一般的なWebアプリケーションではあまり見ないかもしれません。
なぜならこの本が目指すのは、Webブラウザー上で実現するのが難しい、複雑なUXに関わるコンポーネントを多く含むからです。
Webブラウザーに期待される役割は、年々増してきています。たとえば、ネイティブアプリ顔負けのデザインツールや、ドラッグアンドドロップでの操作が必要なフォームを作りたくなったとします。そのとき、我々は何に気をつけるべきなのでしょうか?また、これまで、HTML/CSS/JavaScriptで実装するのが大変だったUIを、どう実装するべきなのでしょうか?この点を本書は重点的に扱います。
本書では、定番のセレクトボックスやヘッダーレイアウトの他、バウンディングボックスやツリーといったドラッグを伴うUIなども実装していきます。
「そんなに複雑なGUIなんて作る場面ないよ!」という方もいるかもしれません。本論に入る前に、そういう「複雑GUI」がいつ、いかにして必要になるか、簡単に書いておきます。
ある種のソフトウェアは、ユーザーに高度の知的作業を要求します。デザイン、作曲、画像編集ツール……これらはいずれも「考えながら使う」ソフトです。また、分野は違っても、帳票の入力、ガントチャートでの計画、ちょっとした事務作業に至るまで、ソフトウェアは人間が「考える作業」の複雑さを肩代わりする側面を持ちます。
「考える作業」は難しいことです。なので、UIの開発者は、ユーザーの負担を少しでも減らすため、体験をeasyにふる必要があります。
そして、体験のeasyさは、しばしば内部実装のsimpleさを犠牲にして成り立つことがあります。これが「複雑GUI」の出現する理由です。
複雑GUIとは、ユーザーの作業の複雑さを吸収し、本質的な体験に集中させるためのもの、という側面を持つのです。
そうは言ってもプログラマーである以上、こうしたGUIの実装をメンテナブルに、スピーディに行いたいことでしょう。幸いにして、昨今のフロントエンド技術の進化は、こうしたGUIを現実的なコストで実装することを可能にしました。
苦しくも楽しい、Webブラウザーの複雑GUIの世界がここにあります。皆さんもエディターとブラウザーを開きながら、足を踏み入れてみましょう。
本書では、「GUI実装時の考え方や設計」をメインに解説を行います。下記については説明を省略しています。あらかじめご了承ください。
・JavaScript/HTML/CSSについて
・ReactやVue.jsなどフレームワークの利用方法
サンプルコードや動作デモは、サポートページに掲載しています。
https://scrapbox.io/guiland/入門GUI
さて、いきなり自分で考えたGUIをスクラッチし始めるのもエキサイティングですが、何を作ればいいか思いつかないという方も多いかと思います。そこで、第一歩として「既存UIの再実装」をしてみましょう。
今回は、Vue.js v2.6.11を利用して、select要素を自作します。
さて、フルスクラッチGUIを作るにあたって、ひとつ注意点があります。
本稿では、ブラウザーネイティブのform要素を再実装することになるでしょう。しかし、再実装した瞬間にアクセシビリティは大きく損なわれます。
・キーボード操作が可能ですか?
・tabでフォーカスできますか?
・フォーカス時のアウトラインが表示されますか?
また、適切な要素を使わないことで、文書がセマンティックでなくなります。たとえば、button要素はスクリーンリーダーでは、「ボタン」と読み上げられます。いくらdivでボタンに見た目を似せても、スクリーンリーダーにとってはただの文字列です。
これらの問題を適切に解決するためには、適切な要素を選択する以外にありません。
ここから先は、当然のようにアクセシビリティが損なわれる世界です。スクラッチではどうしても、ネイティブのアクセシビリティに至らないことも多くあります。
ここから実装を試みていきますが、実力に自信のある方は、すぐにここから先を読まないことをおすすめします。
あくまでここから先は、筆者hashrockの実装の一案にすぎません。自分のやり方、アイデアで実装してみたくないですか?
ReactでもVueでもAngularでも構いません。まずは自分で実装を試みて、それからここから先を読んだほうが、10倍楽しめることでしょう。自分のアイデアをブラウザーというキャンバスで試してみませんか?