<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>デザイン &#8211; HTML5Experts.jp</title>
	<atom:link href="/category/design/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>太田良典さん、原一成さんに聞いた「UIデザインとアクセシビリティ」──HTML5 Conference 2017☆番外編</title>
		<link>/djkato/25035/</link>
		<pubDate>Fri, 12 Jan 2018 01:30:10 +0000</pubDate>
		<dc:creator><![CDATA[加藤拓明]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[アクセシビリティ]]></category>

		<guid isPermaLink="false">/?p=25035</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (17)今年もHTML5 Conference 2017の展示ブースでは、私ことDJ KATOの特別ラジオをお届けしていました。今回はビジネス・アーキテクツ太田良典...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conf2017/" class="series-457" title="HTML5 Conference 2017特集" data-wpel-link="internal">HTML5 Conference 2017特集</a> (17)</div><p>今年もHTML5 Conference 2017の展示ブースでは、私ことDJ KATOの特別ラジオをお届けしていました。今回はビジネス・アーキテクツ太田良典さんとサイバーエージェント原一成さんをゲストに迎え、「UIデザインとアクセシビリティ」テーマに語っていただきました。その再現レポートをお届けします。ぜひ、カンファレンスレポートの番外編としてお楽しみください！</p>

<p><img src="/wp-content/uploads/2017/12/42A5445.jpg" alt="" width="640" height="400" class="alignnone size-full wp-image-25048" srcset="/wp-content/uploads/2017/12/42A5445.jpg 640w, /wp-content/uploads/2017/12/42A5445-300x188.jpg 300w, /wp-content/uploads/2017/12/42A5445-207x129.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>まずは、どんな講演内容だったのか教えてください</h2>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「ビジネス・アーキテクツの太田です。普段はWebアクセシビリティ関連の活動を主に行っています。『多様なユーザーニーズに応えるフロントエンドデザインパターン』というタイトルで講演させていただきました。よろしくお願いいたします」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「サイバーエージェントの原です。アメブロのフロントエンド開発を中心に行っています。『“モダン” ウェブアプリケーション ～アメブロ5ヶ年計画～』という講演タイトルで、アメブロの “モダン化” 実例に沿った考え方や技術採用事例、今後の展望などをお話しました」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「お二人とも先ほど同じ時間に講演されてきたんですよね。どちらかのお話を聞いた人は、どちらかが聞けなかったと思うので、どのような話をされたか教えていただけますか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「私は、11月4日発売の『<a href="https://www.amazon.co.jp/dp/4862463878" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">インクルーシブHTML+CSS &amp; JavaScript 多様なユーザーニーズに応えるフロントエンドデザインパターン</a>』という書籍で紹介されている、アクセシビリティに配慮した実装手法について、例を挙げて紹介しました」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「どのような実例でご説明されたのでしょうか？」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「先ほどのセッションではサイトでの操作など、使いやすくするためにはどうするかという話をしました。例えば、商品のリストを値段の高い順や安い順に並べたり、最新順に並び替えるなどの機能も、基本的な要素を使ってマークアップしましょうという話ですね。絞り込みの機能を選択するのは高い順・低い順・古い順・新しい順が多いのですが、それは4個の中から1つを選ぶ機能なので、ラジオボタンで実装すればいいとか。</p>

<p>よくある問題は見た目がきれいになるからと、ラジオボタンじゃなくて<code>&lt;span&gt;</code>とか<code>&lt;div&gt;</code>で実装して、JavaScriptでクリックイベントをつけて操作できるようにするとか。それは、ラジオボタンで実装することによってキーボード操作であっても使いやすくすることができます。でもソフトキーボードでちゃんと使えるのか、スクリーンリーダーでアクセスしたときにちゃんと読まれるのかなど、いろんな問題があるわけです。なので、基本的にはちゃんと機能に合った要素を使って、見た目は後からがんばりましょうという話ですね」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「先に知っておけば、そういう落とし穴には落ちないということですね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「HTMLをやってる人なら誰でも知ってるはずなんですけど、なぜか<code>&lt;div&gt;</code>とか<code>&lt;span&gt;</code>を使ってしまうんですよね。知っていることと実践できているかというのは別なんです」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「そうなってしまうのは、楽だからなんでしょうか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「というか、『見た目から入ってしまう』からそうなるんですよね。見た目から入ると『枠で囲まれているから<code>&lt;div&gt;</code>かな』という考え方になりがち。後から結構スクリプトでできちゃうので、それなりに動くものができるんですよね。ただ、それがどんな環境でも使えるかというと、結構使えないことがあるのが問題です」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「そういったことをいろいろご紹介されていたんですね。チェックボックス以外のトピックも聞いてみたいです」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「リストや見出しをちゃんと使うことですね。あとJavaScriptやXHRを使ったパフォーマンス改善やアクセシビリティの話を中心にしていました。</p>

<p>アクセシビリティは『JavaScriptをできるだけ使うな』という議論になることが結構多いんです。でも、今普及してるUIはJavaScriptで動かしていることが多いのに、そんなこと言われても困るんですよね。今回ご紹介してる本ではこうすればできるという技法を紹介しています」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「ありがたいですよね。僕もJavaScriptを使いまくりなんですけど、実際のサービスを作る上ではやっぱり使わざるを得ない。さらに、ネイティブアプリとの差をなくしていったり、使いやすさを向上させるには必要な技法です。ピンク本と呼ばれる「<a href="https://www.amazon.co.jp/dp/4862462650" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">デザイニング Web アクセシビリティ</a>」という本があるんですが、毎週チームで読み会をしています」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「そのピンク本、ありがたいことに私の著書なんです(笑)」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「うちの会社にもあります。みんなは読んでいる本なんですけど、僕はどっちかっていうとエンジニアというよりディレクター寄りということもあって、まだ読んでいませんでした。すみません…」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「ディレクターさんにもすごくいい本ですよ」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「というか、ディレクターさんにもぜひ読んでいただきたいと思って書いた本です(笑)」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「なるほど！読みます！」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「実装だけじゃなくて、その上流から踏まえていきましょう、ということも結構書いているので、ぜひ読んでください」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「さっきのサイト制作の話に戻るんですけど、見た目から入っちゃうことが結構多くて。特にビジネスで評価する人って、この見た目がかっこいいとかから入っていきがちなんですよね」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「見た目と動きだけでしか評価できない人が多いという問題もありますね。見た目と動きがちゃんとしてればOKになってしまうことも多いんですよ」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「例えばディレクターがアクセシビリティを知らなくて、スクリーンリーダーなどの存在を知らなかったら、それだけで話が通じなくなりますよね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「そうですね。それを解消するためにも、ぜひ！」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「まずこれを読むことで、関係者全員のしなくてもいい紛争が減ると」</p>

<h2>モダンなウェブとアクセシビリティは両立できますか？</h2>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「原さんはモダンなウェブというテーマで講演されていましたが、アクセシビリティと両立するのは難しくないんですか？」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「難しくはないんですけど、ワークフローの中に組み込むのが結構大変ですね。プロジェクトは企画から始まって、デザインを作って…というように、見た目が前提なフローが多いので、どうしてもコードがわかる人はフロントエンドエンジニアくらいになるんですよ。評価できる人も」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「自然と優先度が下がっちゃう、というかんじですね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「そうなんです。先程も言ったように『コードを知らない』って方もいるので、ピンク本は『JavaScript使うな』とは書いていないので、その辺もありがたいです」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「そういうことですか！」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「昔ながらのアクセシビリティをやってる人だと、『JavaScriptは使うな！』と言っちゃう人もいるんですよね。現場ではそう言われても困るので、なんとかしたいって思ってたんです。今回の本はそういう内容がたくさん書かれているので、いいなと思っているんですよね」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「極端ですけど例えば『危険だから家から出るな』みたいな話になっているんですかね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「そうそう。何かあった時に『これとこれとこれを準備して』とか『こういうことに気をつけて』というのを示してくれるかんじなんです」</p>

<h2>ところで、普段はどんなお仕事しているんですか？</h2>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「話は変わるんですけど、太田さんは普段どんなお仕事されてるんでしょうか？」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「ビジネス・アーキテクツという会社で、Webの仕事をしています。主に大きな会社のWebサイトを受託で作ることが多いです」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「企業の公式Webサイトですね」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「そうなんです。グローバル展開している日本の大手企業が多いのですが、そうした企業はアクセシビリティのガイドラインを持っていて、各国に配布したりしてるんですよね。各国にもそれぞれサテライトサイトがあって、全部統一させようと取り組んでいます。そういうアクセシビリティのデザインガイドラインの配布や取り組みに対して、お手伝いをしています。ひと言で言うと、Web制作ですけど」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「ひと言だとそうなんですけど、大変そうというか、慎重にやってかないと…。なんか、あまり軽いノリで作れないサイトってかんじですね」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「重すぎるノリっていうのも問題で、これやるなって言いすぎてもガイドライン無視されるだけなので、やっぱり現場で使えるようにしていかないと。実際に使えるものを作って、かつ運用できるようにしていくということがすごく大事なんですね」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「そうすると、基本のWebだけではなく、モダンな開発手法も知らないといけないですね」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「最近だとモバイル用のページをレスポンシブで作るのが当たり前になっていると思うのですが、そういうところも考えないといけないことがありますね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「スマートフォンのモバイル用のページのことや、PC用ページではどうかとか、デスクトップのリーダーではどうかというのも書いてあって便利です」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「原さんは、どんなお仕事をされているのですか？」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「私は完全に開発者で、2004年からずっとアメーバブログを作っています」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「長いですね！」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「2015年にリニューアルをしていますが、サービスの歴史も長いですね。主にフロントエンドを担当しています」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「歴史が長いと今までに積み上げてきたものも多いと思います。社内で設計が大きく変わったりすると、かなり大変だと思いますが」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「その辺はエンジニアと協力しながらやっていますね。iOSならiOSの、AndroidならAndroidのエコシステムっていうか開発環境と作り方の基本があるんですけど、その上で他の人と会話しながら、モダン、モダンって言いながら開発してます。閉じこもった自分たちだけのライブラリばかりでは、存続が危うくなると思うので」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「お二人ともなんというか共通するところがあるっていうか、戦っているポイントが結構似ているかんじがします」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「かなり」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「そうですね」</p>

<h2>お二人の情報収集や勉強方法を聞かせてください</h2>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「お二人はどのように情報収集や勉強されているんですか？」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「今まさに勉強しているつもりです」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「そうそう。かなり勉強してます(笑)」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「気がついたら置いていかれてた…っていうのは一番避けたいのですが、そのためにどんなことをしたらいいのでしょうか。ニュースサイトを見るとか？」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「それもありますが、周りの人と会話をすることも大事なんじゃないかと。最先端の技術者たちとコミュニケーションをとったり、彼らがTwitterなどで何をシェアしているのかを見ることで、どういうものが流行っているかを知ったりすることが多いですね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「僕も一番簡単な情報収集はTwitterですね。フォローしておいて、その人がリツイートしているものを見るだけでも参考になります。あと、海外の情報も重要なので、英語が読めるだけでも大分可能性は広がります。ちょっと時間差はあるかもしれませんが、日本語に訳してくれる人をフォローするという手もありますね」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「Twitterはすごい情報数があふれているので、普段あまり使ってないんですけど…。どうやって情報の絞り込みをするんですか？」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「もちろん、全部を読むわけではないですよ」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「技術系のカンファレンスで気になったものをフォローしているので、そこからとか」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「良質なツイートをしている人が発信している情報を集めて、どんどんその濃度を上げていくみたいなかんじなんですね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「あとは情報を発信している人のところに実際に行ってみるとか。そういう会社に入っちゃうというのもありますね」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「なるほど！」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「簡単に希望したところに行けるかはわからないですけど」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「そういう意味では、サイバーエージェントさんは大変いい環境ですよね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「うちは情報が自然に入ってくる環境なので、勉強する必要がないっていうか。極論ですけどね(笑)」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「自然にっていうのがすごいですよね。周りの人との雑談がなんかマークアップの話になるとか？」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「ちょっと気持ち悪いかもしれないですね、普通の人からすると(笑)。技術に興味がある人が集まっている場所というか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「でも、マークアップの話で盛り上がれるってすごく楽しいですよね。いや、『それ変態だ』って言われそうですけど(笑)」</p>

<h2>アクセシブルなサイト設計・制作について教えてください</h2>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「簡単なアプリケーションだったら自分で作ったりもするんですけど、実際に開発始めてみると<code>&lt;div&gt;</code>とか<code>&lt;section&gt;</code>とか、途中で<code>&lt;h3&gt;</code>や<code>&lt;h4&gt;</code>がだんだん適当になってくんです。100行超えてくると『あれ？もともとどんなかんじに作りたかったんだっけ』というかんじになって、全体のことがあやふやになってくるんですけど、どうすればいいんでしょうか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「それはいい質問だと思いますね！早い段階から見た目を気にして、その段階で増やそうと考えちゃってるんですよね」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「はい。で、書きながら実行してるんですよ」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「それは自然ではあるんですよね。悪いことではないんですが、基本的にオススメなのは、まずCSSを一切適用しない状態でHTMLだけで作ってしまうこと。結構しっかりした構造が作れると思います」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「完全に素のやつですよね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「さらに言うと、見出しから作っていくとか。それがマークダウンなんですが、逆に難しいかな」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「以前僕が経験したものだと、先にデザインが決まり、デザインカンプが上がってきて、スライスしてCSSをあてる。で、インタラクションとかをJavaScriptでやるという順番でした。ちゃんと考えたつもりなのに、だんだん破綻していくんですよね。いきなりフロートからやるとか、順番がおかしいとは思ってたんですけど(笑)」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「もしかすると、デザイナーさんもあまり整理できてないのかもしれないですね。うちではコンポーネント思考で、デザインから作っています。Webコンテンツをコンポーネントっていう単位で分割するんですよ。例えば見出しなら見出し、本文なら本文、リストならリストみたいなパーツに分割してデザインしてくんです。</p>

<p>それを組み合わせてWebページを作るというシステマティックなやり方をしています。ページごとにデザインするのではなく、パーツごとにデザインしたものを組み合わせてページを作るという考え方をデザインの段階からやっているんです」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「最初はみんな紙ベースというか、ペライチみたいなデザインで始めることが多いんですよね。紙って自由度が高いけど、文字や画像などのコンテンツをバラバラにすることはできなかったり、うまく区切れなかったりとか、Webとは考え方ややり方が違いますよね」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「逆にWebのやり方がわかっているデザイナーさんだと、『これは<code>&lt;h1&gt;</code>で』とか言ってくれたりするんですよ」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「あとは自分たちで共通部分を見つけてコンポーネント化していくとか」</p>

<p><img src="/wp-content/uploads/2017/12/42A5444.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-25093" srcset="/wp-content/uploads/2017/12/42A5444.jpg 640w, /wp-content/uploads/2017/12/42A5444-300x200.jpg 300w, /wp-content/uploads/2017/12/42A5444-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>サイトの構造やレイアウトデザイン、昔と今ではどう変わってますか？</h2>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「以前、コーディングは全然やらない人で完全にデザインだけやっている外部の人が、『こんな感じでよろしく』って送ってきたデザインが最悪だったことがあります。一方で、フロントエンジニア兼デザイナーをやっている人とやった時はすごくて、まずデザインの前にきちんと要件をはっきりさせてくれました。自分がちゃんと考えきれてなかったサイトの構造やボタンの位置にツッコミを入れてくれたりとか。みんながそれできるかっていうと厳しいですけど」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「今日登壇してる方たちもみんな通っている道ですね(笑)。めちゃくちゃのところからスタートして、だんだん良くなっていくという」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「それはあると思いますね。我々なんかの世代だとHTML3.2の時代からやっている人もいるので。以前はテーブルレイアウトというのがあって…」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「あー知ってます！昔やってましたよ、それ。一番最初にWebサイト作ったときに全部テーブルやりましたね」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「構造も何もあったもんじゃない(笑)」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「完全に見た目だけですよね。最近入社してきた若手なんかはテーブルレイアウト知らない世代でしたけど」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「ある意味うらやましいですね(笑)」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「昔はありだったんでしょうか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「あるかなしかっていうと、なしだったんですけど。仕方がなかったっていうか」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「あれはフロートがなかったからとかそういうことだったんでしょうか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「フロートがいつからあったかというのは難しい議論なんですけど、昔はブラウザのCSS周りの実装がボロボロだった時があって、IEでフロートすると横マージンが2倍になるとかありましたね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「まぁ環境が整ってなかったというかんじですよね。だから一概にさっきの話も悪いとは言えないというか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「Web標準が流行り出して、ブラウザの実装が統一されてきたのも、もう10年前くらいですね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「モバイルが出てきてWebkitベースで確認できるようになって…」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「それ以前はもうぐっちゃぐちゃですよね」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「昔はできたデザインとマークアップした結果を重ねて、透過して1ピクセルもずれちゃいけないみたいな」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「ピクセルパーフェクトってやつですね！」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「聞いたことあります」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「昔は『全部のブラウザで同じ見た目にならないといけない』って時代があったんですよ。でも今はそういう時代じゃないですね、『デバイスによってちょっと違いますよね』ってのが当たり前になっているので」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「今はデバイスの種類がたくさんあるので、ピクセルよりも文字サイズはremとか、高さも%じゃなくてvwとか使うんでしょうか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「状況によりますよね、使うべきときは使います。ちなみにそういう単位をどういうときにどれを使うのかという議論も、『インクルーシブHTML+CSS &amp; JavaScript 多様なユーザーニーズに応えるフロントエンドデザインパターン』に書いてありますので、もしご興味があればぜひ！」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「ぜひ、勉強します！」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「CSSが一番難しいですよね」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「同じことを実現する方法が結構いくつもあって、でもやり方によって結果がかなり違ってくるとか」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「僕CSS書いたら1万行くらいいってしまったことがあって…。さすがにディレクターの人に『俺でも3分の1にはできるぞ、書き方おかしい！っていうか、全部に対してCSS書いてるじゃん』って言われたことがあるんです。その辺のベストプラクティスもあるんでしょうか」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「今はセレクターの値の設定やファイルの指定とか、いろいろな方法が考えられてます」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「CSSについても書いてありますか？」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「そこまで深くはないかもしれないですけど、それなりにCSSについての議論は書いてあります。楽しい本ですよ」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「ありがとうございます！個人的にはすっきりしてきました。なんかもやもやしてたことに明確に答えが返ってきて、なんだか気持ちいいです」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「そうですよね。他の人ととりとめない話をすることがすごく勉強になるみたいなこと、結構あると思うんですよ」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「いろんなカンファレンスありますが、純粋に技術の話できるというのは面白かったなあと思います」</p>

<h2>UIを考える時に一番気をつけるべきことは何ですか？</h2>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「そろそろまとめというか『オチ』に入っていきたいので、最後に質問をさせていただきます。UIを考える時に一番気をつけないといけないことって何でしょうか」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><br>
「ユーザーのことを考えるというのが一番重要だと思います。これでユーザーが実際に使えるのか、どんなユーザーがいてどんな環境でどう使うのかを意識することが大事なことなんじゃないでしょうか」</p>

<p><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「僕もユーザーですね。いろんなユーザーがいるということを、いかに自分の中で学ぶかということだと思います。一番いいのは、いろんなサービス使ってみたりして、自分がいろんなユーザーになれることですね。例えば、日本だと回線は速いけど海外だと遅いとか、性能の低いデバイスしか売ってないとか。こんな良い端末でこんないい回線使っている人は世界中にはそんなにいないですよと。そういったことを想像して、自分がユーザーとして変化できることも必要だと思っています」</p>

<p><img src="/wp-content/uploads/2017/12/kato.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25052" /><br>
「そのとおりですね！今日はとても勉強になりました。本当にありがとうございました！」</p>

<p><img src="/wp-content/uploads/2017/12/ota.jpg" alt="" width="100" height="100" class="alignnone size-full wp-image-25054" /><img src="/wp-content/uploads/2017/12/hara.jpg" alt="" width="96" height="96" class="alignnone size-full wp-image-25056" /><br>
「ありがとうございました！」</p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
		<item>
		<title>VR初心者にお勧め！ひらやまともよ氏が伝授する─デザイナー・プランナー向けのVR表現方法「Graphic VR」講座</title>
		<link>/miyuki-baba/24971/</link>
		<pubDate>Tue, 26 Dec 2017 01:00:28 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[VR]]></category>
		<category><![CDATA[WebVR]]></category>
		<category><![CDATA[デザイナー]]></category>

		<guid isPermaLink="false">/?p=24971</guid>
		<description><![CDATA[VR元年といわれた2016年から急激な進化を遂げ、最近ではゲームなどのエンターテイメント領域だけに留まらず、医療・教育・産業などの領域でも広がりを見せつつあるVR(仮想現実)。実際に業務でVRを取り入れたいと考えたものの...]]></description>
				<content:encoded><![CDATA[<p>VR元年といわれた2016年から急激な進化を遂げ、最近ではゲームなどのエンターテイメント領域だけに留まらず、医療・教育・産業などの領域でも広がりを見せつつあるVR(仮想現実)。実際に業務でVRを取り入れたいと考えたものの、コストや専門エンジニアのアサインが難しいなどといった問題からあきらめている人は少なくないのではないだろうか。</p>

<p>そこで今回はPC/スマホ向けにクリエイティブ業務を行っているデザイナーや、サイト・アプリ・イベントなどのプロジェクトでVRを使ってみたいと考えているディレクター向けに、マインドスケープアーキテクト・ひらやまともよ氏が「TECH PLAY CONFERENCE 2017」で語った、気軽に使えるVRの表現方法を紹介したい。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03088.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24988" srcset="/wp-content/uploads/2017/12/DSC03088.jpg 640w, /wp-content/uploads/2017/12/DSC03088-300x200.jpg 300w, /wp-content/uploads/2017/12/DSC03088-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>マインドスケープアーキテクト クリエイティブディレクター/デザイナー　ひらやま ともよ氏</strong><br>グラフィックデザイナーとしてキャリアをスタートし、トヨタメディアサービス、DeNA、トランスコスモスなどの企業でデジタルコンテンツ企画、デザイン・ディレクションなど、前職のInstaVRではエバンジェリストと活躍。様々なOSでのアプリ開発、IoT、AR、VRを活用したビジネス構築、企画提案やUI設計を行っている。また、Techコミュニティのイベント運営にも参画し、VRクリエーターを増やすべく関連イベント運営やセッション登壇、講師活動も行う。</span></p>

<h2>簡単にVR画像編集ができる全天周イメージ投影法</h2>

<p>インターネットは文字の表示から始まり、写真・画像や動画、ついにVR(仮想現実)という360度の表現ができるようになった。ひらやま氏はこの表現のキャンバスが平面から360度になったことを、クリエイターとして使わないのはもったいないと考えた。</p>

<p>それは直視するだけの動画と比べ、まるでその場にいるかのような没入感のあるVRなら、よりコンテンツの世界観を実感してもらえるからだ。VRを使ったクリエイティブというと高機能なマシンや専門知識、コストが必要だと思われがちだが、Photoshopなどを活用したデザイナーならではのさまざまな“見せ方”があるという。</p>

<p>VR空間のしくみは大きく分けて、全天周イメージ投影(プリレンダリング)と、3DCG(リアルタイムレンダリング)の二つがある。3次元のイメージを常に高速でレンダリングしている3DCGは、主にゲーム制作などで使われることが多い。いろいろな表現ができるが、CGやゲームエンジンなどの専門知識やハイスペックなデバイスも必要となる。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03093.jpg" alt="" width="640" height="382" class="alignnone size-full wp-image-25004" srcset="/wp-content/uploads/2017/12/DSC03093.jpg 640w, /wp-content/uploads/2017/12/DSC03093-300x179.jpg 300w, /wp-content/uploads/2017/12/DSC03093-207x124.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>一方、全天周イメージ投影はすでにプリレンダリングされたCGや撮影済みの画像や映像を使って仮想空間を作るので、基本的な画像や映像編集の知識・経験があれば3DCGに比べて学習コストは低い。あらかじめレンダリングされているので、リアルタイムで演算を行う必要がない分、メモリの消費が抑えられてWeb上での表示も速いというメリットもある。そこで、今回は全天周イメージ投影に絞って紹介していく。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03094.jpg" alt="" width="640" height="389" class="alignnone size-full wp-image-25006" srcset="/wp-content/uploads/2017/12/DSC03094.jpg 640w, /wp-content/uploads/2017/12/DSC03094-300x182.jpg 300w, /wp-content/uploads/2017/12/DSC03094-207x126.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>全天周投影法では、エクイレクタングラー方式を使う。世界地図の投影法でも使われているもので、この投影方式を理解すれば簡単にVRコンテンツを作ることが可能だ。エクイレクタングラーの特性として画像中心の横線（地平線）に接する付近は正しく描画されるが、地平線から離れるにつれて、画像が歪んでしまう。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03097.jpg" alt="" width="640" height="379" class="alignnone size-full wp-image-25007" srcset="/wp-content/uploads/2017/12/DSC03097.jpg 640w, /wp-content/uploads/2017/12/DSC03097-300x178.jpg 300w, /wp-content/uploads/2017/12/DSC03097-207x123.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>実際にTHETAで撮影された以下の画像を見てみよう。中心部分は綺麗に描画されるが、上下は歪んでいる。その歪みも柄だと目立つが、無地はわかりにくい。</p>

<p>例えば、地平線から離れた空や海・地面などは作りやすくなる。形のハッキリしているものを配置する場合、歪みにくい中央部に置く必要があるが、VR空間で見るとオブジェクトは思ったより大きく表示される。</p>

<p>上の方に配置すると頭が疲れやすく、下の方はうつむく動作を人はあまりしないので気づかれないことが多い。従って効果的に配置するためにも、小さめに画像中心を基本とした水平に配置することが望ましい。</p>

<p>以下のようなエクイレクタングラーの特性を理解すると、デザイン表現の幅が広がる。</p>

<ul>
<li>画像の中心の横線は地平線となる</li>
<li>メインのオブジェクトは画面中心に作成する</li>
<li>ファーストビューで画面に切り取られるエリアを意識する</li>
<li>画像の上部と下部にオブジェクトを配置しない</li>
<li>配置オブジェクトは思ったより小さくて良い</li>
</ul>

<h2>エクイレクタングラーの特性を活かした全天周画像編集</h2>

<p>画像の編集はPhotoshopで行うが、エクイレクタングラー形式の全天周画像・映像の360度視聴の検証を行うためのツールを活用する。PCであればGoPro VR PLAYER、スマートフォンであればジャイロでSingle/Dual表示も見れるTHETAアプリが便利だ。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03115.jpg" alt="" width="640" height="376" class="alignnone size-full wp-image-25008" srcset="/wp-content/uploads/2017/12/DSC03115.jpg 640w, /wp-content/uploads/2017/12/DSC03115-300x176.jpg 300w, /wp-content/uploads/2017/12/DSC03115-207x122.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>実際に作ってみた画像がこちらだ。球体に壁画が立体的にレイアウトされているが、これは画像編集のみで作成しており、一切CGは使っていないという。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03119.jpg" alt="" width="640" height="375" class="alignnone size-full wp-image-25009" srcset="/wp-content/uploads/2017/12/DSC03119.jpg 640w, /wp-content/uploads/2017/12/DSC03119-300x176.jpg 300w, /wp-content/uploads/2017/12/DSC03119-207x121.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>これらはPhotoshopで画像を作ることができる。まず、画像の中心に横線を引く。この中心がファーストビューになるので、最初に表示された時に目の前に見せたいものを作っていく。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03121.jpg" alt="" width="640" height="378" class="alignnone size-full wp-image-25010" srcset="/wp-content/uploads/2017/12/DSC03121.jpg 640w, /wp-content/uploads/2017/12/DSC03121-300x177.jpg 300w, /wp-content/uploads/2017/12/DSC03121-207x122.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>右端と左端が円筒になるので、シークエンスするように写真をコピーなどして画像を合成していく。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03124.jpg" alt="" width="640" height="368" class="alignnone size-full wp-image-25012" srcset="/wp-content/uploads/2017/12/DSC03124.jpg 640w, /wp-content/uploads/2017/12/DSC03124-300x173.jpg 300w, /wp-content/uploads/2017/12/DSC03124-207x119.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>上下は画像が歪んでしまうため、グラデーションで無地にする。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03127.jpg" alt="" width="640" height="396" class="alignnone size-full wp-image-25013" srcset="/wp-content/uploads/2017/12/DSC03127.jpg 640w, /wp-content/uploads/2017/12/DSC03127-300x186.jpg 300w, /wp-content/uploads/2017/12/DSC03127-207x128.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>メインのオブジェクトを中心線の位置に置く。360度画像でも人間の目に最初に映る範囲は限られているので、ファーストビューを意識したほうが良く、画像や文字は小さくても問題ないとのこと。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03132.jpg" alt="" width="640" height="390" class="alignnone size-full wp-image-25014" srcset="/wp-content/uploads/2017/12/DSC03132.jpg 640w, /wp-content/uploads/2017/12/DSC03132-300x183.jpg 300w, /wp-content/uploads/2017/12/DSC03132-207x126.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ちなみに、画像内の地平線の位置をを上げたり下げたりすると、中心の自視点に対して周りの風景が上下し、見え方が変わる。地平線を下げると自分が高いところにいるようになり、上げると自分が落とし穴のような穴の中に落ちたようにも見える。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03136.jpg" alt="" width="640" height="308" class="alignnone size-full wp-image-25015" srcset="/wp-content/uploads/2017/12/DSC03136.jpg 640w, /wp-content/uploads/2017/12/DSC03136-300x144.jpg 300w, /wp-content/uploads/2017/12/DSC03136-207x100.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<br></p>

<p><img src="/wp-content/uploads/2017/12/DSC03139.jpg" alt="" width="640" height="279" class="alignnone size-full wp-image-25017" srcset="/wp-content/uploads/2017/12/DSC03139.jpg 640w, /wp-content/uploads/2017/12/DSC03139-300x131.jpg 300w, /wp-content/uploads/2017/12/DSC03139-207x90.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>実際にVRを制作する場合は、酔いを起こさせないようにすることが大事。そのためには広範囲にコンテンツを置くのを避け、頭の動きが最低限になるようにレイアウトしたい。</p>

<p>特に上下の頭の振りは左右に振る場合より負荷がかかり酔いやすい。エリアをめいっぱい使わないで360度の意味はあるの？と考えがちだが、全体の世界観や没入感、空気感を表現することに360度見渡せるVRは有効なツールで意味はある。</p>

<p>その空間の中でユーザーが快適にコンテンツを楽しむためには見せたいオブジェクトのレイアウトする位置に留意する必要があると考える。実際、多くの人はコンテンツ内の真後ろを見ることはあまりせず、ファーストビューから離れるほど滞在時間は少なくなっている。</p>

<p>しかし、見る人がいることを考えて重要なものではないが、何か遊び心をあるものを置いておくと宝物を見つけたような気持ちになり、面白いかもしれない。それもVRならではの楽しみ方である。</p>

<p>特に画面の上下にオブジェクトをレイアウトすることを避けたいその他の理由として、全天周の球体へマッピングした時に歪んでしまうので避ける必要がある。</p>

<p>ただし、どうしても上下に置きたいものがある際は、Photoshopで歪みを気にせず全天周画像が作成できる「Flexify 2」というプラグインがあるので活用しよう。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03141.jpg" alt="" width="640" height="383" class="alignnone size-full wp-image-25019" srcset="/wp-content/uploads/2017/12/DSC03141.jpg 640w, /wp-content/uploads/2017/12/DSC03141-300x180.jpg 300w, /wp-content/uploads/2017/12/DSC03141-207x124.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>「Flexify 2」キュービック方式からエクイレクタングラー方式に変換して出力し、上下を見せることができる。</strong></span></p>

<p>VRの画面表示には全画面で見せるSingle Viewとヘッドマウントディスプレイ（以下、HMD）用のDual Viewがある。VRのコンテンツを作る際は、両方選べるように留意して作ったほうが良い。それぞれの特徴は以下の通りだ。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03147.jpg" alt="" width="640" height="394" class="alignnone size-full wp-image-25020" srcset="/wp-content/uploads/2017/12/DSC03147.jpg 640w, /wp-content/uploads/2017/12/DSC03147-300x185.jpg 300w, /wp-content/uploads/2017/12/DSC03147-207x127.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>VRコンテンツの展開方法</h2>

<p>SNSでのVRコンテンツの展開方法として代表的、かつお手軽なのは、YouTubeとFacebookだ。どちらもアップロードするだけで世界中のユーザーに簡単にリーチできる。YouTubeは動画のみのアップロードとなるが、ジャイロやSingle View/Dual Viewの表示も可能。Facebookは360度画像・動画ともにアップロード可能だが、ジャイロとSingle Viewでの視聴となる。インタラクションはつけられない。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03148.jpg" alt="" width="640" height="389" class="alignnone size-full wp-image-25022" srcset="/wp-content/uploads/2017/12/DSC03148.jpg 640w, /wp-content/uploads/2017/12/DSC03148-300x182.jpg 300w, /wp-content/uploads/2017/12/DSC03148-207x126.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>WebはGoogleの無料フレームワーク「Google VR View」、mozillaが提供する無料フレームワーク「A-Frame」があり、どちらも数行のHTMLを書くだけでVRページができる。HTMLにあまり詳しくない人でもソースコードをコピペして埋め込むだけで簡単にVRコンテンツが作れる。回転させる動作やゲーム性を加えることも可能だ。</p>

<h4>ソースコード例（A-Frame）</h4>

<p></p><pre class="crayon-plain-tag"><!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>A-FrameSample</title>
    <meta name="description" content="A-Frame Panorama Sample">
    <script src="aframe.min.js"></script>
  </head>
  <body>
    <a-scene>
      <a-sky src="sample-photo.jpg" rotation="0 170 0"></a-sky>
    </a-scene>
  </body>
</html></pre><p></p>

<h4>ソースコード例（Google VR View）</h4>

<p></p><pre class="crayon-plain-tag"><html>
<title>Google VR View Sample</title>
<script src="../build/vrview.min.js"></script>
<script>
    var vrView;
    window.addEventListener('load', onVrViewLoad)
    function onVrViewLoad(){
        vrView = new VRView.Player('#vrview', {
            image: 'room1.jpg',
            is_stereo: true
        });
    }
</script>
<body>
<div id="vrview"></div>
</body>
</html></pre><p></p>

<p>VRのオーサリングツールは無料から使える日本製のInstaVR、Krpanaが提供するPanotourがある。インターフェイスから操作でき、コードを見なくていいので直感的に作ることができる。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03154.jpg" alt="" width="640" height="372" class="alignnone size-full wp-image-25023" srcset="/wp-content/uploads/2017/12/DSC03154.jpg 640w, /wp-content/uploads/2017/12/DSC03154-300x174.jpg 300w, /wp-content/uploads/2017/12/DSC03154-207x120.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ゲームエンジンで代表的なのはUnity、Unreal Engine。無料のアセットやサンプルコードもあるので、ノンプログラマでも挑戦しやすい。</p>

<p>VRコンテンツの基本をまとめると、以下のようになる。</p>

<ul>
<li>傾きのあるコンテンツは酔うのでNG</li>
<li>顔の縦運動より横運動をさせる</li>
<li>360度いっぱいにものを置かない</li>
<li>ファーストビューを決める</li>
<li>配置オブジェクトは思ったより小さくて良い</li>
<li>全天周投影法では解像度を可能な限り上げることで没入感が増す</li>
</ul>

<p>これらは、「酔わない、疲れない、極力頭を動かさない」ことにつながる。</p>

<p>Adobe Stockのような画像素材サイトで「エクイレクタングラー」と探すと素材が出てくるので、これらを上手く活用しながらVRコンテンツにチャレンジしてみよう。</p>

<p><img src="/wp-content/uploads/2017/12/DSC03153.jpg" alt="" width="640" height="428" class="alignnone size-full wp-image-25032" srcset="/wp-content/uploads/2017/12/DSC03153.jpg 640w, /wp-content/uploads/2017/12/DSC03153-300x201.jpg 300w, /wp-content/uploads/2017/12/DSC03153-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
			</item>
		<item>
		<title>CSSでバーティカルリズムを実現しよう！line-height-stepを使ってみる</title>
		<link>/kojii/24718/</link>
		<pubDate>Tue, 14 Nov 2017 01:00:42 +0000</pubDate>
		<dc:creator><![CDATA[石井宏治]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[line-height-step]]></category>
		<category><![CDATA[バーティカルリズム]]></category>

		<guid isPermaLink="false">/?p=24718</guid>
		<description><![CDATA[「バーティカルリズム」（Vertical Rhythm）と呼ばれるデザイン手法があります。最近は関連記事も増えてきたので聞いたことがある、という方もいらっしゃるかもしれません。日本語本来のタイポグラフィでは「行取り」と呼...]]></description>
				<content:encoded><![CDATA[<p>「バーティカルリズム」（Vertical Rhythm）と呼ばれるデザイン手法があります。最近は関連記事も増えてきたので聞いたことがある、という方もいらっしゃるかもしれません。日本語本来のタイポグラフィでは「行取り」と呼ばれる類似の手法があり、ほぼ全ての印刷物やワープロで使われています。</p>

<p>「行取り」あるいは「バーティカルリズム」とは、要素の配置に一定のリズムを取り入れることで、デザイン上の安定感や、可読性の向上などの効果が見込るデザイン手法です。通常は、本文の行の高さをリズムの単位として、要素間の余白を調整します。ノートの罫線や、原稿用紙をイメージするとわかりやすいと思います。</p>

<div style="text-align: center">
<img src="/wp-content/uploads/2017/11/rhythm-off-1-300x169.png" alt="" width="300" height="169" class="alignnone size-medium wp-image-24722" srcset="/wp-content/uploads/2017/11/rhythm-off-1-300x169.png 300w, /wp-content/uploads/2017/11/rhythm-off-1-207x117.png 207w, /wp-content/uploads/2017/11/rhythm-off-1.png 328w" sizes="(max-width: 300px) 100vw, 300px" />
<img src="/wp-content/uploads/2017/11/rhythm-on-300x132.png" alt="" width="300" height="132" class="alignnone size-medium wp-image-24721" srcset="/wp-content/uploads/2017/11/rhythm-on-300x132.png 300w, /wp-content/uploads/2017/11/rhythm-on-207x91.png 207w, /wp-content/uploads/2017/11/rhythm-on.png 328w" sizes="(max-width: 300px) 100vw, 300px" />
</div>

<p>上の例のように、CSSで<code>line-height</code>や<code>margin</code>を適切に設定すれば実現可能ですが、メンテナンスが煩雑になる、レスポンシブにするのが難しい、見出しが複数行になるとうまくいかない、などの課題が残ります。</p>

<p>現在W3Cでは、この問題を改善するために、<code>line-height-step</code>という新しいプロパティを議論しています。まだ異論や技術的課題が残っていますが、Chrome、Edge、Safariは賛同しており、Chromeでは試験運用機能として実装もされています。この記事では、このプロパティを使って、バーティカルリズムを実装する方法について解説します。</p>

<h2>二つのスタイル：強いリズムと弱いリズム</h2>

<p>まずは、どこにどのように適用するかを考えます。「バーティカルリズム」にもメリットとデメリットがあります。メリットとデメリットを理解して、適切に適用する方法を考えてみましょう。</p>

<p>一つ目のメリットは、行や要素が一定の間隔を持つことで、デザイン上の安定感が生まれることです。規則的に並んでいるデザインは、洗練、安定、安心、といった印象を与えます。</p>

<p>二つ目のメリットは、脳が一定のリズムをパターン認識することで、可読性を上げることです。目線が次の行頭に移動する時は、可読性が一番妨げられる時でもあります。脳が次の行頭位置を予測することで、目線の移動を助け、より早く、より楽に読めることで、内容の理解力も高まるとされています。</p>

<p>残念ながら、デメリットもあります。一つ目は、スペースを消費することです。余白を広げて調整するため、適用しない場合と比べて、より広いスペースが必要になります。モバイルでは画面の大きさが限られているため、本文の行の高さの半分をリズムの単位にするなどの工夫もあるようです。</p>

<p>デメリットの二つ目は、余白が一定でなくなることです。これはちょっとわかりにくいので、例を挙げて説明します。</p>

<p>画像や表、引用文、コード、コラムなど、大き目のブロックが入った場合を考えてみます。「バーティカルリズム」を適用するなら、これらのブロックの高さを本文行の高さの整数倍に揃えることになります。雑誌などデザイン重視の印刷物では、通常は画像や表の大きさを調整して揃えますが、Webでは画像のサイズを変えたくないため、余白で調整することになります。この結果、画像が複数ある時に、画像と本文の間の余白が一定にならない、という副作用が生まれます。</p>

<p>二つの画像の間に、一行の本文がある場合がわかりやすいかと思います。</p>

<p><img src="/wp-content/uploads/2017/11/image-space-uneven-300x126.png" alt="" width="300" height="126" class="aligncenter size-medium wp-image-24723" srcset="/wp-content/uploads/2017/11/image-space-uneven-300x126.png 300w, /wp-content/uploads/2017/11/image-space-uneven-207x87.png 207w, /wp-content/uploads/2017/11/image-space-uneven.png 363w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>一定のリズムを作るデザインを心がけているのに、この余白が一定で無いのは残念です。また、大きなブロックをまたいだ場合、上に挙げたメリットは小さくなってしまいます。脳が画像をまたいでパターン認識するのは困難ですし、目線が画像の次の行頭を見つけるのは簡単です。</p>

<p>この点から、大きな画像や表に対しては、画像をリサイズできない場合には「バーティカルリズム」を適用せず、余白を一定にする手法が一般的に使われる、と「<a href="https://www.w3.org/TR/jlreq/ja/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日本語組版処理の要件</a>」および、JIS X 4051「日本語文書の行組版方法」では定めています。</p>

<p>W3Cでの議論を見ると、この点が、英語圏由来の「バーティカルリズム」と、日本語本来の「行取り」では大きく違うようで、英語圏由来の「バーティカルリズム」は、余白の調整は断念し、常に適用する場合が多いようです。対して「日本語組版処理の要件」では、<a href="https://www.w3.org/TR/jlreq/ja/#processing_of_gyoudori" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">行取りの処理例</a>は、見出しの説明の中でのみ出てきます。日本語は、文字の高さが一定のため、画像と本文の余白を、英語の場合よりも気にするのかもしれません。</p>

<p>本記事では、適用する場合と、空白を揃える場合の両方のパターンを使って、本文と見出しにのみ適用してみます。</p>

<h2>CSSコーディング</h2>

<p>提案中の <code>line-height-step</code> プロパティを設定すると、行の高さが設定値の倍数になるように切り上げられます。これを使って、CSSを書いてみましょう。便宜上、見出しは <code>&lt;h2&gt;</code> と <code>&lt;h3&gt;</code>、本文は <code>&lt;p&gt;</code>、画像やコラムは <code>&lt;div&gt;</code> タグを使っているとします。</p>

<p><code>line-height-step</code> プロパティはまだChromeの試験運用機能でしか使えないので、まずは <code>@supports</code> で囲みます。ブラウザで表示を確認する場合には、Chromeのアドレスバーに「chrome://flags」と入力し、表示された画面で「Experimental Web Platform features」を有効にしてください。
</p><pre class="crayon-plain-tag">article {
  font-size: 16px;
}

@supports (line-height-step: 1px) {
  article {
    --grid: 24px;
    line-height-step: var(--grid);
  }
}</pre><p></p>

<p>日本語の行間は、フォントサイズの1.5倍から1.8倍くらいが読みやすいとされていますので、ここでは <code>font-size</code> を1.5倍にした <code>24px</code> を基本のリズムとします。この値は他でも使うので、<a href="https://developer.mozilla.org/ja/docs/Web/CSS/Using_CSS_variables" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CSS Custom Properties</a> で定義して、<code>line-height-step</code> プロパティを設定します。</p>

<p>基本のリズムを設定したら、本文の設定をします。
</p><pre class="crayon-plain-tag">article &gt; p {
    line-height: 1.2;
    margin: 0;
  }
  article &gt; p + p {
    margin: var(--grid) 0 0 0;
  }</pre><p> 
<code>line-height-step</code> を使う時には、<code>margin</code> をリズムの整数倍に揃える必要があります。個人的には日本語の段落間の空きはない方が好みなのですが、Webでは空ける場合も多いため、ここでは段落間を一行空きに設定しています。後で出てきますが、margin collapsingが使えない場合があるため、隣接セレクターを使っています。</p>

<p>また、<code>line-height-step</code> が行間を一定に揃えてくれるため、誤って余分な空白が入らないように <code>line-height</code> を小さめに設定しています。通常は問題ありませんが、複数のフォントが使われた時などには、CSSの仕組み上、行間が広がってしまう場合があるためです。</p>

<p>次に、画像や表は適用外とします。<code>margin</code> は見た目を確認しながら適当に設定してください。
</p><pre class="crayon-plain-tag">article &gt; div, article &gt; table {
    line-height-step: 0;
    margin: .2em 1em;
  }</pre><p> 
最後に、見出しを「行取り」で揃えてみましょう。
</p><pre class="crayon-plain-tag">article &gt; h2, article &gt; h3 {
    display: inline-block;
    width: 100%;
    line-height-step: 0;
    line-height: 1.2;
    margin: var(--grid) 0 0 0;
  }</pre><p> 
ちょっとおまじないが出てきました。実は、<code>line-height-step</code> は行の高さを揃えるだけで、ブロックを揃えることができません。ブロックを揃えるための仕様も議論には上がっているのですが、行の議論でもう二年近く経っているので、ブロックの議論や実装は残念ながらまだ先です。このため、現段階でブロックを揃えるには、ブロックを <code>inline-block</code> にして行の中に収め、その行を揃える、という手法を取ります。<code>width</code> は、この <code>inline-block</code> を含む行を幅いっぱいにするためです。</p>

<p>これで <code>&lt;h2&gt;</code> や <code>&lt;h3&gt;</code> の高さは常に <code>24px</code> の倍数になるように上下に余白が入ります。</p>

<p>モバイルなどの狭い画面では、見出しが複数行になる機会もあるので、このブロックの中では <code>line-height-step</code> をオフにし、小さめの <code>line-height</code> を設定します。見出しは、短めで、フォントも大きいので、通常は行間を詰めた方が見やすくなります。</p>

<p>最後に、見出しの上部の空きを、下部の空きより大きくするため、<code>margin-top</code> のみを一行分に設定します。これも好みですが、実際の空きは、「行取り」の調整のためにこれよりも大きくなるため、確認しつつ適切な値を探してみてください。上下の <code>margin</code> の合計値は <code>24px</code> の倍数になるようにする必要があります。また、<code>inline-block</code> にしたため、隣接したブロックとの間でmargin collapsingが働きません。<code>&lt;p&gt;</code> で隣接セレクターを使ったのはこのためです。</p>

<p>これで完成です。試験運用機能を有効にしたChromeで確認できるはずです。<a href="http://kojiishi.github.io/css-rhythm/sample.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">サンプルはこちら</a>にあります。確認が終わったら、試験運用機能は無効に戻しておいてください。</p>

<h2>最後に</h2>

<p>多くの方が、試されて最初に感じるのは「あんまり変わらないね」ということではないかと思います。ほぼすべての日本語ワープロにこの機能が入っていますが、気がついている人は多くはないのではないでしょうか。「行取り」「バーティカルリズム」のみならず、多くのタイポグラフィの改善は、一つ一つは非常に小さな変化ですが、積み重ねることで確実に読みやすくなります。ぜひ、お試しください。</p>
]]></content:encoded>
			</item>
		<item>
		<title>2020年末でサポート終了するFlash Playerを支えた、Flashテクノロジーの全盛期と衰退を振り返ってみた</title>
		<link>/miyuki-baba/24432/</link>
		<pubDate>Mon, 06 Nov 2017 04:48:14 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[アドビ システムズ]]></category>
		<category><![CDATA[懐テク]]></category>

		<guid isPermaLink="false">/?p=24432</guid>
		<description><![CDATA[こんにちは、HTML5 Experts.jp編集部の馬場美由紀です。【懐テク】トークライブ第二弾、今回のテーマは、Adobeが2020年にサポートを終了すると発表した「Flash」です。 Flashに造詣の深い池田泰延さ...]]></description>
				<content:encoded><![CDATA[<p>こんにちは、HTML5 Experts.jp編集部の馬場美由紀です。【懐テク】トークライブ第二弾、今回のテーマは、Adobeが2020年にサポートを終了すると発表した「Flash」です。</p>

<p>Flashに造詣の深い池田泰延さん、沖良矢さん、轟啓介さんをゲストにお迎えし、Flashという技術の歴史、またFlashの役割を受け継ぐ新たな技術とは何なのか、とことん語り合っていただきました。</p>

<p>※「懐かしさ」には個人差があるので、「Flashはまだ懐かしむ段階じゃない」というツッコミもあるかもしれません。そこはどうかご笑覧ください！</p>

<p><img src="/wp-content/uploads/2017/10/DSC04297.jpg" alt="" width="640" height="413" class="alignnone size-full wp-image-24435" srcset="/wp-content/uploads/2017/10/DSC04297.jpg 640w, /wp-content/uploads/2017/10/DSC04297-300x194.jpg 300w, /wp-content/uploads/2017/10/DSC04297-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>今回のゲスト紹介</h2>

<p><strong>白石</strong>：今回ファシリテーターを務める、HTML5 Experts.jp編集長の白石俊平です。まずは皆さんのFlashとの関わりについて、自己紹介をお願いします。</p>

<p><strong>池田</strong>：僕はFlash歴15年で、Flashに関する本も10冊書いています。沖さんと一緒に雑誌「Web Designing」の連載をしたり、Flashのオープンコミュニティでも活動していました。今日はなぜFlash Playerがこんなに追い込まれてしまったのか、その不満についてもぶちまけつつ、Flashが果たしてきた役割について語りたいです。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04329.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24492" srcset="/wp-content/uploads/2017/10/DSC04329.jpg 640w, /wp-content/uploads/2017/10/DSC04329-300x200.jpg 300w, /wp-content/uploads/2017/10/DSC04329-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<br>▲<strong>株式会社 ICS代表池田 泰延さん</strong><br><span style="font-size: 80%;">フロントエンドのテクノロジーを紹介するサイト「<a href="https://ics.media/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">ICS MEDIA</a>」の編集長。個人実験サイト「<a href="http://clockmaker.jp/labs/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">ClockMaker Labs</a>」やセミナー・書籍執筆などの活動を通して積極的にインタラクションデザインの情報共有に取り組んでいる。筑波大学 非常勤講師も務める。Flashに関する著書は10冊。「Papervison3D入門」「ActionScript3.0ライブラリ入門」「ProgressionによるFlashコンテンツ開発ガイドブック」「Stage3Dプログラミング」など。</span></p>

<p><strong>沖</strong>：Flashはバージョン4.0から始めて、いまだに使っています。過去には、Adobe公式FlashユーザーグループF-siteの代表も務めていて、思い入れもいろいろあるんですが、ユーザーとして使っていた時間が長かったので、今日はユーザー視点で語りたいと思っています。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04272.jpg" alt="" width="640" height="423" class="alignnone size-full wp-image-24495" srcset="/wp-content/uploads/2017/10/DSC04272.jpg 640w, /wp-content/uploads/2017/10/DSC04272-300x198.jpg 300w, /wp-content/uploads/2017/10/DSC04272-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<br>▲<strong>世路庵 インタラクションデザイナー　沖 良矢さん</strong><br><span style="font-size: 80%;">1981年愛媛県生まれ。フリーランスとしてWebを中心としたテクニカルディレクション、フロントエンド開発、スマートフォンアプリ制作など様々なプロジェクトに参加する。雑誌『Web Designing』では、2009～2015年の6年間、FlashのTIPS連載を担当した。クリエイティブコミュニティ<a href="http://dist.tokyo/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">DIST</a>主宰、Adobe公式Flashユーザーグループ<a href="http://f-site.org/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">F-site</a>代表。</span></p>

<p><strong>轟</strong>：僕も最初に触ったのは4.0からですね。ActionScriptが出たあたりで、アドビに入社したので、ユーザー年数としては短いかもしれません。今日は会場に猛者がたくさんいるのでインタラクティブに語っていきたいです。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04445.jpg" alt="" width="640" height="425" class="alignnone size-full wp-image-24498" srcset="/wp-content/uploads/2017/10/DSC04445.jpg 640w, /wp-content/uploads/2017/10/DSC04445-300x199.jpg 300w, /wp-content/uploads/2017/10/DSC04445-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<br>▲<strong>アドビ システムズ 株式会社　Creative Cloud マーケティングマネージャー　轟 啓介さん</strong><br><span style="font-size: 80%;">1999年、早稲田大学理工学部を卒業後、大手印刷会社に勤務。主にEC分野で J2EE開発に携わるが、Adobe Flexとの衝撃的な出会いを機にリッチクライアントの世界へ。2008年4月、アドビ システムズ入社。アドビのWebツール全般のマーケティングを担当。オブジェクト指向が好きで、クラス設計やプログラミングをしている時はシアワセを感じるが、現在はプライベートプロジェクト用にやっている。デザインも好きで、デザインが適当な全てのものを憎んでいる。</span></p>

<p><strong>白石</strong>：僕はFlashは軽く触ったことがあるくらいなので、皆さんの話を聞きながら、学ぶという立場で聞いていきたいと思います。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04476-1.jpg" alt="" width="640" height="418" class="alignnone size-full wp-image-24504" srcset="/wp-content/uploads/2017/10/DSC04476-1.jpg 640w, /wp-content/uploads/2017/10/DSC04476-1-300x196.jpg 300w, /wp-content/uploads/2017/10/DSC04476-1-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>なぜFlashは流行ったか</h2>

<p><strong>白石</strong>：まずは、なぜFlashは流行ったのかについてお話を聞かせてください。</p>

<p><strong>池田</strong>：Flashが盛り上がり始めたのは2000年前後ですね。</p>

<p><strong>沖</strong>：個人的な認識ですが、Flashの盛り上がりには3回ピークがあったと思います。第一次ブームはまだモデムでアクセスしていた98～99年くらい。中村勇吾さんの「yugop.com」を代表とする軽量でダイナミックなアニメ―ションが話題になりました。Flash 4や5の時代ですね。</p>

<p>第二次ブームはFlash Player 6でビデオが再生できるようになった頃。Windows Media PlayerやReal Playerなどの重いプラグインを使わなくても再生できる便利さから、ビデオ再生プラットフォームとしていろんなデバイスに普及するきっかけになりました。</p>

<p><strong>白石</strong>：その後、YouTubeやニコニコ動画が出てきたんでしたっけ。</p>

<p><strong>沖</strong>：そうですね。当時はマシンパワーも非力だったし、軽量なFlash VideoがWebサイトにおける動画コンテンツの救世主になったかんじです。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04471.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24507" srcset="/wp-content/uploads/2017/10/DSC04471.jpg 640w, /wp-content/uploads/2017/10/DSC04471-300x200.jpg 300w, /wp-content/uploads/2017/10/DSC04471-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>轟</strong>：あと２ちゃんなどの独特の文化とFlashのシュールなコンテンツがすごくマッチしてた。そんな文化的な背景もFlashが盛り上がった理由の一つなんじゃないかと。</p>

<p><strong>池田</strong>：この「<a href="https://togetter.com/li/1134404" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">まだ生きてる歴史的Flashページまとめ</a>」は僕がまとめたものなんですが、togetterで昔のFlashページを懐かしむというものです。主に２ちゃんのFlash板に投稿されたものがまとまっています。<a href="http://www.poeyama.com/gonorego/files/file01.html" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">吉野家ゴノレゴ</a>なんかはすごく人気がありましたね。</p>

<p><strong>沖</strong>：第三次ブームはいわゆるフルFlashサイト。ビデオの表現力のあとにフィルターが入ったり、ActionScript 3.0で高度なスクリプティングができるようになって、Flashだけでリッチかつ情報量を備えたサイトを作れるようになった。表現力が広がったことで、広告関連や企業のコーポレートサイトなどもフルFlashサイトで作られるようになっていきました。</p>

<p><strong>白石</strong>：その頃は僕でさえ、コーポレートサイトをFlashで作ってましたからねえ。</p>

<p><strong>池田</strong>：当時はインタラクティブなものはだいたいFlashで作ってましたよね。今から考えると、SEO対策やアクセシビリティ的には最悪でした(笑)。</p>

<h2>クリエイティブとFlash</h2>

<p><strong>白石</strong>：では、具体的にどんなクリエイティブがFlashの盛り上がりに影響を与えていったのか、お聞かせください。</p>

<p><strong>池田</strong>：やっぱり広告なのかなと。特に、企業のスペシャルサイトでよく使われていました。例えば、モリサワの「FONTPARK 2.0（MORISAWA）」。ユーザーもフォントのパーツを自由に動かして、投稿できるというものです。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04357.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24509" srcset="/wp-content/uploads/2017/10/DSC04357.jpg 640w, /wp-content/uploads/2017/10/DSC04357-300x200.jpg 300w, /wp-content/uploads/2017/10/DSC04357-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>沖</strong>：Flashはこうしたユーザー・ジェネレイテッド・コンテンツという文化を流行らせた一因にもなっていますよね。</p>

<p><strong>池田</strong>：こうしたコンテンツを見ているとわかるんですが、文字の細かいシズル感や効果音などの表現が凝縮されてるんですよね。クリエイターとして単純に憧れてました。</p>

<p><strong>沖</strong>：THE ECO ZOO（ECODA!DOBUTSUEN）は3Dで作られていて、当時としてはかなり画期的なサイトでした。普通こうした3Dコンテンツを作るにはPapervision3Dなどを使うことが多いんですが、作者の城戸雅行（ROXIK）さんがすごいのは、フレームワークや仕組みの部分から全部自分で作ってしまうこと。おそらく、他のフレームワークで同じようなコンテンツを作ろうとしても、重くて動かせないと思います。</p>

<p><img src="/wp-content/uploads/2017/10/ccdojo-179-flash-01.jpg" alt="" width="640" height="338" class="alignnone size-full wp-image-24512" srcset="/wp-content/uploads/2017/10/ccdojo-179-flash-01.jpg 640w, /wp-content/uploads/2017/10/ccdojo-179-flash-01-300x158.jpg 300w, /wp-content/uploads/2017/10/ccdojo-179-flash-01-207x109.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>池田</strong>：当時はリアルタイムで3Dをたくさん動かすには性能的に難しかったので、プレレンダリングでボケた葉が舞う画像を先に作っておいて、そのぼかしたキャッシュを表示させるなど、相当研究されてましたね。</p>

<p><strong>轟</strong>：Flashのコミュニティでは、そういった企業秘密になりそうな技術的なこともオープンに公開していたから、みんなで面白いものを作ろうぜという雰囲気になっていったんですよね。</p>

<p><strong>沖</strong>：同じソフトを使っている人が集まって定期的に勉強会を開くのは、Flashのコミュニティが初めてだったんじゃないでしょうか。</p>

<p><strong>池田</strong>：オープンソースの考え方が入ってきて、Flashのコミュニティが盛んになってきたのは、日本で言うと<a href="http://www.libspark.org/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">Spark project</a>が大きかったですね。当時高校生だった新藤愛大さんが、未踏ユースで採択されたことをきっかけに、著名クリエイターたちも参加するようになり、それまでバラバラに出ていたライブラリやフレームワークなどを集約して共有するようになった。ProgressionやFLARToolKitなんかも、このSpark projectで公開されました。</p>

<p><img src="/wp-content/uploads/2017/10/ccdojo-179-flash-02.jpg" alt="" width="640" height="357" class="alignnone size-full wp-image-24513" srcset="/wp-content/uploads/2017/10/ccdojo-179-flash-02.jpg 640w, /wp-content/uploads/2017/10/ccdojo-179-flash-02-300x167.jpg 300w, /wp-content/uploads/2017/10/ccdojo-179-flash-02-207x115.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>沖</strong>：まだGitHubがなかった時代に、今と同じことをやってたというのはすごいですよね。</p>

<p><strong>池田</strong>：FLARToolKitは海外からの反響も大きかったですね。</p>

<p><strong>白石</strong>：テレビのアニメや映画広告でもFlashが使われていたんですよね。</p>

<p><strong>沖</strong>：そうですね。テレビや映画でもアニメーションツールとして使われるようになって、最近では湯浅政明監督の「夜は短し歩けよ乙女」、過去には「鷹の爪団」や「おしりかじり虫」なんかもそうですね。テレビのCG合成やPlayStationのゲームのUIなんかにも使われていました。</p>

<p><strong>轟</strong>：ガラケーはFlash Liteを使ってましたね。</p>

<p><strong>池田</strong>：Flashは極限まで軽量に作れるので、いろいろ工夫すれば30Kくらいまでファイルサイズを小さくできたんですよ。</p>

<p><strong>沖</strong>：Flash Liteのノウハウは独特で職人技でしたよね。</p>

<p><strong>池田</strong>：今では考えられないですけど、SWFファイルをサーバー側で書き換えるとか、マニアックなこともやってました。</p>

<p><strong>白石</strong>：皆さんはFlashでどんなものを作っていたんですか？</p>

<p><strong>沖</strong>：もう10年近く前になりますが、「地球と気象」という、気象に関する教育コンテンツの制作を担当しました。Flashはアニメーションでさまざまな事象を簡単に表現できるので、教育系の仕事には重宝していました。</p>

<p><img src="/wp-content/uploads/2017/10/ccdojo-179-flash-03.jpg" alt="" width="640" height="391" class="alignnone size-full wp-image-24514" srcset="/wp-content/uploads/2017/10/ccdojo-179-flash-03.jpg 640w, /wp-content/uploads/2017/10/ccdojo-179-flash-03-300x183.jpg 300w, /wp-content/uploads/2017/10/ccdojo-179-flash-03-207x126.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>池田</strong>：僕は、個人で作った作品やデモを「<a href="http://clockmaker.jp/labs/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">Clockmaker Labs</a>」に載せています。流体表現や物理計算などを研究しながら作ってました。</p>

<p><strong>沖</strong>：この時代は、小さい作品をたくさん作って自分のサイトで公開するという文化がありましたよね。今だとCodePenやQiitaで書くという人が多いんですけど。当時は素材を描くところから演出してプログラミングするところまで、全部一人で作れてしまうので、作家性が発揮しやすかったように思います。こうしたコンテンツが再生できなくなっていくのはさみしいですね。</p>

<h2>Flashの拡がり、そして現在に至るまで</h2>

<p><strong>白石</strong>：続いては、ActionScript 3.0、コミュニティ、Flex、Adobe AIR、そしてiPhoneによって、Flashがどう拡がり、現在に至ってしまったのかを語っていただきたいと思います。</p>

<p><strong>轟</strong>：僕はまさにAdobe Flashの頃から、ユーザーとして付き合い始めました。それまでJavaでサーバーサイドの開発をしてたんですが、業務アプリケーションとして使いたかったんですがちょっと不安定だったんです。ActionScript 3やオブジェクト指向が使えるようになって、開発環境もEclipseが使えるようになって、すごく面白くなってきた。Flexのコミュニティもかなり盛り上がってましたね。</p>

<p>ブラウザの互換性もあり、チーム開発もできそうということで、企業の業務系アプリケーションとしても導入のしやすさがあった。僕はその頃、サーバーサイドからフロントエンドに移ったんですが、とにかく楽しかったのを覚えています。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04338.jpg" alt="" width="640" height="422" class="alignnone size-full wp-image-24517" srcset="/wp-content/uploads/2017/10/DSC04338.jpg 640w, /wp-content/uploads/2017/10/DSC04338-300x198.jpg 300w, /wp-content/uploads/2017/10/DSC04338-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>池田</strong>：Flash Playerのブラウザ互換性はとにかく高かったですね。MacでもWindowsでも同じように動いていた。Playerのバージョン検知も古いバージョンだと促してくれてましたね。</p>

<p><strong>轟</strong>：アップデートすると、数カ月でユーザーの80％くらいはアップデートしてました。</p>

<p><strong>池田</strong>：Flex Frameworkというのは、MXMLという言語で画面を生成するライブラリで、今で言うとReact.jsやAngular.jsに近い。保守性が高いため業務系アプリケーション、Rich Internet Application（RIA）なんかでよく使われていました。</p>

<p><strong>轟</strong>：さっきの話にも出ていた昔のシズル感というか、ふわっとしたかんじの表現が業務アプリケーションにも入ってきた瞬間でした。ようやく業務系アプリにも作業を効率化させて、気持ちよく使おうという流れになってきた。</p>

<p><strong>白石</strong>：ECMAScipt4が政治的な何かで消えたという話も聞きましたが。</p>

<p><strong>池田</strong>：ActionScriptはECMASciptから派生してできたもの。ActionScript 3が出て、次はECMAScipt 4が出るというところで、いろいろあってストップしたんですよね。で、まったく別の枝からECMAScipt 5が出たんです。</p>

<p><strong>白石</strong>：じゃあ、iPhoneやジョブズに関する想いはどうですか？</p>

<p><strong>池田</strong>：iPhoneが最初に販売されたときはまだ性能が低かったので、Flash Playerが載らないのは仕方ないと思ってました。でも、iPadにFlash Playerが搭載されなかったのは大きかったですね。Adobe Flashのエバンジェリスト、Lee Brimelowは「Go screw yourself Apple」というブログを書いて批判していました。</p>

<p><strong>轟</strong>：彼は腕にひらがなで「ふらっしゅ」ってタトゥーを入れるくらいFlashを愛していたんですよ。</p>

<p><strong>池田</strong>：FlashのアプリをiPhoneアプリとして生成するサードパーティ製のツールも出たのですが、数カ月でそれもApple側が審査を通さなくなってしまった。AIRでActionScriptを変換して出せるパッケージャーも出たんですが、「Thoughts on Flash」という有名なタートルおじさんのセリフとともにすべて消えてしまいました。</p>

<p><strong>轟</strong>：当時、FlashがなかなかiPhoneに載らないので、Adobe MAXという大きなイベントでAdobeのCTOがどうしたらiPhoneにFlashが載るかというのをブラックジョークなパロディ寸劇でやったんですよ。あれも刺激したんじゃないかなあ。</p>

<p><strong>白石</strong>：FlashはそんなにAppleのビジネスを阻害したんでしょうか？</p>

<p><strong>沖</strong>：Flash Playerはウェブブラウザ上で動いていたので、App Storeを経由しなくてもアプリを提供できてしまいます。当時、App Storeの仕組みを普及させようとしていたAppleとしては、良く思わなかったはずです。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04356.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24519" srcset="/wp-content/uploads/2017/10/DSC04356.jpg 640w, /wp-content/uploads/2017/10/DSC04356-300x200.jpg 300w, /wp-content/uploads/2017/10/DSC04356-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：「<a href="http://japanese.engadget.com/2010/04/29/flash/" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">ジョブズからの手紙</a>」をエンガジェットさんが要約してくれていますね。</p>

<p><strong>沖</strong>：バッテリーなんかは、Flashと同じものをHTML5 Canvasで作って載せたらよけい重くて動かなくなると思いますけどね。</p>

<p><strong>白石</strong>：ということで、Androidでは動いていたけど徐々に動かなくなり、デスクトップのアプリケーションとなり、モバイルの隆盛とともに衰退していったということでしょうか。</p>

<p><strong>池田</strong>：作る人がいなくなっていったというのも大きいですね。モバイルが中心になってきたにも関わらず、モバイルでは動かすことができず、新たな技術も生まれず、新規の作品を作る人がどんどんいなくなってしまった。</p>

<p><strong>白石</strong>：Flexなんかはわりと早めの段階でApacheに寄贈していましたね。2011年の頃ですね。</p>

<p><strong>池田</strong>：Adobeの決断は早かったですね。</p>

<p><strong>轟</strong>：Flexに惚れて入社したので、辞めようかと思うくらいショックでした。</p>

<p><img src="/wp-content/uploads/2017/10/DSC04466.jpg" alt="" width="640" height="422" class="alignnone size-full wp-image-24521" srcset="/wp-content/uploads/2017/10/DSC04466.jpg 640w, /wp-content/uploads/2017/10/DSC04466-300x198.jpg 300w, /wp-content/uploads/2017/10/DSC04466-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>沖</strong>：業務アプリケーションにユーザービリティとかエンターテインメント性という概念が生まれたのは、Flash以降ですよね。</p>

<p><strong>轟</strong>：Flashのコンソーシアムも立ち上がってました。企業の中にノウハウがないから、コンシューマ向けのコンテンツを作っている人たちから吸収しようといろんな化学反応が起きてましたね。</p>

<p><strong>沖</strong>：Flashの勉強会は、全然違う分野の人たちが話せたのがすごくよかったですね。</p>

<h2>今後のwebを占う</h2>

<p><strong>白石</strong>：池田さん、Flashの現状と今後はどうなっていくでしょう？</p>

<p><strong>池田</strong>：2020年でFlash Playerのサポートは終了するんですが、Adobe AIRでiPhoneやAndroidアプリのデプロイが可能なので、Flashテクノロジーとしては継続していくと思います。サードパーティ製アプリ禁止が緩和されて、Adobe AIRは個人で開発するのには最適なプラットフォームなのですが、新たにFlashを学ぼうという人はほぼいないので、Flashがこれから盛り返していくことは、現実的に難しいんじゃないでしょうか。</p>

<p><strong>白石</strong>：Flashで培われたシズル感を表現するツールのようなものが減っているような気がします。HTML5やモバイル、 WebGLといった技術の中で、今後のwebはどうなっていくでしょう。</p>

<p><strong>沖</strong>：現時点のWebで何かを表現するには、HTML,CSS,JavaScriptが基本になるので、そこはしっかり抑えておきたいですね。表現力という意味ではWebGLに注目が集まっていますが、Flashのように誰でもすぐ使える技術かというと疑問は残ります。どうしても高度なプログラミングがベースとなるので、学習し始めてから成果が出るまでの時間がかかりすぎる面はあります。</p>

<p><strong>池田</strong>：UnityからWebGLに書き出す機能もあるし、Unityの学習曲線もそろってきているので、コンテンツが増えないのかというのはトータルで見ていく必要があると思っています。WebGLでFlashコンテンツと同じようなものを作るとすごい容量になるので、WebGLでユーザーにストレスなく遊んでもらうにはキャッシュをうまく使うためにService Workerを覚えたほうがいいとか、周辺技術もいくつかおさえておかないといけない。ハードもスマートフォンやパソコンもあるからトータルにおさえなくてはいけない技術がたくさんある。学ぶものの多さが普及の妨げになっているんじゃないでしょうか。</p>

<p><strong>轟</strong>：Adobe Edgeでいろんなアニメーションの方向性を細分化して模索してみたんですが、DOMアニメーションがきついので、結局CSSアニメーションとCanvasしか残さなかった。昔はFlash Playerのことだけ考えていればよかったのに、ブラウザやハードもたくさん増えたので、今のクリエイターは本当に大変だと思います。アドビも作り手がワクワクしながら簡単にできるツールを提供できるように頑張りますので、期待してください！</p>

<p><img src="/wp-content/uploads/2017/10/DSC04456.jpg" alt="" width="640" height="422" class="alignnone size-full wp-image-24523" srcset="/wp-content/uploads/2017/10/DSC04456.jpg 640w, /wp-content/uploads/2017/10/DSC04456-300x198.jpg 300w, /wp-content/uploads/2017/10/DSC04456-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：では最後にひと言ずついただけますか。</p>

<p><strong>池田</strong>：Flashがなぜ衰退したのかは、Flashの好き嫌いはともかく、理解しておいたほうがいいと思っています。政治的な理由やプロパガンダによって自分が使っていた技術が突然なくなってしまうこともあり得ます。Flashを教訓として、例えばHTMLが使えなくなったとしても今まで覚えた技術やノウハウを次の異なる技術でも活かしていきたいです。</p>

<p><strong>沖</strong>：Flashは衰退してWeb標準のほうに傾いているけど、最近のブラウザでもFlash Player 6とか7くらいの表現はできるようになってきました。HTMLやJavaScriptだけを見るよりも、Flash時代のライブラリを振り返って学んでおくと幅が広がるし、過去の資産が生きることは結構ある。Webコンテンツやアプリ、モバイルゲームを作る人もFlash時代の本やコンテンツなんかで学んでほしいと思います。</p>

<p><strong>轟</strong>：アドビの中の人として、Flashのマーケットをどうしようか悩んだんですね。でも、Flashツールじゃなくて手段であると考えた。その先のお客さんが楽しく、仕事がしやすくなるように、Flashの育てた文化やコミュニティをひっくるめて、マーケットに貢献したほうがいいなと。Flashのコミュニティのおかげで生まれたものもあるし、面白い仕事を作っている人は今も活躍している。若い人たちにもこういう面白い世界があったんだと伝えていきたいですね。</p>

<p>イベントの様子は「<a href="https://blogs.adobe.com/creativestation/ccdojo-179-flash" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">Creative Cloud 道場</a>」もしくはYouTubeで公開されているので、興味がある方はぜひこちらからご覧ください！</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/pzNHVhE080g" frameborder="0" allowfullscreen></iframe>
]]></content:encoded>
			</item>
		<item>
		<title>Webアプリのアクセシビリティを追求せよ！「インクルーシブ」なマークアップを議論しながら学んでみた</title>
		<link>/shumpei-shiraishi/24671/</link>
		<pubDate>Thu, 02 Nov 2017 09:07:28 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[アクセシビリティ]]></category>
		<category><![CDATA[マークアップ]]></category>

		<guid isPermaLink="false">/?p=24671</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (10) こんにちは、編集長の白石です。 この記事は、9月24日に開催されたHTML5 Conference 2017に登壇したエキスパートに、お話されたセッション...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conf2017/" class="series-457" title="HTML5 Conference 2017特集" data-wpel-link="internal">HTML5 Conference 2017特集</a> (10)</div><p><style>
iframe.slide {
  width: 320px;
  height: 189px;
}
@media (min-width: 768px) {
  iframe.slide {
    width: 600px;
    height: 355px;
  }
}
</style></p>

<p>こんにちは、編集長の白石です。</p>

<p>この記事は、9月24日に開催された<a href="http://events.html5j.org/conference/2017/9/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference 2017</a>に登壇したエキスパートに、お話されたセッションのトピックを中心に語っていただこうとういものです。セッションの内容をより深く理解する手助けになるだけでなく、本記事単体でも面白く読んでいただけることを目指しています。</p>

<p>今回お話を伺ったのは、freeeの伊原力也さんと、ビジネス・アーキテクツの太田良典さんです。</p>

<p><img src="/wp-content/uploads/2017/11/42A4910.jpg" alt="" width="640" height="401" class="alignnone size-full wp-image-24714" srcset="/wp-content/uploads/2017/11/42A4910.jpg 640w, /wp-content/uploads/2017/11/42A4910-300x188.jpg 300w, /wp-content/uploads/2017/11/42A4910-207x130.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>お二人のセッション「多様なユーザーニーズに応えるフロントエンドデザインパターン〜書籍「インクルーシブ HTML + CSS &amp; JavaScript」より」に関するスライド資料は、こちらで公開されています。</p>

<iframe class="slide" src="https://docs.google.com/presentation/d/e/2PACX-1vTovsRiX8lB4Fb5J6PJIZAEE4suzO9PMzWOvdqxHbhrfmrvFn97arnD-ZCBifgm3z0a-rzLyZEo5jCj/embed?start=false&#038;loop=false&#038;delayms=3000" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>

<h2>「インクルーシブ」に込められた意味とは？</h2>

<p><b class="speaker siraisi">白石:</b> 今回は取材をお受けいただきありがとうございました！簡単に自己紹介をお願いします。</p>

<p><b class="speaker ota">太田:</b> ビジネス・アーキテクツに所属している太田です。大規模企業サイトの構築、ガイドライン策定などを行ってきました。</p>

<p>Webアクセシビリティ関連に昔から取り組んでいまして、「<a href="http://waic.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webアクセシビリティ基盤委員会</a>」の翻訳作業部会主査を担当しています。</p>

<p><img src="/wp-content/uploads/2017/11/42A4913.jpg" alt="" width="640" height="397" class="alignnone size-full wp-image-24709" srcset="/wp-content/uploads/2017/11/42A4913.jpg 640w, /wp-content/uploads/2017/11/42A4913-300x186.jpg 300w, /wp-content/uploads/2017/11/42A4913-207x128.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><strong>▲株式会社ビジネス・アーキテクツ 太田良典さん</strong><span style="font-size: 80%;">　　※写真提供：html5j [HTML5 Conference 2017事務局</span></p>

<p><b class="speaker ihara">伊原:</b> freee株式会社の伊原です。Webサイトやアプリケーションの情報設計を行っています。私も<a href="http://waic.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webアクセシビリティ基盤委員会</a>に所属しており、「理解と普及作業部会」にて活動しています。</p>

<p>他には、<a href="https://www.hcdnet.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HCD-Net</a>という人間中心設計を推進する団体でも活動しており、UXデザインの普及に務めています。</p>

<p><img src="/wp-content/uploads/2017/11/42A5098.jpg" alt="" width="640" height="408" class="alignnone size-full wp-image-24710" srcset="/wp-content/uploads/2017/11/42A5098.jpg 640w, /wp-content/uploads/2017/11/42A5098-300x191.jpg 300w, /wp-content/uploads/2017/11/42A5098-207x132.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><strong>▲freee株式会社 伊原力也さん</strong><span style="font-size: 80%;">　※写真提供：html5j [HTML5 Conference 2017事務局</span></p>

<p><b class="speaker siraisi">白石:</b> 本日は、HTML5 Conferenceでお話された内容を主にお聞きしたいのですが、このセッションは、今度出版される書籍を元にしてらっしゃるんですよね。</p>

<p><b class="speaker ihara">伊原:</b> はい、11月4日に出版される「<a href="https://www.amazon.co.jp/dp/4862463878" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">インクルーシブ HTML + CSS &amp; JavaScript</a>」という書籍の内容をベースにしています。</p>

<p>私たちは2年ほど前に<a href="https://www.amazon.co.jp/dp/4862462650/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">デザイニングWebアクセシビリティ</a>という書籍を、その半年ほど前には<a href="https://www.amazon.co.jp/dp/4862462669/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">コーディングWebアクセシビリティ</a>という書籍を上梓しました。</p>

<p>今回のセッションの元になった書籍は、いわばそうした流れを組んだ最新のものだといっていいと思います。特にコーディングWebアクセシビリティとは、著者も同じヘイドン・ピカリング氏ですし、続編といって差し支えないかと思います。</p>

<p><b class="speaker siraisi">白石:</b> では、今回もWebアクセシビリティに関する書籍なんですね。</p>

<p><b class="speaker ihara">太田:</b> そうです。「コーディングWebアクセシビリティ」では特に、WAI-ARIAの使い方について詳しく論じられていました。WAI-ARIAの基本的な知識はあっても、「なぜそう書くのか」「いつどう使うのか」を知らない方に向けて、具体的な例を挙げつつ語った本です。</p>

<p><b class="speaker siraisi">白石:</b> では、今回の書籍は「インクルーシブ HTML + CSS &amp; JavaScript」となっているわけですが、これはどういう内容の本なのでしょうか？</p>

<p><b class="speaker ihara">伊原:</b> 原著のタイトルは「<a href="https://www.amazon.co.jp/dp/B01MAXK8XR/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Inclusive Design Patterns</a>」と言うのですが、サブタイトルは「Coding Accessibility Into Web Design」（Webデザインの中にアクセシビリティをコーディングする）となっていて、こちらの方がわかりやすい(笑)。</p>

<p>ぶっちゃけて言えば、アクセシビリティに配慮したコーディング例を具体的に挙げていっているという本です。</p>

<p>原著者がなんで「インクルーシブ」という単語を用いたかというと、「アクセシビリティ」というと、「アクセシビリティガイドラインを満たしていくこと」とか、「特定の障害を持つ人に向けた配慮」というニュアンスが強く根付いてしまっているからだと言っています。</p>

<p>また、「アクセシビリティ」という言葉自体には、デザインや設計という意味は含まれていない。アクセシビリティとは単に「アクセスできる可能性の度合い」のことですから。</p>

<p>一方でインクルーシブというのは「包括的」とか「全てを包む」といったニュアンスを含む英単語で、「できるだけ受け入れる」とか「できるだけ含める」という意味合いがあります。原著者が「インクルーシブ」という単語を用いたのは、「できるだけ多くの人に使ってもらえる」「できるだけ多くの状況で使える」ものをデザインしていこう、という意図なんです。</p>

<p><b class="speaker ihara">太田:</b> ただ、日本語版では元のタイトルにある「デザインパターン」という言葉は使いませんでした。Web制作の世界では、「デザインパターン」と言う単語からはWebデザインを想起してしまいがちなので…。</p>

<p>アクセシビリティにおいては、そういう（UI）デザインのニュアンスだけが強いわけではありませんからね。</p>

<p><b class="speaker siraisi">白石:</b> 「デザインパターン」という単語は、エンジニアの方であれば逆に馴染みはあるかもしれませんね。</p>

<p>しかし、「コーディングWebアクセシビリティ」や「デザイニングWebアクセシビリティ」という書籍がありながら、今回新しい書籍を出版されたのはどういう背景があるのでしょうか？</p>

<p><b class="speaker ihara">太田:</b> ここ10年くらいで、JavaScriptを用いた動的なUIがすごく普及しました。Ajaxがその立役者で、JavaScriptを利用して非同期にUIを書き換えるような作り方が一般的になってきました。</p>

<p>おかげで、WebサイトのUXは全般的に向上しましたが、一方で、アクセシビリティ的には新たな課題を抱えることにもなったわけです。<strong>元々、HTMLはアクセシブルに設計されているのに、JSがそれを損なってしまうケースが散見されるようになった</strong>のです。</p>

<p>例えばフォーム送信などは良い例です。昔ながらのフォームで、「送信」ボタンを押したら次のページ…という流れであれば、アクセシビリティに問題はあまりありません。ただこれを、JavaScriptを用いてAjaxでデータ送信するようにした途端、アクセシビリティが低下してしまうことが多い。</p>

<p><b class="speaker ihara">伊原:</b> そもそも、JSで「アプリ」を作ろうとすると、アクセシビリティへの配慮がされにくくなりがちです。ほとんど<code>div</code>や<code>span</code>でマークアップして、見た目上動けばOK…という場合が少なくありません。</p>

<p>それを、<strong>セマンティックなHTML要素とWAI-ARIAを活用して、アクセシブルでUXにも優れたWebアプリを作ろう</strong>というのが、この「インクルーシブ HTML + CSS &amp; JavaScript」で述べていることです。</p>

<h2>実践！アクセシブルな商品リストを作ってみる</h2>

<p><b class="speaker siraisi">白石:</b> では、アクセシブルなマークアップの具体的なパターンを幾つかお話いただきたいと思います。</p>

<p>ただ、セッションの内容全体については<a href="https://docs.google.com/presentation/d/1jaf-x24jZtVbQDzniovnxhk7gzZ8rkNNaznRM030wSo/edit#slide=id.p" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">スライド資料</a>をご覧になってもらえればいいと思うので、ここでは、私が個人的に疑問に思ったことなどを遠慮なくツッコませていただきつつ、ポイントとなる部分をおさらいしていっていただけると嬉しいです。</p>

<p><b class="speaker ihara">伊原:</b> わかりました。では一つ目の例として、<strong>商品リスト</strong>を見ていきます。</p>

<p>このサイトは画像アセットを購入できるサービスという想定ですが、UIデザインについては、Amazonの検索結果のようなものを想像して頂ければいいと思います。</p>

<p>リストの項目それぞれは商品名やレビュー結果、そして「すぐに購入」ボタンなどがあります。</p>

<p><img src="/wp-content/uploads/2017/11/bf80f697d8a772bac6b2c6a0c57c3905-640x360.png" alt="" width="640" height="360" class="aligncenter size-large wp-image-24676" srcset="/wp-content/uploads/2017/11/bf80f697d8a772bac6b2c6a0c57c3905.png 640w, /wp-content/uploads/2017/11/bf80f697d8a772bac6b2c6a0c57c3905-300x169.png 300w, /wp-content/uploads/2017/11/bf80f697d8a772bac6b2c6a0c57c3905-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>これが複数縦に並んでいるリストをイメージしてください。</p>

<p><b class="speaker siraisi">白石:</b> こういう一覧の実装方法っていろいろですよね。個人的には、単に<code>div</code>を並べるときもあれば、表っぽければ<code>table</code>を使うときもあります。</p>

<p><b class="speaker ihara">伊原:</b> まず、<strong>リストそのものはリスト要素（<code>ul</code>や<code>ol</code>）を使ってマークアップした方がいい</strong>かなと思います。</p>

<p>ここでリスト要素をお薦めするのは、要素の意味合いがわかりやすいのと、スクリーンリーダーがリストを読み上げるのに特別な機能を持つからですね。</p>

<p><b class="speaker ota">太田:</b> 例えばスクリーンリーダーは、リストの項目数を先に読み上げたり、前後のリスト項目にジャンプしたりできるんです。項目数って結構大事で、項目数が多い場合と少ない場合では、ユーザーの行動も変わってきますからね。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。</p>

<p><b class="speaker ihara">伊原:</b> また商品名ですが、見出し要素を使用するのが最適です。スクリーンリーダーは見出しに直接飛んだり、直前の見出しを読みあげたりすることもできる。
リストと見出しを組み合わせることで、一覧の見出しを飛ばし読みしていくようなことが可能になるんです。</p>

<p>まとめると、以下のようなマークアップがおすすめですね。</p>

<p></p><pre class="crayon-plain-tag">&lt;li&gt;
  &lt;h3&gt;
  ガソリンスタンドにたたずむ裸の男 &lt;a href="/artist/kenny-mulbarton"&gt;by &lt;cite&gt;ケニー・マルバートン&lt;/cite&gt;&lt;/a&gt;
  &lt;/h3&gt;
&lt;/li&gt;</pre><p></p>

<p><b class="speaker siraisi">白石:</b> <code>li</code>の中に見出し要素を置くと、リスト項目が全て個別のセクションということになりますが、それは問題ないんでしょうか。HTML5からは、見出し要素は暗黙的にセクションを構成するようになりましたよね。</p>

<p><b class="speaker ota">太田:</b> はい、確かにセクショニングアルゴリズムの観点から、<code>li</code>の中に<code>h3</code>を入れることを望ましくないと考える人もいるかもしれません。ここは意見が分かれるところでしょうね。
ただ、アクセシビリティの観点からは支援技術で実際に使えるかどうかが重要で、その意味では十分に実用的だと言えると思います。</p>

<h2>「今すぐ購入」ボタンはボタンにする？それともリンクにする？</h2>

<p><b class="speaker ihara">伊原:</b> 次は、「今すぐ購入」ボタンをどうマークアップするかを検討してみましょうか。</p>

<p><b class="speaker siraisi">白石:</b> うーん、これは<code>button</code>一択じゃないですか？</p>

<p><b class="speaker ihara">伊原:</b> それもアリです。<code>button</code>を使うケースとしては、JavaScriptと組み合わせて、購入処理をその場で行えるようにするような場合ですね。</p>

<p>でもこの例のサイトは一般的なプリント写真購入サイトをイメージしているものなので、「今すぐ購入」ボタンを押したら、写真の購入確認画面に飛ぶことになります。</p>

<p><b class="speaker siraisi">白石:</b> そうなると、写真の購入確認画面へのリンクとして実装したほうが良さそうですね。</p>

<p><b class="speaker ihara">伊原:</b> はい、そのほうがJavaScriptがなくても動きますし、要素の意味合いも明確になります。ここでは<code>a</code>要素を使いましょう。</p>

<p>以下のようなマークアップがまずは望ましいですね。</p>

<p></p><pre class="crayon-plain-tag">&lt;a href="/product/naked-man-in-garage" class="button"&gt;今すぐ購入&lt;/a&gt;</pre><p></p>

<p><b class="speaker siraisi">白石:</b> このマークアップだと、<code>class="button"</code>となっていますし、CSSで見た目をボタンっぽくするイメージですね。例えばWAI-ARIAを使って、このリンクのロールをボタンにするというのはいかがでしょうか？</p>

<p></p><pre class="crayon-plain-tag">&lt;!-- role要素でbuttonを指定 --&gt;
&lt;a href="/product/naked-man-in-garage" role="button"&gt;今すぐ購入&lt;/a&gt;</pre><p></p>

<p><b class="speaker ihara">伊原:</b> あ、それはやめてください。これでは、元のHTML要素が持つセマンティクスが変わってしまい、この要素はリンクではなくボタンであるという意味合いになってしまいます。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、ここでは見た目だけボタンにしておいて、セマンティクスは変えないのが望ましいと。</p>

<p><b class="speaker ota">太田:</b> そうなんです。WAI-ARIAって覚えると濫用されがちな技術でもありますが、<strong>基本的には「WAI-ARIAは使わない」のが正しい</strong>。</p>

<p>W3Cの「<a href="https://www.w3.org/TR/using-aria/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Using WAI-ARIA</a>」という文書の先頭に書いてあるのは、「（HTMLでまかなえる場合は）WAI-ARIAは使うな」なんですよ(笑)。</p>

<p>例えばボタンや見出しがあったとしたら、素直に<code>&lt;button&gt;</code>や<code>&lt;h1&gt;</code>を使えば良い。WAI-ARIAを使う必要は必ずしもないんです。基本的にはHTML5の語彙を用いて、足りないところをWAI-ARIAで補う、という形が望ましい。</p>

<h2>リンクテキストにも配慮しよう！</h2>

<p><b class="speaker ihara">伊原:</b> あともう一つ考えてみたいのは、リンクテキストです。このままだと全てのリンクが「今すぐ購入」になってしまいますが、それってアクセシビリティに優れていると言えるでしょうか？</p>

<p><b class="speaker siraisi">白石:</b> うーん…見出しに商品名はあるので、全くアクセシブルじゃないとは思いませんが。リンクテキストも読み上げられるんですよね？全部が「今すぐ購入」じゃ不親切かも？</p>

<p><b class="speaker ihara">伊原:</b> そうです。「何を購入できるか」が、リンクテキストから分かると、よりアクセシブルですよね。</p>

<p>なので、非表示のテキストでリンクテキストをより詳細化すれば、UIデザインも損なわれません。</p>

<p></p><pre class="crayon-plain-tag">&lt;a href="/product/naked-man-in-garage" class="call-to-action"&gt;
  &lt;span class="visually-hidden"&gt;ガソリンスタンドにたたずむ裸の男を&lt;/span&gt;今すぐ購入
&lt;/a&gt;</pre><p></p>

<p><b class="speaker siraisi">白石:</b> なるほど、不可視のテキストも利用してより説明的にするとは…！アクセシビリティへの配慮を真面目に考えてないと、まず出てこない発想ですね。</p>

<p><b class="speaker ihara">伊原:</b>ちなみに他にもやり方はいくつかありますが、この本ではSEOにおける内部対策的な意味合いも込めて、このやり方が推奨されています。</p>

<h2>検索結果ページ（SERP）にも配慮する</h2>

<p><b class="speaker ihara">伊原:</b> 最後に、検索エンジンの結果ページで商品（Search Engine Result Pages）がどう見えるか、についても配慮した方がいいでしょう。</p>

<p><b class="speaker siraisi">白石:</b> 検索結果ページですか？なんでですか？</p>

<p><b class="speaker ihara">伊原:</b> 支援技術ユーザーの中には、目的のページに辿り着くために、検索エンジンのインターフェースを利用する人も多くいるんです。Google検索って、<code>site:</code>を前につけるとサイト内検索を行えるじゃないですか。</p>

<p><b class="speaker siraisi">白石:</b> ああなるほど。言われてみれば、ぼくもAmazonの中検索するのに、Google検索をよく使います(笑)。</p>

<p><b class="speaker ihara">伊原:</b> 例えばマイクロデータと<code>schema.org</code>を使えば、検索結果の表示をより充実させることが可能です。以下に、商品のレビュー結果を表すマークアップの例を示します。</p>

<p></p><pre class="crayon-plain-tag">&lt;span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"&gt;
&lt;span itemprop="ratingValue"&gt;4&lt;/span&gt;つ星、
レビュー数&lt;span itemprop="reviewCount"&gt;13&lt;/span&gt;
&lt;/span&gt;</pre><p></p>

<p><img src="/wp-content/uploads/2017/11/371b7ba51cb7da942f5931bbc98c4242-640x360.png" alt="" width="640" height="360" class="aligncenter size-large wp-image-24675" srcset="/wp-content/uploads/2017/11/371b7ba51cb7da942f5931bbc98c4242.png 640w, /wp-content/uploads/2017/11/371b7ba51cb7da942f5931bbc98c4242-300x169.png 300w, /wp-content/uploads/2017/11/371b7ba51cb7da942f5931bbc98c4242-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> そうか、今までぼく、「マイクロデータ使っとけば検索結果ページで目立てるかな」くらいしか考えたことなかったんですが、アクセシビリティの点から考えても重要なんですね。あんまりちゃんと意識したことなかったです。</p>

<h2>見た目ではなく機能でマークアップせよ！</h2>

<p><b class="speaker ihara">伊原:</b> では次の例に移らせてください。表示結果を絞り込んだり並び順を変えたりするUIを実装してみたいと思います。</p>

<p><img src="/wp-content/uploads/2017/11/2e7eae09dfbb3af35018e4d4f874a5bf-640x360.png" alt="" width="640" height="360" class="aligncenter size-large wp-image-24673" srcset="/wp-content/uploads/2017/11/2e7eae09dfbb3af35018e4d4f874a5bf.png 640w, /wp-content/uploads/2017/11/2e7eae09dfbb3af35018e4d4f874a5bf-300x169.png 300w, /wp-content/uploads/2017/11/2e7eae09dfbb3af35018e4d4f874a5bf-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> うーん、こういうの実装するんだったら、ぼくだったらどうするかなあ。ナビゲーションメニューみたいなものと捉えて、リストと<code>a</code>要素とかでやるかもしれません。</p>

<p><b class="speaker ihara">伊原:</b> それも悪くないのですが、このメニューって、どれかが選択中の場合は他のメニューを選択できませんよね。それってどうします？</p>

<p><b class="speaker siraisi">白石:</b> …JavaScriptのお世話にならざるを得ないかもしれません。</p>

<p><b class="speaker ihara">伊原:</b> そう、でも、標準のHTMLには、そういう「排他的」な選択を行うためのフォーム要素があります。</p>

<p><b class="speaker siraisi">白石:</b> …ラジオボタン、ですか？</p>

<p><b class="speaker ihara">伊原:</b> そのとおりです！</p>

<p>このデザインだけからだと、見た目はラジオボタンとは似ても似つきませんが、ここではラジオボタンを使うことにします。マークアップの段階では、<strong>見た目ではなく機能に沿ってマークアップ</strong>するのが重要ですから。</p>

<h2>ラジオボタンのスタイリング…やりにくい！どうする？</h2>

<p><b class="speaker siraisi">白石:</b> でも、ラジオボタンは「◎」みたいな余計なUIがくっついてきちゃいますよね？しかもあれがブラウザごとに異なる上、どのブラウザのデザインもあんまりカッコよくない(笑)。</p>

<p><b class="speaker ihara">伊原:</b> そうなんです。ラジオボタンってスタイリングしにくいので評判が良くないですよね(笑)。だから、結局他の要素を使っちゃう…なんてことも起きちゃうんですが、そこは工夫次第です。</p>

<p>ここでは<code>label</code>要素をうまく使って、目標とするデザインを実現しましょう。<code>label</code>要素は、それ自身をクリックすることで、対象となるラジオボタンやチェックボックスの状態を変更できますよね。</p>

<p><b class="speaker siraisi">白石:</b> ああ、なるほど！<strong><code>label</code>はクリッカブルな状態で表示しておいて、ラジオボタン本体は隠しちゃえばいい</strong>んだ。</p>

<p><b class="speaker ihara">伊原:</b> そうです。<code>label</code>さえあればラジオボタンのクリックは可能ですので、実際のラジオボタンは隠しちゃってもいいんですよね。ラジオボタンのフォーカス状態やチェック状態はCSSの擬似クラスで指定できますので、CSSだけで表示の切り替えが可能です。</p>

<p>例えばこんな感じになります。</p>

<p></p><pre class="crayon-plain-tag">&lt;input type="radio" name="sort-method" id="most-recent" checked /&gt;
&lt;label for="most-recent"&gt;新着順&lt;/label&gt;

&lt;input type="radio" name="sort-method" id="most-popular" checked /&gt;
&lt;label for="most-popular"&gt;人気順&lt;/label&gt;
...(略)...</pre><p></p>

<p></p><pre class="crayon-plain-tag">[type="radio"] + label {
  cursor: pointer;
  /* その他、基本のスタイル */
}
[type="radio"]:focus + label {
  /* フォーカス時のスタイル */
}
[type="radio"]:checked + label {
  /* 選択時のスタイル */
}
/* ラジオボタンを見えなくする */
.sorter [type="radio"] {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding:0 !important;
  border:0 !important;
  overflow: hidden !important;
  clip: rect(1px, 1px, 1px, 1px);
}</pre><p></p>

<p><b class="speaker siraisi">白石:</b> なるほど、これならHTMLのセマンティクスもわかりやすいし、JavaScriptもいらない。素晴らしい。</p>

<p><b class="speaker ihara">伊原:</b> ちなみに、<strong>このCSSの!important連打は「とにかく扱いづらいラジオボタンを消し去ってやりたい」という原著者のジョークなので、真似しないでください(笑)</strong>。</p>

<h2>無限スクロールはやっぱり×？「もっと読む」はどう実装するか</h2>

<p><b class="speaker ihara">伊原:</b> 最後に、検索結果が複数ページに渡る場合、どういう風なUXが望ましいかを考えてみたいと思います。昔よく使われていたのはページングですが、今は無限スクロールを採用するサイトも多いですね。</p>

<p><b class="speaker siraisi">白石:</b> はい、ぼくも自社で運営している<a href="http://techfeed.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">TechFeed</a>というアプリで無限スクロールを採用しています。</p>

<p><b class="speaker ihara">伊原:</b> ただ、<strong>アクセシビリティ的には無限スクロールは使わないほうが無難です</strong>。</p>

<p><b class="speaker siraisi">白石:</b> えっ！いろんなサイトが採用しているし、使いやすいとも思うんですが…</p>

<p><b class="speaker ihara">伊原:</b> 理由はいくつかあります。</p>

<p>まず、スクロールという操作が読み込みを誘発することが、ユーザーにとって望ましいことなのかどうか。ユーザーは次のページ読み込みを望んでいないかもしれないですよね。</p>

<p>あと、スクロールバーを使っているユーザーは、新たなページが読み込まれた瞬間スクロールバーが勝手に上下するので、混乱します。</p>

<p>最後に、ページのフッターにたどり着けないことがあります。フッターに要素を置いているにもかかわらず、無限スクロールがあるものだから、フッターに触りたくとも触れない…という事態が起こりうるのです。</p>

<p><b class="speaker siraisi">白石:</b> ふむ、理由はわかります。では、代わりにどうデザインすべきだと思いますか？</p>

<p><b class="speaker ihara">伊原:</b> ページ読み込みをユーザーが制御できればいいので、「もっと読む」ボタンを明示的に設置するというのは一つの解決策ですね。</p>

<p><img src="/wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-640x360.png" alt="" width="640" height="360" class="aligncenter size-large wp-image-24674" srcset="/wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-640x360.png 640w, /wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-300x169.png 300w, /wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-768x432.png 768w, /wp-content/uploads/2017/11/453e359d88233dbe55ab3a7573aa8d47-207x116.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> でも、いちいちそのボタンを押さなくちゃならないというのも結構面倒な気がします…。あと、サービス事業者側としては、無限スクロールでどんどん下に読んでいってもらうことで、ユーザーの滞留時間を伸ばしたいという気持ちもあると思うんですよね。</p>

<p><b class="speaker ihara">伊原:</b> この本では、ユーザーが「もっと読む」ボタンをよくクリックするようなら、その時に改めて「続きを自動的に読み込むか」を尋ねるようにするというやり方が紹介されています。その質問に「YES」と答えるのなら、そのユーザーにとっては、先ほど挙げられていた無限スクロールのデメリットが気にならないという証拠でもあると。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。確かにそのほうがユーザー本位でもありますね。</p>

<p><b class="speaker ota">太田:</b> あとこういう動的にリストを追加する場合、アクセシビリティの観点から一点注意点があります。</p>

<p>読み込みが完了したら、<strong>新しく読み込んだデータの先頭にフォーカスを移す</strong>ことです。そうしないと、スクリーンリーダーのユーザーが、次にどこに行けばいいかわからなくなってしまいますから。</p>

<p>そのために、新たに読み込んだデータの先頭に<code>tabindex="-1"</code>を指定しつつ、JavaScriptでフォーカスを与えます。</p>

<p></p><pre class="crayon-plain-tag">...
&lt;li&gt;
  &lt;!-- tabindexを指定して、タイトルをフォーカス可能にする --&gt;
  &lt;h3 tabindex="-1"&gt;
    ガソリンスタンドにたたずむ裸の男&lt;a href="/artist/kenny-mulbarton"&gt;by &lt;cite&gt;ケニー・マルバートン&lt;/cite&gt;&lt;/a&gt;
  &lt;/h3&gt;
  ...
&lt;/li&gt;
&lt;li&gt;&lt;!-- 新たに表示された商品の2番目 --&gt;&lt;/li&gt;
...</pre><p></p>

<p><b class="speaker siraisi">白石:</b> おお、こういう配慮は全く考えていませんでした。勉強になります。ちなみに、<code>tabindex</code>にマイナス値を指定することなんてできるんですね…知りませんでした。</p>

<p><b class="speaker ota">太田:</b> <code>tabindex</code>にマイナスを指定すると、ユーザーはそこにフォーカスを当てられないのですが、スクリプトでなら当てられるようになります。</p>

<h2>「アクセシビリティは0点か100点っていう話じゃない」</h2>

<p><b class="speaker siraisi">白石:</b> 本日は、いろんな例についてマークアップを考えられて面白かったです。</p>

<p>ただ最後に質問があります。</p>

<p>最近のWebアプリはどんどん動的になっていて、「UIのほとんどをJavaScriptで構築する」という場合も少なくありません。Single Page Applicationなんかはその最たるものだと思います。</p>

<p>こうしたサイトでも、アクセシビリティを担保することは可能なんでしょうか？相当の工数をかけないと難しいんじゃないかという気がしているのですが。</p>

<p><b class="speaker ihara">伊原:</b> 確かに、<strong>SPAのアクセシビリティ</strong>は面白いテーマです。ただ、SPAだからアクセシビリティの担保が難しいということはないと思います。</p>

<p>というのも、<strong>Google DocsやGoogle SlidesはWAI-ARIAにかなり対応していて、コンテンツの読み上げに対応している</strong>んですよ。</p>

<p><img src="/wp-content/uploads/2017/11/Google-Slides-640x377.png" alt="" width="640" height="377" class="aligncenter size-large wp-image-24672" srcset="/wp-content/uploads/2017/11/Google-Slides-640x377.png 640w, /wp-content/uploads/2017/11/Google-Slides-300x177.png 300w, /wp-content/uploads/2017/11/Google-Slides-207x122.png 207w, /wp-content/uploads/2017/11/Google-Slides.png 724w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> え、そうなんですか！それらのアプリ、SPAの代表格みたいなもんだと思ってました…。<strong>「SPAはスクリーンリーダーになじまないんじゃないか」なんて思ってましたが、それは単なる思い込み</strong>ですね。</p>

<p><b class="speaker ihara">伊原:</b> <strong>どんなサイトでもまずは一回、スクリーンリーダーで読み上げを行ってみる</strong>ことをお勧めします。SPAであっても、意外なほどスクリーンリーダーが綺麗に読み上げてくれることもありますので。</p>

<p><b class="speaker ota">太田:</b> 私はいつも言っているのですが、<strong>アクセシビリティって0点か100点かだけではない</strong>んです。全くアクセスできないサイトもなければ、全世界のすべての人がパーフェクトにアクセスできるサイトもありません。全てのサイトがその中間のどこかに位置していて、少しでもよくしていこうという考え方が大事だと思います。</p>

<p><b class="speaker ihara">伊原:</b> 「アクセシブルかどうか」はちょっとした改善で大きく変わったりもするものです。</p>

<p>例えば先日、とあるサイトをスクリーンリーダーで読み上げてみたのですが、ほとんど問題なく使える。ただ一点、そのページで一番重要なラベルだけ読み上げてもらえないんです。こういう点を改善するだけで、アクセシビリティはぐっと向上する。</p>

<p>なので、まずはアクセシビリティ上の問題を特定し、問題の重要度を判断して、重要なところから対応していく…という現実的なアプローチが、アクセシビリティを向上させていく上では大事だと思っています。</p>

<p><b class="speaker siraisi">白石:</b> 本日は、いろんなお話を聞かせていただき、ありがとうございました。</p>

<p><DIV align=right>（写真提供：html5j [HTML5 Conference 2017事務局　写真撮影：刑部友康）</div></p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
		<item>
		<title>WebGLの現状と未来を、Grimoire.jsを生んだスーパークリエータに聞いてきた！</title>
		<link>/shumpei-shiraishi/24589/</link>
		<pubDate>Thu, 02 Nov 2017 01:00:22 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[Grimoire.js]]></category>
		<category><![CDATA[WebGL]]></category>

		<guid isPermaLink="false">/?p=24589</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (12)こんにちは、編集長の白石です。 この記事は、9月24日に開催されたHTML5 Conference 2017に登壇したエキスパートに、お話されたセッションの...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conf2017/" class="series-457" title="HTML5 Conference 2017特集" data-wpel-link="internal">HTML5 Conference 2017特集</a> (12)</div><p>こんにちは、編集長の白石です。</p>

<p>この記事は、9月24日に開催された<a href="http://events.html5j.org/conference/2017/9/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference 2017</a>に登壇したエキスパートに、お話されたセッションのトピックを中心に語っていただこうとういものです。セッションの内容をより深く理解する手助けになるだけでなく、本記事単体でも面白く読んでいただけることを目指しています。</p>

<p>今回お話を伺ったのは、東京理科大学4年の石井翔さんです。</p>

<p><img src="/wp-content/uploads/2017/10/42A5128.jpg" alt="" width="640" height="412" class="alignnone size-full wp-image-24605" srcset="/wp-content/uploads/2017/10/42A5128.jpg 640w, /wp-content/uploads/2017/10/42A5128-300x193.jpg 300w, /wp-content/uploads/2017/10/42A5128-207x133.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>石井さんのセッション「WebGLの今とこれから ~今のWeb開発で使うからこそ知っておきたい周辺技術~」に関するスライド資料は、こちらで公開されています。</p>

<p><a href="http://html5.grimoire.gl/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">スライド資料</a>
（注: 重いのとモバイルから見えないのはご容赦ください by 石井翔さん）</p>

<h2>WebGLの現状</h2>

<p><b class="speaker siraisi">白石:</b> 本日は取材をお受けいただいてありがとうございます！簡単に自己紹介をお願いします。</p>

<p><b class="speaker isii">石井:</b> 東京理科大学4年生の石井 翔です。昨年、私が進めている<a href="https://grimoire.gl/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Grimoire.js</a>（注: モバイルからだと多少レイアウトが崩れます by 石井翔さん）というプロジェクトが<a href="https://www.ipa.go.jp/jinzai/mitou/2016/20170530.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">未踏IT人材発掘・育成事業に採択され</a>、スーパークリエータに認定されました。</p>

<p><b class="speaker siraisi">白石:</b> Grimoire.jsはWebGLのライブラリですね。Grimoire.jsについてもあとでお聞かせ願いたいのですが、まずはWebGLの概要や現状についてお話いただけますか？</p>

<p><b class="speaker isii">石井:</b> WebGLは、一言で言えばWeb上で3Dコンテンツを扱うための技術です。2010年に仕様が策定されており、既に多くのブラウザで実装されている技術です。ブラウザ上でどの技術が使えるかを測定する<a href="https://caniuse.com/#feat=webgl" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Can I Use</a>での結果を見ても、92%以上のブラウザがサポートしていて、広く使える状態にあると言っていいでしょう。</p>

<p>ただこれは、WebGL 1.0の話です。<a href="https://caniuse.com/#feat=webgl2" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebGL 2.0はまだまだ</a>ですね。ChromeとFirefoxだけが対応しているという状態で、特にiOSで使えないのが厳しいです。「ブラウザを限定すれば使える」という状態です。</p>

<p><b class="speaker siraisi">白石:</b> WebGL 1.0と2.0って何が違うんですか？…ぼく、3Dプログラミングが全然わかってないので、理解できるか自信がないのですが(笑)</p>

<p><b class="speaker isii">石井:</b> 浮動小数点テクスチャなどがWebGL 2.0の主な機能ですが、3Dプログラミングの知識がない人に向けて話すのはちょっと難しいですね(笑)
とりあえず、ライブラリ作者なら知っておくべきですが、ライブラリのユーザーはそれほど気にする必要はないかと思います。
ライブラリ作者も、WebGL 2.0が使えない環境では1.0にフォールバックするように実装していることが多いでしょうし。</p>

<p><small>
（筆者注: WebGL 2.0の強化点については<a href="https://qiita.com/emadurandal/items/4c7bd2a26ef2d732d734" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Qiitaで良い記事を見つけました</a>。ぼくにはちんぷんかんぷんですが…）
</small></p>

<p><b class="speaker siraisi">白石:</b> なるほど、あまり気にしなくていいと(笑) 安心しました。</p>

<p><b class="speaker isii">石井:</b> 3Dをご存じない方にとって大事なのは、<strong>そもそもWebGLとはGPUを扱うための技術だ</strong>ということをしっかり理解しておくことです。</p>

<p>CPUは、CPUは複雑な処理を逐次的に処理することを得意としています。CPUの場合はコアの数が4とか8とかに限られていることが普通です。</p>

<p>一方GPUの場合は、「異なるデータに対して同じ処理を施す」のを並列で実行するのに特化しています。なのでGPUは、コアの数が1,000を超えることも普通です。
こうした特徴を持つGPUだからこそ、大量の頂点を移動する処理など、3Dプログラミングに必要とされる「単純な処理の並列実行」に向いているんです。</p>

<p><b class="speaker siraisi">白石:</b> こうした特徴は、最近だと機械学習の分野とかにも活かされているんですよね。単純なベクトル計算とかが多いから。</p>

<p><b class="speaker isii">石井:</b> そうです。で、WebGLってそもそもOpenGL（※）と同じなので、CGの取り扱いに関しては共通している部分がほとんどです。<strong>ただ、置かれている環境は、OpenGLネイティブのゲームやアプリとは随分違う</strong>。</p>

<p>一番違う点は、WebGLは必要とされるリソースが全部Web上にあって、ダウンロードが必要という点です。モデルデータの読み込みに時間がかかるんですよね。</p>

<p>だから今まではゲームなど、「読み込みに時間がかかりそうだ」とユーザーも了解しているコンテンツが多かったんです。でも、本来使うデータをしっかり選べば短いロード時間で使えるものも多いんですよ。シェーダーアートとか。</p>

<p><small>
※OpenGL（オープンジーエル、Open Graphics Library）は、クロノス・グループ (英: Khronos Group) が策定している、グラフィックスハードウェア向けの2次元/3次元コンピュータグラフィックスAPIである（<a href="https://ja.wikipedia.org/wiki/OpenGL" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Wikipediaより引用</a>）
</small></p>

<p><b class="speaker siraisi">白石:</b> 確かに、WebGLでできたゲームとか、読み込みに数分待たされるものもありましたね。</p>

<p><b class="speaker isii">石井:</b> はい。モデルデータが大きいと、それだけダウンロードやデータ読み込みに時間がかかってしまう。なので、<strong>そうしたWebGLの問題を解決すべく、CGの世界にも進化が起きようとしている</strong>んです。</p>

<p><img src="/wp-content/uploads/2017/10/42A5125.jpg" alt="" width="640" height="417" class="alignnone size-full wp-image-24608" srcset="/wp-content/uploads/2017/10/42A5125.jpg 640w, /wp-content/uploads/2017/10/42A5125-300x195.jpg 300w, /wp-content/uploads/2017/10/42A5125-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>ランタイム向け3Dデータフォーマット「glTF」</h2>

<p><b class="speaker siraisi">白石:</b> 具体的にはどのような進化ですか？</p>

<p><b class="speaker isii">石井:</b> 一つは<strong><a href="https://www.khronos.org/gltf" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">glTF</a> (GL Transmission Format) と言って、汎用的な3Dアセットフォーマット</strong>です。ツールに依存しない軽量フォーマットとして、Khronosが普及を進めています。</p>

<div id="attachment_24632" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/10/e1ac15f7811659bca0d029023946090c-640x334.png" alt="glTF" width="640" height="334" class="size-large wp-image-24632" srcset="/wp-content/uploads/2017/10/e1ac15f7811659bca0d029023946090c.png 640w, /wp-content/uploads/2017/10/e1ac15f7811659bca0d029023946090c-300x157.png 300w, /wp-content/uploads/2017/10/e1ac15f7811659bca0d029023946090c-207x108.png 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">glTF</p></div>

<p><b class="speaker siraisi">白石:</b> ツールに依存しない、というのはどういう意味ですか？</p>

<p><b class="speaker isii">石井:</b> 以前WebGL上でモデルファイルを扱う際には、MayaやBlenderといったツールのファイルをそのまま読み込んで利用することが一般的でした。これは言わば、<strong>「Photoshopのpsdファイルはあるけど、jpgやpngなどの汎用的な画像フォーマットがない」という状況</strong>です。</p>

<p><b class="speaker siraisi">白石:</b> そんな状況だったんですね…知りませんでした。ゲームやアプリとしてひとまとめにパッケージングしてしまうから、汎用フォーマットが必要とされなかったんでしょうか。</p>

<p><b class="speaker isii">石井:</b> 概ねそういうところです。そういう状況を変えようと、<a href="https://ja.wikipedia.org/wiki/COLLADA" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">COLLADA</a>という汎用フォーマットがKhronosによって提案され、一定程度普及はしています。</p>

<p>ただ、COLLADAファイルはCG編集ツール間でデータをやり取りするためのフォーマットとして設計されているため、WebGLアプリケーションが読み込んで利用するには、編集用のパラメーターなど不要な部分も多いんです。また、XML形式だというのも、ファイルサイズや解析速度の点で不利になります。</p>

<p>glTFは、COLLADAファイルから編集用のパラメータを取り除いて、JSON形式にしたものと言ってほぼ差し支えありません。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。ただ、そういうフォーマットって、普及させるのがなかなか大変な気もしますが、どうなんでしょう？</p>

<p><b class="speaker isii">石井:</b> glTFは既に様々なライブラリにもサポートされていますし、普及は中々順調と言えると思います（参考: <a href="https://github.com/cx20/gltf-test" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">glTFのライブラリサポート状況</a>）。</p>

<p><strong>glTFの面白いところは、大手ベンダーの採用意欲が高い</strong>というところです。MicrosoftやAutodeskという大手ベンダーが乗っかってきているんですよ。
Khronos自身WebGLの仕様策定元なので、この分野で発言力が強いこともあります。また、最近では<a href="https://www.apple.com/jp/apple-watch-series-3/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Apple Watchのページ</a>でglTFが使われてたりもします。</p>

<p><b class="speaker siraisi">白石:</b> Apple Watchの公式サイトでもですか！それはかなりの人がアクセスしたでしょうね。確かに、これ単なる画像じゃない。スクロールと共に水滴が別々の動きをしてる…！（重いけど）</p>

<div id="attachment_24625" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/10/bf93ab1915cccd50fb572e6bd170ab1a-640x395.png" alt="Apple Watch Series 3のサイト" width="640" height="395" class="size-large wp-image-24625" srcset="/wp-content/uploads/2017/10/bf93ab1915cccd50fb572e6bd170ab1a.png 640w, /wp-content/uploads/2017/10/bf93ab1915cccd50fb572e6bd170ab1a-300x185.png 300w, /wp-content/uploads/2017/10/bf93ab1915cccd50fb572e6bd170ab1a-207x128.png 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">Apple Watch Series 3のサイト</p></div>

<p><b class="speaker isii">石井:</b> glTFは「オーディオにおけるMP3, ビデオにおけるH.264、画像におけるJPEG」といったように、「3DといえばglTF」となることを目指しているとのことで、普及にかけるKhronosの意気込みも並々ならぬものがあります。
<img src="https://www.khronos.org/assets/uploads/apis/2016-gltf-jpeg-of-3d.jpg" alt="" /></p>

<h2>頂点データ専用の圧縮形式「draco」</h2>

<p><b class="speaker isii">石井:</b> もう一つ注目の技術としては、Googleがオープンソースで開発している<a href="https://github.com/google/draco" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">draco</a>という圧縮形式です。頂点データを効率よく圧縮する技術で、元々の頂点データのサイズに比べて4倍から16倍の圧縮率を誇ります。</p>

<p><img src="/wp-content/uploads/2017/10/ea3f6e4f266b99b2233c19fe0d906450-640x338.png" alt="" width="640" height="338" class="aligncenter size-large wp-image-24626" srcset="/wp-content/uploads/2017/10/ea3f6e4f266b99b2233c19fe0d906450.png 640w, /wp-content/uploads/2017/10/ea3f6e4f266b99b2233c19fe0d906450-300x158.png 300w, /wp-content/uploads/2017/10/ea3f6e4f266b99b2233c19fe0d906450-207x109.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> 先ほどのglTFにしか使えないんですか？</p>

<p><b class="speaker isii">石井:</b> いえ、汎用的なポリゴンデータ形式（.ply）に対応しているので、元のファイルフォーマットは選びません。</p>

<p><b class="speaker siraisi">白石:</b> ブラウザによる対応も必要なんですか？</p>

<p><b class="speaker isii">石井:</b> いえ、ブラウザがネイティブ対応するというものでもないんです。<strong>dracoによって圧縮されたポリゴンデータは、JavaScriptでデコードすることができます</strong>。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、アプリケーションが自前で圧縮データを展開するんですね。でもそれだと、デコード処理にかかる時間がちょっと心配です。</p>

<p><b class="speaker isii">石井:</b> WebAssemblyでできたデコーダーもあるし、Web Workersで展開すればUI処理を阻害することもないので、そこはあまり問題ないと思いますよ。使うブラウザを選ぶということもありませんし、Three.jsのようなライブラリに任せてしまえば、アプリケーションはデコードについて意識する必要もありません。</p>

<p><b class="speaker siraisi">白石:</b> ほかには、Webだと画像のサイズを結構気にしたりしますが、CGの世界ではどうなんでしょう？</p>

<p><b class="speaker isii">石井:</b> CGだと、テクスチャ画像のサイズを削減するという話になりますね。ただ、単に画像のファイルサイズを小さくするだけでは片手落ちなんです。
いくら元画像のファイルサイズを小さくしても、GPUに乗るときにはフルサイズにデコードされてしまうので、メモリ使用量などにすごく影響するんですね。</p>

<p>なので、GPUが直接扱えるテクスチャ圧縮形式というものがありまして、それらを利用すると、GPU上でも圧縮した状態で画像を扱うことができます。DirectXだとS3TCという形式、iOSだとPowerVR Texture Compression (PVRTC) というように、ベンダーごとに異なってくるんですが。</p>

<p><b class="speaker siraisi">白石:</b> ベンダーごとに異なるんだと、取り扱いが面倒ですね。</p>

<p><b class="speaker isii">石井:</b> はい、なのでこういうフォーマット変換はWebpackなどで自動化されるべきだと思います。このように、今まではエンジンが自動的に行なってきたことも、WebGLの場合はプログラマーが自分で意識しなくてはなりません。</p>

<p><b class="speaker siraisi">白石:</b> まとめると、3DをWeb上で行うためにはいろいろな課題があって、それが徐々に解決されつつあるということですね。汎用モデルフォーマットが普及しつつあり、頂点データの圧縮ツールも登場した。そして、テクスチャ圧縮も自動化されるだろうと。</p>

<p><b class="speaker isii">石井:</b> そうです。そもそもWebは、多様なデバイスがネットワークで繋がれていることが前提です。そういうユビキタスな環境で、3Dが自由に表現できる世界に向けて、今まさに具体的で重要な進化が起こっているということです。</p>

<p><img src="/wp-content/uploads/2017/10/42A4970.jpg" alt="" width="640" height="399" class="alignnone size-full wp-image-24613" srcset="/wp-content/uploads/2017/10/42A4970.jpg 640w, /wp-content/uploads/2017/10/42A4970-300x187.jpg 300w, /wp-content/uploads/2017/10/42A4970-207x129.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>WebGLの未来</h2>

<p><b class="speaker siraisi">白石:</b> こうした動きを踏まえて、WebGLの未来はどうなると思いますか？</p>

<p><b class="speaker isii">石井:</b> 今のコンピューターの世界は、やはり2Dを前提としているのは間違いありません。3Dが利用されるシーンは、ゲームなど、コンピューティングのごく一部に限られていました。マテリアルデザインなども、3Dの要素をうまく取り入れてはいますが、前提は2Dです。</p>

<p>ただ、今、GoogleやApple、Microsoftなどの強力なベンダーたちが、こぞってARやMRに力を入れています。このまま進めば、映画館や不動産屋さんとか、あらゆるお店の軒先にARのオブジェクトが浮いている…という世界は普通に来るんじゃないかと思っているんです。3Dがより身近になる世界です。</p>

<p>ただ、そういうのを見るために、<strong>わざわざアプリをインストールするのは面倒</strong>ですよね。近い将来、そういう面倒くささが、AR/MRの普及を妨げる大きな一因になってくるんじゃないかと思うんです。</p>

<p>しかしWebGLがそういう状況を打開できるんじゃないか、と期待しています。WebGLはWebブラウザさえあれば動きます。PCでもスマホでも動く。アプリのインストールが必要ないし、しかも安全なサンドボックス上で動きます。</p>

<p><b class="speaker siraisi">白石:</b> 確かに！もしかすると、ビーコン技術との組み合わせとか（※）で、アプリのインストールを必要とせず、気軽にバンバンARコンテンツを見るような時代が来るかもしれませんね。</p>

<p><small>
※Webとビーコン技術との組み合わせとして、<a href="https://developers.google.com/beacons/overview" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Eddystone</a>という仕組みがGoogleから考案されている
</small></p>

<p><b class="speaker isii">石井:</b> 実際、Googleが<a href="https://github.com/google-ar/WebARonTango" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebAR</a>という仕様を作ったりもしていますし、ARには各社力を入れているので、Webでも早晩ARが使えるようになるだろうと思います。</p>

<p><b class="speaker siraisi">白石:</b> でも実際、要素技術が揃っているだけでは世の中変わらない…という現実もあるかと思います。WebGLも、実際には随分前から使えるようになっていたわけですし。こういう「要素技術が揃っているだけでは越えられない壁」は、どうやったら超えられると思いますか？</p>

<p><b class="speaker isii">石井:</b> 難しい問題ですが、一つは3Dコンテンツの制作コストが高いというのも、普及を妨げる要因にはなるのかなと思います。ただそれは、「人が作る」ことを前提とするからコストが高くつくんだと思うんですよね。</p>

<p>そういう点では、2Dに関しては既に<a href="https://paintschainer.preferred.tech/index_ja.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PaintsChainer</a>（AI技術を使い、線画を自動で着色するサービス）や<a href="http://make.girls.moe/#/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">MakeGirlsMoe</a>（AIで自動的に萌えキャラを作成するサービス）のようなサービスが出てきています。同様に、自動で3Dコンテンツを生成するようなサービスも近いうちに登場して、コンテンツの制作コストが劇的に下がるんじゃないでしょうか。</p>

<p><b class="speaker siraisi">白石:</b> <strong>AIサービスでコンテンツの制作コストが激減する</strong>というのは面白い発想ですね〜</p>

<p><b class="speaker isii">石井:</b> <a href="https://www.adobe.com/jp/sensei.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Adobe Sensei</a>も最近話題になっていますし、デザインの一部をAIに任せるというトレンドが来つつあるのは確実かなと思いますね。</p>

<h2>Grimoire.jsは、WebGLをWebエンジニアにとっての「筆」にする</h2>

<p><b class="speaker siraisi">白石:</b> では最後に、開発を進めていらっしゃる<a href="https://grimoire.gl/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Grimoire.js</a>についても、簡単にご紹介頂けますでしょうか？Three.jsなどのライブラリとは何が違うんでしょう？</p>

<p><img src="/wp-content/uploads/2017/10/grimoire-logo-640x172.png" alt="" width="640" height="172" class="aligncenter size-large wp-image-24627" srcset="/wp-content/uploads/2017/10/grimoire-logo.png 640w, /wp-content/uploads/2017/10/grimoire-logo-300x81.png 300w, /wp-content/uploads/2017/10/grimoire-logo-207x56.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker isii">石井:</b> Grimoire.jsはWeb開発の中でWebGLを扱うためのフレームワークです。<a href="http://threejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Three.js</a>や<a href="http://www.babylonjs.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Babylon.js</a>は、発想がCG中心なんですよね。画面全体をCGで構築するようなコンテンツにはいいのですが、Webコンテンツと混在させて、相互がやり取りするようなプログラムを作るには適していないんです。<strong>CGとWebには大きな隔たりがある</strong>。それに決められた構造を両者に与えて橋をかける必要があった。</p>

<p>この隔たりは、プログラミングスタイルにも大きく表れてきます。</p>

<p>CGの場合は、フレームごとにグラフィックを変更させていく、いわば<strong>フレーム指向</strong>です。<br />
一方でWebの場合は、イベントに応じて処理を行うのが普通ですよね。いわば<strong>イベント指向</strong>です。<br />
こうした隔たりがあるせいで、CG側とWeb側が、お互いにどうデータを受け渡しすればいいか、正解がないというのが今の状況です。</p>

<p>Grimoire.jsは、CG側とWeb側の、2つのAPIを提供することで、両者がシームレスに同居するようなアプリケーションを簡単に作ることができるように設計されています。</p>

<p><b class="speaker siraisi">白石:</b> 具体的にはどのようなコードになるんでしょう？</p>

<p><b class="speaker isii">石井:</b> Grimoire.jsは、GOMLという専用のマークアップ言語でCGを記述することができます。そして、GOMLの要素を変更することで、簡単にCGを変更できるんです。例えば、立方体にテクスチャを貼り付けて、自動的に回転するようなCGは以下のようなマークアップで簡単に実現できます。</p>

<p><img src="/wp-content/uploads/2017/10/cube-640x541.png" alt="" width="640" height="541" class="aligncenter size-large wp-image-24634" srcset="/wp-content/uploads/2017/10/cube.png 640w, /wp-content/uploads/2017/10/cube-300x254.png 300w, /wp-content/uploads/2017/10/cube-207x175.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p></p><pre class="crayon-plain-tag">&lt;goml&gt;
  &lt;scene&gt;
    &lt;camera&gt;&lt;/camera&gt;
    &lt;mesh texture="logo.png" geometry="cube"&gt;
      &lt;mesh.components&gt;
        &lt;Rotate speed="1,1,1" /&gt;
      &lt;/mesh.components&gt;
    &lt;/mesh&gt;
  &lt;/scene&gt;
&lt;/goml&gt;</pre><p></p>

<p>そして例えば、マウスが重なった時だけこの立方体が2倍の大きさになる…という処理は、以下のようなJavaScriptで実現できます。</p>

<p></p><pre class="crayon-plain-tag">gr(function() {
  var mesh = gr('#simple .canvas')('mesh')
  mesh.on('mouseenter', function () {
    mesh.setAttribute('scale', '2.0')
  })
  mesh.on('mouseleave', function () {
    mesh.setAttribute('scale', '1.0')
  })
})</pre><p></p>

<p><b class="speaker siraisi">白石:</b> おお、簡単ですね！これならWebエンジニアでも簡単に扱えそうです。</p>

<p><b class="speaker isii">石井:</b> はい、そうなんです。イベントを受けてパラメーターを書き換えるという流れは、今のWebアプリケーションフレームワークなどの潮流を見れば古い感じを受けるかもしれませんが、結局のところこれだけあればいくらでもラップすることができます。そのようなモダンなWeb開発の環境でもシームレスに環境を選ばず導入できるんです。Grimoire.jsの目標は「<strong>WebGLを、Webエンジニアにとっての『筆』にする</strong>」ことなんです。</p>

<p>一方で、CG側にはUnityに近いようなインターフェースのAPIが提供されています。TypeScriptで記述できるビルド環境が提供されているので、Webに疎いCGサイドでもすぐにWebエンジニアの使う筆を作ることができます。再利用可能で、最終的なパラメーター調整などをWeb側が簡単に行えるわけです。実際、そのためにChrome拡張でWebGLの空間をそのまま操作できる<a href="https://chrome.google.com/webstore/detail/grimoirejs-devtool-20/clioppdjbagckdddfdhpollnkbpepkhn" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">インスペクタ</a>も提供しています。</p>

<div id="attachment_24628" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/10/inspector-640x257.png" alt="Grimoire.js Inspector" width="640" height="257" class="size-large wp-image-24628" srcset="/wp-content/uploads/2017/10/inspector.png 640w, /wp-content/uploads/2017/10/inspector-300x120.png 300w, /wp-content/uploads/2017/10/inspector-207x83.png 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">Grimoire.js Inspector</p></div>

<p>WebエンジニアにとってCGをより身近にすること、そしてCGがより一般的な世界にすることを目指しています。</p>

<p><b class="speaker siraisi">白石:</b> とても期待しています！本日はWebGLの基本的な事柄から<a href="https://grimoire.gl/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Grimoire.js</a>まで、いろいろ教えていただいてありがとうございました。</p>

<p><b class="speaker isii">石井:</b> 1.0リリースを年内に行いたいと思っています。興味がある方がいたら公式サイトから開発チームのSlackなどに入ると新しい様々な情報が拾えるかと思います。またいくつかの例も載っているのでご覧いただけると幸いです。</p>

<p><DIV align=right>（撮影：刑部友康 写真提供：html5j HTML5 Conference 2017事務局）</div></p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
		<item>
		<title>フォント素人のWebエンジニアが、「フォントおじさん」に聞いてみた！Webフォントの最近の事情とか</title>
		<link>/shumpei-shiraishi/24207/</link>
		<pubDate>Thu, 14 Sep 2017 01:12:30 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[Webフォント]]></category>
		<category><![CDATA[ソフトバンク・テクノロジー]]></category>

		<guid isPermaLink="false">/?p=24207</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (4)こんにちは、編集長の白石です。 この記事は、9月24日に開催されるHTML5 Conference 2017に登壇するエキスパートに、予定しているセッションの...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conf2017/" class="series-457" title="HTML5 Conference 2017特集" data-wpel-link="internal">HTML5 Conference 2017特集</a> (4)</div><p>こんにちは、編集長の白石です。</p>

<p>この記事は、9月24日に開催される<a href="http://events.html5j.org/conference/2017/9/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference 2017</a>に登壇するエキスパートに、予定しているセッションのトピックを中心に、いろいろ伺ったものです。セッションの内容をより深く理解する手助けになるだけでなく、本記事単体でも面白く読んでいただけることを目指しています。</p>

<p>今回お話を伺ったのは、ソフトバンク・テクノロジーの関口浩之さんです。</p>

<p><img src="/wp-content/uploads/2017/09/DSC04691.jpg" alt="" width="640" height="410" class="alignnone size-full wp-image-24220" srcset="/wp-content/uploads/2017/09/DSC04691.jpg 640w, /wp-content/uploads/2017/09/DSC04691-300x192.jpg 300w, /wp-content/uploads/2017/09/DSC04691-207x133.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>関口さんのセッションは「<a href="http://events.html5j.org/conference/2017/9/session/#e1" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webフォント最新事情2017～導入事例も一挙紹介～</a>」（ルームE 11:20-12:00）です。（現在<a href="https://html5j.connpass.com/event/64992/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference</a>は定員オーバーの状態ですが、無料イベントということもあってキャンセルも多めに出るらしいので、あきらめずにキャンセル待ちすることをお勧めします！）</p>

<h2>「フォントおじさん」誕生まで</h2>

<p><b class="speaker siraisi">白石:</b> こんにちは。関口さんとは、いつかゆっくりお話してみたいと思っていたので、インタビューできて大変嬉しいです。</p>

<p><b class="speaker sekiguchi">関口:</b> こちらこそ。</p>

<p><b class="speaker siraisi">白石:</b> 関口さんは、<a href="https://webfont.fontplus.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">FONTPLUS</a>というサービスに携わられているんですよね。ソフトバンクでYahoo! JAPANの立ち上げなどに関わっていた関口さんが、そもそもどういう経緯でフォントの世界に入られたのですか？</p>

<p><b class="speaker sekiguchi">関口:</b> FONTPLUS以前は、仕事上でフォントにそれほど深く関わってきたわけじゃないんです。ただ、子供の時からアナログレコードのジャケットとかが大好きで。これとか、中学生のときにはじめて買ったEPレコードなんですが、<strong>ロゴが素敵だったので、トレーシングペーパーでロゴをトレースしたりしてました</strong>。カッコよくないですか？</p>

<p><img src="/wp-content/uploads/2017/09/DSC04635.jpg" alt="" width="640" height="414" class="alignnone size-full wp-image-24221" srcset="/wp-content/uploads/2017/09/DSC04635.jpg 640w, /wp-content/uploads/2017/09/DSC04635-300x194.jpg 300w, /wp-content/uploads/2017/09/DSC04635-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> ほんとだ、カッコいい！手書きのレタリングがなんとも言えない味を出していますね。</p>

<p><b class="speaker sekiguchi">関口:</b> 他にも、<a href="https://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%BC%E3%83%AD%E3%83%BC%E7%9C%8B%E6%9D%BF" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ホーロー看板</a>って知ってますか？</p>

<p><b class="speaker siraisi">白石:</b> え、知らないです。なんですかそれ？</p>

<p><b class="speaker sekiguchi">関口:</b> 昔よく見かけた看板で、大好きなんです。見てくださいこれ。レトロという意味でのカッコよさ以上に、デザインとしてカッコいい。</p>

<p><img src="/wp-content/uploads/2017/09/sekigt-1.jpg" alt="" width="640" height="500" class="alignnone size-full wp-image-24222" srcset="/wp-content/uploads/2017/09/sekigt-1.jpg 640w, /wp-content/uploads/2017/09/sekigt-1-300x234.jpg 300w, /wp-content/uploads/2017/09/sekigt-1-207x162.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> たしかに、言われてみるとすごくカッコいい気がしてきました…。</p>

<p><b class="speaker sekiguchi">関口:</b> こういうのが子供の頃から大好きだったので、元々フォントにハマる素養はあったんでしょうね。Webフォントの仕様が登場して盛り上がってきた2010年頃も、知り合いとよくフォントの話をしていたものです。</p>

<p>ただ、日本語のWebフォントはやはり難しいだろうなあ…というのが当時の雰囲気でした。なにせ何万文字もありますからね。フォントファイルのサイズだけでも、数MBになってしまう。</p>

<p><b class="speaker siraisi">白石:</b> はい、ぼくもWebフォントは文字数の少ない言語圏じゃないと無理だろうな、なんて思っていました。</p>

<p><b class="speaker sekiguchi">関口:</b> でも、そこからがうちら（ソフトバンクグループ）っぽいところです。「日本語Webフォント、やるか！」って話の流れになって、そのまま勢いでやることになったんです。<strong>飲み屋で</strong>。</p>

<p><b class="speaker siraisi">白石:</b> 飲み屋で(笑)。</p>

<p><b class="speaker sekiguchi">関口:</b> やるとなったらうちらは早いし、とことんです。「フォントメーカーを横断したWebフォントサービスを作りたい」という構想を練り、日本のフォントメーカーの皆さんにご協力をお願いしまくって、なんとかでき上がったのがFONTPLUSです。</p>

<p><img src="/wp-content/uploads/2017/09/DSC04632.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24223" srcset="/wp-content/uploads/2017/09/DSC04632.jpg 640w, /wp-content/uploads/2017/09/DSC04632-300x200.jpg 300w, /wp-content/uploads/2017/09/DSC04632-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>今ではFONTPLUSは、1,000書体近くを扱えるWebフォントサービスになりました。</p>

<p><b class="speaker siraisi">白石:</b> 1,000書体近く、ってすごいですね…！</p>

<p>ちなみにぼくはエンジニアなので知らないのですが、<strong>デザイナーさんって、それだけの数のフォントをだいたい覚えているものなんでしょうか？</strong></p>

<p><b class="speaker sekiguchi">関口:</b> DTPデザイナーさんやグラフィックデザイナーさんはかなり記憶してらっしゃると思います。でないと仕事になりませんから。Webデザイナーさんは、まだそのレベルまで仕事で必要とされてる段階には至ってない方も少なくないと思います。ただ、Webでよく見かけるフォントに関しては、かなり詳しくご存知ですよね。</p>

<p><b class="speaker siraisi">白石:</b> すごいなー！ぼくもスライドとか作る時、できればフォントにこだわりたいと思うのですが、元となる知識が少なすぎて、めちゃくちゃ時間かけた挙句に選べないんですよね。そのうち「こんなに時間かけてられない」って諦めて、一般的なフォントに落ち着いちゃう。</p>

<p><b class="speaker sekiguchi">関口:</b> そうですよね。適切なフォントを素早く選ぶ知識やセンスは、今後どんどん重要になっていくスキルだと思っています。<strong>人間って、何かを前にした瞬間に、実は0.1秒くらいで好きか嫌いかを決めちゃってる</strong>じゃないですか。</p>

<p><strong>その一瞬の判断に、フォントが及ぼしている影響ってすごく大きい</strong>と思うんです。例えば、「吾輩は猫である」をいろんなフォントで表示してみると、こんなに印象が違うんですよ。</p>

<p><img src="/wp-content/uploads/2017/09/sekigt-2.jpg" alt="" width="640" height="398" class="alignnone size-full wp-image-24225" srcset="/wp-content/uploads/2017/09/sekigt-2.jpg 640w, /wp-content/uploads/2017/09/sekigt-2-300x187.jpg 300w, /wp-content/uploads/2017/09/sekigt-2-207x129.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker sekiguchi">関口:</b> …とまあ、こんな感じで、今はフォント自体のことをお話することが多くなってきまして。
以前は「Webフォントおじさん」と呼ばれていたのが、最近では「フォントおじさん」と呼ばれるようになってきました(笑)</p>

<p><b class="speaker siraisi">白石:</b> いやー、ぴったりなあだ名ですね。こうしてお話ししててもフォント愛ビンビン感じますもんね(笑)</p>

<h2>Webフォントの導入例</h2>

<p><b class="speaker siraisi">白石:</b> HTML5 Conferenceのセッションでは「Webフォント最前線」というお話をされるとのことですね。</p>

<p><b class="speaker sekiguchi">関口:</b> はい、Webフォントを活用されている企業さんの事例や、縦書きCSSの事例、Webフォント界隈の最新事情などをお話しようと思っています。</p>

<p><b class="speaker siraisi">白石:</b> Webフォントを活用している企業さんの例ということですが、例えばどんなサイトが挙げられますか？</p>

<p><b class="speaker sekiguchi">関口:</b> そうですね、例えば<a href="https://www.kinugawakanaya.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">鬼怒川金谷ホテル</a>さんのサイトは、全面的にWebフォントを使ってらっしゃいます。
文字を表示するのにほとんど画像を使用していないので、テキストとして選択可能です。</p>

<p><b class="speaker siraisi">白石:</b> ほんとだ。普段見かけないような書体もあって「画像かな？」と思うようなところも、だいたいテキストですね。</p>

<p><b class="speaker sekiguchi">関口:</b> おかげで、拡大しても綺麗に表示されますしね。ここで使われているWebフォントは、上品さと伝統と感じさせる「筑紫明朝」という明朝体です。面白いのが、<strong>住所とか電話番号とかが選択可能なことを宿泊客の方に褒められたことがある</strong>そうです。
「住所を選んでコピーできるのがありがたかった」って(笑)。</p>

<p><img src="/wp-content/uploads/2017/09/56ebf9024cb66d50620d8f10b7f40338.png" alt="" width="594" height="326" class="aligncenter size-full wp-image-24230" srcset="/wp-content/uploads/2017/09/56ebf9024cb66d50620d8f10b7f40338.png 594w, /wp-content/uploads/2017/09/56ebf9024cb66d50620d8f10b7f40338-300x165.png 300w, /wp-content/uploads/2017/09/56ebf9024cb66d50620d8f10b7f40338-207x114.png 207w" sizes="(max-width: 594px) 100vw, 594px" /></p>

<p><b class="speaker siraisi">白石:</b> そんなところ、褒められることってあるんですね(笑)。</p>

<p><b class="speaker sekiguchi">関口:</b> ほんとに(笑) 。ほかに挙げられる事例としては、<a href="http://www.city.odawara.kanagawa.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">小田原市のHP</a>とかでしょうか。このサイトでは、「<a href="https://fontworks.co.jp/fontsearch/item?HummingStd-M&amp;word=%E6%96%87%E5%AD%97%E3%81%8C%E3%81%8A%E3%82%8A%E3%81%AA%E3%81%99%0A%E6%96%B0%E3%81%97%E3%81%84デザイン%E3%81%AE%E4%B8%96%E7%95%8C" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ハミング</a>」というフォントを活用しています。明朝体ほど装飾性は高くなく、まじめな印象を与えつつも、少し遊び心と柔らかさのあるフォントになってます。</p>

<p><img src="/wp-content/uploads/2017/09/6db3784fb642db2cc639aa15dab3e25a-640x391.png" alt="" width="640" height="391" class="aligncenter size-large wp-image-24212" srcset="/wp-content/uploads/2017/09/6db3784fb642db2cc639aa15dab3e25a.png 640w, /wp-content/uploads/2017/09/6db3784fb642db2cc639aa15dab3e25a-300x183.png 300w, /wp-content/uploads/2017/09/6db3784fb642db2cc639aa15dab3e25a-207x126.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> 確かに。絶妙なかわいらしさですね。</p>

<p><b class="speaker sekiguchi">関口:</b> このサイトは、徹底的にWebフォントとアクセシビリティにこだわった結果、サイトのほとんど全てがやはりテキストで構成されています。おかげで、<strong>Google翻訳でサイトのほぼ全体を多言語化できている</strong>んですよ。</p>

<p><img src="/wp-content/uploads/2017/09/dc803b793e5ea419e84dc49dd910a7b2.png" alt="" width="612" height="250" class="aligncenter size-large wp-image-24213" srcset="/wp-content/uploads/2017/09/dc803b793e5ea419e84dc49dd910a7b2.png 612w, /wp-content/uploads/2017/09/dc803b793e5ea419e84dc49dd910a7b2-300x123.png 300w, /wp-content/uploads/2017/09/dc803b793e5ea419e84dc49dd910a7b2-207x85.png 207w" sizes="(max-width: 612px) 100vw, 612px" /></p>

<p><b class="speaker siraisi">白石:</b> ほんとだ、エスペラント語なんてのもある。エスペラント語に翻訳できてしまった…！</p>

<p><img src="/wp-content/uploads/2017/09/244fa363f935c9608b2badb05efe46f7-640x366.png" alt="" width="640" height="366" class="aligncenter size-large wp-image-24214" srcset="/wp-content/uploads/2017/09/244fa363f935c9608b2badb05efe46f7.png 640w, /wp-content/uploads/2017/09/244fa363f935c9608b2badb05efe46f7-300x172.png 300w, /wp-content/uploads/2017/09/244fa363f935c9608b2badb05efe46f7-207x118.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker sekiguchi">関口:</b> 機械翻訳に頼っているので、完璧ではありませんが、かなりコストを抑えて多言語対応できています。観光の入り口になるサイトとしてはかなりのアドバンテージになりますよね。</p>

<p>それだけじゃなく、自治体のサイトとしてのアクセシビリティも担保できていますし、Webフォントを使用したおかげでサイト自体も美しい、素晴らしい例だと思います。</p>

<h2>Webフォントは遅い？ちらつく？</h2>

<p><b class="speaker siraisi">白石:</b> では、「Webフォントおじさん 兼 フォントおじさん」として、Webフォントの技術的な側面について今語るとすると、何がポイントになりますか？</p>

<p><b class="speaker sekiguchi">関口:</b> Webフォント自体は、技術としてはそれほど理解が難しいものではないので、ポイントとなる部分は絞られるかと思います。</p>

<p>まず、<strong>遅さやちらつき</strong>。Webフォントと聞くとやはりこうした印象を抱く人が沢山います。ただ、そこは現在だいぶ改善されつつある。</p>

<p>あとは<strong>文字詰め</strong>の問題ですね。Webフォントを使う大きな理由は、やはりテキストを美しく見せたいというところでしょう。そうなるとやはり文字詰めにもこだわりたいですよね。</p>

<p><b class="speaker siraisi">白石:</b> では一つ目の遅さ、ちらつきのお話からお聞きしていいですか？先程の小田原市のサイトを見ても、Webフォントの遅さやちらつきをほとんど感じませんでした。</p>

<p><b class="speaker sekiguchi">関口:</b> そうですよね。でも今は、FONTPLUSを初めとした配信側の努力もあって、<strong>Webフォントの表示はかなり高速化されている</strong>んです。</p>

<p><b class="speaker siraisi">白石:</b> 具体的にはどういうテクニックで高速化しているんでしょうか？</p>

<p><b class="speaker sekiguchi">関口:</b> まずはフォントのサブセット化をサービスとしてサポートしています。</p>

<p><b class="speaker siraisi">白石:</b> サブセット化というと、限られた文字のフォントのみ使うということですよね。サイトで使用されている文字のぶんだけダウンロードするということですか？</p>

<p><b class="speaker sekiguchi">関口:</b> はい。<strong>サイトで実際に使用している文字だけをJavaScriptで抽出し、そのグリフだけが入ったサブセットデータをダウンロードする</strong>んです。</p>

<p><b class="speaker siraisi">白石:</b> なるほど！DOMの読み込みが完了してから、JavaScriptでWebフォントの適用範囲内にある文字を抜き出すというわけですね。</p>

<p><img src="/wp-content/uploads/2017/09/DSC04597.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24226" srcset="/wp-content/uploads/2017/09/DSC04597.jpg 640w, /wp-content/uploads/2017/09/DSC04597-300x200.jpg 300w, /wp-content/uploads/2017/09/DSC04597-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker sekiguchi">関口:</b> そのとおりです。例えば、ぼくのブログページを例にとって説明しますが、Webフォントを適用している<code>body</code>要素に2,600文字あったとします。サブセットを取得する際、JavaScriptでユニークグリフ化（文字の名寄せ）を行った結果、このケースでは約400グリフになります。そして、CSSで記述されたfont-familyのサブセットデータを閲覧者のブラウザに適した形式で配信しているわけです。（筆者注: インタビュー中に見せていただいた例だとゴシック体400グリフで60kb以下でした）</p>

<p><b class="speaker siraisi">白石:</b> なるほど、そうやってデータ量を削減するんですね。</p>

<p><b class="speaker sekiguchi">関口:</b> FONTPLUSはサービス開始時の6年前から、サブセット配信は行っていました。この6年間、高速に表示できるよう、サーバー側の構成や処理も相当チューニングを繰り返し、改善してきたのです。</p>

<p><b class="speaker siraisi">白石:</b> ちらつきを抑えるのはどのように行っているんですか？</p>

<p><b class="speaker sekiguchi">関口:</b> FONTPLUSの場合は、Webフォントのダウンロードが完了するまで、JavaScriptでテキストを非表示にすることで対応しています。非表示にする範囲は、Webフォントの適用範囲に限ることも、サイト全体を非表示にすることもできます。</p>

<p>Webフォントがダウンロードされるまで、ブラウザがテキストをレンダリングする方法は、ブラウザによってまちまちなのですが、その差異を吸収しています。</p>

<p><b class="speaker siraisi">白石:</b> ちらつきを抑えるのにも、JavaScriptを駆使しているわけですね。</p>

<p><b class="speaker sekiguchi">関口:</b> と言っても、FONTPLUSをお使いのユーザーは、JavaScriptコードを書く必要はありません。
FONTPLUSのscriptタグで指定するURLに、<code>delay</code>っていうパラメーターを付けるだけです。<br>（<a href="http://fontplus.sakura.ne.jp/bbwebmarketing/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">参考</a>）。</p>

<p></p><pre class="crayon-plain-tag">&lt;script type=”text/javascript” src=”http://webfont.fontplus.jp/accessor/script/fontplus.js?xxxxx&amp;aa=1&amp;delay=1” charset=”utf-8”&gt;&lt;/script&gt;</pre><p></p>

<p><b class="speaker sekiguchi">関口:</b> このように、URLパラメーターで高度な処理をON/OFFできるのは、文字詰めの件でも同様の設計を行っています。</p>

<h2>文字詰めって…なに？</h2>

<p><b class="speaker siraisi">白石:</b> ポイントの二つ目、文字詰めですね。そもそもフォントの文字詰めって、よくわかっていないのですがどういうことなんでしょう？</p>

<p><b class="speaker sekiguchi">関口:</b> 特に、中黒（・）やかぎ括弧や丸括弧等の約物を含む文字列、および、拗音や促音といった小さい文字（ゃゅょっ）等を含む文字列を普通に表示すると、文字と文字の隙間が空いて見えてしまうんです。そうした隙間を詰めて表示するのが文字詰め。カーニングとも呼ばれます。</p>

<p><b class="speaker siraisi">白石:</b> お恥ずかしながら、全然知りませんでした。</p>

<p><b class="speaker sekiguchi">関口:</b> FONTPLUSでは、カーニングを有効にするため独自の対応を行っています。先ほどと同様に、<code>script</code>要素のURLにパラメータで<code>pm=1</code>と付けることで、プロポーショナルメトリクス情報を使って文字詰め配信をすることができます。プロポーショナルメトリクスというのは、文字間の最適な余白幅の情報のことで、フォントデータに組み込まれています（注: プロポーショナルメトリクス情報が入っていないフォントデータもあります）。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、でも、ページ全体で一括で文字詰めされちゃうと困る場合もあるんじゃないですか？</p>

<p><b class="speaker sekiguchi">関口:</b> その通りです。ちょうどそういう、「h1要素は文字詰めしたいけど、body要素は文字詰めしたくない」というようなご要望にお応えする機能も最近リリースしたんですよ。「ピンポイント文字詰め配信」と言って、<code>font-family</code> に{pm}セレクタを付けると、特定の要素のみを文字詰め配信できます。</p>

<p><b class="speaker siraisi">白石:</b> そんな機能もあるんですね！Webフォントサービスは、フォントの配信が主な機能だと思っていたので、思ったより機能が多くてびっくりです。</p>

<p><b class="speaker sekiguchi">関口:</b> そうですね、ブラウザ側で「CSS Font Module Level 3」の実装が進められているのと並行して、ちらつき対策や文字詰め対応などは、独自の対応も行っているという状態です。</p>

<p>他にも、ブラウザやOSごとに異なる細かい挙動を吸収したり、実装時に調整しやすいよう、リセットすることもできます。例えば、WindowsとmacOSのブラウザでは行の高さの解釈が異なるケースがあるのでそれを調整できたり、字の間の余白を削除して、文字間隔を <code>letter-spacing</code> で完全にコントロールできるようにする機能もあります。</p>

<p>こうした豊富な機能を使って頂けるかどうかは、デザイナーやマークアップエンジニアの皆様にお任せするしかありませんが、技術の選択肢がたくさんあることは重要だと思ってます。機能改善や新機能追加は今後も積極的に行っていきたいと考えていますので、ご要望やツッコミは常に大歓迎です。</p>

<h2>最後に書体選びについて</h2>

<p><b class="speaker siraisi">白石:</b> そろそろお時間ですね。「Webフォントおじさん」でもあり、「フォントおじさん」でもある関口さんに、最後の質問をお願いしたいのですが。先程も申し上げたように、<strong>フォントには個人的にこだわりたいと思いつつ、知識と検討する時間がなくて諦めてしまう</strong>んです。</p>

<p>ぼくを含め、そういう悩みを抱えている方々に向けて、何かアドバイスはありますか？</p>

<p><b class="speaker sekiguchi">関口:</b> そうですね、まず前提として、1,000種類近くあるフォントを把握するだけでも至難の業です。であれば、まずは人気のフォントをいくつか覚えるところから始めてはいかがでしょうか。
ちょっと今はデータが古い（2016年10月度）のですが、<a href="http://support.fontplus.jp/font-ranking/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">FONTPLUSではフォントの利用状況をランキングで発表してます</a>ので、上から20くらい眺めて特徴を把握するだけでもいいと思います。</p>

<p><b class="speaker siraisi">白石:</b> え、データが古いって…<strong>もしかしてこのランキング、関口さんが手で更新してたんですか？</strong></p>

<p><b class="speaker sekiguchi">関口:</b> そうですよ(笑) 自動化したいとは思っているんですが、中々手が回らなくて。最近忙しいので、つい更新が滞っちゃいました。</p>

<p><b class="speaker siraisi">白石:</b> なんというフォント愛…。頭が下がります。でも、フォントという「美しいもの」のために働けるって幸せですよね。今日の関口さんを見ていてそう思いました。本日は、フォントの素人にもわかりやすいお話、どうもありがとうございました！</p>

<p><img src="/wp-content/uploads/2017/09/DSC04677.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24227" srcset="/wp-content/uploads/2017/09/DSC04677.jpg 640w, /wp-content/uploads/2017/09/DSC04677-300x200.jpg 300w, /wp-content/uploads/2017/09/DSC04677-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
		<item>
		<title>「Web Componentsが来る！CSS設計はどうなる？」―CSSのエキスパートに聞いてみた！</title>
		<link>/shumpei-shiraishi/22820/</link>
		<pubDate>Mon, 17 Apr 2017 01:30:36 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[Bootstrap]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Compass]]></category>
		<category><![CDATA[WebComponents]]></category>

		<guid isPermaLink="false">/?p=22820</guid>
		<description><![CDATA[こんにちは、編集長の白石です。 Safari 10.1からCustom Elementsが使えるようになったり、Microsoft EdgeもWeb Componentsの実装を約束していたりと、Web Componen...]]></description>
				<content:encoded><![CDATA[<p>こんにちは、編集長の白石です。<br>
<a href="https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Articles/Safari_10_1.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Safari 10.1からCustom Elementsが使える</a>ようになったり、<a href="https://blogs.msdn.microsoft.com/msedgedev_japan/2016/04/19/microsoft-edge-and-web-components/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Microsoft EdgeもWeb Componentsの実装を約束していたり</a>と、Web Componentsの足音は刻一刻と迫ってきています。</p>

<p>そんな時代に、Web開発はどう変わるのか？まずはCSS設計というところに着目して聞いてみたいと思い、先日「Web Components時代のCSS設計」という座談会を開催し、エキスパートの方々にお話を伺ってみました。</p>

<p><img src="/wp-content/uploads/2017/04/DSC00139.jpg" alt="" width="640" height="405" class="alignnone size-full wp-image-22884" srcset="/wp-content/uploads/2017/04/DSC00139.jpg 640w, /wp-content/uploads/2017/04/DSC00139-300x190.jpg 300w, /wp-content/uploads/2017/04/DSC00139-207x131.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>ゲストのエキスパート紹介</h2>

<h3>高津戸 壮さん</h3>

<p><img src="/wp-content/uploads/2017/04/6ec41b91e4d4403fc55b20ee707032df.jpg" alt="" width="300" height="240" class="alignleft size-full wp-image-22890" srcset="/wp-content/uploads/2017/04/6ec41b91e4d4403fc55b20ee707032df.jpg 300w, /wp-content/uploads/2017/04/6ec41b91e4d4403fc55b20ee707032df-207x166.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /><strong>株式会社ピクセルグリッド フロントエンドエンジニア</strong><br><br><span style="font-size: 90%;">Web制作会社、フリーランスを経て、株式会社ピクセルグリッドに入社。スケーラビリティを考慮したHTMLテンプレート設計・実装、JavaScriptを使った込み入ったUIの設計・実装を得意分野とする。著書に『改訂版 Webデザイナーのための jQuery入門』がある。CSS Nite 2011ベストセッションにおいて、全170セッションの中から、ベスト10セッションに、CSS Nite 2013ベストセッションでは、全278セッション中、ベスト20セッションに選出。</span></p>

<p><br></p>

<h3>小原 司さん</h3>

<p><img src="/wp-content/uploads/2017/04/076096f5cfa6bb724d6363f2fd4e7000.jpg" alt="" width="300" height="240" class="alignleft size-full wp-image-22891" srcset="/wp-content/uploads/2017/04/076096f5cfa6bb724d6363f2fd4e7000.jpg 300w, /wp-content/uploads/2017/04/076096f5cfa6bb724d6363f2fd4e7000-207x166.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /><strong>株式会社ピクセルグリッド UIデザイナー</strong><br><br><span style="font-size: 90%;">デザイン事務所で広告デザインの基礎を学び、2000年に独立。2007年頃からWebデザインにも取り組み、クロスプラットフォームアプリのデザイン、画面設計、実装に携わる。現在はその媒体の特長を活かしたグラフィックデザインに励む。マンセル色相環とムーン＆スペンサー配色理論を採用した配色アプリ『HUE360』の開発を行っている。著書に『改訂版 Webデザイナーのための jQuery入門』、『ノンデザイナーズ・デザインブック[第4版]』。</span></p>

<p><br></p>

<h3>榊原 昌彦さん</h3>

<p><img src="/wp-content/uploads/2017/04/DSC00022.jpg" alt="" width="300" height="240" class="alignleft size-full wp-image-22892" srcset="/wp-content/uploads/2017/04/DSC00022.jpg 300w, /wp-content/uploads/2017/04/DSC00022-207x166.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /><strong><strong>一般社団法人リレーションデザイン研究所 代表理事</strong></strong><br><br><span style="font-size: 90%;">大学院卒業後、一般社団法人リレーションデザイン研究所立ち上げ。その後、まちづくりの産業化を目指す一般社団法人エリア・イノベーション・アライアンスにも参画し、全国の様々なまちづくりの現場に携わる。事業の構造的転換を図り、Webを導入。事業で用いるWebアプリやシステムの開発を行っている。関西フロントエンドユーザーズグループを中心に活動し、CodeIgniter、Ionic2、Onsen UI 2についてもSlackやTwitterを通じて関わる。</span></p>

<p><br></p>

<h2>CSS設計の遍歴を探る…3年前、どうしてましたか？</h2>

<p><strong>白石</strong>: 今回の座談会は「Web Components時代のCSS設計」と題し、Web Componentsが一般的に普及した未来の話を主眼として、そこに至るまでの流れも重視したいと思っています。</p>

<p>過去のCSS設計から現在の皆さんのベストプラクティスの話をもとに、未来に向けた話も聞いていきます。 まずは3年前くらいから振り返っていきたいのですが、当時のCSS設計はどんなふうにしていましたか？</p>

<p><img src="/wp-content/uploads/2017/04/d76a6c32875387d7e4434ff5f8e4e993.jpg" alt="" width="640" height="427" class="aligncenter size-full wp-image-22901" srcset="/wp-content/uploads/2017/04/d76a6c32875387d7e4434ff5f8e4e993.jpg 640w, /wp-content/uploads/2017/04/d76a6c32875387d7e4434ff5f8e4e993-300x200.jpg 300w, /wp-content/uploads/2017/04/d76a6c32875387d7e4434ff5f8e4e993-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>榊原</strong>: ちょっと調べてみたのですが、3年前というとiOS7がフラットデザインを採用した年なんですよね。</p>

<p><strong>白石</strong>: おお！そう聞くとずい分昔な気がしますね。</p>

<p><strong>榊原</strong>: そう、そしてCSSまわりの話でいうと、Bootstrapがフラットデザインを採用しました。UIデザインの潮流が大きく変わった年でもあります。</p>

<p><strong>白石</strong>: なるほど。そういう状況下で、榊原さんはどのようにデザインを行っていましたか？ UIのビジュアルデザインも、設計という意味でのCSS設計も含めてお聞かせください。</p>

<p><strong>榊原</strong>:その頃は、デザイナーがPhotoshopなどで作ったデザインカンプを元に、「ピクセルパーフェクト」で書き起こしていました。 最近は、レスポンシブなWebサイトもわりと当たり前になったおかげで、ピクセルパーフェクトってあまり聞かなくなりましたよね。</p>

<p><strong>白石</strong>: なるほど。高津戸さんはいかがですか？</p>

<p><strong>高津戸</strong>: 実は私と小原は3年前も今も、やっている案件自体は変わらないので、やり方自体もそれほど変わっていないんです。どういうふうにCSS設計を行っているかというと、デザインを様々な単位に分割してCSSのクラスにまとめ、そうしたパーツを組み合わせたり再利用したりしながらサイトを構築していく。レゴブロックを組み立てるような要領です。</p>

<h2>やはり話題に上がります、OOCSS</h2>

<p><strong>白石</strong>: それは、OOCSS (オブジェクト指向CSS)の考え方と関係しているのでしょうか？</p>

<p><strong>高津戸</strong>: そうですね…。OOCSSについて話すと長くなるので、詳細は割愛します(笑)。OOCSSはヤフーのエンジニアだったニコール・サリバンが提唱した手法で、サイトを構成するパーツを、レゴのような小さい単位のモジュールの集まりで考えるというものです。その中で、オブジェクト指向プログラミングの考え方を応用して、似通ったモジュールをクラスの継承のような実装で実現するというものです。</p>

<p><strong>白石</strong>: なるほど。以前から誰かに聞きたかったのですが、例えば「テキストを右寄せにする」ための「align-right」というクラス、もっというと「8pxのマージン」をつけるための「margin-8」みたいなクラスを作って組み合わせる、というのもOOCSSと言えるんでしょうか？ 正直、あまり好みではないのですが…。</p>

<p><strong>高津戸</strong>: それがOOCSSかどうか、でいえば「そうだ」と言えるとは思います。ただ、OOCSSがCSSを構造的に扱おうという考え方が広く広まっていなかった時は、そういうUIパーツをモジュール化して効率的に設計しようとした点が重要なところでした。</p>

<p>その頃はそれを実現する手段として、複数のクラスを一つの要素に指定し、スタイルを当てるという方法を採用していたんです。なので、そういう複数クラスを利用することがOOCSSなのかと聞かれたら、否定することはできないですけれども、複数クラスの利用＝OOCSSというわけででもないですね。</p>

<p><img src="/wp-content/uploads/2017/04/98abd82c9eed3987bd54bee5e67b67cd.jpg" alt="" width="640" height="417" class="aligncenter size-full wp-image-22904" srcset="/wp-content/uploads/2017/04/98abd82c9eed3987bd54bee5e67b67cd.jpg 640w, /wp-content/uploads/2017/04/98abd82c9eed3987bd54bee5e67b67cd-300x195.jpg 300w, /wp-content/uploads/2017/04/98abd82c9eed3987bd54bee5e67b67cd-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>榊原</strong>: Bootstrapは、OOCSSの一つのかたちだとは思います。ただ、BootstrapなどのCSSフレームワークを使いはじめたばかりの頃に思ったのは、フレームワークの流儀に合わせるためにdivを追加していくのはどうなのかな、と。 本来不要なはずのdivじゃないですか。結果、HTMLの見通しが悪くなったりするので、こういう不満を解決するのも（後で論じる）Web Componentsの役割なのかなと思います。</p>

<p><strong>白石</strong>: 小原さんは、UIデザイナーの立場でいうと、3年前はどのようなかたちでデザインやワークフローを行っていましたか？ 例えばPhotoshopでカンプを作ったりするのでしょうか？</p>

<p><strong>小原</strong>: いえ、ぼくはそもそもPhotoshopは使っているわけではなくて、Illustratorを使ってます。Illustratorはキャンバスを広大に使えるので、状態違いを横に置いたり、引出線でメモを入れたりしていますね。Illustratorでデザインしたあと、そこにエンジニアにお願いすることもいろいろと書き込んだりします。</p>

<p><strong>高津戸</strong>: 小原のデザインは「エンジニアフレンドリー」と言いますか(笑)、指示が細かくて適切なんです。パディングの幅とかまで書いてあることもありますし、時にはCSSのコードが書かれたJSFiddleのURLが貼られていることもあります(笑)。</p>

<p><strong>小原</strong>: アニメーションなどは、実際に自分で試してみないとデザインできませんから。試してみた結果を参考として伝えるわけですが、そのまま（そのコードを）使ってくれという意味ではありません。同じような結果になる、より良いコードに書き換えてもらう前提ではあります。</p>

<h2>デザインのコンポーネント化、そして共通化</h2>

<p><strong>白石</strong>: 先ほど高津戸さんが言っていた「レゴブロックを組み立てるような」構築の仕方についてお聞きしたいのですが、そういう共通化や部品化、いわば「コンポーネント化」はUIデザインの段階から考えているものなのでしょうか？</p>

<p><strong>小原</strong>: いえ、UIデザインの段階では考えていませんね。その段階では全体で見ることが重要だと思っているので、パーツ単体でデザインするわけではありません。</p>

<p><img src="/wp-content/uploads/2017/04/afe58b3b7d24ed975e22ca24d862ab30.jpg" alt="" width="640" height="421" class="aligncenter size-full wp-image-22905" srcset="/wp-content/uploads/2017/04/afe58b3b7d24ed975e22ca24d862ab30.jpg 640w, /wp-content/uploads/2017/04/afe58b3b7d24ed975e22ca24d862ab30-300x197.jpg 300w, /wp-content/uploads/2017/04/afe58b3b7d24ed975e22ca24d862ab30-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>: なるほどー。UIデザインの段階で共通化が可能だと判明することも多々あるんじゃないかな、と思ってお聞きしたんですよね。ボタンのパディングだとかもそうでしょうし、色なども。</p>

<p><strong>高津戸</strong>: ああ、色はかなり重要ですね。色をSassの変数とかにして、共通化できるんじゃないか…というのは私たちも何度も検討しています。ただ、今はそうしていないですね。</p>

<p><strong>白石</strong>: プリプロセッサはSassを使ってらっしゃるんですね？LessやStylusなどもありますが。</p>

<p><strong>高津戸</strong>: はい、Sass一色ですね。</p>

<p><strong>榊原</strong>: <a href="https://github.com/Compass/compass" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Compass</a>とかも懐かしいですよね。</p>

<p><strong>高津戸</strong>: ああ、懐かしいですね。昔、ブラウザごとのベンダープレフィックスを付けていくのにCompassの関数を利用したりしていましたが、今はPostCSSにautoprefixerというプラグインがあって、それが自動的にベンダープレフィックスを付与してくれるので、めっきり使わなくなりました。CompassってRuby Sassを前提にしていましたが、今はぼくらはより高速なnode-sassを使っています。</p>

<p><strong>榊原</strong>: そうですね、そもそもCompass自体もうメンテナンスされていませんしね。</p>

<p><strong>白石</strong>: で、先ほどの話に戻りますが、色をSassの変数などで管理しようとしたけどまだやっていない、と。</p>

<p><strong>小原</strong>: そうですね、やっていないです。様々な場面で同じ印象を与えようとすると、色って一元的なものじゃなくなるんです。例えば同じ色のボタンでも、背景が暗い場合と明るい場合では、明るさが大きく違って見えてしまう場合があります。</p>

<p>そういうふうに、状況に応じて色合いの微調整を行うことを考えると、Sassの変数で一元管理するというやり方はうまく管理し続けられたことがありません。</p>

<p><strong>高津戸</strong>: エンジニア的な考え方でいくと色は常に同じに思えてしまうし、一元管理が望ましいとも思えるのですが、現実と照らし合わせると難しいところもあって、今はそうしていないということです。 ただ、Sassのlighten()やdarken()などの関数を使えば、ベースカラーを派生させた色合いの微調整が可能なので、それを活用して色を一元管理できるかも…とは考えています。</p>

<p><strong>白石</strong>: 最近、<a href="http://scg.ar-ch.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Sass Color Generator</a>という便利なものがあるのを発見して、重宝してます。</p>

<p><strong>高津戸</strong>: 色については、調整のための関数がCSSの標準でも提案されていますね（著者注: <a href="https://drafts.csswg.org/css-color/#modifying-colors" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CSS Color Module Level4</a>）。</p>

<p><strong>白石</strong>: おお、そうなんですね。変数とかも、<a href="https://developer.mozilla.org/ja/docs/Web/CSS/Using_CSS_variables" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CSS Variables</a>などの標準でサポートされつつありますし、CSS標準にも引き続き注目ですね。</p>

<p>では、過去の話はこれくらいにして、現在皆さんが行っているCSSデザインという話に移行しましょうか。</p>

<h2>CSSフレームワーク使う？インブラウザデザインする？</h2>

<p><strong>白石</strong>: 皆さんは、現在はどのようなワークフローでUIデザインからCSS設計まで行っていますか？ 榊原さんいかがでしょう。</p>

<p><strong>榊原</strong>: ぼくは手書きでワイヤー書いちゃったら、あとは直接ブラウザ上で確認してしまいますね。 そういう流れなので、CSSフレームワークは必須です。ざっとコードを組んでしまって、ブラウザ上で確認と修正を繰り返して調整していく感じです。</p>

<p>SketchとかAdobe XDとか、Webやアプリに特化したプロトタイピングツールも試して便利だとは思いましたが、まだ本格的に使ってはいません。</p>

<p><strong>白石</strong>: なるほど。榊原さんはインブラウザデザインが主だと。ちなみにCSSフレームワークは何を使うことが多いんでしょうか？</p>

<p><strong>榊原</strong>: ぼくは<a href="http://foundation.zurb.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Foundation</a>を使うことが多いですね。</p>

<p><strong>白石</strong>: ピクセルグリッドのお二人は、3年前とほぼ変わらない、ということでしたね。</p>

<p><strong>小原</strong>: そうですね。今のところSketchは使っていません。</p>

<p>インブラウザデザインは、最終的な成果物を確認しながらできるというのはとても良いのですが、デザインをより良くするという視点で考えると、確認と改善をするためにコードを書かないといけないので、その分時間がかかってしまうと感じています。</p>

<p>ある程度出来上がってからの調整を行うにはいい方法だと思いますが、UIデザインの初期段階だとやはりツールを使ったほうがデザインを素早く行えるかなと。使い分けが大事だと思います。</p>

<p><img src="/wp-content/uploads/2017/04/e47684ae098fd27a22bcf770a9381fc9.jpg" alt="" width="640" height="411" class="aligncenter size-full wp-image-22906" srcset="/wp-content/uploads/2017/04/e47684ae098fd27a22bcf770a9381fc9.jpg 640w, /wp-content/uploads/2017/04/e47684ae098fd27a22bcf770a9381fc9-300x193.jpg 300w, /wp-content/uploads/2017/04/e47684ae098fd27a22bcf770a9381fc9-207x133.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>高津戸</strong>: ぼくらは受託のお仕事が中心だから、というのもあると思います。お客様からの要望を聞いて、UIデザインを提案して…っていうフローが重要なので、可能な限り素早くUIデザインを改善できる形に落ち着くんだと思います。</p>

<p>あと、<strong>お客様からのニーズに細かく対応していくとなると、CSSフレームワークとかは邪魔になってしまうことが多い</strong>。</p>

<p><strong>小原</strong>: そうですね。CSSフレームワークはあるレベルまでは便利なのですが、そこを超えて「カスタマイズ」の域に達してしまうと、途端に作業が大変なものになってしまいます。</p>

<p><strong>白石</strong>: それはわかる。ぼくらが作っているTechFeedというサービスでも、現在IonicというUIフレームワークを使っているのですが、<strong>「<code>ionic-hack.scss</code>」っていうファイルに闇のようなコードを詰め込んでいます(笑)</strong>。</p>

<p><strong>榊原</strong>: 私もBootstrap使ってた時、「<code>bootstrap-override.scss</code>」ってファイルを作ってましたよ(笑)。</p>

<p><strong>白石</strong>: フレームワークを使うか使わないか、って話、些細なことのように思われがちですが、結構大事な話ですよね。</p>

<p><strong>高津戸</strong>: ぼくらも、社内だったりプロジェクト単位だったりでフレームワークのようなものを持ってはいるんです。先程申し上げたように、レゴブロックを組み合わせて作る要領で構築を行えるように、ですね。</p>

<p>一般的なCSSフレームワークを使うとなると、まずいらないコードが大量についてきて、そういうコードを捨てるところから始めたくなってしまいます。 不要なコードがたくさんある、というのはプロジェクト全体の見通しの点でも、コードのメンテナンスの上でもよくないですしね。</p>

<p><strong>白石</strong>: なるほど、プロジェクト内で再利用できる部分などについては、きちんとフレームワーク化、もっというとコンポーネント化しているという話ですね。 では、いよいよ最後のお題として、今日の主題である「Web Components時代のCSS設計」について話しましょうか。</p>

<h2>Web Componentsって…なに？</h2>

<p><strong>白石</strong>: ではまず、コンポーネント指向とWeb Componentsについて、榊原さんに簡単に説明をお願いしたいと思います。</p>

<p><img src="/wp-content/uploads/2017/04/d0d9a042ba8bbe43936118751edaeda4.jpg" alt="" width="640" height="427" class="aligncenter size-full wp-image-22900" srcset="/wp-content/uploads/2017/04/d0d9a042ba8bbe43936118751edaeda4.jpg 640w, /wp-content/uploads/2017/04/d0d9a042ba8bbe43936118751edaeda4-300x200.jpg 300w, /wp-content/uploads/2017/04/d0d9a042ba8bbe43936118751edaeda4-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>榊原</strong>: はい、では<a href="https://speakerdeck.com/rdlabo/web-components-css-design" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらのスライド（Webコンポーネント時代のCSSデザイン）</a>をご覧ください。</p>

<p>これはHTML5 ExpertsのWebサイトなのですが、よくみると同じようなデザインパーツが使いまわされていますよね。そういったデザインパーツを共通規格化するのがコンポーネント指向です。使い回し、というとちょっと表現悪いので、「再利用性を高める」といったりしています。</p>

<p><img src="/wp-content/uploads/2017/04/webComponents-02.jpg" alt="" width="600" height="450" class="aligncenter size-full wp-image-22894" srcset="/wp-content/uploads/2017/04/webComponents-02.jpg 600w, /wp-content/uploads/2017/04/webComponents-02-300x225.jpg 300w, /wp-content/uploads/2017/04/webComponents-02-207x155.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<p>例えば、そういう思想を理論化したものとして<a href="http://bradfrost.com/blog/post/atomic-web-design/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Atomic Design</a>があります。</p>

<p>デザインのパーツを原子、分子、生体、テンプレート、ページという粒度で構成していく。 コンポーネントの再利用については、こういったアイデアが提案されて、試行錯誤されてきました。</p>

<p>（榊原補足：厳密には、Atomic Designは粒度毎のコミュニケーションとワークフローデザイン論ですので、「コンポーネント指向の理論」という見方は一側面となります）</p>

<p><img src="/wp-content/uploads/2017/04/slide-3-640x480.png" alt="" width="600" height="450" class="aligncenter size-large wp-image-22824" srcset="/wp-content/uploads/2017/04/slide-3.png 640w, /wp-content/uploads/2017/04/slide-3-300x225.png 300w, /wp-content/uploads/2017/04/slide-3-207x155.png 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<p>しかし、実際にコンポーネントの再利用を実践するにあたっては、これまではフレームワークや、CSSのクラス名などをやりくりして乗り切っていたわけです。</p>

<p><img src="/wp-content/uploads/2017/04/webComponents-03.jpg" alt="" width="600" height="369" class="aligncenter size-full wp-image-22895" srcset="/wp-content/uploads/2017/04/webComponents-03.jpg 600w, /wp-content/uploads/2017/04/webComponents-03-300x185.jpg 300w, /wp-content/uploads/2017/04/webComponents-03-207x127.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<p>こうした問題を抜本的に解決すべく、標準技術として提案されているのがWeb Componentsです。 Web Componentsは、端的にいうと自作のタグを作れる技術です。</p>

<p><img src="/wp-content/uploads/2017/04/slide-5-640x480.png" alt="" width="600" height="450" class="aligncenter size-large wp-image-22826" srcset="/wp-content/uploads/2017/04/slide-5.png 640w, /wp-content/uploads/2017/04/slide-5-300x225.png 300w, /wp-content/uploads/2017/04/slide-5-207x155.png 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<p>Web Componentsは、Custom Elements、Templates、HTML Imports、Shadow DOMと言った要素技術から成り立っています。</p>

<p><img src="/wp-content/uploads/2017/04/slide-6-640x480.png" alt="" width="600" height="450"class="aligncenter size-large wp-image-22827" srcset="/wp-content/uploads/2017/04/slide-6.png 640w, /wp-content/uploads/2017/04/slide-6-300x225.png 300w, /wp-content/uploads/2017/04/slide-6-207x155.png 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<p>ブラウザによっても、要素技術によっても対応状況には差がありますが、着実に実装は進んでいますし、Polyfillを使うとほとんどの環境下で利用することができます。近い将来、あらゆる環境でWeb Componentsが利用できるようになるのは間違いないでしょう。</p>

<p><img src="/wp-content/uploads/2017/04/webComponents-04-1.jpg" alt="" width="600" height="432" class="aligncenter size-full wp-image-22898" srcset="/wp-content/uploads/2017/04/webComponents-04-1.jpg 600w, /wp-content/uploads/2017/04/webComponents-04-1-300x216.jpg 300w, /wp-content/uploads/2017/04/webComponents-04-1-207x149.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<img src="/wp-content/uploads/2017/04/webComponents05.jpg" alt="" width="600" height="322" class="aligncenter size-full wp-image-22899" srcset="/wp-content/uploads/2017/04/webComponents05.jpg 600w, /wp-content/uploads/2017/04/webComponents05-300x161.jpg 300w, /wp-content/uploads/2017/04/webComponents05-207x111.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<h2>Web Components時代のCSS設計</h2>

<p><strong>白石</strong>: 榊原さん、簡潔なご説明、ありがとうございました。さて、こうして近い将来Web Componentsの普及が見込めるという状況において、CSS設計などにどう影響するかをお聞きしたいのですが…そもそもWeb Componentsってどう使われるんでしょうね。</p>

<p><strong>榊原</strong>: いきなり世界がすべてWeb Componentsになることはないと思うんです。例えば昔はやった「ブログパーツ」みたいなもの、以前はiframeで作られていましたが、そういうものがWeb Componentsという形で流通して使われるようになるとか、そういうところから使われ始めるんじゃないかと。</p>

<p><strong>白石</strong>: 広く再利用可能なパーツが、Web Componentsによって流通しやすくなるんじゃないかということですね。</p>

<p><strong>榊原</strong>: そうですね、例えば<a href="https://www.webcomponents.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WEBCOMPONENTS.ORG</a>というサイトでは、そういうコンポーネントが共有されていますので、これをサイト制作やアプリ開発に一部利用していくとか、そういうあたりから使われていくんじゃないかと。</p>

<p><img src="/wp-content/uploads/2017/04/985160f44912dcf9d52d8a3b71ee9a2e.jpg" alt="" width="640" height="423" class="aligncenter size-full wp-image-22907" srcset="/wp-content/uploads/2017/04/985160f44912dcf9d52d8a3b71ee9a2e.jpg 640w, /wp-content/uploads/2017/04/985160f44912dcf9d52d8a3b71ee9a2e-300x198.jpg 300w, /wp-content/uploads/2017/04/985160f44912dcf9d52d8a3b71ee9a2e-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>: では、Web ComponentsはCSS設計にどう影響を与えるでしょう？</p>

<p><strong>高津戸</strong>: Web Componentsになったからいきなり変わるということでもなくて、すでに変化は始まっているとは思うんですよね。</p>

<p>例えば<a href="http://getbem.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">BEM</a>や<a href="https://smacss.com/ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">SMACSS</a>などは、クラスの命名規則やカテゴライズによって、スタイルの再利用性や独立性を高めています。こういう手法を採用してWebアプリを構築している場合、すでにそれはコンポーネント指向的なCSS設計を始めていると言ってもいいんじゃないかな、と思います。</p>

<p><strong>白石</strong>: HTML5Experts.jpに寄稿してくださった<a href="https://html5experts.jp/takazudo/21946/" data-wpel-link="internal">Enduring CSS</a>などもそうでしょうか？</p>

<p><strong>高津戸</strong>: そうですね。Enduring CSSは、NamespaceやModuleという考え方を取り入れており、Namespaceごとにアセットを分離するよう設計していくのが特徴です。</p>

<p>そうすることで、例えばあるページが不要になった場合、Namespaceに対応するディレクトリごとバッサリと削除してしまえる。そのように分離して管理するということがECSSの目指す設計です。</p>

<p><strong>白石</strong>: なるほど。ほかには、コンポーネント指向に関連して、どのようなアプローチが取られていると思いますか？</p>

<p><strong>高津戸</strong>: 私自身はまだあまり触っていないのですが、やはり、Reactなどのコンポーネント指向のJSフレームワークの存在を抜きにしては語れないと考えています。</p>

<p>例えば、<a href="https://speakerdeck.com/vjeux/react-css-in-js" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CSS in JS</a>や<a href="https://github.com/css-modules/css-modules" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CSS Modules</a>は、CSSのルールを全体に当てるのではなく、コンポーネント内だけに当てるのが第一であるという思想を実装に落としこんだ一つの形であると言っていいかなと。</p>

<p>現時点でも、こういった技術を取り入れることで、コンポーネントを意識した設計が行えるだろうとは思います。これらを例えばReactと合わせて使うことで、CSSが従来抱えていた問題を解決し、コンポーネント指向な開発と相性のいいCSS設計を進められるんじゃないかな、と期待しています。</p>

<p><img src="/wp-content/uploads/2017/04/d4da1a3c6453ef13a3cb52b9db93d971.jpg" alt="" width="640" height="397" class="aligncenter size-full wp-image-22909" srcset="/wp-content/uploads/2017/04/d4da1a3c6453ef13a3cb52b9db93d971.jpg 640w, /wp-content/uploads/2017/04/d4da1a3c6453ef13a3cb52b9db93d971-300x186.jpg 300w, /wp-content/uploads/2017/04/d4da1a3c6453ef13a3cb52b9db93d971-207x128.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>: Angularなんかも、フレームワークの機能として、コンポーネントごとにCSSを分離してくれますよね。私も使っていますが、BEMみたいに命名規約に頼らずにスタイルをカプセル化できるので、クラス名が短いままでも他の部分との衝突を考えなくてすむので気楽です。</p>

<p><strong>榊原</strong>: はい、Angularを普通に使うと、CSSがコンポーネントごとにカプセル化されますね。Shadow DOMと似たような分離の仕組みをフレームワークで実現していますね（筆者注: AngularはShadow DOMを直接扱うことも可能）。</p>

<p><strong>白石</strong>: 榊原さんは、<a href="http://ionicframework.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Ionic2</a> (AngularをベースとしたUIフレームワーク。解説記事は<a href="https://html5experts.jp/rdlabo/22296/" data-wpel-link="internal">こちら</a>)や<a href="https://ja.onsen.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Onsen UI2</a>（ReactやAngularなど様々なフレームワークと合わせて使えるUIフレームワーク。解説記事は<a href="https://html5experts.jp/n_matagawa/20766/" data-wpel-link="internal">こちら</a>）などの、コンポーネント指向のUIフレームワークも活用されてらっしゃいますよね。</p>

<p><strong>榊原</strong>: はい、そうですね。Ionicなどで素早くUIを構築してしまって、あとはブラウザ上でデザインしていく…というフローで最近はデザインと開発を行っています。</p>

<p><strong>白石</strong>: BootstrapやFoundationなどのCSSフレームワークをベースに素早くUIを作って、あとはブラウザ上でいじる…というのと同様の手法でアプリケーションのデザインを行っているわけですね。</p>

<p>となると結局また、「CSSフレームワークを使うか否か」という先ほどの話と同様に「汎用的なコンポーネントライブラリを使うか否か」という話も出てきそうです。</p>

<p>とはいえ、「外部のコンポーネントを全く使わない」という選択肢もないと思うんですよね。例えばピクセルグリッドさんでも、jQuery UIのDatepicker（日付選択ダイアログ）なんかは使ってたんじゃないかと思うんですが、結局そのデザインカスタマイズなどはどうしてらっしゃったんでしょう？</p>

<p><strong>小原</strong>: 実はDatepickerについても、ぼくら自作していたので…(笑)。</p>

<p><strong>白石</strong>: ええっ！それはすごい。</p>

<p><strong>小原</strong>: もちろん、外部のUIパーツとか、全く使わないわけじゃないですよ。お客様のニーズを満たせるもの、自分たちが求めるクオリティを満たすものがあるかどうかまずは探してみて、なければ自分たちで作るって感じですね。</p>

<p>&#8230;</p>

<h2>編集後記</h2>

<p>というかんじで、イベントは盛況のうちに終了いたしました。その後の懇親会にもかなりの人数の方々が参加され、Webエンジニア同士の交流も大いに盛り上がりました。HTML5Experts.jpは、今後もこうしたイベントを開催していきますので、ご期待ください。</p>

<p><img src="/wp-content/uploads/2017/04/05fb7057bc4d7315b6d7d47155d2989c.jpg" alt="" width="640" height="407" class="aligncenter size-full wp-image-22902" srcset="/wp-content/uploads/2017/04/05fb7057bc4d7315b6d7d47155d2989c.jpg 640w, /wp-content/uploads/2017/04/05fb7057bc4d7315b6d7d47155d2989c-300x191.jpg 300w, /wp-content/uploads/2017/04/05fb7057bc4d7315b6d7d47155d2989c-207x132.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>最後に、イベントの様子を書き起こしつつぼくが感じた、今回の結論めいたものを最後に記したいと思います。</p>

<p>そもそもなぜWebにコンポーネント化が求められているのかというと、その理由の一つに「<strong>再利用性</strong>」があります。そしてその再利用性は、「プロジェクトを横断した、汎用的な再利用性」と「プロジェクト内における再利用性」の2種類が考えられます。</p>

<p>Web Componentsが普及することのメリットの一つは、<strong>汎用的な再利用性を持つコンポーネントの流通が活発になる</strong>ことでしょう。</p>

<p><a href="http://webcomponents.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WEBCOMPONENTS.ORG</a>に見られるコンポーネントのリポジトリはこれからも増えてくることでしょうし、コンポーネントを有料で販売するというビジネスも早晩現れることでしょう。</p>

<p>そうしたコンポーネントを組み合わせて素早くアプリケーションを開発する、というアプローチは、今後より一般的になると思われます。</p>

<p>ただし、そうした外部ライブラリやフレームワークを使用する際に厄介なのが、<strong>カスタマイズが面倒</strong>という問題です。特に、Shadow DOMはCSSを強くカプセル化しますので、カスタマイズがより困難になる印象もあるかもしれません。</p>

<p>しかし、Web Components (Shadow DOM)には<a href="https://www.html5rocks.com/ja/tutorials/webcomponents/shadowdom-201/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">コンポーネント内部をスタイリングする様々な手段があります</a>。それらを使って「汎用的で、スタイリングも容易なコンポーネント」を開発する手法は、今後ベストプラクティスが模索されていくことと思います。</p>

<p>一方で受託開発のように、先にデザインを綿密に擦り合わせた後に開発に入るようなワークフローの場合、外部のコンポーネントをカスタマイズするコストや、コンポーネント内部の構造を把握するためのコスト（そして多くの場合、完全に把握し切ることはないでしょう）が大きく、<strong>外部ライブラリを利用するメリットを上回ってしまう</strong>ことも考えられます。</p>

<p>その場合は外部ライブラリやフレームワークを使用せず、できるだけプロジェクト内や社内で完結するよう、開発用のアセットを積み上げていく方が優れたアプローチでしょう。その場合でも、Web Componentsの「モジュラリティ」や「カプセル化」、「拡張性」といったメリットは非常に大きいのではないでしょうか。</p>

<p>そして今回の主題である「Web Components」は、まだまだこれからの技術なのは間違いありませんが、一方現場ではとっくにコンポーネント化は必要とされ、実践もされています。</p>

<p>それをより良くWeb標準でサポートするための技術がWeb Componentsであり、多くの人に待ち望まれている重要な技術であることが再確認できたかな、と思いました。</p>

<p><img src="/wp-content/uploads/2017/04/2066ff983ef8c9b69d7cae140a4b0f5d.jpg" alt="" width="640" height="428" class="aligncenter size-full wp-image-22903" srcset="/wp-content/uploads/2017/04/2066ff983ef8c9b69d7cae140a4b0f5d.jpg 640w, /wp-content/uploads/2017/04/2066ff983ef8c9b69d7cae140a4b0f5d-300x201.jpg 300w, /wp-content/uploads/2017/04/2066ff983ef8c9b69d7cae140a4b0f5d-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
			</item>
		<item>
		<title>「次のモバイルファースト」がやってくる！UIと機能設計をIonic 2を使って学んでみよう</title>
		<link>/rdlabo/22596/</link>
		<pubDate>Wed, 29 Mar 2017 01:00:43 +0000</pubDate>
		<dc:creator><![CDATA[榊原昌彦]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[デザイン]]></category>
		<category><![CDATA[Ionic 2]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[モバイルファースト]]></category>

		<guid isPermaLink="false">/?p=22596</guid>
		<description><![CDATA[レスポンシブデザインが生まれたばかりの2009年には、はやくも「モバイルファースト」という言葉が使われ始めていました。 WebサイトはPCから見るものだったのは今や昔。今ではスマートフォンの普及により、多くのWebサイト...]]></description>
				<content:encoded><![CDATA[<p>レスポンシブデザインが生まれたばかりの2009年には、はやくも「モバイルファースト」という言葉が使われ始めていました。
WebサイトはPCから見るものだったのは今や昔。今ではスマートフォンの普及により、多くのWebサイトではPCとモバイルからのアクセス数が逆転してるWebサイトも多く、「モバイルファースト」な開発も当たり前になりました。</p>

<p>しかし、2009年の「モバイルファースト」と、今の「モバイルファースト」は大きく中身が成長しました。モバイルフレームワークであるIonic 2も先日リリースされましたので、ここで改めて「モバイルファースト」とは何かを考え、モバイルの設計を見直していきます。</p>

<h2>レスポンシブとモバイルファースト</h2>

<p>モバイルファーストは、「モバイル環境に最適化した開発手法」と説明することができます。</p>

<p>モバイル（多くはiPhoneを指しました）は解像度が低く、操作方法もPC文化と異なり、かつ通信速度も遅いという制約があります。イベントひとつとっても、onclickでは待機時間があるから、jQueryのtapイベントを使う、というようにPCとモバイル開発の乖離をどのようにするかの課題があります。</p>

<p>モバイルファーストがいわれはじめた2009年当時は「PC版を作ったあと、MediaQueriesを使ってモバイルでも表示させる」というワークフローが主流でしたが、これではPCとモバイル開発の乖離にアプローチするのが難しかったため、「先にモバイル版をつくる」ワークフローを取り入れる現場が多く生まれました。PCよりもモバイルを優先させるので、「モバイルファースト」だったわけです。</p>

<p>その頃は、モバイルファーストとレスポンシブデザインの区別がつかない議論を度々聞きましたが、もうここらへんの誤解は整理された感があります。</p>

<h2>Googleが提示する「次のモバイルファースト」</h2>

<p>モバイルからのアクセスが主流になる中で、Googleは「次のモバイルファースト」として、2つの選択肢を提示しました。AMP（Accelerated Mobile Pages）と、PWA（Progressive Web Apps）です。</p>

<p>簡単に概要をいうと、AMPは超高速でWebサイトを表示することができます。HTMLやJavaScriptは高速化を妨げるものは使えなくなっており、またCSSはインラインのみでの表示でありと、ひたすらページ表示速度をあげるための仕様です。
PWAは「Webのアプリ化」を標榜したもので、インストール型のアプリと同様にWebを使うことができます。代表的な内容でいえば、Webをアプリとしてインストールしたり、オフラインでも表示することができたり、プッシュ通知を受け取ることができるようになります。</p>

<p>Googleはこの2つの仕様により、</p>

<ul>
<li>普通のWebサイトなら、超高速化するためにAMP
<li>いろいろな機能を実装するなら、PWAでWebをアプリ化
</ul>

<p>という2つの「次のモバイルファースト」を提示しました。これは、今の「レスポンシブにしてモバイルで表示できればOK」から大きな変化であり、これからのモバイル体験を大きく変えるものになるのではないでしょうか。</p>

<h2>UIデザインのモバイルファースト</h2>

<p>PWAの標榜する「Webのアプリ化」は、UIデザインにおいても「次のモバイルファースト」を生み出す可能性が高いです。
皆さんご存知の通り、PCと（現在の）モバイル、そしてモバイルアプリはUI文化が異なります。PCとモバイルのWeb表示はレスポンシブデザインによって多くの共通化されたモジュールが使われていますので似通っておりますが（便宜上、これらを「現行WebUI」といいます）、モバイルアプリUIは別物に近いといっていいでしょう。</p>

<p>例えば、「現行WebUI」では、HeaderのロゴはクリックしてHOMEに戻るという文化があります。ほとんどがこのUIを採用しています。しかしながらモバイルアプリはHeader部にロゴは入れませんし、入れていてもクリックさせない場合が多いです。
また、「現行WebUI」ではクリックできる場所は明確にするしきたりがあります。例えばカードデザインでも下に「詳しくみる」と注釈をつけてクリックを促したりします。しかしながら、モバイルアプリUIでは「カードはとりあえずクリックしてみるよね」という風潮があります。</p>

<p><img src="/wp-content/uploads/2017/03/074f1efc473594fd3f8d73e2b8b8f40c.png" alt="" width="640" height="408" class="alignnone size-full wp-image-22621" srcset="/wp-content/uploads/2017/03/074f1efc473594fd3f8d73e2b8b8f40c.png 640w, /wp-content/uploads/2017/03/074f1efc473594fd3f8d73e2b8b8f40c-300x191.png 300w, /wp-content/uploads/2017/03/074f1efc473594fd3f8d73e2b8b8f40c-207x132.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>モバイルファーストで考えた時、Webがアプリ化する前提でのUIの再設計も必要になってくるでしょう。その時に、各デバイスが発表しているデザインガイドラインはとても有用です。</p>

<ul>
  <li><a href="https://developer.apple.com/jp/documentation/UserExperience/Conceptual/MobileHIG/BasicsPart/BasicsPart.html" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">iOS Human Interface Guidelines（日本語版）</a></li>
  <li><a href="https://material.io/jp/guidelines/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">マテリアル デザイン</a></li>
  <li><a href="https://msdn.microsoft.com/ja-jp/mt634411.aspx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Windows 10 アプリ UX デザイン ガイド（Modern UI）</a></li>
</ul>

<p>AMPのように表示速度に最適化したWebはまた異なるUI文化が生まれてくるのでしょうが、「Webのアプリ化」を標榜するPWAはモバイルWebのUIもアプリサイドに寄せていくことになりそうです。
　</p>

<h2>デバイスの作法に寄り添うために</h2>

<p>WebのUIもアプリサイドに寄っていくことを考えた時、一番大きなハードルになるのは前挙した「各デバイス毎のデザインガイドライン」をどのように吸収するかです。モバイルでは、デバイスの文化に寄り添うUI設計が最もユーザの学習コストが低く、適切なUI,UXを提供することができます。iPhoneはフラットデザイン、Androidはマテリアルデザイン、WindowsPhoneはModern UIを提供するために1リソースで複数デザインパターンを用意して保守し続けることはハードルが高く現実的ではありません。</p>

<p>そのハードルに対して、適切にソリューションを提供してるモバイルフレームワークのひとつに、Ionic 2があります。</p>

<p>Ionic 2は、2017年1月にリリースされた、Angular 2を使って構築するモバイルフレームワークです。現在、（著者が確認する範囲では）唯一のPWA対応を標榜したモバイルフレームワークとなっております。</p>

<h3>Ionic 2のWebComponents</h3>

<p>よくモバイル開発で使われるComponents（CardやFabitなど）を、フラットデザイン、マテリアルデザイン、Modern UIのパターンを用意し、フレームワークが判断して自動的にデザインをデバイスに合わせます。</p>

<p><img src="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png" alt="" width="640" height="393" class="alignnone size-full wp-image-22361" srcset="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png 640w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-300x184.png 300w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-207x127.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>Ionic 2は、デフォルトで用意しているUIパターンは、複雑になりがちなHTMLを「Web Components」という技術によってカスタムタグを用意して、コーダーの負担を減らす工夫をしています。例えば&lt;button ion-button&gt;Login&lt;/button&gt;というボタンがあると、これをフレームワークが自動的に展開して、ユーザには</p>

<p></p><pre class="crayon-plain-tag">&lt;button block="" ion-button="" class="button button-md button-default button-default-md button-block button-block-md"&gt;
    &lt;span class="button-inner"&gt;Login&lt;/span&gt;
    &lt;div class="button-effect" style="transform: translate3d(392px, -91px, 0px) scale(1); height: 240px; width: 240px; opacity: 0; transition: transform 552ms, opacity 386ms 166ms;"&gt;
    &lt;/div&gt;
&lt;/button&gt;</pre><p></p>

<p>と表示されます。手元のソースコードはシンプルですので、可読性が高く、またデバイス毎の表示に困ることはありません。2017年3月現在、28のコンポーネントがデフォルトで用意されています（<a href="http://ionicframework.com/docs/v2/components/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">コンポーネント一覧は公式リファレンスをご覧下さい</a>）</p>

<p><img src="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png" alt="" width="640" height="393" class="alignnone size-full wp-image-22361" srcset="/wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6.png 640w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-300x184.png 300w, /wp-content/uploads/2017/02/2e775995931fe381d9ce29df3b452eb6-207x127.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>また、フレームワークが直下に&lt;ion-app&gt;というタグを生成してくれており、そこにデバイスを示すclass（iPhoneだと<code>ios</code>、Androidは<code>md</code>、WindowsPhoneは<code>wp</code>）をつけてくれます。なので、もしも自分自身でカスタムデザインを用意したい場合、それを親にしてCSS設計することが可能です。</p>

<h3>Ionic 2のオフライン表示</h3>

<p>GoogleのPWAのガイドラインの中で<a href="https://developers.google.com/web/progressive-web-apps/checklist" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">「Progressive Web App Checklist」</a>を提供しています。Webをアプリ化するために、これだけはクリアしてねというチェックリストです。</p>

<p>その中で「オフラインでも表示される」というものがあります。普通のWebサイトでは、キャッシュを持っていてもオフライン環境で更新すると「オフラインです」とエラーがでます。しかしながら、Service Workerという技術を使うと、オフライン環境では自動的にキャッシュを返すことができます。</p>

<p>オフライン対応を有効するのはとても簡単で、<code>src/index.html</code>の17-24行目のコメントアウトを外すだけです。</p>

<p></p><pre class="crayon-plain-tag">&lt;script&gt;
    if ('serviceWorker' in navigator) {
      navigator.serviceWorker.register('service-worker.js')
        .then(() =&gt; console.log('service worker installed'))
        .catch(err =&gt; console.log('Error', err));
    }
  &lt;/script&gt;</pre><p></p>

<p>このことによって、Service Workerが対応している場合は<code>service-worker.js</code>を読み込み、オフライン対応が行われます。回線が安定してるPCとは異なり、トンネルの中であったり山中であったりでも安定してコンテンツを提供するためには必須の機能です。
<br>
Ionic 2では、<code>sw-toolbox.js</code>を利用しておりますので、詳細に興味がある方は<a href="https://googlechrome.github.io/sw-toolbox/usage.html#main" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">「sw-toolbox」</a>をご覧下さい。拡張すれば、いろいろなオフライン時の挙動を制御できます。</p>

<h3>Ionic 2のmanifest.json</h3>

<p>PWAでは、Webをアプリストアのアプリ同様にHOME画面にアイコン付きで登録することができます。manifest.jsonは、その時のアイコンであったりとか、起動した時のヘッダー部の配色であったりを定めることができます。
初期では以下の通りです。</p>

<p></p><pre class="crayon-plain-tag">{
  "name": "Ionic",
  "short_name": "Ionic",
  "start_url": "index.html",
  "display": "standalone",
  "icons": [{
    "src": "assets/imgs/logo.png",
    "sizes": "512x512",
    "type": "image/png"
  }],
  "background_color": "#4e8ef7",
  "theme_color": "#4e8ef7"
}</pre><p></p>

<p>これを設定すると、Androidで表示された場合に自動的に「ホーム画面に追加」というバナーがでてきて、ユーザに対してWebをアプリとして扱うことを提案することができます。</p>

<h4>他のProgressive Web App Checklist</h4>

<p>他のProgressive Web App Checklistは以下の通りです。Webをアプリとして扱うことを考える時に、ぜひご配慮下さい。</p>

<ul>
<li>SSLで提供されている
<li>モバイルに表示が最適化されている（レスポンシブデザイン）
<li>10秒以内に最初のページが表示される
<li>Chrome、Edge、Firefox、Safariで動作する
<li>各ページはURLを持っている
</ul>

<h2>おわりに</h2>

<p>GoogleがAMPとPWAというふたつの選択肢を提示しました。これは、既存のモバイルから設計するデザインワーク中心の「モバイルファースト」から、モバイル体験中心をWebを中心として再設計する新たな「モバイルファースト」を生み出す可能性を秘めています。Webの設計、デザイン、技術の大きな見直しの転換点となるのではないでしょうか。
そこで、ぜひともいちはやく「PWAのサポート」を発表したIonic 2を試していただき、この流れとWebのこれからを体験していただければと思います。</p>

<h3>Ionic 2 の日本語コミュニティあります</h3>

<p>今では随分改善されましたが、Ionic 2はリリース前（特にβ版時代）はとても日本語情報が少なかったので、知見を共有するためにslackのオープンチャンネルを開設しました。分かる方がいれば有志が回答する形ですのでレスポンス速度はあまり高くありませんが、ご活用いただけましたら幸いです。</p>

<p><a href="https://ionic2-ja.herokuapp.com/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">Ionic 2 slackチーム</a></p>
]]></content:encoded>
			</item>
		<item>
		<title>毎週新しい機能をリリースしている、はてな「Mackerel」の開発環境やツールを聞いてきた</title>
		<link>/miyuki-baba/22378/</link>
		<pubDate>Fri, 10 Mar 2017 00:30:12 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Assault]]></category>
		<category><![CDATA[Mackerel]]></category>
		<category><![CDATA[はてな]]></category>

		<guid isPermaLink="false">/?p=22378</guid>
		<description><![CDATA[はてな「Mackerel」の開発チームに、HTML5 Experts.jp白石俊平編集長が直撃インタビュー！ チーフエンジニア兼「Mackerel」ディレクターの松木雅幸さん、アートディレクターの村田智さん、アプリケーシ...]]></description>
				<content:encoded><![CDATA[<p>はてな「Mackerel」の開発チームに、HTML5 Experts.jp白石俊平編集長が直撃インタビュー！<br>
チーフエンジニア兼「Mackerel」ディレクターの松木雅幸さん、アートディレクターの村田智さん、アプリケーションエンジニアの濱田健さんに、どのような開発環境やツール・体制などを構築しているのか、お話を聞いてきました。</p>

<h2>社内のエンジニア向けツールをSaaS事業化</h2>

<p><strong>白石</strong>：まずは、皆さんの自己紹介からお願いします。</p>

<p><strong>松木</strong>：はてなはIDで呼び合う文化なんです。僕は本名の松木を中国語読みにしたSongmu（ソンムー）と呼ばれています。3年前にはてなに入社して、Mackerelのディレクターと東京オフィスのチーフエンジニアを任せてもらってます。</p>

<p>元々はPerlのエンジニアですが、最近はGo言語を書くことが多くなってきました。共著で『<a href="http://gihyo.jp/book/2016/978-4-7741-8392-3" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">みんなのGo言語</a>』という本を書いてたりします。</p>

<p><img src="/wp-content/uploads/2017/02/b3c6bdd58451e774c043dd42da0e19a9.jpg" alt="" width="640" height="441" class="aligncenter size-full wp-image-22417" srcset="/wp-content/uploads/2017/02/b3c6bdd58451e774c043dd42da0e19a9.jpg 640w, /wp-content/uploads/2017/02/b3c6bdd58451e774c043dd42da0e19a9-300x207.jpg 300w, /wp-content/uploads/2017/02/b3c6bdd58451e774c043dd42da0e19a9-207x143.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 80%;">　▲<strong>株式会社はてな チーフエンジニア 兼 Mackerelディレクター 松木雅幸（Songmu）さん</strong></span></p>

<p><strong>濱田</strong>：itchynyです。2015年4月に新卒として入社しました。「Mackerel」のアプリケーションエンジニアとして開発していて、リードエンジニア代行も務めています。</p>

<p><strong>村田</strong>：村田（はてなID:murata_s）です。2013年4月に新卒として入社しました。「Mackerel」を担当して3年になります。最近はMackerelのデザインチームをまとめています。</p>

<p><img src="/wp-content/uploads/2017/02/73f6182e694b5a42fa8cbe8c44ccada2.jpg" alt="" width="640" height="426" class="aligncenter size-full wp-image-22451" srcset="/wp-content/uploads/2017/02/73f6182e694b5a42fa8cbe8c44ccada2.jpg 640w, /wp-content/uploads/2017/02/73f6182e694b5a42fa8cbe8c44ccada2-300x200.jpg 300w, /wp-content/uploads/2017/02/73f6182e694b5a42fa8cbe8c44ccada2-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 80%;">▲<strong>株式会社はてな アプリケーションエンジニア 濱田健（itchyny）さん、アートディレクター 村田智（murata_s）さん</strong></span></p>

<p><strong>白石</strong>：今日ははてなさんのサーバー監視サービス「Mackerel」について、いろいろ聞かせてください。</p>

<p><strong>松木</strong>：はてなはこれまではてなブログやはてなブックマークなど、カスタマー向けの事業が中心だったんですが、最近はそのバッググランドを活かした他社との協業も増えてきました。</p>

<p>例えば、KADOKAWAさんと共同開発した小説投稿サイト「<a href="https://kakuyomu.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">カクヨム</a>」、ソニーさんとの共同事業である「<a href="https://kadenkaigi.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">家電会議</a>」、任天堂さんに開発協力した「<a href="https://miiverse.nintendo.net/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Miiverse</a>」などが最近のはてなの流れです。「<a href="https://mackerel.io/ja/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Mackerel</a>」もその流れの一つで、他社との協業サービスではないですが、カスタマ―向け(toC）で培った技術やノウハウを企業向け（toB）に活かしたサービスです。</p>

<p>はてなは今年16年目の会社ですが、かねてより、社内クラウド基盤を構築・運用し、1000台を越える仮想サーバーをスケールさせ、管理しながらサービスを提供してきました。そのための仕組みも社内で内製してきました。それがMackerelの前身となるツールです。</p>

<p>最近ではAWSやGCPなど、パブリッククラウド上で仮想サーバーを増減させるのが当たり前の世の中になってきたこともあり、前述の内製のサーバー管理ツールのノウハウを活かし、「Mackerel」というSaaSを新規開発し、B向けの新規事業として打ち出したんです。</p>

<p>「Mackerel」には、これまでのサーバー監視・管理ツールと考えを変える必要があると思って作っている部分があります。一つはクラウドの思想に沿った設計であること。昔と違って、今はサービスの状況に合わせてクラウドでのサーバーを増やしたり減らしたりすることは普通になってきました。</p>

<p>でも、サーバーを建てたらすぐ監視を開始しなくてはいけないし、サーバーから外したら監視も外さなければいけない。そういった運用コストを解消したいということ。</p>

<p>もう一つは、UI/UXの差別化。既存のサーバー管理・監視ツールはエンジニアだけが使うものが多く、それもあって、デザイナーがツールの開発に関わることは少なく、見た目や使いやすさが考慮されることはあまりありませんでした。しかし、「Mackerel」は使い勝手や見た目を考えて、いろんな人に使いやすいように工夫をしています。開発には専属のデザイナーが3人携わっています。</p>

<p><img src="/wp-content/uploads/2017/02/b62e75c7890c3b9d24bb9c725b721651.jpg" alt="" width="640" height="427" class="aligncenter size-full wp-image-22481" srcset="/wp-content/uploads/2017/02/b62e75c7890c3b9d24bb9c725b721651.jpg 640w, /wp-content/uploads/2017/02/b62e75c7890c3b9d24bb9c725b721651-300x200.jpg 300w, /wp-content/uploads/2017/02/b62e75c7890c3b9d24bb9c725b721651-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：グラフがメールで送られてくるといった点もそういったこだわりからなんでしょうか。</p>

<p><strong>松木</strong>：はい、メールに限らず全般的にグラフの見せ方にはこだわっています。ブラウザの画面上でグラフを並べて見られるようにしている部分も直感的に見やすいように作っています。</p>

<p><strong>白石</strong>：はてなさんは1000台を超えるサーバーを運営していたとのことですが、今はどうなんですか？自前のオンプレが主なのか、クラウドも併用しているのか。</p>

<p><strong>松木</strong>：今は併用しています。「Mackerel」自体は自社のデータセンターのサーバーを使っています。新規サービスについてはAWSを使うことが増えていますね。</p>

<p><strong>白石</strong>：オンプレのほうが規模が大きくなると、サーバーコストは安くなると思いますが、クラウドを併用する理由は何でしょう？</p>

<p><strong>松木</strong>：安定していて、ゆるやかな成長が見込めるサービスは、見積もりやすいのでオンプレにメリットがあるのですが、新規サービスにはやはり素早く作る必要があるので、クラウドのほうが便利ですね。オンプレは改善を重ねる必要があったり、急激なサービス増強といったときに調達が大変なので。</p>

<h2>コア部分はScala、サブシステムはGoで開発</h2>

<p><strong>白石</strong>：プログラミング言語は何を使っていますか？</p>

<p><strong>濱田</strong>：サーバーのアプリケーションはScala、ユーザーがサーバーにインストールする監視エージェントであるmackerel-agentはGoで開発しています。外形監視とデーターベースインテグレーションのクローラーなどもGoで書いています。</p>

<p><img src="/wp-content/uploads/2017/02/8272fa35a18ee32fe8dbd8bb9121514d-1.jpg" alt="" width="640" height="425" class="aligncenter size-full wp-image-22465" srcset="/wp-content/uploads/2017/02/8272fa35a18ee32fe8dbd8bb9121514d-1.jpg 640w, /wp-content/uploads/2017/02/8272fa35a18ee32fe8dbd8bb9121514d-1-300x199.jpg 300w, /wp-content/uploads/2017/02/8272fa35a18ee32fe8dbd8bb9121514d-1-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>松木</strong>：コアな部分はScalaで、サブシステムはGoで書くといったかんじです。</p>

<p><strong>白石</strong>：それぞれ言語を変えてる理由はあるんですか？</p>

<p><strong>松木</strong>：Mackerelは複雑なソフトウェアなので、コアの部分は抽象度の高い表現ができる言語を採用するのがいいだろうと。いろんな言語を検討したのですが、静的型付けができ、表現力が高いScalaを採用しました。</p>

<p>ただサブシステムやマイクロサービス的に作る場合など、局所的に少ない台数でパフォーマンスを出したいようなコンポーネントを開発する場合には、Goのほうがマッチしています。</p>

<p><strong>濱田</strong>：mackerel-agentはWindowsを含めてどんな環境でも動かないといけないし、実行速度の面でもGo言語は優れていると思っています。サブシステムは本体のアプリケーションに比べると機能が少なく、コード構成が把握しやすくてデプロイも簡単なGo言語は適していると思います。</p>

<p><strong>白石</strong>：シングルバイナリになるからとか？</p>

<p><strong>濱田</strong>：そうですね。</p>

<p><strong>白石</strong>：Scalaってやっぱり重いとかメモリ食うなどのトラブルが起きたりしますか？</p>

<p><strong>松木</strong>：現実問題としてはありますね。コンパイル時間の問題もあります。本番ではサーバーを何台か立ててローリングでデプロイする形になるので、ミニマムで構成するにしてもそれなりにコストがかかる。ただ、パフォーマンス自体は悪くありません。開発時間はかかるけど、その分バグが起きにくいので、B向けにはマッチしていると思います。</p>

<h2>グラフで直感的に状況がわかるUIデザイン</h2>

<p><strong>白石</strong>：デザインの話も聞かせていただきますね。UI/UXでこだわっているところ、思い入れがある点などについて聞かせてください。</p>

<p><strong>村田</strong>：Mackerelは日常的に使う道具なので、ストレスなく直感的にグラフの傾向がつかめるようにデザインしています。複数のグラフが並んだときにも機能を落とさず使い勝手を保てるように、細かな部分にこだわっています。</p>

<p><img src="/wp-content/uploads/2017/02/651a399dc75675296571cf9732236698.jpg" alt="" width="640" height="421" class="aligncenter size-full wp-image-22471" srcset="/wp-content/uploads/2017/02/651a399dc75675296571cf9732236698.jpg 640w, /wp-content/uploads/2017/02/651a399dc75675296571cf9732236698-300x197.jpg 300w, /wp-content/uploads/2017/02/651a399dc75675296571cf9732236698-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>このようなツールでは、何かをするためのボタンが多くなりがちですが、それは往々にして最初の学習コストを増やすことにつながります。使い始めたばかりの人でも理解しやすく、必要な時に必要な行動がおこせるような、良い意味で簡素なUIの提供を心掛けています。</p>

<p>最近ではitchynyさんと共同でアラートの絞り込み機能も作りました。</p>

<p><img src="/wp-content/uploads/2017/03/1.jpg" alt="" width="640" height="386" class="aligncenter size-full wp-image-22589" srcset="/wp-content/uploads/2017/03/1.jpg 640w, /wp-content/uploads/2017/03/1-300x181.jpg 300w, /wp-content/uploads/2017/03/1-207x125.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：グラフは何で作ってるんですか？</p>

<p><strong>濱田</strong>：これはD3.jsで作ってます。グラフにマウスオーバーしたらこのようにメトリックの値が表示されます。</p>

<p><img src="/wp-content/uploads/2017/03/3.jpg" alt="" width="640" height="519" class="aligncenter size-full wp-image-22591" srcset="/wp-content/uploads/2017/03/3.jpg 640w, /wp-content/uploads/2017/03/3-300x243.jpg 300w, /wp-content/uploads/2017/03/3-207x168.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：へえ、すごい！これ、モバイルでも見れたりします？</p>

<p><strong>村田</strong>：モバイル用のUIも用意しているので、お手元のモバイル端末で見ることができます。出先でアラートを確認したいということありますよね。そんなときに便利です。Mackerelの画面はレスポンシブ設計になっているので、タブレットサイズの端末でもご覧になれます。</p>

<p><img src="/wp-content/uploads/2017/03/2.jpg" alt="" width="316" height="640" class="aligncenter size-full wp-image-22590" srcset="/wp-content/uploads/2017/03/2.jpg 316w, /wp-content/uploads/2017/03/2-148x300.jpg 148w, /wp-content/uploads/2017/03/2-102x207.jpg 102w" sizes="(max-width: 316px) 100vw, 316px" /></p>

<p><strong>白石</strong>：レスポンシブなデザインってどんなかんじで作っているんですか？</p>

<p><strong>村田</strong>：開発内容にもよりますが、直接HTMLとCSSを触りながらデザインしていくことが多いです。画面上での表示内容は、単に表示サイズもそうですし、様々な利用状況や設定によっても大きく影響を受けます。</p>

<p>想定されるシステムの状態を思い描き、チームメンバーとコミュニケーションしながら進めていきます。GitHubのIssue上でのやり取りに加え、細かなところは口頭で直接会話をしたり、他の拠点にいるメンバーとはハングアウトを活用して議論したりもします。</p>

<p><img src="/wp-content/uploads/2017/02/28f9aca2b759f1ccbd81bcda1e46f6a9.jpg" alt="" width="640" height="428" class="aligncenter size-full wp-image-22468" srcset="/wp-content/uploads/2017/02/28f9aca2b759f1ccbd81bcda1e46f6a9.jpg 640w, /wp-content/uploads/2017/02/28f9aca2b759f1ccbd81bcda1e46f6a9-300x201.jpg 300w, /wp-content/uploads/2017/02/28f9aca2b759f1ccbd81bcda1e46f6a9-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>松木</strong>：開発体制のことをもう少し詳しく説明します。東京はビジネスメンバー中心で、プロダクトオーナーやセールス、セールスエンジニアという体制で、開発エンジニアは一人です。京都に他の開発メンバーがいます。</p>

<p>Mackerelのリードエンジニアで開発の最初にコードの1行目を書いたエンジニアが愛知にいるんですが、今は育休中です。なので現在は、itchynyさんがリードエンジニア代行を務めています。</p>

<p>リードがリモートなのでオンラインでコミュニケーションするというスキルが発達しているんですよね。開発ログはちゃんと文章で残すし、気軽にビデオで会話しながらコミュニケーションをとるように意識しているし。</p>

<p><strong>濱田</strong>：朝会はスタンダップミーティングの形式なので、10分かからないですね。リモートのコミュニケーションにはZoomというツールを使っています。</p>

<p><strong>松木</strong>：Zoomは2年前から使っていて、いろいろ試してみたのですが、これが安定しているんですよ。最近はハングアウトも導入しています。定期的なミーティングとかはハングアウトを使ってやってます。</p>

<p><strong>白石</strong>：Mackerelチームは、全員で何人いるんですか？</p>

<p><strong>松木</strong>：今はビジネス系含めて16人います。そのうち開発は11人です。</p>

<p><strong>白石</strong>：16人いて10分かからないというのは相当テキパキしてると思うんですが、どんな話をされてるんでしょう。</p>

<p><strong>松木</strong>：各人がはてなのグループウェアに日報を書いているので、その共有を朝会でやっています。最近はそれも減らしていて、各自が話したいことをGitHubでIssuesを上げて、司会がランダムに読み上げていくだけなので、すぐ終わっちゃう。</p>

<p><strong>村田</strong>：デザイナーの分科会もチームの朝会後にやってますね。</p>

<h2>毎週必ず新機能をリリースしている</h2>

<p><strong>白石</strong>：開発ツールや開発の進め方について教えてください。</p>

<p><strong>松木</strong>：開発ツールはGitHubとZenHubでカンバン、日々のコミュニケーションツールはSlackを使っています。</p>

<p>開発体制としては、スクラムぽい開発をしていて、2週間に1回開発会議をしています。だいたい5～6時間くらい、メンバーがそろって会議している。誰が何を担当するかなどを決めて、次の2週間はなるべく打ち合わせせずに、集中して開発してもらう。で、一番最後の日は振り返りをします。アジャイルの世界だと「出荷」っていうと思うんですけど、それをめでたいって祝うかんじです。</p>

<p>デプロイは週に2回火曜と木曜に行なっています。こだわっているのは毎週新機能を出すということ。正式リリースから、お盆や正月などを除くと毎週何かしらのリリースを出していることは、評価いただいています。</p>

<p><strong>白石</strong>：毎週新機能出していることをどうお客さまにお伝えしているんですか？</p>

<p><strong>松木</strong>：告知ブログを毎週日本語と英語で書いています。毎週メールでユーザー全員に告知メールも出しています。楽しみにしてくれるユーザーも多くて、Twitterを眺めていると、告知を見てコメントをしてくれている。祝日の関係で木曜に告知送ると、「今日金曜かと思ってあせった」と書かれていたり(笑)。</p>

<p><strong>白石</strong>：巨大な機能を出すときはどうしているんですか。メインの開発ラインと別にしているとか？</p>

<p><strong>松木</strong>：厳密なスクラムだと、大きいタスクでも小さな単位に区切ってスプリント内に収まるタスクにしてから始めることが多いようですが、それでは見積もりのオーバーヘッドも出てくる。大きめのタスクに関しては担当を決めて張り付いてもらうことが多いですね。</p>

<p>プロダクションに出していく前は、絶対にプルリクエストを送って誰か他のメンバーのレビュー受けてからマージするようにしています。そこで、一人の人に任せきりになって属人化することを避けてバランスをとっているかんじです。</p>

<p><img src="/wp-content/uploads/2017/02/09d374ac7d541092b4a29b8de177f995.jpg" alt="" width="640" height="425" class="aligncenter size-full wp-image-22478" srcset="/wp-content/uploads/2017/02/09d374ac7d541092b4a29b8de177f995.jpg 640w, /wp-content/uploads/2017/02/09d374ac7d541092b4a29b8de177f995-300x199.jpg 300w, /wp-content/uploads/2017/02/09d374ac7d541092b4a29b8de177f995-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：プルリクエストが巨大になるということはないですか？</p>

<p><strong>濱田</strong>：それはそうならないように努めています。まずはテーブルスキーマの変更をレビューに出して本番に反映し、モデル層やAPIなどのレイヤー毎にプルリクエストを出し、順番にレビューしてもらい、リリースしていきます。プルリクエストのサイズを意識して、開発メンバーが誰でも見れるようにしています。</p>

<p><strong>松木</strong>：基本的には、この人が見ないとプロダクションに出せないというやり方はしていません。全員がちゃんと全部レビューできるように務めている。リードエンジニアが育休とっていても、代行が問題なくできるのもそういうのがきちんとできているからなんです。</p>

<p>最近結構ほかのチームから新たにメンバーが異動して来たのですが、そのメンバーはMackerelのことを知らないので、逆に積極的にレビューしてくれたりします。全員がレビューするというのははてなのこだわりです。</p>

<h2>グローバル展開に向け、初期段階からドキュメントを英語化</h2>

<p><strong>白石</strong>：フレームワークは何を使ってますか？</p>

<p><strong>濱田</strong>：WebアプリケーションフレームワークにはPlay Frameworkを用いています。Lightbend社 (旧Typesafe社) の製品で、継続して開発されており、信頼性も高いと思います。フロントエンドでは、AngularJSを使っています。デザイナーさんにもAngularJSのテンプレートを触ってもらっていますね。</p>

<p><strong>白石</strong>：デザイナーさんもプログラミングスキルをお持ちなんですね。すごいなあ。</p>

<p><strong>濱田</strong>：データベースはPostgreSQLを使っています。はてなでPostgreSQLを使っているのはMackerelだけですね。採用理由には、外部キー制約を張ったりチェック制約を設定することでデータを固く守れる点や、JSON型があることでメタデータのようなデータも保持しやすいところにあると思います。</p>

<p><strong>白石</strong>：Scalaを書くのに使っているのは？</p>

<p><strong>濱田</strong>：エディタはVimを使っています。3人ともVimを使っていますね、たまたまですけど(笑)。</p>

<p><strong>松木</strong>：あとはEmacs3人、IntelliJが2人ですね。</p>

<p><strong>白石</strong>：ということは自由なエディタを使っていいんですね。</p>

<p><strong>濱田</strong>：そうですね。私はIDEは使ってないんですが、使っているメンバーもいます。</p>

<p><strong>白石</strong>：最後に、これからチャレンジしていきたいことを聞かせてください。</p>

<p><img src="/wp-content/uploads/2017/02/dc35f176a03b52ce8714098dccbbcad0.jpg" alt="" width="640" height="416" class="aligncenter size-full wp-image-22484" srcset="/wp-content/uploads/2017/02/dc35f176a03b52ce8714098dccbbcad0.jpg 640w, /wp-content/uploads/2017/02/dc35f176a03b52ce8714098dccbbcad0-300x195.jpg 300w, /wp-content/uploads/2017/02/dc35f176a03b52ce8714098dccbbcad0-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>村田</strong>：今後もUIは継続的にブラッシュアップしていきたいですね。ユーザーさんの声を聞いて使いやすくしていきたいと思います。</p>

<p><strong>松木</strong>：ユーザー数がどんどん増えているので今の10倍になっても負荷に耐えられる環境を作っていきたいです。課題としては、マイクロサービスで各種コンポーネントを起動してテスト環境や開発環境を作るのが大変なので解決したい。あとは、せっかくドキュメントを初期段階から全て英語化しているので海外でも使ってもらえるサービスにしていきたいですね。</p>

<p><strong>白石</strong>：Mackerelは僕も使っているので、すごく興味深く聞けました。これからの新機能拡充も期待しています。今日はいろいろ面白い話をありがとうございました。</p>

<p><img src="/wp-content/uploads/2017/02/DSC08316-2.jpg" alt="" width="640" height="417" class="aligncenter size-full wp-image-22385" srcset="/wp-content/uploads/2017/02/DSC08316-2.jpg 640w, /wp-content/uploads/2017/02/DSC08316-2-300x195.jpg 300w, /wp-content/uploads/2017/02/DSC08316-2-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
			</item>
	</channel>
</rss>
