<?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>Webパフォーマンス &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/webパフォーマンス/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>「テクニックは語りません」竹洞先生に聞く、本気のWebパフォーマンス道</title>
		<link>/shumpei-shiraishi/24420/</link>
		<pubDate>Thu, 09 Nov 2017 01:00:54 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Webパフォーマンス]]></category>

		<guid isPermaLink="false">/?p=24420</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (14)こんにちは、編集長の白石です。 この記事は、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> (14)</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>今回お話を伺ったのは、html5j パフォーマンス部を運営していらっしゃる竹洞 陽一郎さんです。</p>

<p><img src="/wp-content/uploads/2017/10/42A5419.jpg" alt="" width="640" height="415" class="alignnone size-full wp-image-24619" srcset="/wp-content/uploads/2017/10/42A5419.jpg 640w, /wp-content/uploads/2017/10/42A5419-300x195.jpg 300w, /wp-content/uploads/2017/10/42A5419-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 80%;"><strong>▲HTML5 Conference 2017セッション風景 （写真提供：html5j　撮影：刑部友康）</strong></span></p>

<p>竹洞さんのセッション「テクニックではなく、今、本気で取り組むべきWebパフォーマンス」に関するスライド資料は、<a href="https://speakerdeck.com/takehora/tekunitukudehanaku-jin-ben-qi-dequ-rizu-mubekiwebpahuomansu" rel="noopener follow external noreferrer" target="_blank" data-wpel-link="external">こちら</a>で公開されています。</p>

<h2>民法（債権法）が改正されて、何が変わる？</h2>

<p><b class="speaker siraisi">白石:</b> 民法（債権法）が改正された、ということに注目なさってるそうですね。</p>

<p><b class="speaker takehora">竹洞:</b> はい、民法の大規模な改正法案が今年5月に成立しました。3年以内に施行されることになっており、備えが必要です。様々な改正項目がありますが、中でも品質の担保を行う義務が明文化されたことで、ソフトウェア業界にも大きな影響が及ぶものと考えています。</p>

<p><b class="speaker siraisi">白石:</b> 具体的にはどういうことなのでしょうか？</p>

<p><b class="speaker takehora">竹洞:</b> <strong>「瑕疵担保」っていう概念がなくなる</strong>んです（参考: <a href="http://itpro.nikkeibp.co.jp/atcl/news/17/052601508/?rt=nocnt" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">改正民法が成立、「瑕疵担保責任」などシステム開発契約に影響大 (ITpro)</a>。</p>

<p>今までは「瑕疵担保」という概念があったおかげで、とりあえずは品質を担保しない状態で納品を行い、その後の瑕疵期間で問題を修正していく…というのが一般的に行われていました。ですが今後は、納品時に一定の品質を保証することが開発側に求められるようになります。</p>

<p><b class="speaker siraisi">白石:</b> そのことが、どういう影響をおよぼすと考えられますか？</p>

<p><b class="speaker takehora">竹洞:</b> 私としては、ソフトウェア品質が全般的に向上することで、市場が健全化すると考えています。</p>

<p><strong>品質への理解が低い市場は、必ずと言っていいほど衰退する</strong>んです。
消費者が品質の善し悪しが判断できない状態だと、価格が一番の判断材料になります。
そうなると結局、品質を犠牲にした価格競争にならざるを得ない。</p>

<p><b class="speaker siraisi">白石:</b> 「安かろう悪かろう」が当たり前になってしまうわけですね。</p>

<p><b class="speaker takehora">竹洞:</b> そう。そういうスパイラルに陥らないためには、品質への意識を高く保つ必要があるんです。</p>

<p>例として適切かはわかりませんが、たとえば<strong>麻薬の売人って、品質にものすごく気を使う</strong>んです。 質の悪い麻薬が出回るようになると、価格に対する期待と同程度の「ハイ」の状態を得られず、その結果、価格の下落を招き、結局市場が衰退してしまうからです。こうした現象を、アメリカの中古車市場の分析から「情報の非対称性」として研究したジョージ・アカロフ博士は、2001年にノーベル経済学賞を受賞しています。</p>

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

<h2>「品質保証」がウェブ業界を変える</h2>

<p><b class="speaker siraisi">白石:</b> しかし、品質保証が義務付けられるとなると、開発のコストが上がるということになりませんか？</p>

<p><b class="speaker takehora">竹洞:</b> それはあり得ます。そのことが、受託開発のビジネスなどをより難しくしてしまうことも考えられます。</p>

<p>例えばウェブ制作会社は、一般的には納品後に入金が入るという仕組みになっていますよね。
だから、まずは品質がそこそこの状態で納品してしまう…ということも起きるわけです。 パフォーマンスはその悪い例で、まずはチューニングしていない状態で納品する。すると、後でパフォーマンス・チューニングの依頼が来てまた売上につながる…なんて事情も実際にはあるわけです。</p>

<p>こうしたこれまでの商慣行が崩れてしまう可能性はありますね。 品質保証が義務付けられるせいで、納品までにより時間がかかるようになるとすると、入金が遅くなるということに繋がる。しかし、民法債権法改正では、部分単位やステージ毎の請負金額の要求ができるようになっています。</p>

<p><b class="speaker siraisi">白石:</b> それだけ聞くと、受託開発や制作を行っている企業にとっては、ただただ厳しくなるようにも聞こえますね。 そもそも、「品質を保証して納品」ってどういうことなんでしょう？ 完璧なソフトウェアを作らねばならない…なんてそもそも無理だとも思うのですが。</p>

<p><b class="speaker takehora">竹洞:</b> その点については安心していいと思います。 「品質を保証する」というのは、「完璧な製品」を意味しているわけじゃないんです。 テスト項目について顧客と合意し、その結果を提出すればいい。実は、ソフトウェア品質には、<a href="http://www.itmedia.co.jp/im/articles/1111/07/news153.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">V&amp;V</a>といって、Verification(検証)とValidation(妥当性確認)という二つの概念があります。</p>

<p>検証(Verification)とは、仕様・設計・計画などの要求事項を満たしているかどうかの確認です。妥当性確認(Validation)とは、機能や性能が本来意図された用途や目的に適っているか、実用上の有効性があるかの確認です。Webパフォーマンスは、品質においては、妥当性確認にあたります。</p>

<p>従来、ソフトウェア開発における「品質」、特に受託開発においては、検証確認が主体でした。もちろん、応答速度の遅延などで使いものにならないという妥当性確認もあったものの、それはハードウェア性能であったり、データベース設計の問題であったりと、「表示」そのもののロジックに原因はあまりなかったのです。</p>

<p>要求仕様の実現という意味での検証については、仰るとおり「完璧な製品」というのは、ほぼ存在し得ない。それは、ソフトウェアが、論理記述であって、物理法則の縛りがなく、かつ、連続性の保証がないためです。</p>

<p>連続性の保証とは、物理法則であれば、100Kgの重さまで耐えられるテーブルであれば、当然ながら、80Kgや10Kgなど、100Kg以下の重量に耐えられることです。しかし、ソフトウェアは二値論理がベースであるために、100という値で大丈夫であっても、80や10という値で大丈夫であるという保証がない世界です。</p>

<p>2002年に亡くなられた、オランダの著名な計算機科学者で、構造化プログラミングの提唱者でチューリング賞を受賞しているエドガー・ダイクストラ博士が「テストは誤謬を見つけることはできるが、それがないことを証明することはできない」と指摘しています。</p>

<p>ですから、バグや欠陥がないことを保証するというのは無理なんです。</p>

<p><b class="speaker siraisi">白石:</b> なるほど、それなら少し安心です。バグや欠陥のないソフトウェアなんて不可能ですし。</p>

<p><b class="speaker takehora">竹洞:</b> 品質についても顧客との合意内容に盛り込む必要が生じる、ってことですよね。 そうした合意があるのとないのとでは、品質に対する意識が全然違ってきます。品質については、検証として従来もやってきたことです。ところが、WebがソフトウェアのUIの主体となることによって、今まで問題にならなかった「表示」に関するロジックが突如、問題となり始めた。突如といっても、もう20年ぐらいになるわけですが…</p>

<p>その部分は、検証ではなくて、妥当性確認なんですが、妥当性確認のテストのノウハウが日本では普及していなかった。今、そこが問われているわけです。</p>

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

<p><b class="speaker siraisi">白石:</b> なるほど。「完璧な製品を作る」ことが品質保証なのではなく、「妥当性品質に対してどこまで保証するかを明確にする」ということなんですね。</p>

<p><b class="speaker takehora">竹洞:</b> そうです。そうして、妥当性品質についての期待値を高く保つことは、Webに関する業界として必要なことだと思いますよ。</p>

<p>例えば日本の住宅市場は、品質保証がうまくいっていない例だと思うんです。 日本の住宅って、非常に寿命が短いじゃないですか。その理由は様々ですが、一つに中古住宅に対する品質の期待値が低いことがあると思っています。 品質保証がない空き家を買うくらいなら、新築のほうがいいって心理です。</p>

<p><b class="speaker siraisi">白石:</b> 確かにそういう一面はある気がしますね。ぼくは安さに釣られて中古住宅を買ったクチですが(笑)、一生住めるなんて少しも期待してませんし。</p>

<p><b class="speaker takehora">竹洞:</b> それって、結局その家はいつか捨てることになるってことで、財の蓄積が進んでいないとも言えると思うんです。 社会的に見ると、将来世代に引き継ぐ財が形成されていないとも言える。財の蓄積が期待できないと、そこの投資は進まない。お金が集まってこないのです。</p>

<p>ウェブのように技術がどんどん進歩していく世界に財の蓄積は有り得るのか？システム構築費用は5年で償却されるのであれば、5年持てばいいじゃないか？という考えられるのは、仰るとおりです。</p>

<p>しかし、プレゼンテーションとしてのUIデザインと、データとしてのコンテンツやユーザのデータは分けて考えるべきで、だからこそ、HTMLとCSS、JavaScriptで役割分担をしているわけじゃないですか。システムの永続性というものを考慮してWebサイトの設計を行うことは非常に重要なのです。</p>

<p>減価償却期間の5年も持たない、3年程度で捨てざるを得ないとなれば、企業財務的にはそこはできるだけ安く済ませるべきなのです。しかし、品質が保証されて、減価償却の5年を超えて使えるとなると、将来価値が上がる。企業財務的にはおいしいお話なのです。そこに気付いてほしい。メンテナンス費用は当然発生するでしょうけど、新規で作るより安いですし、何より「継承」できることが大きなメリットなんです。</p>

<p>UIデザインや技術力だけで勝負しているWeb制作会社さんは、その点に、早く気づかれた方が良いと思います。お金を握っている経営者や財務担当者は、別のロジックで判断しているわけですから。</p>

<p>ですから、ウェブサイトも、いつか捨てるものとなれば、そこに予算を掛けようとは思わない。品質が保証されないのであれば、なおさらのことです。</p>

<p>「お客様からあまり予算をいただけない」と嘆くことがあるかと思いますが、その背景には、品質が保証されていないので修正するより作り直した方がいいと考えられていること、いつかWebサイトは捨てて新しく作るものと考えられている背景は認識しておくべきだと思います。</p>

<h2>ウェブサイトの品質を決める3つの要素</h2>

<p><b class="speaker siraisi">白石:</b> では具体的に、ウェブサイトにおける品質を保証するというのは、何をすればいいんでしょうか？</p>

<p><b class="speaker takehora">竹洞:</b> ウェブサイトの品質は主に3つの要素から成っていると言っていいでしょう。</p>

<p>一つは<strong>アクセシビリティ</strong>。
一つは<strong>セキュリティ</strong>。
最後が<strong>パフォーマンス</strong>です。</p>

<div id="attachment_24422" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/10/ab193805fd71ab248f659082cef24bb5-640x480.png" alt="Webサイトの三大品質" width="640" height="480" class="size-large wp-image-24422" srcset="/wp-content/uploads/2017/10/ab193805fd71ab248f659082cef24bb5-640x480.png 640w, /wp-content/uploads/2017/10/ab193805fd71ab248f659082cef24bb5-300x225.png 300w, /wp-content/uploads/2017/10/ab193805fd71ab248f659082cef24bb5-768x576.png 768w, /wp-content/uploads/2017/10/ab193805fd71ab248f659082cef24bb5-207x155.png 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">Webサイトの三大品質</p></div>

<p>これらはそれぞれJISで規定されてもいる重要な指標です。これらをしっかり担保していく体制づくり、それがウェブサイトの品質保証に繋がります。</p>

<p><b class="speaker siraisi">白石:</b> ウェブサイト制作にも、これらを担保するワークフローを確立していくべきということですね。</p>

<p><b class="speaker takehora">竹洞:</b> そうです。そしてこれらは、運用と一体になって改善していくべきものでもありますので、DevOpsの観点から考えるのも重要です。</p>

<p>ただ一つ不思議なのが、日本でDevOpsに関して述べている文献や書籍って、ほとんどの場合品質保証のことが抜けてしまっているんですよね。
品質に対する意識が高まらない原因は、こういうところにもあると思います。</p>

<div id="attachment_24423" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/10/depops-640x480.png" alt="DevOps" width="640" height="480" class="size-large wp-image-24423" srcset="/wp-content/uploads/2017/10/depops-640x480.png 640w, /wp-content/uploads/2017/10/depops-300x225.png 300w, /wp-content/uploads/2017/10/depops-207x155.png 207w, /wp-content/uploads/2017/10/depops.png 720w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">DevOps</p></div>

<h2>ウェブサイトの品質を高めるための心構え</h2>

<p><b class="speaker siraisi">白石:</b> 品質を向上させるためのコストが低く見積もられがちというところもあるんでしょうか。</p>

<p><b class="speaker takehora">竹洞:</b> というよりは、そのコストが認識されていないというのが正しい気がします。 「品質、費用、期間の3要素を同時に満たすことはできず、トレードオフの関係にある」といった、プロジェクトマネジメントやソフトウェア開発見積りの基本もあまり浸透していない感覚がある。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。当たり前の話ですが、品質を高めようとすれば、時間的、金銭的なコストを支払う必要があるということですね。</p>

<p><b class="speaker takehora">竹洞:</b> はい。そして品質保証が当たり前になれば、品質保証のためのコストがかかるのも当たり前になる。今は、その当たり前のコストを払っていないだけとも言えるのです。</p>

<p><b class="speaker siraisi">白石:</b> では、そうした品質保証、特にパフォーマンスについて、状況を改善していくにはどんな知識が必要になるんでしょう？</p>

<p><b class="speaker takehora">竹洞:</b> そうですね、小手先のテクニックはたくさんありますし、いろんなところで語られてもいますので、もう少し根源的なところから考えると、結局「基礎」と「長期的な視野」が重要になると思うんです。</p>

<p>基礎というのは、コンピューターやネットワークに関する基本的な知識。 長期的な視野と言うのは、数年後にインターネットがどうなっているか、といった話です。</p>

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

<p><b class="speaker takehora">竹洞:</b> 例えば、パフォーマンスに関する話を突き詰めていくと、意外なほどハードウェアに関する知識って大事なんです。 パフォーマンスって、最終的には絶対にハードウェアに依存するわけですからね。</p>

<p>例えば、とある大規模サイトで遅延が発生していたんですが、その原因を追求するのすごく大変だったんです。 アプリケーションをいくら調べても、データベースのクエリをいくら見直しても、ネットワークの状態を見ても、原因がわからなかった。</p>

<p><b class="speaker siraisi">白石:</b> 結局、どんな原因だったんですか？</p>

<p><b class="speaker takehora">竹洞:</b> そのサーバはVMWareで仮想化されていて、サーバ負荷に応じてCPUリソースが動的に割り当てられるようになっていました。ただ、あらかじめ割り当てられているCPUリソースが足りなかったせいで、CPUの動的割り当てが頻繁に発生してしまっていたんです。 その割り当てが行われる際に、サーバの処理が遅延してしまっていたんですね。</p>

<p><b class="speaker siraisi">白石:</b> それは深い原因ですね…</p>

<p><b class="speaker takehora">竹洞:</b> ここまで奥深くに原因がある場合って、ハードウェアを含めたアーキテクチャ全般の知識が必要になります。 だから結局、コンピューター全般の知識って必要だなと。だから私の会社では、入社したら最初の一歩として、まずPCを自作してもらうようにしています(笑)。</p>

<h2>全てを変える、5Gネットワーク</h2>

<p><b class="speaker siraisi">白石:</b> 数年後にインターネットがどうなっているか、というお話も聞かせていただけますか？</p>

<p><b class="speaker takehora">竹洞:</b> はい、具体的には5Gネットワークの話になりますね。5Gはアプリケーションの作り方を含め、全てを変える可能性がある技術だと思っています。</p>

<p><b class="speaker siraisi">白石:</b> 5Gネットワークって全然知らないのですが、どんな感じなんでしょう？</p>

<p><b class="speaker takehora">竹洞:</b> 大きく3つのトピックがあると考えています。</p>

<p>一つは<strong>ネットワークスライス</strong>。インターネットを「輪切り」にするイメージで、用途に応じて別々のネットワークを提供していくようになります。</p>

<p>電波には周波数によって特性があり、サービスの特性に応じて周波数を割り当てて異なるネットワークを構成できるので、ネットワーク全体の利用効率が大きく向上すると考えられています。</p>

<div id="attachment_24424" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/10/a2394912a431f48b924b7fd9decf0e62-640x480.png" alt="ネットワークスライス" width="640" height="480" class="size-large wp-image-24424" srcset="/wp-content/uploads/2017/10/a2394912a431f48b924b7fd9decf0e62.png 640w, /wp-content/uploads/2017/10/a2394912a431f48b924b7fd9decf0e62-300x225.png 300w, /wp-content/uploads/2017/10/a2394912a431f48b924b7fd9decf0e62-207x155.png 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">ネットワークスライス</p></div>

<p>次に<strong>指向性アンテナ</strong>です。今までは、基地局といういわば「傘」を中心として、そこから広がるように無線ネットワークが構築されていました。</p>

<p>しかしこれからは、パネル型のアンテナがビルの壁面に貼られるようになり、そこから端末と直接「ビーム」をやり取りするように通信を行います。通信の受信強度が高まるだけでなく、他の電波との干渉も減らせます。</p>

<div id="attachment_24426" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/10/dfdead9390dbb2a8a72a6eba14a82677-640x480.png" alt="指向性アンテナ" width="640" height="480" class="size-large wp-image-24426" srcset="/wp-content/uploads/2017/10/dfdead9390dbb2a8a72a6eba14a82677.png 640w, /wp-content/uploads/2017/10/dfdead9390dbb2a8a72a6eba14a82677-300x225.png 300w, /wp-content/uploads/2017/10/dfdead9390dbb2a8a72a6eba14a82677-207x155.png 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">指向性アンテナ</p></div>

<p>最後に<strong>モバイル・エッジ・コンピューティング</strong>です。これは、4Gですと、地域の基地局をまとめているRNC(Radio Network Controller)配下に、仮想サーバー（エッジサーバー）を設置できるようになるのです。 今まで携帯の会社はコアネットワークを公開していなかったので、これは大きな変化です。</p>

<div id="attachment_24425" style="width: 650px" class="wp-caption aligncenter"><img src="/wp-content/uploads/2017/10/8b6b5080377333396bc358c212e7653e-640x480.png" alt="モバイルエッジコンピューティング" width="640" height="480" class="size-large wp-image-24425" srcset="/wp-content/uploads/2017/10/8b6b5080377333396bc358c212e7653e.png 640w, /wp-content/uploads/2017/10/8b6b5080377333396bc358c212e7653e-300x225.png 300w, /wp-content/uploads/2017/10/8b6b5080377333396bc358c212e7653e-207x155.png 207w" sizes="(max-width: 640px) 100vw, 640px" /><p class="wp-caption-text">モバイルエッジコンピューティング</p></div>

<p>これは分散コンピューティングの新たな可能性を示しているといえます。インターネットより手前でトラフィックを捌けるわけですから、サーバーの応答性も大きく向上します。</p>

<p><b class="speaker siraisi">白石:</b> へえ、知りませんでした！世界中のエッジサーバー上に、静的リソースのキャッシュを置けたりしたら、すごく速くなりそうですね。</p>

<p><b class="speaker takehora">竹洞:</b> それだけではありません。エッジサーバーで可能な限り処理を行い、必要な処理だけインターネット上のサーバーに送るようにすることもできます。アプリケーションの処理を、エッジサーバーとインターネット上のサーバーで分担するというわけです。</p>

<p>もしくは、全てエッジサーバー上で処理を行うような、非インターネットのローカルなサービスを行うことも可能です。</p>

<p><b class="speaker siraisi">白石:</b> そうなると、アプリケーションの作り方も大きく変わってきそうですね。夢が拡がりますね…。5Gネットワークって、具体的にはいつ頃普及が見込まれているのでしょうか？</p>

<p><b class="speaker takehora">竹洞:</b> 2020年の東京オリンピックまでには使えるようになるだろうと言われています。</p>

<p>10月12日に、NTTドコモ、富士通、富士通研究所がモバイル・エッジ・コンピューティングを使った高画質動画配信や映像解析を活用した人物検知システムの実証実験を行って成功した旨の<a href="http://pr.fujitsu.com/jp/news/2017/10/12-1.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">プレスリリース</a>を発表してています。</p>

<p>また10月13日には三菱商事が、この分野のリーディングカンパニーである<a href="https://www.jig-saw.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JIG-SAW</a>と、モバイル・エッジ・コンピューティングの実証実験成功の<a href="https://news.biglobe.ne.jp/economy/1013/dre_171013_4304155723.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">プレスリリース</a>を発表しています。</p>

<p><b class="speaker siraisi">白石:</b> ワクワクしますね。本日は民法から5Gネットワークまで、幅広いお話を聞かせていただき、ありがとうございました！</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>
	</channel>
</rss>
