<?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/marketing/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>メルカリのフロントエンドチームが、どんな開発体制で技術選定しているのか聞いてきた！</title>
		<link>/miyuki-baba/25378/</link>
		<pubDate>Thu, 28 Jun 2018 02:00:09 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[システム開発]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[PWA]]></category>
		<category><![CDATA[ReactNative]]></category>
		<category><![CDATA[WebView]]></category>
		<category><![CDATA[フロントエンド]]></category>
		<category><![CDATA[メルカリ]]></category>

		<guid isPermaLink="false">/?p=25378</guid>
		<description><![CDATA[日米通算1億ダウンロードで日本最大フリマアプリ「メルカリ」。今回はメルカリの小嶋仁司さん、坂本結衣さんにメルカリのフロントエンドエンジニアたちがどんな技術や体制で開発しているのか、HTML5 Experts.jp白石俊平...]]></description>
				<content:encoded><![CDATA[<p>日米通算1億ダウンロードで日本最大フリマアプリ「メルカリ」。今回はメルカリの小嶋仁司さん、坂本結衣さんにメルカリのフロントエンドエンジニアたちがどんな技術や体制で開発しているのか、HTML5 Experts.jp白石俊平編集長が直撃インタビューしてきました！</p>

<p><img src="/wp-content/uploads/2018/05/DSC00519-03.jpg" alt="" width="640" height="411" class="alignnone size-full wp-image-25623" srcset="/wp-content/uploads/2018/05/DSC00519-03.jpg 640w, /wp-content/uploads/2018/05/DSC00519-03-300x193.jpg 300w, /wp-content/uploads/2018/05/DSC00519-03-207x133.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>メルカリで重要な役割を果たしているWebView</h2>

<p><strong>白石</strong>：お二人は、メルカリでどんなお仕事をされているんですか？</p>

<p><strong>小嶋</strong>：私は2015年10月に入社して、アプリケーション内のWebViewページの開発を担当してきました。具体的には大規模なトラフィックがある取引画面や、配送サービス「メルカリ便」に新たな運送会社を追加したり、「大型らくらくメルカリ便」の配送機能を拡大したり、集荷サービスなどの開発も行いました。</p>

<p><strong>白石</strong>：ビジネス的に重要な部分を作っていらしたんですね。</p>

<p><strong>小嶋</strong>：技術としてはいわゆるHTML5、CSS3、JavaScriptを使ったフロントエンドで、WebView内からお客様の取引状況に合わせて、Web画面を出す部分を担当してきました。最近はメルカリのJP Web版（日本向けWebサイト）の開発を進めています。機能開発というよりは流入施策ですね。</p>

<p><img src="/wp-content/uploads/2018/05/DSC00469.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-25641" srcset="/wp-content/uploads/2018/05/DSC00469.jpg 640w, /wp-content/uploads/2018/05/DSC00469-300x200.jpg 300w, /wp-content/uploads/2018/05/DSC00469-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>株式会社メルカリ エンジニアリングマネージャー 小嶋 仁司氏</strong><br>メルカリ エンジニアリングマネージャー / Frontend。大手Webメディアで働いた後、Flash の表現力に感嘆しフリーランスで Flash Developerとして働く。その後、Flashの衰退とともにHTML/JS/CSSにスイッチし、ゲームの受託開発などを行う。2015年にメルカリに入社。Web/WebView開発に従事。今はPWAに興味津々。</span></p>

<p><strong>坂本</strong>：エンジニアの坂本です。Engineering Operations Teamというチームで、エンジニア全体の組織作りや制度、採用にコミットしています。現在3名（取材当時）いますが、全員エンジニアです。私は特に中途エンジニアの採用や技術広報、そして技術ブランディングを担当しています。もともとサーバーサイドエンジニアで、2014年に入社して去年の12月まではプロダクトに関わっていました。</p>

<p><img src="/wp-content/uploads/2018/05/DSC00511.jpg" alt="" width="640" height="413" class="alignnone size-full wp-image-25647" srcset="/wp-content/uploads/2018/05/DSC00511.jpg 640w, /wp-content/uploads/2018/05/DSC00511-300x194.jpg 300w, /wp-content/uploads/2018/05/DSC00511-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>株式会社メルカリ Engineering Operations Team　ソフトウェアエンジニア 坂本結衣さん</strong><br>大学卒業後、流通業で営業職や店舗運営を経験し、Web制作会社に転職。PHPを用いたシステムの実装から、要件定義や設計、またDevOpsによる環境構築、Jenkinsサーバー構築等の開発基盤の構築・管理等を担当。2014年にメルカリに入社。Engineer Operation Teamという、エンジニア組織作り・採用・制度・技術ブランディングを行う部署のメンバーとして活躍中。</p>

<p><strong>白石</strong>：メルカリはWebViewをかなり使っているんですか？</p>

<p><strong>小嶋</strong>：最近はReactNativeを使ったりしているので、WebView自体は減っている傾向にあります。ただし、ReactNativeもJavaScriptで書くのでフロントエンドの領域だと思っています。WebViewとして特にコアな機能は取引画面ですね。</p>

<p><strong>白石</strong>：なるほど。ということは、重要な画面はこれまでWebViewで作ってきたんですね。</p>

<p><strong>小嶋</strong>：そうですね。当時からするとホットデプロイできる強みや、Webの技術でデプロイして、クイックに画面が切り替えられるという理由でWebViewが選定されたんだと思います。</p>

<p><strong>白石</strong>：それはサーバーサイドに画面を更新すれば反映されるということですか？</p>

<p><strong>小嶋</strong>：はい。更新性という意味合いでは大分速くなってきたんですけど、ネイティブはどうしてもiOSで申請があったり、ネイティブのアップデートがあるので…。例えば取引画面で使用している外部の配送サービスが急に一時期使えなくなったときに、ネイティブで何ができるかというとメンテナンスと出すしかなく、お客様はアップデートを待つしかありません。それであれば、Web上だけでクイックに開発できる方が良いという選択だったと思います。例えば、招待ページはWebViewで作られていましたね。</p>

<p>WebViewの全体量としては減っていますが、Web文脈でいうと注目度はかなり高まっています。例えばPWAとか。技術選定の根底にあるのは、お客様の体験だと思っているので、その時その時の状況に適した技術選定ができていればいいと思っています。WebViewをなくしていこうとか、PWA（Progressive Web Apps）だけにしていこうとかではなく、その都度リーチできるものを選べばいいかなと。</p>

<p><strong>白石</strong>：パフォーマンスの速さとユーザー体験を重視しているわけですね。</p>

<p><strong>小嶋</strong>：会社全体としてもテックカンパニーという点を重視しているので、いち早く最新技術を取り入れるという目的もあると思います。</p>

<p><img src="/wp-content/uploads/2018/05/DSC00493.jpg" alt="" width="640" height="403" class="alignnone size-full wp-image-25663" srcset="/wp-content/uploads/2018/05/DSC00493.jpg 640w, /wp-content/uploads/2018/05/DSC00493-300x189.jpg 300w, /wp-content/uploads/2018/05/DSC00493-207x130.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>開発速度を優先すべく、コードベースをリージョンで分割</h2>

<p><strong>白石</strong>：小嶋さんご自身は、ReactNativeの開発をしているんですか？</p>

<p><strong>小嶋</strong>：僕自身は以前はUSプロダクトもやっていましたが、現在はJPプロダクトの担当なので、ReactNativeのプロダクト導入経験はないです。</p>

<p><strong>白石</strong>：ちなみに、USプロダクトということは、JPプロダクトとは別にアプリを作っているんですか？</p>

<p><strong>小嶋</strong>：はい。コードベースの話をすると、去年の秋くらいに現地での開発速度を優先するという目的で、JPとUSとUKのAPI含め、リージョンを分割したんですね。というのも、日本で開発した機能で、一部USで表示がどうしてもおかしくなってしまうこともありました。そういうことを懸念して、現地のことは現地でオーナーシップを持って開発・運営することにして、分割した経緯があります。</p>

<p><strong>白石</strong>：Googleは全世界で一つのコードベースだと言ってますが、御社は分割したほうがいいと判断されているというのは、興味深いですね。</p>

<p><strong>小嶋</strong>：ステークホルダーが同じリージョンにないということは、タイムゾーン分だけコストがかかります。例えばUSである機能をさくっと1日で開発してリリースしたいときも、JPに影響がないかを見るためにはQAなど複雑なリレーションが発生します。なので、現地でやっていることは現地のルールを優先しています。</p>

<p><strong>坂本</strong>：メルカリは会社のミッションとしても、「世界的なマーケットプレイスを創る」ことを目標としています。最終的に世界中でメルカリを使ってもらいたい。ですが、まずは世界を獲りにいくことが最優先。そのために一番いい選択肢は何かと考えたときにリージョンごとに分けるほうが最適だと判断をしました。</p>

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

<p><strong>小嶋</strong>：全リージョンで、完全に共通のコードベースを持つことは大切なんですけど、必ずしも日本のUIが全世界で最適だとは限らない面もあります。民族性や国土の広さなど、様々な違いがあるし、前提として物を売ったり買ったりするマインドの違いもある。そのときに共通のUIベースで勝負するのは難しいという課題もありますね。</p>

<p><strong>白石</strong>：とはいえ、決断にはかなりの覚悟が必要だったんじゃないかと思います。そんなことないですか？</p>

<p><strong>坂本</strong>：メルカリのバリューの一つに「Go Bold（大胆にやろう）」があります。経営陣も迷ったと思いますが、かなりスピーディに進めていたと思います。</p>

<p><strong>白石</strong>：ちなみに、最近GoogleがWeb PaymentsやShippingの機能をブラウザで共有のUIを提供するらしいという話を聞いたのですが、メルカリさんはどう考えますか？</p>

<p><strong>小嶋</strong>：Google Paymentsはかなり親和性はあるんじゃないかと思ってます。Webの可能性という話になるんですけど、決済に関して標準化されたものがあるなら、使っていきたい気持ちはあります。もちろんお客様にとって便利になるかどうかを検討してからになりますが、特にPWAやWebベースでのプラットフォーム化が加速していったときに十分可能性がありますね。</p>

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

<p><strong>白石</strong>：個人的にもPWAにはご興味があるとのことでしたけど、社内ではどうPWAを活用していきたいですか？</p>

<p><strong>小嶋</strong>：去年もサンフランシスコで開催された「Chrome Dev Summit」というカンファレンスに参加させてもらったのですが、現地ではトラフィックに弱いインドなどではかなり可能性があると発表されていました。話を戻すとお客様にとっての体験向上という意味で、正しいプラットフォームは何なのかを考えながら、特に細かくどんどん変わっていくべきだと考えています。</p>

<p>僕の個人的な意見ですが、例えば会社がビジネスを選定するときは、端末の保有台数や通信インフラの整備の高さなどを含めて海外進出を考えていくと思うんです。いわゆるネイティブライクな体験がWebベースでもできるように担保されるのであれば、Push Notificationなどもありなんじゃないかと。PWAを一番最初に導入してユーザー数を3倍に増やしたインドのFlipkartのように、インドという巨大な人口を有する国でも戦えるんじゃないかと期待しています。</p>

<p><strong>白石</strong>：PWAをやるときはWebViewでやってたコードがまた使えるようになるんですか？</p>

<p><strong>小嶋</strong>：それでいうと、PWAのアーキテクチャにも最適解がかなりあって。例えばService Workerのオフラインキャッシュ、ヘッダー部分とかグローバルナビ部分などはきっちりコンテンツ部分とは分けるべきだと思います。</p>

<p>App Shellモデルの概念もあるし、既存のWebで培われているコードべースができるとは思っていないのと、メルカリの課題としてリプレイスとかもあると思っているので、新しいものは新しく作りたいですね。</p>

<h2>メルカリの開発体制や、サービスのリプレイスは？</h2>

<p><strong>白石</strong>：続いては、メルカリの開発体制や、サービスのリプレイスをどう進めていくのかなどについて聞かせてください。</p>

<p><strong>小嶋</strong>：フロントエンドの文脈で言うと、一部リプレイスの必要があって、常に現場から上げるようにしています。今進んでいるプロジェクトとバランスを持って進められるように意識しています。</p>

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

<p><strong>白石</strong>：それはメルカリJP Webの話ですか？</p>

<p><strong>小嶋</strong>：そこもやりたいのですが、もっと優先度が高いところもあります。なぜ今そこをやるのかというのを説明した上でやるようにしています。Webだけではないかなと思っています。</p>

<p><strong>白石</strong>：御社でいうフロントエンドというのは、もうWebに限らない？</p>

<p><strong>小嶋</strong>：そうですね。フロントエンドはアプリのWebViewの開発をしている人もいるし、Webの開発をしている人もいるし、USはJavaScriptエンジニアが開発しています。Node.jsなども使われています。領域は広がっています。</p>

<p><strong>白石</strong>：小嶋さんがフロントエンドだからあまり話に出てこないのかもしれないのですが、思いっきりネイティブで書かれているところも結構あるんですか？</p>

<p><strong>小嶋</strong>：かなりあります。うちは優秀なiOSエンジニア、Androidエンジニアが相当数いるので、ロイヤルティ高くお客様の体験向上のために寄与しています。フロントエンドは現状では更新性の高いところを担当していますね。</p>

<p><strong>白石</strong>：さらにメルカリの開発の裏側を知りたいと思うんですが、クラウドやデータベースの話から聞かせてもらってもいいでしょうか。</p>

<p><strong>坂本</strong>：サーバーサイドはいろいろな会社のサービスを使っていますね。日本のサーバーサイドがメインで動いているのは、さくらの専用サーバーですし、USではAWSを使っていたり、現在では裏側のドメインごとによるマイクロサービス化の流れがあります。</p>

<p><img src="/wp-content/uploads/2018/05/DSC00483.jpg" alt="" width="640" height="421" class="alignnone size-full wp-image-25676" srcset="/wp-content/uploads/2018/05/DSC00483.jpg 640w, /wp-content/uploads/2018/05/DSC00483-300x197.jpg 300w, /wp-content/uploads/2018/05/DSC00483-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：サーバ―サイドは何を使っているんですか？</p>

<p><strong>坂本</strong>：サーバ―サイドで最初からコードべースで一番使っているのは、PHPです。</p>

<p><strong>白石</strong>：それ以外の言語も増えているということでしょうか。</p>

<p><strong>坂本</strong>：マイクロサービスの文脈の中で基本的にインターフェイスが定義されていれば、中身はなんでもOKです。その中でもいろいろな利点からGoを使っているケースが多いです。</p>

<h2>チーム体制は3カ月ごとに適したチームを模索</h2>

<p><strong>白石</strong>：続いては、チーム作りや開発体制について聞いていこうと思います。先ほどフロントエンドの定義についてお聞きしましたけど、大まかにいうとフロントエンド、iOS、Android、サーバーサイドエンジニアというかんじなんですか？</p>

<p><strong>小嶋</strong>：開発体制でいうと、さらにプロダクトマネージャーとデザイナーが入ってきます。いわゆるチームプロダクトという大きなくくりで、プロダクトを推進するためのチームになっています。チーム体制についてはクォーター（四半期）制という3カ月ごとに適したチームを模索しています。</p>

<p>僕の経験でいうと、かなりフレキシブルに動いていて、プロジェクトにプロダクトマネージャー、エンジニア、デザイナーと就くこともあれば、僕はJPフロントエンドという横ぐしのチームで動いています。その時にどういうチームが最適なんだろうと結構模索された上でチームを構成します。3カ月後に同じチームがあるとも限らないし、まったく違うチームでやる人もいるし、ずっと同じチームでやる人もいます。</p>

<p><strong>白石</strong>：3カ月ごとに編成されるというのは、大分スピーディですね。ちなみにどう開発しているか、どう開発を進めているかもお聞きしたです。相当UXにはこだわっていると思いますが、事前の調査やテスト、それをどうフィードバックして、どう開発やデザインに反映しているんでしょうか。</p>

<p><strong>小嶋</strong>：UXに関しては1年前くらいからユーザービリティテストをかなり活発にやっています。お客様に使ってもらって、ご意見を聞きながら、UI/UXの改善しています。あとはABテスト基盤があるので、プロダクトマネージャーが数値をもとに10%改善に基づいて、数値を見ながら取り組んでいます。常にPDCAが回っているかんじです。</p>

<p>ターゲットや契約している会社があるわけではなく、社員は参加も自由で公募もされています。行きたい人が行ける。全社的にプロダクト志向が高いですね。エンジニアだからプロダクトに意見を言わないという風土はないですね。</p>

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

<p><strong>白石</strong>：クォーターごとにチームが変わっていくというお話ですけど、タスク管理などはどうされているんですか？</p>

<p><strong>小嶋</strong>：タスク管理に関してはアトラシアンのJIRAを使っていて、全社的にチケット駆動開発で進んでます。情報管理はOSSのコミッターがいるんですが、CrowiというWikiを使っています。チーム移動したからツールが違うというのはないですね。プロジェクトごとに切っているチームもあります。</p>

<h2>開発速度が早いがゆえの課題</h2>

<p><strong>白石</strong>：現在の課題と自慢できること、今後やりたいことについて聞かせてください。</p>

<p><strong>小嶋</strong>：メルカリではクォーターごとにプロジェクトのゴールを設定しているので、開発速度が相当早いんです。さらに新規事業も多い。開発速度が早いとなると、エンジニアとしては、技術的負債を早く返したいと考えます。その辺のバランスを見直そうという動きも出ていますが、開発スピードの早い組織ならではの課題だと考えています。</p>

<p><strong>白石</strong>：技術的負債をどうするかという問題ですね。</p>

<p><strong>小嶋</strong>：スピードも大事ではあるのですが。</p>

<p><strong>白石</strong>：自動テストもきっちり書いているとそれだけで時間がかかったりするから、省略するところもあったりしますよね。</p>

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

<h2>CTOとVo/Eの二頭体制</h2>

<p><strong>白石</strong>：メルカリ開発チームならではの自慢できることは何ですか?</p>

<p><strong>小嶋</strong>：現場が技術選定をある程度任されているところですね。あとは月並みですけど、全社員に開発者端末が支給されるんですね。iOSを使っている人だったらAndroid端末、Androidを使っている人ならiOS端末が入社時に無償で貸与されます。パフォーマンス出せるための備品や、エンジニアが最適だと考えるソフトウェアに対してはかなり優遇されていると思います。</p>

<p><strong>坂本</strong>：メルカリは退職者が圧倒的に少ないですね。エンジニアに限らず、会社が成長を続けているので離れていく人が少ないし、
ネガティブなことを考える必要がない。プロダクトに集中できるし、今の環境をよくすることに注力できます。</p>

<p>またCTOとVP of Engineerがそれぞれ1名いて、技術的なトップと開発チームのマネジメントのトップが分かれているので、バランスがとれていると思います。CTOが開発体制に入り込んでしまうと、技術的な進歩に貢献することに時間がさけなくなってしまう恐れがありますが、そういうことがありません。</p>

<p>圧倒的に会社の技術を引っ張るという意味で、会社全体を先導しているという姿勢を見せてくれている。リアルな開発現場はVP of Engineerがコミットしてくれている体制があるので、エンジニアたちはよけいなことに時間を使わずに本質的なことにフォーカスできる環境だと思います</p>

<p><img src="/wp-content/uploads/2018/05/DSC00505.jpg" alt="" width="640" height="415" class="alignnone size-full wp-image-25681" srcset="/wp-content/uploads/2018/05/DSC00505.jpg 640w, /wp-content/uploads/2018/05/DSC00505-300x195.jpg 300w, /wp-content/uploads/2018/05/DSC00505-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：CTOがこうだと言っても、現場が異議を唱えることはないんですか？</p>

<p><strong>小嶋</strong>：トップダウンというより、どちらかといえば方向性を提示した上でテック寄りな人たちでデスカッションしている。距離が近いので、導入するにしてもしないにしても議論が頻繁に行われています。</p>

<p><strong>白石</strong>：現場とトップの距離が近いとのことですが、CTOとのコミュニケーションもフラットにできるということですか？</p>

<p><strong>小嶋</strong>：そうですね。かなりオープンな文化なので、CTOと1on1したいときも自由に設定できます。「必ずマネージャーを通すように」などの文化はないです。それから、メルカリでは3カ月に一回、Be Professional Dayという、普段はできないことをやろうという取り組みがあり、誰が何を開発してもいいことになっています。</p>

<p>前回はオートメーションというテーマを設けて箱根で開発合宿をしたのですが、CTOも来てくれて、いろいろアドバイスしてくれました。関係性としてはフラットなのかなって思います。</p>

<p><strong>白石</strong>：エンジニアにとってはいい開発環境とチーム体制ですね。これからのメルカリにも期待しています！今日はいろいろ面白い話をありがとうございました。</p>

<p><img src="/wp-content/uploads/2018/05/DSC00523.jpg" alt="" width="640" height="425" class="alignnone size-full wp-image-25639" srcset="/wp-content/uploads/2018/05/DSC00523.jpg 640w, /wp-content/uploads/2018/05/DSC00523-300x199.jpg 300w, /wp-content/uploads/2018/05/DSC00523-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>メルカリのバリュー「Go Bold」グッズがたくさん！</strong></span></p>
]]></content:encoded>
			</item>
		<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>フォント素人の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パフォーマンス改善について知っておきたいコト」についてあほむに聞いてきた</title>
		<link>/shumpei-shiraishi/24156/</link>
		<pubDate>Mon, 11 Sep 2017 01:00:23 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[Webパフォーマンス]]></category>
		<category><![CDATA[http2]]></category>
		<category><![CDATA[サイバーエージェント]]></category>

		<guid isPermaLink="false">/?p=24156</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (3)こんにちは、編集長の白石です。 この記事は、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> (3)</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>今回お話を伺ったのは、株式会社サイバーエージェントにお勤めの佐藤歩さんです（ネット上では「あほむ」「ahomu」のIDで有名）。
（プロフィールは<a href="http://events.html5j.org/conference/2017/9/speaker/index.html#ahomu" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちら</a>）</p>

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

<p>あほむさんのセッションは「最近のWebパフォーマンス改善について知っておきたいコト」（ホール 13:20-14:00）です。
（現在<a href="https://html5j.connpass.com/event/64992/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference 2017</a>は定員オーバーの状態ですが、無料イベントということもあってキャンセルも多めに出るらしいので、あきらめずにキャンセル待ちすることをお勧めします！）</p>

<h2>パフォーマンスはなぜ重要か？を違う切り口から伝える</h2>

<p><b class="speaker siraisi">白石:</b> Webパフォーマンスについて、<a href="http://events.html5j.org/conference/2017/9/session/#h2" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「ベーシックな話を少々と、最近の動向」をお話されるということですね</a>。</p>

<p><b class="speaker ahomu">あほむ:</b> はい、そうですね。まあ、まだセッションの内容はほとんど固まっていないので、当日は全然違った話をすることになるかもしれないのですが。</p>

<p>普通パフォーマンスに関する「ベーシックな話」というと、「なぜパフォーマンス改善は重要か」ということを語られることが多いと思うんです。でも、「パフォーマンスが重要」というのは、もうエンジニアには広く認識されているんですよね。</p>

<p>足りないのは、<strong>パフォーマンス改善を「開発者の自己満足」で終わらせない</strong>ことなんじゃないかと。パフォーマンス改善が、自社のビジネスにどう寄与するのか。そこを考えないと、意味のないパフォーマンス改善を行ってしまう恐れもあるし、社内の理解も得られない。</p>

<p>「パフォーマンスは重要である」というメッセージを、そういう観点からも伝えたい気がします。それも他社の事例とか一般論から語るんじゃなくて、私自身が遭遇した実体験などを踏まえて語りたいな…と思ってます。</p>

<p><b class="speaker siraisi">白石:</b> それは面白そうですね！具体的には、どんな実体験になりますか？</p>

<p><b class="speaker ahomu">あほむ:</b> 例えば、弊社のサービスってSNSでWebページが拡散されることが、非常に大きな比重を占めているんです。つまり、TwitterやFacebookのアプリ上で、WebViewでページを表示されることがすごく多いんです。そうなると、実は<strong>ブラウザのキャッシュにすら期待できないことが多い</strong>。弊社のサービスはiOSのユーザーが多いのでなおさらです（※）。</p>

<p>とはいえ、<strong>SNSを通じてたまたま遭遇した、っていう千載一遇のチャンスは活かさなくてはならない</strong>。そういう限定された環境でも最高のUXを実現するため、最大のパフォーマンスを発揮するにはどうしたらよいかを常に試行錯誤しているんです。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。確かにそれは、パフォーマンスが非常に重要なシチュエーションと言えそうです。</p>

<p><b class="speaker ahomu">あほむ:</b> こういう例を含めていろいろ紹介できるといいかもしれません。URLさえあればどこからでもアクセス可能というのはWebの利点ですが、要はどんな環境で見られるかわからないということです。だから、Webのパフォーマンス改善には終わりがないし、少しでもその助けになるよう、常に新しいアイデアや技術が考案されています。そういう技術のうち、比較的新しくて、活用しがいのあるテクニックや仕様について、いろいろご紹介できればと思っています。</p>

<p><small>
※弊社のサービスはiOSのユーザーが多いのでなおさら…Androidであれば、Chrome Custom Tabという仕組みでメインブラウザ（Chrome）とキャッシュなどのリソースが共有されることも期待できる。iOSは、Chrome Custom Tabに近いSafari View Controllerという仕組みがあるが、あまり利用されていない。
</small></p>

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

<h2>ページロードパフォーマンスの改善テクニック</h2>

<p><b class="speaker siraisi">白石:</b> では、パフォーマンスを改善していくテクニックや仕様をいくつかご紹介いただけますか？</p>

<p><b class="speaker ahomu">あほむ:</b> Webパフォーマンスを考える際には、やはりページロード (ページの読み込み速度)と ランタイム （ページ実行中のパフォーマンス）に分けて考えるのが王道です。ページロードの改善については、<strong>最近だとHTTP/2の話が中心になる</strong>と思います。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、御社のサービスでは、HTTP/2対応はもうかなり進められている感じなのですか？</p>

<p><b class="speaker ahomu">あほむ:</b> はい。できるところからHTTP/2にしていくというアプローチで、現在は多くのサービスがHTTP/2を利用して動いています。</p>

<p><b class="speaker siraisi">白石:</b> 実際にHTTP/2に対応してみていかがですか？苦労した点とかはありましたか？</p>

<p><b class="speaker ahomu">あほむ:</b> 具体的な切り替え作業については、インフラの専門チームが実施してくれるので、あくまで開発側からの意見になりますが…<strong>ほとんど苦労していることはないですね</strong>。</p>

<p><b class="speaker siraisi">白石:</b> おお、本当ですか。それは素晴らしい。</p>

<p><b class="speaker ahomu">あほむ:</b> はい、HTTP/2に切り替えても、開発への影響はほとんどなかったという点はとても重要ですね。アプリケーションとネットワークで、レイヤーが違うから当然といえば当然なのですが、やはり実際に経験してみると、そのありがたさが実感できます。トレードオフがほとんどないにも関わらず、パフォーマンスの向上が見込めるのですから。</p>

<p><b class="speaker siraisi">白石:</b> でも、HTTP/2に切り替えたことで、本当にパフォーマンスアップするのか、懐疑的な意見も目にしたことがあります。実際のところどうなんでしょうか？</p>

<p><b class="speaker ahomu">あほむ:</b> うーん…実際のところ、それはありますね。<strong>HTTP/2にしただけだと、体感的に良くなったっていう実感があまりないのは、正直なところです(笑)。</strong></p>

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

<p><b class="speaker siraisi">白石:</b> それも正直な意見として、貴重だと思います(笑)。</p>

<p><b class="speaker ahomu">あほむ:</b> 例えばHTTP/2でヘッダ圧縮されてデータ転送量が多少減ったとしても、アプリケーションで扱うデータが最適化されてなかったら、誤差みたいなレベルになってしまいますからね。HTTP/2によるパフォーマンス向上は、確実に効いているとは思います。ですが、実際のサービスでは、常に別のところにパフォーマンスのボトルネックが潜んでいて、効果のほどが見えにくいんですよね。</p>

<p><b class="speaker siraisi">白石:</b> 他には、ページロードの最適化で知っておいたほうがいいテクニックとかありますか？</p>

<p><b class="speaker ahomu">あほむ:</b> ほかには、コンテンツの圧縮に<a href="https://github.com/google/zopfli" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Zopfli</a>や<a href="https://github.com/google/brotli" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Brotli</a>を利用していますね。他にはResource Hintsなども使っているので、お話したいですね。</p>

<p><span style="font-size: 80%;">※参考記事：<a href="https://developers.cyberagent.co.jp/blog/archives/5975/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">FRESH! Web パフォーマンス改善 〜サーバサイド編〜</a></span></p>

<p><b class="speaker siraisi">白石:</b> Zopfli…？そんな圧縮形式があるんですか？</p>

<p><b class="speaker ahomu">あほむ:</b> はい、ZopfliもBrotliも、どちらもGoogleが開発した圧縮形式です。</p>

<p>Zopfliは、圧縮の速度は遅いですが、そのかわりに圧縮効率は非常に良い。そしてgzipとの互換性があるので、gzipに対応したブラウザであればだいたい扱えるという大きな利点があります。</p>

<p>Brotliは、gzipとの互換性はありませんが、非常に効率のよい圧縮アルゴリズムです。こちらは現在のところ、Chrome, Firefox, Edgeでのみ利用可能です。</p>

<p><b class="speaker siraisi">白石:</b> <a href="https://www.w3.org/TR/resource-hints/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Resource Hints</a>というのはどういうものですか？</p>

<p><b class="speaker ahomu">あほむ:</b> 利用するリソースを先読みするヒントをブラウザに与えるための仕様です。これを利用すると、現在のWebページに含まれていないリソースであっても、ブラウザに先読みさせることができます。dns-prefetch (名前解決を実行しておく）, preconnect （サーバ接続を行っておく）, prefetch （リソースのフェッチを実行しておく）, prerender （ページのレンダリングをバックグラウンドで実行しておく）といったタイプの先読みが可能です。
<small>
（筆者注: <a href="https://blog.jxck.io/entries/2016-02-11/resource-hints.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Jxck</a>さんのブログで詳しく解説されています）。
</small></p>

<h2>ランタイムパフォーマンスの改善テクニック</h2>

<p><b class="speaker siraisi">白石:</b> ランタイム （アプリケーション実行時）のパフォーマンスを向上させるために使用している技術にはどんなものがありますか？</p>

<p><b class="speaker ahomu">あほむ:</b> <a href="https://github.com/w3c/IntersectionObserver" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Intersection Observer</a>や<a href="https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Passive Event Listeners</a>は利用しがいがあると思います。</p>

<p><strong>Intersection Observer</strong>というのは、要素同士の領域が交差したり、もしくはビューポート（ユーザーに見えている範囲）に要素が入ったかどうかなどを検出できるAPIです（筆者注: Intersectionとは「交差」の意味）。これを利用すると、ビューポート外で行われる処理を抑制したり、遅延させたりすることが可能になるので、パフォーマンス向上には非常に効果的です。わかりやすいのは、img要素がビューポート内に現れるまで画像の読み込みを遅延させる…などですね。</p>

<p><strong>Passive Event Listeners</strong>というのは、UIイベントが <code>preventDefault()</code> （デフォルトの動作をキャンセルする）されないことを保証するための仕組みです。</p>

<p>スクロールイベントなどは、 <code>preventDefault()</code> を行うことでブラウザのスクロール処理そのものをキャンセルすることができます。逆に言うと、ブラウザはスクロールがキャンセルされる可能性を考えると、イベントハンドラを実行してから実際のスクロールを行わなくてはならない。だから、イベントハンドラの実行に時間がかかったりすると、スクロール処理が詰まってしまうんです。これが<strong>スクロールジャンク</strong>と呼ばれる現象です。</p>

<p>ただ、実際に <code>preventDefault()</code> でスクロール処理を止めたいというケースは多くはありません。なので、「このイベントハンドラはpreventDefault()を呼ばないよ」ということをブラウザに伝える手段として用意されたのがPassive Event Listenersです。</p>

<p><small>
（筆者注: これらも、Jxckさんのブログに詳しい解説がある。<a href="https://blog.jxck.io/entries/2016-06-25/intersection-observer.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Intersection Observer</a> <a href="https://blog.jxck.io/entries/2016-06-09/passive-event-listeners.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Passive Event Listeners</a>）
</small></p>

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

<p><b class="speaker siraisi">白石:</b> 今おっしゃったIntersection ObserverやPassive Event Listenersは、全てのブラウザで動くわけではありませんよね？</p>

<p><b class="speaker ahomu">あほむ:</b> はい。なので、動作しないブラウザ用にFeature Detectionで分岐を設けたり、Polyfillも活用しています。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。ただ、最初にお聞きした例だと「SNSで拡散されたページの最適化に注力している」というお話でした。<strong>こういうランタイム系のパフォーマンス改善って、SPA (Single Page Application) ではない通常のランディングページやメディアのサイトなどでも重要なのでしょうか？</strong></p>

<p><b class="speaker ahomu">あほむ:</b> そう思います。先程も申し上げたように、SNSを通じてサイトにアクセスしてくれるのって、ユーザーと接触できる千載一遇のチャンスなわけです。そこからモバイルアプリへの誘導を行うこともできる。なので、そういう千載一遇のチャンスで少しでも機会損失を起こさないように、入念にパフォーマンスをチューニングするのは非常に重要です。</p>

<p>個人的には、jQueryを使った普通のWebサイトこそ、ランタイムのパフォーマンスにもっと気を使うべきだし、できるとも思います。jQueryのプラグインが最新の仕様に追従すれば、プラグインをアップデートするだけで恩恵を得られるわけですから。</p>

<p>ただ逆に、プラグイン側が対応してくれなかったりすると、プラグインの中に手を入れるわけにもいかず、対応が進まないということの裏返しでもありますけどね…悩ましい問題です。</p>

<h2>パフォーマンス改善を「開発者の自己満足」で終わらせないために</h2>

<p><b class="speaker siraisi">白石:</b> これまでご紹介いただいた様々なテクニックですが、これらを活用してパフォーマンスを実際に改善していくのは、実際には骨の折れる作業だと思います。そうした、パフォーマンス改善作業に投下するコストと、それによって得られるリターンについては、どのようにお考えでしょうか？</p>

<p><b class="speaker ahomu">あほむ:</b> はい、おっしゃるとおり、これらのテクニックをただ使って、目に見えない部分でパフォーマンスを改善しても、単なる開発者の自己満足に終わってしまいます。それを避けるためには、<strong>まずは正しく計測することと、それがビジネス上のKPIとどう関連付けているかを検証していくこと</strong>が必要です。</p>

<p>まず計測についてですが、クライアントサイドのパフォーマンスを計測する指標は、現在も様々なものが考案され、利用可能です。</p>

<p>例えば<strong>First Paint</strong>。Webページの描画が開始されたタイミングを表す指標で、ChromeやEdgeでは非標準のAPIから値を得ることができます。</p>

<p>ただ、First Paintだけでは、コンテンツの表示が完了するまでの速度などについてはわかりません。最も重要なのは、ユーザーに見える範囲、つまりビューポートの描画がいつ完了するかです。</p>

<p><img src="/wp-content/uploads/2017/09/d49206c651f16b4bd779417fc8ee95c3.jpg" alt="" width="640" height="419" class="alignnone size-full wp-image-24180" srcset="/wp-content/uploads/2017/09/d49206c651f16b4bd779417fc8ee95c3.jpg 640w, /wp-content/uploads/2017/09/d49206c651f16b4bd779417fc8ee95c3-300x196.jpg 300w, /wp-content/uploads/2017/09/d49206c651f16b4bd779417fc8ee95c3-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>そういう観点での指標としては<strong>Speed Index</strong>があります。Speed Indexを計測する基本的な方法としては、描画中の画面をキャプチャして、最終的な表示結果が得られるまでにどれくらいかかるかを測るというものです。弊社のサービスでは、ページビューや直帰率といったKPIとSpeed Indexの間に相関関係が認められたため、Speed Indexを中心にパフォーマンス改善を行いました。</p>

<p>さらにこうした指標は実際のユーザーの環境で得られた値を一定量集めることも大事なので、集計結果をGoogle Analyticsに送信しています。そうすることで、GAを使いなれたプロに分析をお任せすることもできますからね。</p>

<p>そうした経緯は<a href="https://developers.cyberagent.co.jp/blog/archives/9540/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">弊社技術ブログの記事</a>に詳しく書かれています。</p>

<p><b class="speaker siraisi">白石:</b> なるほど…パフォーマンス改善がビジネスに寄与するという道筋を立てることで、パフォーマンス改善が業務として意味にあるものになるわけですね。</p>

<p><b class="speaker ahomu">あほむ:</b> そうですね。パフォーマンス改善とビジネスが両輪としてうまく回るためにも、やはり様々なパフォーマンス指標や計測が大事になってきます。</p>

<p>指標は他にも<strong>First Contentful Paint</strong> （コンテンツが表示され始めた時）や <strong>First Meaningful Paint</strong> （ユーザーに意味のある表示になったとき）など様々なものが考案され、実装も行われています。よければそういう話をまとめた<a href="https://havelog.ayumusato.com/develop/performance/e744-performance_metrics.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">私のブログ記事</a>も見てみてください。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、今日は貴重なお話をお聞かせいただきありがとうございました！HTML5 Conferenceでのセッションも楽しみにしています。</p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
		<item>
		<title>『HTML5 Experts.jp』が編集プロセスの「自動化＆見える化」にチャレンジしてみました【データ編】</title>
		<link>/miyuki-baba/18292/</link>
		<pubDate>Fri, 19 Feb 2016 00:00:58 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[Google Analytics]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">/?p=18292</guid>
		<description><![CDATA[HTML5 Experts.jpは「日本にもっとエキスパートを」をビジネスゴールに、エンジニアやクリエイターのスキルアップに役立つ情報を発信すべく、2014年7月から300本以上の記事を公開してきました。この1年半、日々...]]></description>
				<content:encoded><![CDATA[<p>HTML5 Experts.jpは「日本にもっとエキスパートを」をビジネスゴールに、エンジニアやクリエイターのスキルアップに役立つ情報を発信すべく、2014年7月から300本以上の記事を公開してきました。この1年半、日々サイト運営してきて思うのは、もっと記事PVの集計やデータ共有が自動化されて、執筆陣とのコミュニケーションがスムーズにしたいということ。</p>

<p>そこで今回編集部では、スペシャリストにアドバイスを受けながら、データ分析を自動化したり、執筆陣ともっと気軽に議論できる編集プロセスの「自動化＆見える化」にチャレンジしてみました。</p>

<p><img src="/wp-content/uploads/2016/01/DSC09137.jpg" alt="" width="640" height="424" class="aligncenter size-full wp-image-18188" srcset="/wp-content/uploads/2016/01/DSC09137.jpg 640w, /wp-content/uploads/2016/01/DSC09137-300x199.jpg 300w, /wp-content/uploads/2016/01/DSC09137-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>「日本にもっとエキスパートを」の指標をつくる</h2>

<p>今回編集部が指導を仰いだのは、NTTレゾナントのUX戦略チームで「<a href="http://www.goo.ne.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">goo</a>」全体のSEOなどを担当する大谷祥さん。また、全社横断のマーケティング室という組織でアクセス解析やABテストツールを利用したデータ主導によるサイト改善に対する取り組みも行っています。</p>

<p>まずは、HTML5 Experts.jp（以下、HX)が目指す「日本にもっとエキスパートを」というビジネスゴールが、どういう状態になれば達成されたと見なすのか、その成果を測る指標を定めるところから開始しました。</p>

<p><strong>大谷</strong>：「日本にもっとエキスパートを」がビジネスゴールといっても、これが指標だと示すのはすごく難しいと思うんです。どうなった状態が、エキスパートが増えたと言えるのか、まずは皆さんの意見をお聞きしたいんですよ。</p>

<p><img src="/wp-content/uploads/2016/01/DSC09144.jpg" alt="" width="640" height="419" class="aligncenter size-full wp-image-18192" srcset="/wp-content/uploads/2016/01/DSC09144.jpg 640w, /wp-content/uploads/2016/01/DSC09144-300x196.jpg 300w, /wp-content/uploads/2016/01/DSC09144-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size:80%;">　▲NTTレゾナント株式会社 UX戦略チーム 大谷祥さん</span></p>

<p><strong>白石</strong>：そうですね。HXは、高い技術力を持ち、専門技術の啓蒙活動を行っている知名度の高いエキスパートや、技術コミュニティや自らの専門技術の知識を世に発信したがっているコントリビューターの方たちを、数多く執筆陣に迎えています。</p>

<p>HXを読むことで専門知識や技術力を高めてもらい、次はその人がいいアウトプットをたくさんしてエキスパートになる。そうした広い意味でのエキスパートの人が増えて、どんどんいい情報や知識が循環されていくことも目標の一つです。技術コミュニティの考え方に近いんですが、それをメディアという場で活性化させたいんですよね。</p>

<p><strong>仲</strong>：記事のPVやUU数を増やすことはもちろんですが、有益な情報を発信してくれるエキスパートの執筆陣も増やしていきたいです。コントリビューターがエキスパートになったり、記事を読んでくれた読者がエキスパートになってくれたら素敵ですね。</p>

<p><img src="/wp-content/uploads/2016/02/DSC09157.jpg" alt="" width="640" height="440" class="aligncenter size-full wp-image-18306" srcset="/wp-content/uploads/2016/02/DSC09157.jpg 640w, /wp-content/uploads/2016/02/DSC09157-300x206.jpg 300w, /wp-content/uploads/2016/02/DSC09157-207x142.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size:80%;">　▲左から大谷さん、HTML5 Experts.jp編集部 桂 健太さん、仲 裕介さん</span></p>

<p><strong>白石</strong>：ただ、ここでエキスパートって言っているのは、僕らの定義してるHXのエキスパート（<a href="https://html5experts.jp/author/" data-wpel-link="internal">エキスパート一覧ページ</a>に掲載されている方々）と、一般的な意味（「専門家」という意味）でのエキスパートを増やすっていう、どっちの意味もあると思ってて。広い意味でのエキスパートが増えて、HXというメディアという場で、何か書いていただいたり交流する機会みたいなのを作っていければと。</p>

<p><strong>大谷</strong>：技術コミュニティの考え方に近いかんじですね。</p>

<p><strong>白石</strong>：HXは、もともとそんなに閉じたコミュニティにするつもりはなかったんです。僕はhtml5jというコミュニティを立ち上げて、管理人をやっていたことがあるんです。それは誰でも入れる『Everyone is welcome！』というかんじで運営していました。でも一方で、入るのにはハードルがあるコミュニティも作ってみたかった。卓越した技術や知識を持つエキスパートだけが入れるような。そのコミュニティというのは、今、メーリングリストで運営されています。でも、メーリングリストって、情報が一方通行なんですよね。HXもメーリングリストでエキスパートたちとやりとりしていますが、それをやめて、Slackに移行したいなと。</p>

<p>企画のアイデア出しはもちろん、執筆の依頼や原稿の催促なども、メールでがっつりやるよりも、Slackとかでbotを作って締め切りを伝えてくれるようなことが、気軽にできたらいいなとか。さらに妄想すると、PV報告botみたいなの作ってみたい。そういう気軽に意見を言い合ったり、お互いに編集し合えるスタイルにしたいですね。</p>

<p><img src="/wp-content/uploads/2016/02/DSC09192.jpg" alt="" width="640" height="453" class="aligncenter size-full wp-image-18303" srcset="/wp-content/uploads/2016/02/DSC09192.jpg 640w, /wp-content/uploads/2016/02/DSC09192-300x212.jpg 300w, /wp-content/uploads/2016/02/DSC09192-207x147.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size:80%;">　　▲HTML5 Experts.jp編集長　白石俊平さん</span></p>

<p><strong>仲</strong>：そこを面白がってくれた人がエキスパートになってたくさん記事を書いて、それを見た人が自分も書きたいと言ってくれたら嬉しいですね。</p>

<p><strong>白石</strong>：そうですね。あと、エキスパートのサイト登録をしてると毎回思うんですけど、すっごく面倒なんですよ。Googleのスプレッドシートに書いてもらったプロフィールを、僕らが手作業でWordPressに転記しなきゃならない。しかもね、そのやり方が煩雑なので、いつも忘れて、前の人がどんなメールの文面を送ってたか参照して…。ソーシャルログインとか、パスワードをこっちから発行して、これでログインしてってかんじでできるといいんですけどね。</p>

<p><strong>仲</strong>：それ、ありですね。</p>

<p><strong>白石</strong>：メンバー用のSlackにも登録されて、WordPressにも自動的に登録されたらいいなと。エキスパートやコントリビューターをどんどん増やすなら、こういう作業はどんどん自動化したいですね。</p>

<p><strong>桂</strong>：いいですね、URLとか何かアクセススキームみたいなものを相手に送ったら、勝手に登録が簡単にできるようになるといいですね。そうなると、パスワードみたいなものを発行しなきゃですね。</p>

<p><img src="/wp-content/uploads/2016/02/DSC09184.jpg" alt="" width="640" height="425" class="aligncenter size-full wp-image-18313" srcset="/wp-content/uploads/2016/02/DSC09184.jpg 640w, /wp-content/uploads/2016/02/DSC09184-300x199.jpg 300w, /wp-content/uploads/2016/02/DSC09184-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>仲</strong>：プロフィールページもエキスパートが自分で登録できるようにしましょう。そのほかにも対応できそうなのはこの機会に全部自動化しちゃいましょう。</p>

<p><strong>大谷</strong>：ところで、読者のベネフィットはどうでしょう？どのようなバリューを届けたいのか、読者の位置づけって、どう考えていますか。</p>

<p><strong>白石</strong>：ほかのメディアとあまり変わらないとは思いますけど、こちらとしては、いい記事を届けているつもりなので、読者にとってのメリットは、やはりいい記事を読めることですね。</p>

<p><strong>大谷</strong>：なるほど。読者のほうからコミュニティに入っていくという流れも、あると思いますけど、その辺はいかがですか。</p>

<p><strong>白石</strong>：いや、作りたいですね。昔はライター募集みたいなのをやろうとしたんですけど、今はやれてないんです。なので、こっちがスカウトしてくる、みたいな。</p>

<p><strong>大谷</strong>：読者と執筆者（エキスパート）のバリューが、どうやったら、マッチングできるのかというところを考えてあげるのが、編集部の役割かもしれませんね。そのマッチングするポイントというのを、見える化することで、エキスパートも、読者も、より改善できていくサイクルになるのが、一番よい気がします。</p>

<p><strong>仲</strong>：エキスパートと読者の交流イベントや、コメント欄の設置もやってたことはあるんですけどね。途中でやめちゃったので、また何かのかたちで復活させてもいいかもしれません。</p>

<p><img src="/wp-content/uploads/2016/02/DSC09156.jpg" alt="" width="640" height="406" class="aligncenter size-full wp-image-18312" srcset="/wp-content/uploads/2016/02/DSC09156.jpg 640w, /wp-content/uploads/2016/02/DSC09156-300x190.jpg 300w, /wp-content/uploads/2016/02/DSC09156-207x131.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：僕はコミュニティ活動を結構していたので、コミュニティの価値って何なんだろうみたいなことを考えたり、いろんなところで話したりするんです。そのうちの一つにですね、暗黙知を形式知化するってことがあると思うんです。それを蓄積する、集積するみたいなかんじで、イベントや勉強会でプレゼン資料が作られる。それが、その道に詳しい人たちが持っている暗黙知が、そこで形式知化される。</p>

<p>そういう機能をコミュニティが持っていて、例えば、Q&amp;Aがすごい盛り上がってたりすると相互にコミュニケーションが発生する。そこで知識が出てくることで、インターネット上に形式知化されていくみたいな。もしかしたら同じように、エキスパートとかが持っている暗黙知を形式知化をすることができるんじゃないか、というのをHXの価値として考えています。</p>

<p>既にエキスパートの人はある程度知名度がある人が多くて、いまさらHXに書かなくても、既に知名度がある。HXに書く意義としては、編集者がついて企画の壁打ちや締め切りをつついてくれる、原稿チェックもしてくれる、で、そこにお金みたいなね、金銭的動機みたいなのを交えて、さらに、なめらかにそれが形式知化されるのを助ける気になる、それも、あるといいのかな、かもしれない。</p>

<p><strong>大谷</strong>：なるほど。いまの白石さんのお話を絵にしてみました。</p>

<p><img src="/wp-content/uploads/2016/01/hx_kpi_photo-2.jpg" alt="" width="640" height="569" class="aligncenter size-full wp-image-18216" srcset="/wp-content/uploads/2016/01/hx_kpi_photo-2.jpg 640w, /wp-content/uploads/2016/01/hx_kpi_photo-2-300x267.jpg 300w, /wp-content/uploads/2016/01/hx_kpi_photo-2-207x184.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size:80%;">　　▲HTML5 Experts.jp企画会議メモより　by大谷さん</span></p>

<p>HXのメディアとしてのバリューは以下の3つにまとまると思います。</p>

<ol>
<li><strong>編集部として、エキスパートから知識を形式知化して引き出す</strong></li>
<li><strong>HXを通じたコミュニティを形成し、エキスパートを増やす</strong></li>
<li><strong>上記を繰り返すことで、さらに新しい情報を読者に届け続ける</strong></li>
</ol>

<p>これらのバリューを最大化させるためには、目指す指標が必要です。その指標をどこに置くか探るために、Analyticsを使ったHXの現状レポートがいくつか作ってきたので、それを見ながら探っていきましょうか。</p>

<h2>バリューを最大化するための指標設定をどうする？</h2>

<p><strong>大谷</strong>：まずは、月別のページビュー数、セッション、ユニークユーザー数などの基本情報から。月別に比較してみると、2013年の7月が一番数字が高く、2014年に一度跳ね上がり、2015年くらいにもう一段階上がってからは、ほぼ横ばいという状況が続いています。</p>

<p><img src="/wp-content/uploads/2016/01/c37b69ad7b40894c55c09a5760e2128c.jpg" alt="" width="640" height="229" class="aligncenter size-full wp-image-18215" srcset="/wp-content/uploads/2016/01/c37b69ad7b40894c55c09a5760e2128c.jpg 640w, /wp-content/uploads/2016/01/c37b69ad7b40894c55c09a5760e2128c-300x107.jpg 300w, /wp-content/uploads/2016/01/c37b69ad7b40894c55c09a5760e2128c-207x74.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>次に時間別に見てみると、日中の時間帯が多く見られていることがわかります。</p>

<p><strong>仲</strong>：HXでは、通常午前9時に記事を公開しているから、ちょうど会社に出勤したあたりから、仕事しながら記事を見てもらっているようですね。公開時間は朝・昼・夜のいずれがいいのか悩むことが多いです。</p>

<p><strong>大谷</strong>：こうしたボリュームゾーンを見る限り、9時公開は間違っていないと思いますよ。</p>

<p><img src="/wp-content/uploads/2016/01/cb5be0dc9d8492bf08f5be23148bb484.jpg" alt="" width="640" height="143" class="aligncenter size-full wp-image-18221" srcset="/wp-content/uploads/2016/01/cb5be0dc9d8492bf08f5be23148bb484.jpg 640w, /wp-content/uploads/2016/01/cb5be0dc9d8492bf08f5be23148bb484-300x67.jpg 300w, /wp-content/uploads/2016/01/cb5be0dc9d8492bf08f5be23148bb484-207x46.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>大谷</strong>：曜日別では火曜がもっとも多く、次いで水曜、金曜と続きます。記事の公開が少ない土日が低いのは当たり前として、月曜が低いのは休み明けの影響からかもしれませんね。もちろんこれらのアクセスデータは、メディアの性質やターゲット特性によっても変わってきます。アクセス経路などのデータも検証してみると、8割近いユーザーがPC（desktop）経由です。</p>

<p><strong>桂</strong>：スマートフォンやタブレット（mobile・tablet）経由が約2割と少ないですね、その要因も考えていかなくてはならないと感じました。</p>

<p><strong>大谷</strong>：次にお見せしたいのは、分析の対象を条件で絞り込めるアドバンスドセグメントと必要な情報だけをチェックすることができるカスタムレポート。記事ページだけではなく、記事毎に付与しているタグや、特集や連載などのシリーズなどからもアクセス数をチェックできるので、効果の検証も効率が上がります。</p>

<h4>セグメント条件</h4>

<ul>
<li>ユーザーセグメント：１回しかこないユーザー</li>
<li>ユーザーセグメント：月に２回</li>
<li>ユーザーセグメント：週に２回</li>
</ul>

<p><img src="/wp-content/uploads/2016/02/710690b10a72a39e57b9208af325a2652.jpg" alt="" width="640" height="303" class="aligncenter size-full wp-image-18339" srcset="/wp-content/uploads/2016/02/710690b10a72a39e57b9208af325a2652.jpg 640w, /wp-content/uploads/2016/02/710690b10a72a39e57b9208af325a2652-300x142.jpg 300w, /wp-content/uploads/2016/02/710690b10a72a39e57b9208af325a2652-207x98.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 80%;">▲「行動」から「セッション」と「セッションの間隔（日数）」を設定。月2回は「セッション 2」と「セッションの間隔（日数） 30」、週2回は「セッション 2」と「セッションの間隔（日数） 6」というように設定する。</span></p>

<h4>カスタム レポートの内容</h4>

<ul>
<li>流入数</li>
<li>タグページ</li>
<li>シリーズページ</li>
<li>記事ページ</li>
<li>基本情報</li>
</ul>

<p><strong>大谷</strong>：実際に流入経路を見てみると、検索流入の割合が非常に多く、FacebookとTwitterからの流入と、はてなブックマーク（はてブ）からの流入が続きます。技術系のメディアにしてはソーシャルメディアからの流入が少ないのは気になりますね。ソーシャルからの流入が多いほうが記事が話題になるのでそちらも注力すべきですが、検索からの流入が多いということは、白石さんが言う『知識を文章化して残す』という点ではまさにそれができているとも言えます。</p>

<p><img src="/wp-content/uploads/2016/01/FireShot-Capture-16-Google-Analytics_-2.jpg" alt="" width="640" height="279" class="aligncenter size-full wp-image-18226" srcset="/wp-content/uploads/2016/01/FireShot-Capture-16-Google-Analytics_-2.jpg 640w, /wp-content/uploads/2016/01/FireShot-Capture-16-Google-Analytics_-2-300x131.jpg 300w, /wp-content/uploads/2016/01/FireShot-Capture-16-Google-Analytics_-2-207x90.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>そのほかにも、タグのページカテゴリの流入の方や、著者別のページやトップページへの回遊が一般のメディアに比べて少ないです。たしかに一回の訪問で複数記事が読まれないメディアも多いのですが、エキスパートたちが書く技術系のメディアなので、もっと多くてもいいかなという気がします。</p>

<p>あと気になったのは、人気があった記事の滞在時間は長いけど、下位にいくほど短くなる。こうしたユーザーの行動が見えてきたら、いろいろと打つ手が見えるくるはずです。カスタムレポートからユーザーの傾向や記事の貢献度などを著者に伝えることで、より高い価値創造・提供が実現していくのではないでしょうか。</p>

<h2>自動化・見える化を、さらに仕組み化する</h2>

<p><strong>大谷</strong>：メディアとしての傾向がつかめてきたら、次は指標化です。目標値の設定と記事別に期間を定めて、その貢献度を指数化・スコア化していきます。この際に重要なのが、冒頭でディスカッションしたHXのビジネスゴールを正確に測ることのできる指標になっているということ。</p>

<p>そのため、PV数などの数値の高さだけが価値になるとは限りません。例えば、高度な専門技術の場合、どうしても幅広いユーザーを集めることは難しい。その場合は、記事の滞在時間やソーシャルで展開された記事の感想などが指標となってきます。普通は公開後1週間の数字をウォッチするケースが多いですが、レポートを見てみると1カ月とか1年という期間で見られている記事も存在する。サイト全体PVを支えるロングテールとなっていて興味深いですね。</p>

<h4>ロングテール事例(1)</h4>

<p><img src="/wp-content/uploads/2016/02/9d0a644bb44b32b5e5d88d24433bc0a1.jpg" alt="" width="640" height="327" class="aligncenter size-full wp-image-18347" srcset="/wp-content/uploads/2016/02/9d0a644bb44b32b5e5d88d24433bc0a1.jpg 640w, /wp-content/uploads/2016/02/9d0a644bb44b32b5e5d88d24433bc0a1-300x153.jpg 300w, /wp-content/uploads/2016/02/9d0a644bb44b32b5e5d88d24433bc0a1-207x106.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />▲2015年3月4日公開の「<a href="https://html5experts.jp/hokaccha/13301/" data-wpel-link="internal">今話題のReact.jsはどのようなWebアプリケーションに適しているか？</a>」</p>

<h4>ロングテール事例(2)</h4>

<p><img src="/wp-content/uploads/2016/02/7d041424374e9640879d605dd07033a4.jpg" alt="" width="640" height="313" class="aligncenter size-full wp-image-18348" srcset="/wp-content/uploads/2016/02/7d041424374e9640879d605dd07033a4.jpg 640w, /wp-content/uploads/2016/02/7d041424374e9640879d605dd07033a4-300x147.jpg 300w, /wp-content/uploads/2016/02/7d041424374e9640879d605dd07033a4-207x101.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />▲2013年8月20日公開の「<a href="https://html5experts.jp/shumpei-shiraishi/1538/" data-wpel-link="internal">Bootstrap3超速レビュー！刷新されたグリッドシステムを理解しよう！</a>」</p>

<p>HXの場合、まずは指標化しやすい「記事を読む」部分のバリューを評価するための指標を決め、それが機能し始めたら「記事を書く」という指標につなげていましょう。HXならではの技術キーワードのタグや、特集・連載などシリーズ企画に対する記事の貢献度をスコア化して短期・長期で検証した数字を見える化すると、編集企画会議をする時にも必ず役立つと思います。</p>

<p><img src="/wp-content/uploads/2016/01/DSC09198.jpg" alt="" width="640" height="435" class="aligncenter size-full wp-image-18253" srcset="/wp-content/uploads/2016/01/DSC09198.jpg 640w, /wp-content/uploads/2016/01/DSC09198-300x204.jpg 300w, /wp-content/uploads/2016/01/DSC09198-207x141.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>こうしたサイトでの傾向と著者に求める価値（記事のクオリティなのか、専門性なのか、ソーシャルでの影響度なのかなど）がはっきりすれば、依頼内容も明確になってくるし、記事のスコアリングも伝えやすくなりますよ。</p>

<p>さらに、記事単体の指標化や自動取得だけにとどまらず、メディアで技術コミュニティを実現するという目標に対してKGI（目的を達成できたかどうかを計測する指標）を設定するところまでつなげてほしいです。</p>

<p>グロースハックの話になるんですが、指標化された定常的なデータをもとに、メディアの成長を見える化させてモデルを作るということですね。改善を繰り返していく仕組み化が必要になってきます。どうやって、エキスパートが増えるモデルを作るのか、ここを次のステップとしてやらなきゃいけないところ。編集部のビジョンが重要になります。</p>

<p><img src="/wp-content/uploads/2016/01/20140519_About-a-Growth-Hack-111.jpg" alt="" width="640" height="420" class="aligncenter size-full wp-image-18250" srcset="/wp-content/uploads/2016/01/20140519_About-a-Growth-Hack-111.jpg 640w, /wp-content/uploads/2016/01/20140519_About-a-Growth-Hack-111-300x197.jpg 300w, /wp-content/uploads/2016/01/20140519_About-a-Growth-Hack-111-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size:80%;">▲GrowthHackとは数値やユーザーの声を分析し、ユーザーの数や質をGrowthさせる仕組みをプロダクトの中に組み込むこと</span></p>

<p>ビジョンを達成するためのゴール設定が決まると、PV数やシェア数を伸ばすとか1年後も検索流入があるといった流入改善や、読了率や回遊率を上げるにはどうすればいいかを考えるようになるし、記事のテーマや書き方をどうするかなどにつながってくると思います。あともう一つ大事なことは、ユーザーである読者のロイヤリティをどう指標化するかですね。読了率はもちろんですが、再来訪してくれかも大事な指標です。</p>

<p><img src="/wp-content/uploads/2016/01/20140519_About-a-Growth-Hack-9.jpg" alt="" width="640" height="366" class="aligncenter size-full wp-image-18246" srcset="/wp-content/uploads/2016/01/20140519_About-a-Growth-Hack-9.jpg 640w, /wp-content/uploads/2016/01/20140519_About-a-Growth-Hack-9-300x172.jpg 300w, /wp-content/uploads/2016/01/20140519_About-a-Growth-Hack-9-207x118.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size:80%;">▲ユーザーの行動モデルをもとに5つのステップに分けたフレームワーク「AARRR」</span></p>

<p>大谷さんの指摘からアドバンスドセグメントの機能を使ってマンスリーアクティブ率、ウィークリーアクティブ率などで見てみると、一回しか訪れてくれないユーザーが95％と、極端に少ない…。エキスパートを増やす＝継続して技術情報にアクセスしてくれる読者を増やすという視点でいうと、アクティブユーザーが少ないのは、編集部側の課題として大きな指標となります。</p>

<p>また、技術専門サイトならではの著者や技術タグをよりクローズアップさせるなど、サイト改善の必要性などについても指摘をいただきました。</p>

<p>さらに議論を重ね、指標化の方針が決まったところで、いよいよ自動化や見えるかを実装していきます。まず、Google AnalyticsのCore Reporting APIを使って数値を自動的に取得し、スプレッドシートのAPIを使って自動的にレポートを作成する実装を行います。</p>

<p>さらにエキスパートとのコミュニケーションツールをSlackに移行し、執筆陣のモチベーションアップや次回の企画へつながる体制をバージョンアップしていきます。個人的には技術用語などの自動校正ツールとかほしいです。</p>

<p>これらのシステム化の詳細についてのレポートは白石さんにバトンタッチするので、ぜひ再来訪してくださいね！</p>
]]></content:encoded>
			</item>
		<item>
		<title>Firebaseで作る簡単リアルタイムウェブアプリケーション（前編）</title>
		<link>/technohippy/18040/</link>
		<pubDate>Tue, 19 Jan 2016 00:00:44 +0000</pubDate>
		<dc:creator><![CDATA[あんどう やすし]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[BaaS]]></category>
		<category><![CDATA[Firebase]]></category>

		<guid isPermaLink="false">/?p=18040</guid>
		<description><![CDATA[Firebaseは2014年10月にGoogleに買収されたことで一躍有名になったBaaS（Backend as a Service）です。本記事ではちょっとしたリアルタイムウェブアプリケーションを作りながらFireba...]]></description>
				<content:encoded><![CDATA[<p><a href="https://www.firebase.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebase</a>は2014年10月にGoogleに買収されたことで一躍有名になったBaaS（Backend as a Service）です。本記事ではちょっとしたリアルタイムウェブアプリケーションを作りながらFirebaseの機能を紹介します。</p>

<h2>Firebaseとは</h2>

<p><a href="https://html5experts.jp/wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2-300x219.png" alt="https://www.firebase.com/" width="300" height="219" class="size-medium wp-image-18079" srcset="/wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2-300x219.png 300w, /wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2.png 640w, /wp-content/uploads/2016/01/3a345fd10f12d48416c28c3d696e92f2-207x151.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>

<p><a href="https://www.firebase.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebase</a>はデータストレージ、ユーザー管理などアプリケーションのバックエンドとして必要となる機能をサービスを提供することで、アプリケーション開発者がクライアントサイドの開発に集中できるようにしてくれるBaaS（Backend as a Service）の一種です。</p>

<p>2014年10月にGoogleに買収され、<a href="https://cloud.google.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google Cloud Platform</a>（GCP）の一員となりました。この買収によりGCPにはPaaS（Platform as a Service）として<a href="https://cloud.google.com/appengine/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google App Engine</a>、IaaS（Infrastracture as a Service）として<a href="https://cloud.google.com/compute/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google Compute Engine</a>、BaaSとしてFirebaseと、いわゆるXaaS系が一通り揃ったことになります。</p>

<h2>Firebaseの特徴</h2>

<p>Firebaseはもともとは開発者用APIを持つウェブサイトに埋め込み可能なリアルタイムチャットサービスとして始まりました。</p>

<p>しかし、多くのユーザーがチャットサービスとしてではなく、ゲームなどのアプリケーションでリアルタイムにデータを同期するために使用したため、創業者たちはチャットサービスのリアルタイムメッセージングシステムを切り出して別サービスとしました。これが現在のFirebaseの元となっています。</p>

<p>そのため、Firebaseは数あるBaasの中でも特にチャットアプリのようなリアルタイムにデータを同期する必要があるサービスに適しています。</p>

<h2>Firebaseの機能</h2>

<h3>リアルタイムデータベース</h3>

<p>FirebaseのデータベースはスキーマレスないわゆるNoSQLで、特定のアプリケーションに関係するデータ全体がひとつのJSONオブジェクトとして保持される点が大きな特徴です。</p>

<p>これによりデータが階層構造をなすため、それぞれのデータが一意のURLを持つことができます。例えばデータベース全体を指すURLは以下のようになります。</p>

<ul>
<li>https://アプリケーションID.firebaseio.com/</li>
</ul>

<p>特定のデータを示すURLは以下のようになります。</p>

<ul>
<li>https://アプリケーションID.firebaseio.com/プロパティのパス</li>
</ul>

<p>例えばアプリケーション名 my-first-chat-app のデータ全体が以下の様であるとして</p>

<p></p><pre class="crayon-plain-tag">{
  "messages" : {
    "-K5kPGFquoTbqHYQqBRS" : {
      "body" : "message",
      "name" : "name"
    },
    "-K5kPUqfBfdj4bAa1fyv" : {
      "body" : "message2",
      "name" : "name2"
    },
    "-K5kR-lwtG4I5w9T36Xq" : {
      "body" : "message3",
      "name" : "name3"
    }
}</pre><p></p>

<p>最初のメッセージ（messages/-K5kPGFquoTbqHYQqBRS）の内容だけを確認したいのであれば、次のURLをブラウザで表示すればいいということになります。</p>

<ul>
<li>https://my-first-chat-app.firebaseio.com/messages/-K5kPGFquoTbqHYQqBRS</li>
</ul>

<div id="attachment_18064" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa-300x250.png" alt="/messages/-K5kPGFquoTbqHYQqBRS" width="300" height="250" class="size-medium wp-image-18064" srcset="/wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa-300x250.png 300w, /wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa.png 640w, /wp-content/uploads/2016/01/2b6f6d52f428612fc49a0c207320bcaa-207x172.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">特定データの表示</p></div>

<h3>認証</h3>

<p>Firebaseを使用すると非常に簡単にユーザー認証をアプリケーションに組み込むことができます。組み込みの認証機構としては、メールアドレスとパスワードを使用した認証、OAuthを使用した認証（Facebook, Twitter, GitHub, Google）、匿名ログインがあり、加えてJSON Web Tokens (JWTs)を使用して既存の任意の認証システムと連携することも容易です。</p>

<h3>ホスティング</h3>

<p>HTML、CSS、JS、画像などの静的なアセットは、Firebaseコマンドラインツールを使用して自身のドメイン上（<code>アプリケーションID.firebaseapp.com</code>）、もしくは有料プランであれば独自ドメイン上に簡単にデプロイすることができます。</p>

<p>さらにデプロイの履歴は管理画面で見ることができ、問題があった場合には以前のバージョンにロールバックすることも可能です。</p>

<h4>コマンドラインツール</h4>

<p>Firebaseのホスティングサービスを利用するにはFirebaseコマンドラインツールを使用する必要があります。node.jsとnpmがインストールされていればコマンドツールは以下のコマンドで簡単にインストールできます。</p>

<p></p><pre class="crayon-plain-tag">$ npm install -g firebase-tools</pre><p></p>

<p>firebaseコマンドで利用可能なサブコマンドは、以下のとおりです。</p>

<dl>
<dt><strong>firebase init</strong></dt>
<dd>プロジェクトディレクトリを初期化します。ホスティングサービスに必要なすべての設定は当コマンドによりプロジェクトディレクトリルートに作成されるfirebase.jsonファイルに含まれます</dd>
<dt><strong>firebase deploy</strong></dt>
<dd>現在のプロジェクトをサーバーにデプロイします</dd>
<dt><strong>firebase disable:hosting</strong></dt>
<dd>ホスティングを無効にし、アクセスに対し&#8221;Site Not Found&#8221;ページを表示するようにします</dd>
<dt><strong>firebase login</strong></dt>
<dd>コマンドラインツールをログインします</dd>
<dt><strong>firebase logout</strong></dt>
<dd>コマンドラインツールをログアウトします</dd>
<dt><strong>firebase list</strong></dt>
<dd>現在ログイン中のユーザーが利用可能なFirebaseアプリの一覧を表示します</dd>
</dl>

<h3>APIとSDK</h3>

<p>FirebaseデータベースにはREST APIがあり、さらにそのAPIを利用する各種環境用のクライアントライブラリが標準で用意されています。</p>

<ul>
<li><a href="https://www.firebase.com/docs/web/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Web</a>（JavaScript）</li>
<li><a href="https://www.firebase.com/docs/ios/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">iOS</a>（Objective C）</li>
<li><a href="https://www.firebase.com/docs/android/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Android</a>（Java）</li>
</ul>

<p>なお、これらの標準クライアントライブラリを使用するとFirebaseはオフラインでの動作が保証されます。つまりネットワーク接続がない場合でも、Firebaseデータベースの読み書きの対象を一旦ローカルのキャッシュとすることで、アプリケーションは正常に動作します。その後、接続が復活した時に内容がサーバーと同期されます。</p>

<p>また、標準ライブラリに加えて、REST APIを使用する非公式なライブラリとして以下の様なものもあります。これ以外にもいろいろとありますので、サーバーサイドで自分の好きな言語を利用したい場合はGitHubなどで検索してみるといいでしょう。</p>

<ul>
<li><a href="http://ozgur.github.io/python-firebase/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Python-Firebase</a>（Python）</li>
<li><a href="https://github.com/ktamas77/firebase-php" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebase-Php</a>（PHP）</li>
<li><a href="https://github.com/oscardelben/firebase-ruby" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Firebase-Ruby</a>（Ruby）</li>
<li><a href="http://derailed.github.io/bigbertha" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">BigBertha</a>（Ruby）</li>
<li><a href="https://github.com/CodementorIO/rest-firebase" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Rest-Firebase</a>（Ruby）</li>
</ul>

<p>なお、標準クライアントライブラリを使用した場合はオフラインでの動作が保証されますが、非公式ライブラリを使用した場合はその限りではありません。</p>

<h2>サンプルアプリケーション</h2>

<p>Firebaseを使用した基本的なアプリケーション開発の流れを確認するために簡単なチャットアプリケーションを作成してみましょう。先に紹介したとおりFirebaseクライアントライブラリは環境に応じて複数ありますが、今回はJavaScript版クライアントライブラリを使用してWebアプリケーションを作成します。</p>

<div id="attachment_18083" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5-300x213.png" alt="サンプルチャット" width="300" height="213" class="size-medium wp-image-18083" srcset="/wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5-300x213.png 300w, /wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5.png 640w, /wp-content/uploads/2016/01/bb56fbf12877898b24cd5b42c9fce5a5-207x147.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">サンプルチャット</p></div>

<h3>Firebaseアプリケーション作成</h3>

<p>まずはじめに、今回のサンプルから使用するデータベースを用意するため、ウェブコンソールからFirebaseアプリケーションを作成します。http://firebase.com/ を開き、画面右上のログインボタンをクリックしてログインしてください。</p>

<p>アカウントを新たに作成しても構いませんし、GoogleアカウントやGitHubアカウントを使用してログインすることもできます。</p>

<div id="attachment_18085" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d-300x213.png" alt="Firebaseログイン後" width="300" height="213" class="size-medium wp-image-18085" srcset="/wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d-300x213.png 300w, /wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d.png 640w, /wp-content/uploads/2016/01/36fe728933b58011dce534fb2979b11d-207x147.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">Firebaseログイン後</p></div>

<p>ログイン後、左下の入力エリアにアプリ名とアプリURLを入力して、アプリを作成します。今回は以下の様な設定を使用するものとします。</p>

<table>
<tr><th>App Name</th><td>My First Chat App</td></tr>
<tr><th>App URL</th><td>https://my-first-chat-app.firebaseio.com/</td></tr>
</table>

<div id="attachment_18086" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08-300x213.png" alt="スクリーンショット 2015-12-17 22.46.32" width="300" height="213" class="alignnone size-medium wp-image-18086" srcset="/wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08-300x213.png 300w, /wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08.png 640w, /wp-content/uploads/2016/01/f6e4e49af30774d12e164a9df2864b08-207x147.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">Firebaseアプリ新規作成</p></div>

<p>サーバーサイドで行う作業は以上です。これだけでNoSQLデータベースが作成され、クライアントアプリから自由に利用できるようになりました。</p>

<h3>サンプルアプリケーションの初期化</h3>

<p>サンプルアプリケーションは最終的にFirebaseホスティングサービスを利用するため、まずfirebase initコマンドを実行してプロジェクトディレクトリを初期化します。</p>

<p></p><pre class="crayon-plain-tag">% firebase init

? What Firebase do you want to use? my-first-chat-app
? What directory should be the public root? public
✔  Public directory public has been created
Firebase initialized, configuration written to firebase.json</pre><p></p>

<p>初期化にあたって</p>

<ol>
<li>アプリ名</li>
<li>デプロイするファイルを配置するディレクトリ</li>
</ol>

<p>を聞かれるので、アプリ名は先程作成したものを、ディレクトリ名はデフォルトのpublicを設定してください。</p>

<h3>ウェブアプリケーション作成</h3>

<p>それではここから実際に冒頭のサンプルアプリケーションを作成していくこととします。といっても必要となるのはHTMLファイルが一つだけ、それも非常に小さなものですので先に全体を見てしまいましょう。</p>

<p></p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html lang="ja"&gt;
  &lt;head&gt;
    &lt;meta charset="utf-8" /&gt;
    &lt;title&gt;Firebaseサンプル1&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div&gt;
      &lt;input id="name" placeholder="名前" /&gt;
      &lt;input id="message" placeholder="メッセージ" /&gt;
      &lt;button id="send"&gt;投稿&lt;/button&gt;
    &lt;/div&gt;
    &lt;ul id="messages"&gt;
    &lt;/ul&gt;

    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"&gt;&lt;/script&gt;
    &lt;script src="https://cdn.firebase.com/js/client/2.3.2/firebase.js"&gt;&lt;/script&gt;
    &lt;script&gt;
      // データベースの参照を準備
      var firebaseRef = new Firebase("https://my-first-chat-app.firebaseio.com/"); // ... 1
      var messagesRef = firebaseRef.child('messages'); // ... 2

      // 既存メッセージを表示
      messagesRef.on('child_added', function(snapshot) { // ... 3
        var msg = snapshot.val();
        $('&lt;li&gt;').text(msg.name + ': ' + msg.body).prependTo('#messages');
      });

      $('#send').click(function() {
        // 新規メッセージを投稿
        messagesRef.push({ // ... 4
          name: $('#name').val(),
          body: $('#message').val()
        });
      });
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre><p></p>

<p>今回のサンプルアプリケーションのコードはこれだけ、コメントや空行を除けばJavaScript部分はたったの12行です。このコードをローカルに保存し、ブラウザで開いてみてください。HTMLを含めて全体でも40行弱のコードですが、複数ブラウザで開いて、一方でメッセージを入力すればその内容はリアルタイムに他方に反映され、（かろうじて）チャットとして利用できます。</p>

<p>コードの詳細については次回以降に譲りますが、簡単に説明すると、行われている処理は以下のとおりです。</p>

<ol>
<li>アプリケーションURLを引数としてFirebaseオブジェクトをインスタンス化し、前節で作成したFirebaseデータベースに接続するためのオブジェクトを生成します。</li>
<li>Firebaseデータベースのmessagesオブジェクトへの参照を取得します。この参照への操作はサーバー上のFirebaseデータベースに保存されることになります。</li>
<li>messagesオブジェクトに子ノードが追加された場合のコールバック関数を登録します。今回はコールバック関数内でメッセージの内容をli要素としてul要素に追加しています。なお、onメソッドで登録されたコールバック関数はHTMLの初回読み込み時にも実行されるため、初回読み込み時用の処理を特別に記述する必要はありません。</li>
<li>messagesオブジェクトに子ノードを追加します。</li>
</ol>

<h4>オフライン対応の確認</h4>

<p>さて、ここで一つ面白い実験をしてみましょう。複数のブラウザでサンプルアプリを開き、使用しているコンピューターのネットワークをOFFにしてください。</p>

<p>そのまま一方の画面でメッセージをいくつか入力すると、メッセージを入力した画面では新しいメッセージがリストに追加されますが、他方の画面にはメッセージが追加されません。</p>

<p>その状態でコンピューターのネットワークをONにするとどうでしょう。少し経って他方の画面にもメッセージが表示されるのが確認できるはずです。</p>

<div id="attachment_18109" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/firebasedb-1.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/firebasedb-1-300x120.png" alt="firebasedb" width="300" height="120" class="alignnone size-medium wp-image-18109" srcset="/wp-content/uploads/2016/01/firebasedb-1-300x120.png 300w, /wp-content/uploads/2016/01/firebasedb-1.png 640w, /wp-content/uploads/2016/01/firebasedb-1-207x83.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">ネットワークが正常</p></div>

<p>実はFirebaseデータベースの読み書きはいったんローカルDBを経由して行われています。そのためネットワーク接続が不通の場合もローカル側の処理は正常に完了し、ネットワークが回復すると自動的にデータがサーバーと同期されるのです。</p>

<div id="attachment_18110" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/firebasedb2-1.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/firebasedb2-1-300x120.png" alt="firebasedb2" width="300" height="120" class="alignnone size-medium wp-image-18110" srcset="/wp-content/uploads/2016/01/firebasedb2-1-300x120.png 300w, /wp-content/uploads/2016/01/firebasedb2-1.png 640w, /wp-content/uploads/2016/01/firebasedb2-1-207x83.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">ネットワーク異常発生</p></div>

<div id="attachment_18111" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/firebasedb3-1.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/firebasedb3-1-300x120.png" alt="firebasedb3" width="300" height="120" class="alignnone size-medium wp-image-18111" srcset="/wp-content/uploads/2016/01/firebasedb3-1-300x120.png 300w, /wp-content/uploads/2016/01/firebasedb3-1.png 640w, /wp-content/uploads/2016/01/firebasedb3-1-207x83.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">ネットワーク復旧</p></div>

<p>これによりアプリケーション開発者はネットワークの状態を一切意識することなくリアルタイムアプリケーションを作成することができます。</p>

<p>リアルタイムに状態を同期する必要がある場合、この機能だけでもFirebaseを採用する価値があるのではないかと私は思うのですが、みなさんはいかがでしょうか？</p>

<h3>データベースの内容確認</h3>

<p>サンプルアプリにメッセージをいくつか書き込んだらダッシュボードでデータベースがどうなっているか、内容を確認してみましょう。https://アプリケーションID.firebaseio.com/ にアクセスしてみてください。</p>

<div id="attachment_18115" style="width: 310px" class="wp-caption alignnone"><a href="https://html5experts.jp/wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5.png" data-wpel-link="internal"><img src="/wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5-300x229.png" alt="データベース確認" width="300" height="229" class="size-medium wp-image-18115" srcset="/wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5-300x229.png 300w, /wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5.png 640w, /wp-content/uploads/2016/01/5aaca8f4177775d53bb44e9805facbf5-207x158.png 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">データベース確認</p></div>

<p>ちゃんと登録されています。</p>

<p>ちなみにこのダッシュボードから値を変更することもでき、その場合ももちろんクライアント側のイベントハンドラが発火され、ブラウザ側の表示はリアルタイムに変更されます。</p>

<h3>デプロイ</h3>

<p>最後に、今回のアプリケーションをFirebaseにデプロイして実際に利用できるようにします。firebase initコマンドを実行したディレクトリでfirebase deployコマンドを実行してください。</p>

<p></p><pre class="crayon-plain-tag">% firebase deploy

=== Deploying to 'my-first-chat-app'...

i  deploying hosting
i  preparing public directory for upload...
✔  1 files uploaded successfully

✔  Deploy complete!

URL: https://my-first-chat-app.firebaseapp.com/
Dashboard: https://my-first-chat-app.firebaseio.com/

Visit the URL above or run firebase open</pre><p></p>

<p>では、ブラウザで <a href="https://my-first-chat-app.firebaseapp.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">https://my-first-chat-app.firebaseapp.com/</a> を開いてみましょう。開発時と同じデータベースを参照しているので先ほど入力したメッセージがここでも表示されています。</p>

<p>ちなみにアプリのドメインは firebaseapp.com で、ダッシュボードのドメインは firebaseio.com です。うっかり打ち間違えないように気をつけましょう。</p>

<h2>まとめ</h2>

<p>いかがでしょう。Firebaseを使用すれば非常に簡単にリアルタイムアプリケーションが作成できるということが分かっていただけたのではないでしょうか。</p>

<p>今回はFirebaseの全体的な機能の概要を説明しました。次回はもう少し複雑なアプリケーションを作りながら、Firebaseのそれぞれの機能をより詳細に掘り下げていきたいと思います。お楽しみに。</p>
]]></content:encoded>
			</item>
	</channel>
</rss>
