<?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/development/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>「テクニックは語りません」竹洞先生に聞く、本気の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>テレビも車もゲーム機も！組み込みブラウザ開発ってどんな世界か聞いてみた</title>
		<link>/shumpei-shiraishi/24637/</link>
		<pubDate>Wed, 08 Nov 2017 02:06:37 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[ゲーム]]></category>
		<category><![CDATA[ハイブリッドキャスト]]></category>
		<category><![CDATA[組み込みブラウザ]]></category>
		<category><![CDATA[自動車]]></category>

		<guid isPermaLink="false">/?p=24637</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (2) こんにちは、編集長の白石です。 この記事は、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> (2)</div><p><style>
b.speaker {
  margin-right: 1em;
}
</style>
こんにちは、編集長の白石です。</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>今回お話を伺ったのは、株式会社ACCESSの梅田雅士さんです。</p>

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

<p>梅田さんのセッション「TV・車・ゲームに搭載されているブラウザってどうなってるの？」に関するスライド資料は、こちらで公開されています。</p>

<iframe class="embedly-embed" src="//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fembed_code%2Fkey%2F94O53WFZyAkiCq&#038;url=https%3A%2F%2Fwww.slideshare.net%2FMasashiUmeda%2Ftv-81364792&#038;image=https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fhtml5conference2017-171030095111-thumbnail-4.jpg%3Fcb%3D1509357173&#038;key=internal&#038;type=text%2Fhtml&#038;schema=slideshare" width="500" height="417" scrolling="no" frameborder="0" allowfullscreen></iframe>

<p><br></p>

<h2>組み込みブラウザって…なに？</h2>

<p><b class="speaker siraisi">白石:</b>では、まずは簡単に自己紹介をお願いできますか？</p>

<p><b class="speaker umeda">梅田:</b>株式会社ACCESS IoT事業本部課長の梅田 雅士です。
もともとはエンジニアでして、ブラウザ開発からWebサービスまで、組み込みからフロントエンドまで開発していました。</p>

<p><b class="speaker siraisi">白石:</b>すごく幅広い経歴をお持ちですね！今回はPCやスマートフォン「以外」の環境におけるブラウザのお話を伺えると聞いています。</p>

<p><b class="speaker umeda">梅田:</b>はい、今やブラウザはテレビにも、自動車にも、ゲームにも搭載されています。それらを総じて「組み込みブラウザ」と呼んでいます。</p>

<p><b class="speaker siraisi">白石:</b>組み込みブラウザと言うのは、PCやスマートフォンのブラウザとどう違うんでしょうか？</p>

<p><b class="speaker umeda">梅田:</b>Webを閲覧できると言うのは、ブラウザの基本的な機能ですので、組み込みブラウザであっても変わりません。違うのはまず動作環境ですね。例えばOSも、LinuxからiTronまで、様々な環境があります。中にはタッチ操作やマウス操作が存在しない環境でも動作することが求められることもあります。</p>

<p><b class="speaker siraisi">白石:</b>ACCESSさんの組み込みブラウザは、今は主にChromiumやWebKitをベースにして開発してらっしゃるんですよね。組み込み向けに機能を追加したり、ということもあるんでしょうか？</p>

<p><b class="speaker umeda">梅田:</b>はい、例えばテレビのリモコンとか、ゲームのコントローラーとかでブラウジングを可能にすると言った機能の追加は一般的にありますね。ブラウザの操作に関しては、「組み込みならでは」という部分は多いです。</p>

<h2>テレビとブラウザ</h2>

<p><b class="speaker siraisi">白石:</b>では、テレビ、クルマ、ゲームに搭載されているブラウザの状況について、詳しく教えてください。</p>

<p><b class="speaker umeda">梅田:</b>ではテレビからいきましょう。実はテレビには昔から身近にありまして、<strong>テレビのdボタンを押して立ち上がる画面は、実はブラウザ</strong>なんです。</p>

<p><b class="speaker siraisi">白石:</b>dボタンはブラウザ起動ボタンでもあったわけですね。</p>

<p><b class="speaker umeda">梅田:</b>はい、それにテレビのメニュー選択を行うアプリもHTMLで書かれていたりしますね。</p>

<p><b class="speaker siraisi">白石:</b> <strong>ハイブリッドキャスト</strong>と言うのは何でしょうか？</p>

<p><b class="speaker umeda">梅田:</b>テレビ向けのブラウザでは、以前はBML (<a href="https://ja.wikipedia.org/wiki/Broadcast_Markup_Language" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Bloadcast Markup Language</a>)という、XHTMLベースの独自言語が利用されていました。ですが現在では、HTML5をベースとしたテレビ用の規格がありまして、それが「ハイブリッドキャスト」です。</p>

<p>ハイブリッドキャストは「放送と通信の連携」を目的として、NHKさんを中心とした標準化が行われています。単にHTML5が使えると言うだけではなく、スマートフォンとの連携（セカンドスクリーン）機能なども備えています。</p>

<p><b class="speaker siraisi">白石:</b>民放局の、ハイブリッドキャストへの対応度合いとかはいかがですか？</p>

<p><b class="speaker umeda">梅田:</b>各社とも、現在対応を拡充している段階ですね。2020年の東京オリンピックで、テレビ放送をより楽しく観せるのが、各社共通の目標になっています。</p>

<p><b class="speaker siraisi">白石:</b>ちなみに昔聞いた話なのですが、<strong>テレビって意外にも低スペック</strong>で、重たいWebページを表示させるのは難しいと聞いたことがあります。その状況は現在では変わりましたか？</p>

<p><b class="speaker umeda">梅田:</b>いえ、あまり変わりないです。テレビの中で一番高価な部品はやはりパネル。その他の部品、例えばCPUなどは、やはり廉価なものが使われることが多いんですね。なのでテレビ向けのWebページは、軽量であることが望まれます。</p>

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

<h2>車とブラウザ</h2>

<p><b class="speaker siraisi">白石:</b>では次は車とブラウザの関係について教えてください。</p>

<p><b class="speaker umeda">梅田:</b>自動車業界では、カーナビを中心とした、操作可能な中央のスクリーンを「<strong>HMI (Human Machine Interface)</strong>」と呼びます。HMIでブラウザを利用できると、例えば自動車のマニュアルをHTMLで書いたりできます。HTMLは多言語化しやすいのでメリットは大きいですね。</p>

<p>あとは車載システムにアプリを追加することができるものもあります。インターネットと繋がって、例えば天気を表示したり、運転を楽しくするようなアプリがインストールできたりします。車載システムは「情報（インフォメーション）」と「娯楽（エンターテインメント）」を提供するという概念から、「<strong>インフォテインメント</strong>」とか、「<strong>IVI</strong>（In-Vehicle Infotainment：車載インフォテインメント）」と呼ばれたりします。HMIでブラウザが利用できるなら、そうしたアプリもWeb技術で開発できるようになります。</p>

<p><b class="speaker siraisi">白石:</b>車載システムにブラウザを搭載するという動きは、どれくらい進んでいるものなんでしょうか？</p>

<p><b class="speaker umeda">梅田:</b>海外では結構進んでいます。車載システムのOSは共通化が進みつつあって、主要なものとしては<a href="https://www.automotivelinux.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">AGL (Automotive Grade Linux)</a>や<a href="https://www.genivi.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GENIVI</a>がありますが、これらには今後ブラウザが搭載される予定があります。</p>

<p>ちなみに<strong>AGLって、Tizen IVIが元になっている</strong>んですよ。Tizenは一時期HTML5にも注力していましたので、白石さんはご存知じゃないかと思いますが。</p>

<p><b class="speaker siraisi">白石:</b>ええっ！Tizenって久しぶりに聞いた名前です。そうだったのか…そういう風に受け継がれていたんですね。IT業界って、思わぬところが繋がってたりするので面白い(笑)</p>

<p>ところでそういう車載システムとかだと、テスラの車とかは進んでるイメージありますけど、実際のところどうなんでしょう？</p>

<p><b class="speaker umeda">梅田:</b>確かにテスラは進んでいて、WebKitを搭載した車載システムを既に積んでいますね。ただ、古いバージョンのWebKitを搭載していたため、そのセキュリティホールを突かれてハッキングが可能な状態になっていたことがあったりします。車載システムの高度化に伴って、セキュリティリスクも高まりつつあるというのが実情です。</p>

<h2>ゲームとブラウザ</h2>

<p><b class="speaker siraisi">白石:</b>ゲーム機にブラウザが搭載されているという点についてはいかがでしょう？</p>

<p><b class="speaker umeda">梅田:</b>実は、<strong>ゲーム機にブラウザが搭載されているのは結構昔から</strong>なんです。2003年に発売されたPlayStation 2や、2004年に発売されたPlayStation Portableには、もう入っていましたからね。</p>

<p><b class="speaker siraisi">白石:</b>そんなに昔から入っていたんですね。そう言えば、ガラケーとかにもブラウザ積まれてたし、そう言えば組み込みブラウザって結構昔からあったんですよね。</p>

<p><b class="speaker umeda">梅田:</b>そうですね。それに、<strong>ゲームソフト自体にブラウザが積まれていたこともありました</strong>よ。</p>

<p><b class="speaker siraisi">白石:</b>ええっ！ゲームソフトがブラウザを内蔵していたんですか？</p>

<p><b class="speaker umeda">梅田:</b>そうです。例えばモンスターハンター3には、弊社のNetFrontというブラウザが内蔵されていました。</p>

<p><b class="speaker siraisi">白石:</b>ゲームソフトにブラウザが入ってるなんて、考えたこともありませんでした。すごい世界だ。</p>

<h2>ブラウザ開発ってどんな仕事？</h2>

<p><b class="speaker siraisi">白石:</b>そもそもブラウザ作ってる会社ってあまりないですよね。そこら辺の実際をお聞きしてみたいです。ブラウザ開発って、どのように進めるものなんですか？</p>

<p><b class="speaker umeda">梅田:</b>基本的には、W3Cの仕様を満たすように実装するというのがブラウザ開発の中心になります。ただ、今はオープンソースのブラウザをベースに開発していますので、少し仕事の範囲が変わりましたね。W3Cの仕様を満たすために開発するのは、主にChromiumやWebKitのコアチームに任せて、私たちはその移植が中心になりました。</p>

<p><b class="speaker siraisi">白石:</b>なるほど、今はブラウザエンジンそのものの開発に深く食い込んでいるわけではないと。</p>

<p><b class="speaker umeda">梅田:</b>ただ、弊社ではEPUBのエンジンも作っていまして、そのために独自開発した部分とかは結構ありますね。例えば縦書きレイアウトとかは、W3Cに提案されている仕様を元に弊社で開発したコードを、ブラウザエンジン側にコントリビュートしたりもしています。</p>

<p><b class="speaker siraisi">白石:</b>ちなみにブラウザ開発って、どんな言語を使って行うんですか？</p>

<p><b class="speaker umeda">梅田:</b>WebKitやChromiumはC++で書かれているので、C++ですね。C++ってメモリマネジメントが重要な言語ですが、WebKitとかってそこら辺が少しいいかげんだったりするんです(笑)。</p>

<p><b class="speaker siraisi">白石:</b>え、そうなんですか？メモリリークしたり、とかですか？</p>

<p><b class="speaker umeda">梅田:</b>さすがに派手なメモリリークとかはめったにありませんが、メモリ確保に失敗した時の処理が甘かったり、とかですね。で、車載システムとかで利用する場合って、「動かない」って状況になるのはすごくまずいわけです。運転中は安全がなにより最優先ですから。そういう穴を潰して本家にコントリビュートする…というのもたまにありますね。</p>

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

<h2>組み込みブラウザベンダーはつらいよ</h2>

<p><b class="speaker siraisi">白石:</b>ACCESSさんはブラウザと言っても、更に「組み込みブラウザ」を作っているという数少ない存在。そういう、数少ない組み込みブラウザベンダーならではの苦労などをお聞きしたいです。</p>

<p><b class="speaker umeda">梅田:</b>そうですね、まず先ほども申し上げたように、現在はChromiumやWebKitをベースに開発しています。以前は独自のブラウザエンジンでしたが、数年前にWebKitに切り替えたんです。ただ、WebKitはそもそも組み込み用途が主ではありませんでしたから、当初はハードのスペック的な制約との折り合いを付けるのが大変でしたね。（Webページが）メモリに乗り切らないので、数キロバイト単位に分割してメモリに載せるようにしたり…</p>

<p><b class="speaker siraisi">白石:</b>うわー、それは大変そう…。</p>

<p><b class="speaker umeda">梅田:</b>最近はハードのスペックが向上したので、そういう苦労をすることも少なくはなってきましたけどね。あとは、レンダリングのパフォーマンスを改善するのも大変ですね。車載システムだと、最低でも60fpsは要求されるので、動画のデコードをハードウェアに行わせるようにするとか、CanvasをGPUレンダリングするとか。スクロールが滑らかになるようチューニングするのも大変でした。</p>

<p><b class="speaker siraisi">白石:</b>WebKitとChromiumは使い分けてるんですか？</p>

<p><b class="speaker umeda">梅田:</b>お客様からのご要望や、用途に応じて使い分けています。WebKitはリリースサイクルがだいたい年一回で安定していますが、Chromiumのリリースサイクルはもっと速くて、コードもどんどん変化していきます。どちらがいいということでもなくて、それぞれにメリットがありますね。</p>

<p><b class="speaker siraisi">白石:</b>大変興味深いお話です。組み込む製品ごとに異なる苦労とかはあったりするんですか？</p>

<p><b class="speaker umeda">梅田:</b> <strong>車の場合とかは、製品の開発サイクルが長い</strong>のが特徴です。一つの車を作るのに5年とかかかったりすることもあるので、何回もつなぎ込みが発生するわけです。</p>

<p><b class="speaker siraisi">白石:</b>5年！Webの世界で5年と言ったら、状況はかなり変わってしまいますよね。</p>

<p><b class="speaker umeda">梅田:</b>そうですね。ベースになっているブラウザもどんどん進化していくので、つなぎ込みを行うたびに、できるだけ最新に近づけていくようにするんです。その際に、ブラウザエンジンが持つAPIが変わってしまうことも珍しくありません。そういう事態に対応しやすいように、APIを抽象化したレイヤーを持っていたりします。</p>

<p><b class="speaker siraisi">白石:</b>いやー、ぼくみたいなフロントエンドエンジニアが全然体験したことのない苦労だ(笑)</p>

<p><b class="speaker umeda">梅田:</b>他には、ブラウザの機能を拡張しなくてはならないこともよくあります。組み込みの場合って、HTML5が元々持っている機能だけじゃ足りないことが多いんですよ。</p>

<p>ゲームの場合は、ゲーム機というハードに閉じているからか、独自に拡張することが多いのが特徴です。</p>

<p>車載の場合は、<a href="https://www.w3.org/TR/vehicle-information-api/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Vehicle API</a>っていうAPIがW3Cで標準化されていますので、その実装を行うのも仕事の一つです。このAPIを使うと、例えばキーロックの情報を取れたりと、車載システムならではの機能を利用することができます。</p>

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

<h2>PCやスマホ「じゃない」Webアプリ開発とは</h2>

<p><b class="speaker siraisi">白石:</b>では最後に、PCやスマホじゃない世界でのWebアプリ開発について、どのようなものかお聞かせください。</p>

<p><b class="speaker umeda">梅田:</b>基本的には、それほど変わるところはありません。組み込みブラウザと言っても結局WebKitやChromiumをベースとしていますし、HTML5以降はブラウザ間の互換性も高くなっていますし。</p>

<p>ただ、市場によって制約はありますね。例えば車載システムで動作する場合は、運転手の気を逸らさないようUIガイドラインがあったりします。</p>

<p>一方で、市場ごとに特有の拡張機能を使うことも求められます。</p>

<p><b class="speaker siraisi">白石:</b>先ほどおっしゃっていた、車載システム上で使えるVehicle APIなどですね。</p>

<p><b class="speaker umeda">梅田:</b>そうです。そして、そうした標準化されたAPIと言うのは、組み込みの世界で特に重要なんです。</p>

<p>基本的にオープンなPC/スマホに比べて、組み込みは市場に特化しがちな世界でもあります。クローズドな世界で、クローズドな技術を使っているのでは、スキル的にもビジネス的にも拡がりにくい。</p>

<p>オープンで標準化されたAPIを使うことで、そうした事態を避けることができる。Web技術者も、活躍できる場がどんどん広がっていきます。</p>

<p><b class="speaker siraisi">白石:</b>なるほど。ちなみに、車載の世界とかでは、App Storeのようなアプリプラットフォームが出てくる可能性はあるのでしょうか？そして、Webで作ったアプリであればそれらのプラットフォームにどこでもデプロイできるというような可能性はありますか？</p>

<p><b class="speaker umeda">梅田:</b>はい、そういう可能性はもちろんあります。アプリプラットフォームみたいな構想は各社持っていて、今後登場してくるのは間違いありません。
その時に、Web技術を使ってアプリを開発できる可能性も、それが複数のプラットフォームで展開できる可能性も、大いにあると思います。</p>

<p>そうした世界を見据えて、総務省さんと一緒に「<a href="https://rp.kddi-research.jp/hackathon" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Webとクルマのハッカソン</a>」というイベントをここ数年開催しています。10月下旬から申し込み開始ですので、興味のある方にはどんどん参加してほしいですね。</p>

<p><b class="speaker siraisi">白石:</b>あ、そのイベント去年ぼくが審査員やったやつだ(笑)。去年もすごく盛り上がりましたよね。本日は組み込みブラウザ開発の話、そしてPC/スマホ以外のWeb開発の話など、普段あまり聞けないお話をお聞かせいただき、ありがとうございました！</p>

<p><img src="/wp-content/uploads/2017/10/DSC05548.jpg" alt="" width="640" height="416" class="alignnone size-full wp-image-24652" srcset="/wp-content/uploads/2017/10/DSC05548.jpg 640w, /wp-content/uploads/2017/10/DSC05548-300x195.jpg 300w, /wp-content/uploads/2017/10/DSC05548-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
		<item>
		<title>ニュースタブ新設で月間アクティブユーザー数が5900万人を突破した「LINE NEWS」の開発技術と体制を聞いてきた！</title>
		<link>/miyuki-baba/24053/</link>
		<pubDate>Fri, 22 Sep 2017 01:00:29 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Assault]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[LINE]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[React.js]]></category>

		<guid isPermaLink="false">/?p=24053</guid>
		<description><![CDATA[2017年2月に新設されたニュースタブによって、ユーザー層をより広く拡大し、2017年3月時点で月間アクティブユーザー数5900万人を突破した「LINE NEWS」。そのニュースタブは、WebViewで実装されているのを...]]></description>
				<content:encoded><![CDATA[<p>2017年2月に新設されたニュースタブによって、ユーザー層をより広く拡大し、2017年3月時点で月間アクティブユーザー数5900万人を突破した「LINE NEWS」。そのニュースタブは、WebViewで実装されているのをご存じでしたか？</p>

<p>LINEのニュースタブをReact.jsで開発しているフロントエンド、JavaとPerlで開発しているサーバーサイドのエンジニアの方々に、どんな開発技術や体制で開発しているのか、HTML5 Experts.jp白石俊平編集長が直撃インタビューしてきました！</p>

<h4>今回お話を聞いた「LINE NEWS」開発チームの皆さん</h4>

<p><img src="/wp-content/uploads/2017/09/maezawa.jpg" alt="" width="90" height="90" class="alignnone size-full wp-image-24089" /><br><span style="font-size: 90%;"><strong>LINE株式会社 前澤 春樹さん</strong><br>Javaのサーバーサイド担当。200以上の媒体社様向け管理画面のコンテンツ入稿システム開発や、公式アカウントから発信されるメッセージ配信システムが主な担当。</span></p>

<p><img src="/wp-content/uploads/2017/09/morifuji.jpg" alt="" width="90" height="90" class="alignnone size-full wp-image-24092" /><br><span style="font-size: 90%;"><strong>LINE株式会社 森藤 賢司さん</strong><br>Perlで作られている一般ユーザーから見えるニュースタブ、記事ページのバックエンドや社内向けの管理画面を担当。</span></p>

<p><img src="/wp-content/uploads/2017/09/otsuki.jpg" alt="" width="90" height="90" class="alignnone size-full wp-image-24095" /><br><span style="font-size: 90%;"><strong>LINE株式会社 大槻 友諒さん</strong><br>フロントエンドエンジニア。WebViewでつくられているニュースタブの実装を担当している。React.jsなどの最新技術に触れることも多い。</span></p>

<p><img src="/wp-content/uploads/2017/09/tomita.jpg" alt="" width="90" height="90" class="alignnone size-full wp-image-24097" /><br><span style="font-size: 90%;"><strong>LINE株式会社 富田 梓さん</strong><br>マークアップエンジニア。デザイナーの作成したPSDをもとにしたCSSの設計と実装を行う。ニュースタブの他、PC/SPのWeb、キャンペーンページなどニュース関連全般を担当。</span></p>

<h2>なぜ、ニュースタブはWebViewなの？</h2>

<p><strong>白石</strong>：今日は主にニュースタブにフォーカスしてお話を聞いていきますね。LINEのニュースタブは、なぜWebViewを使ったのでしょうか。</p>

<p><strong>大槻</strong>：もともと記事ページはWebViewで作っていました。ニュースタブを作ろうという話になったときに、記事ページと同じ技術で作るほうが開発スピードも早いし、やりやすい。バージョンアップなども、そろえたほうがリリースしやすいということでWebViewで作ることになりました。</p>

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

<p><strong>白石</strong>：じゃあ、ニュースタブ以外はネイティブでできているんですね。</p>

<p><strong>大槻</strong>：そうです。トークやタイムラインなど、メインの機能はネイティブで実装されています。並んでるタブの中だと、ニュースタブだけがWebViewです。</p>

<p><strong>白石</strong>：WebViewとネイティブといった複数の技術を混ぜるのって、大変だったんじゃないでしょうか。</p>

<p><strong>大槻</strong>：ネイティブとWebView間でデータやイベントをやり取りする必要があって、そのための仕組みをアプリエンジニアと協力して実現しました。ユーザーにはLINEアプリの一部として見えるので、挙動やパフォーマンスに違和感が出ないようにするのが大変でした。</p>

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

<p><strong>白石</strong>：WebViewだと、読み込みや表示が遅かったりしません？</p>

<p><strong>大槻</strong>：いえ、結果的にそこまで遅いということはなかったです。Webだからの限界はありましたけど、WebViewだから特別つらいことはありませんでした。</p>

<p>LINEバイトやLINEギフトといったファミリーアプリにはすでにWebViewの技術が使われていて、知見があったことも役立ったんだと思います。</p>

<p><strong>白石</strong>：React.jsを使っているとのことですが、SPA的な開発だとマークアップはそんなに必要じゃないと思うんですが、両方必要なのはどうしてなんでしょう。</p>

<p><strong>富田</strong>：うちは分業体制をとっていて、僕と大槻さんが所属しているチームはフロントエンドを担当しています。案件によってJSとマークアップの両方を一人が担当することもありますが、newsでは規模の大きさもあって担当が分かれています。</p>

<p>デザインからHTMLを起こして、それを渡しているので、一般的に言われているReactを使うイメージとはちょっと違うかもしれません。</p>

<p><strong>大槻</strong>：セマンティックなHTMLを書くとか、CSSを設計するといったところは完全にお任せしてします。一回組んだものを、パーツとして分解してJSXに落とし込んでいます。</p>

<p><strong>白石</strong>：PCでも記事ページそのものは見られるんでしたっけ？</p>

<p><strong>富田</strong>：記事ページは見られます。</p>

<p><strong>白石</strong>：あ、レスポンシブ対応しているんですね。</p>

<p><strong>富田</strong>：いえ、レスポンシブとかではなくて、PC専用に作っています。SNSなどでシェアされたURLはPCからでもアクセスできるため、PC用の記事ページを用意しています。</p>

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

<h2>JavaとPerlでサーバー管理</h2>

<p><strong>白石</strong>：サーバーサイドでJavaとPerlという複数言語を使っているのはなぜですか？</p>

<p><strong>森藤</strong>：もともとPerlで全体が作られていたのですが、社内の方針で最近はJavaで作ろうという流れになってきています。なので、最近のレポジトリとかはJavaで作ってます。まあ、歴史的背景です(笑)。</p>

<p>Perlはニュースタブと記事ページ、あと社内向けのCMSもPerlで作られています。</p>

<p><strong>白石</strong>：へえ！CMSは自作なんですね。ちなみに、ReactはAPIを出すのに使ってるんですか？</p>

<p><strong>森藤</strong>：はい、ニュースタブの部分は、全てAPIで実装されています。</p>

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

<p><strong>白石</strong>：Reactでサーバーサイドレンダリングしているのでしょうか。</p>

<p><strong>大槻</strong>：いえ、クライアント側でレンダリングしています。</p>

<p>APIでとってきたデータをローカルストレージにのせておいて、ネットワークがないところでも画面が真っ白にならないように工夫しています。</p>

<p><strong>白石</strong>：JavaとPerlで分かれていますけど、システム間連携しているんですか？</p>

<p><strong>森藤</strong>：データベースで連携しています。データベースはMySQLを使っています。</p>

<p><strong>白石</strong>：MySQLをクラウド上で？</p>

<p><strong>森藤</strong>：いえ、オンプレです。本番環境は、現在ほとんどオンプレのサーバーで動いていますが、最近構築したサーバーや開発環境はプライベートクラウドの「Verda」というサービスを使っています。</p>

<p><strong>白石</strong>：えっ、どこかの製品を買うのではなく、自分たちで作ってるんですか。かっこいいですね。</p>

<p><strong>森藤</strong>：DB周りはDBA（データベース管理者）のチームが運用しています。DBサーバーの構成は、マスター1台に参照やバックアップに使うスレーブが数台ある感じです。テキストで入稿するデータなので、データ容量が一気に増えて困ったとか、容量が足りなくなったという話も聞いたことがないですね。</p>

<p><strong>白石</strong>：Javaで入稿システムを作っていらっしゃるんですよね。ScalaやKotlinなんかも使っているんでしょうか？</p>

<p><strong>前澤</strong>：Javaだけです。最近のモダンな言語に比べると、やっぱりJavaは冗長というかすごいコード量を書かないといけないのは大変なんですが…。</p>

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

<p><strong>白石</strong>：ぼくは昔Javaエンジニアだったのですごく気になるんですが、Javaのバージョンは何ですか？</p>

<p><strong>前澤</strong>：Java 8です。</p>

<p><strong>大槻</strong>：僕も前職では、エンタープライズ系のサービスをJavaで書いていました。その時はバージョンが古くて4でした。あと8をちょっと触ったくらい。当時はジェネリクスもアノテーションもなくて(笑)。</p>

<p><strong>白石</strong>：僕はXML地獄でしたね(笑)。EclipseみたいなIDEとかは使ってますか？</p>

<p><strong>前澤</strong>：Eclipseは使ってなくて、IntelliJ IDEAを使ってます。</p>

<h2>React.jsを選択した背景は？</h2>

<p><strong>白石</strong>：フロントエンドのReact.jsはいつから使ってるんですか？</p>

<p><strong>大槻</strong>：ニュースタブができてからなので、2017年2月からですね。</p>

<p><strong>白石</strong>：苦労したこととかありますか？</p>

<p><strong>大槻</strong>：React.jsだから苦労したことは特になかったんですが、どのライブラリにするかは結構検証しました。Vue.jsやRiot.jsなんかもいろいろ試してみたのですが、結局React.jsにしました。</p>

<p>Create React Appでベースを立ち上げた経緯もあって、最初の環境を整えるのはすごくスムーズでした。React.jsは結構書きやすくて、世の中で使われているアプリも多く、バージョンアップも早いし、安定していて信頼できました。</p>

<p><strong>白石</strong>：なるほど。stateの管理とか、Reduxは使ってますか？</p>

<p><strong>大槻</strong>：Reduxは最初は使おうと思ったのですが、意外と過剰なスペックがあってやめました。代わりにFlux Utilsを使っています。</p>

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

<h2>足りない開発ツールはどんどん作る</h2>

<p><strong>白石</strong>：ほかにLINEさん独自の開発手法があれば教えてください。</p>

<p><strong>大槻</strong>：フロントのアクセス解析はGoogle アナリティクスを使っているんですが、そのほかに社内で開発した「LINE Analytics」という解析ツールを使っています。JavaScriptのエラー部分もリアルタイムに収集できるので、リリース直後に増減を確認したりしています。</p>

<p><strong>白石</strong>：LINEさんは結構社内で作る文化があるんですね。自分たちでも作るというのは、意思決定が必要だと思うんですが、どんなかんじで決めているんですか？</p>

<p><strong>富田</strong>：その辺は結構自由にやらせてもらえる風土ですね。プロジェクトで使うツールだけでなく、たとえばメーラーやスケジュール管理といった社内システムについて内製する部署があります。既製品でもの足りなかったら、自分たちで作っちゃおうみたいな。</p>

<p><strong>大槻</strong>：分業しているのでサーバーに触れること自体は少ないんですが、JSやCSSの配信ツールをフロントエンドチーム内で開発したりと、役割内で足りないものは作って配布させたりする人が多いですね。</p>

<p>サーバー側はCIも自前で作ってると聞きました。社内の承認フローがそれほどかたくないので、わりと気軽に自前で作ってます。</p>

<p><strong>白石</strong>：CIもですか！Jenkinsとかを使わずに？</p>

<p><strong>前澤</strong>：Perlでは内製のCIを使っていますが、JavaではJenkinsを使ってビルドしていて、ビルドした成果物をサーバーに配布するシステムは内製です。CDNのオリジンサーバーも自作してますね。</p>

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

<h2>秒間2万のアクセスを捌くパフォーマンス</h2>

<p><strong>白石</strong>：パフォーマンスなんかもかなり気をつかっているんじゃないでしょうか。</p>

<p><strong>森藤</strong>：はい。APIアクセスが秒間2万くらいのアクセスがあるので試行錯誤しています。APPサーバーの台数は約30台くらいなんですが。</p>

<p><strong>森藤</strong>：去年の6月に高速化プロジェクトがあって、CDNを追加しました。CDNはAkamaiを使っています。クエリーをちゃんと書いてなかったりするとサービスが止まるので、SQLには気をつけてキャッシュに貯めるようにしていますね。</p>

<p><strong>白石</strong>：フロントエンドのパフォーマンスで工夫した点はどうですか？</p>

<p><strong>大槻</strong>：ニュースタブは縦に長いんですけど、DOMが増え過ぎるとメモリを食ってアプリがクラッシュしてしまう問題がありました。</p>

<p>iPhoneでは横スワイプでタブ移動できるので、左右のタブを予め描画している分よりDOMが多く、見えないDOMをいかに削除していくかなどの工夫をしています。</p>

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

<h2>タスク管理・チーム間の共有ツールは？</h2>

<p><strong>白石</strong>：皆さんは所属する組織は違うとのことですが、「LINE NEWS」プロジェクトのタスク管理やチーム間の共有ツールはどうしていますか。</p>

<p><strong>富田</strong>：ニュースチームのプロジェクトとして定例ミーティングをして、進捗管理しています。管理に使っているツールはJIRAですね。</p>

<p><strong>白石</strong>：進め方はアジャイルですか？</p>

<p><strong>富田</strong>：そんなにアジャイルぽくはないです。企画チームが20人くらいいて、案件ベースを作ってくれるので、早い段階で開発からもフィードバックしたり、企画と一緒に練ったりします。1週間のスプリント制でやっています。</p>

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

<p><strong>白石</strong>：ニュースチームは全体で何人くらいいらっしゃるんですか？</p>

<p><strong>前澤</strong>：企画や開発、制作、編集、アライアンス、モニタリング、PR・マーケティングなどを含めると、プロジェクトに関わっている人は100人を超えています。エンジニアは現在、バックエンドが8人、フロントエンドが4人です。</p>

<p><strong>白石</strong>：大型プロジェクトですね。CIは自作されてるとのことでしたけど、DevOpsみたいな工夫ポイントはありますか？</p>

<p><strong>前澤</strong>：これまでは五月雨で流動的だったけど、人が増えてきたので週1回のサイクルを整えたり、模索しているところです。</p>

<p><strong>白石</strong>：ソースコードの管理やリリースのルールとかはどうでしょう。</p>

<p><strong>森藤</strong>：ソースコードの管理はGitHubです。Perl側は最低2人レビュアーがいないとリリースやマージしちゃいけないことになっています。</p>

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

<h2>急成長するサービスと開発体制に合った環境を構築</h2>

<p><strong>白石</strong>：最後に今後こうしたいという抱負や、チャレンジしたい目標を教えてください。</p>

<p><strong>前澤</strong>：LINEのサービスが急速に成長して、エンジニアも増えているので、開発時期によってリポジトリやフレームワークの使い方も違ってきています。それを統一したいと思っているんですけど、結構大変そうです(笑)。</p>

<p><strong>森藤</strong>：これまでのサーバーサイドはほとんどPerlだったんですけど、ここ数年みんなJavaを書くようになって、Perlを書くエンジニアが減ってきているんです。サーバー側をもっとJavaに置き換えていけたらと思ってます。</p>

<p><strong>大槻</strong>：TypeScriptを導入も検討していきたいです。依存するライブラリの都合もあって、簡単ではないかもしれませんが。</p>

<p><strong>富田</strong>：ニュースのプロジェクトが始まったのが2013年で、最近では更新が滞っているruby-sassやgrunt、compassといった古い環境に依存しており、日々の更新に忙しくてそういった根幹部分はなかなか手を入れることが難しかったんですが、最近のリリースで、タスクランナーに依存したコンパイルをやめたり、node-sassへの移行したりしました。</p>

<p>それに伴ってチームで使っている社内用のツールやsassのライブラリを更新しているので、今後も新しい技術についてそれらに生かせるか検証しつつ対応できればと思っています。</p>

<p><strong>白石</strong>：LINEさんは独自の開発ツールをどんどんつくっていく行動力と技術力が素晴らしいですね。今日はいろいろ面白い話をありがとうございました！</p>

<p>LINEさんでは、9月28日(木) にエンジニア向け技術カンファレンス「<a href="http://linedevday.linecorp.com/jp/2017/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">LINE DEVELOPER DAY 2017</a>」を開催するそうです。LINEの様々なサービスにおける技術領域でのチャレンジや開発体制などについて語られるとのことなので、興味のある方はぜひ参加してみてください。</p>

<p><img src="/wp-content/uploads/2017/09/DSC02651-2.jpg" alt="" width="640" height="415" class="alignnone size-full wp-image-24057" srcset="/wp-content/uploads/2017/09/DSC02651-2.jpg 640w, /wp-content/uploads/2017/09/DSC02651-2-300x195.jpg 300w, /wp-content/uploads/2017/09/DSC02651-2-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
			</item>
		<item>
		<title>日本最大級のHTTP/2移行、TLS 1.3、そしてQUICについてヤフーに聞いてみた！</title>
		<link>/shumpei-shiraishi/24164/</link>
		<pubDate>Fri, 15 Sep 2017 00:48:15 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[QUIC]]></category>
		<category><![CDATA[http2]]></category>
		<category><![CDATA[ヤフー]]></category>

		<guid isPermaLink="false">/?p=24164</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (5)こんにちは、編集長の白石です。 この記事は、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> (5)</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/DSC04596.jpg" alt="" width="640" height="400" class="alignnone size-full wp-image-24194" srcset="/wp-content/uploads/2017/09/DSC04596.jpg 640w, /wp-content/uploads/2017/09/DSC04596-300x188.jpg 300w, /wp-content/uploads/2017/09/DSC04596-207x129.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>左から、ヤフー株式会社 大津繁樹さん、新部長則さん</strong></span></p>

<p>お二人のセッションは「<a href="http://events.html5j.org/conference/2017/9/session/#b2" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">大規模運用で見えるWebプロトコルの理想と現実、そして今後</a>」（ルームB 13:20-14:00）です。
（現在HTML5 Conferenceは定員オーバーの状態ですが、無料イベントということもあってキャンセルも多めに出るらしいので、諦めずにキャンセル待ちすることをお勧めします！）</p>

<h2>日本最大級のHTTPS &amp; HTTP/2化案件の実際</h2>

<p><b class="speaker siraisi">白石:</b> まず簡単な自己紹介からお願いできますでしょうか？</p>

<p><b class="speaker nibe">新部:</b> 私は2005年の7月に入社し、Yahoo!メールや広告の画像配信を行うCDNの運用などを経て、現在は全社で利用しているリバースプロキシの運用を行っています。
現在、社内でプラットフォームと呼ばれる部分にはだいたい関わっている感じですね。</p>

<p><b class="speaker ohtsu">大津:</b> まさに、新部さんのチームは、ヤフーのトラフィックをほとんど全て受け止めていると言って間違いありません。国内最大級のトラフィックを支えているんです、半端ないですよ。</p>

<p><b class="speaker siraisi">白石:</b> では大津さんも自己紹介をお願いできますか？</p>

<p><b class="speaker ohtsu">大津:</b> 私は昨年の10月に入社したばかりです。大きく2つの仕事をしていまして、Node.jsのコミッターとして社内のサポートを行っているのと、IETFでネットワークプロトコルの標準化活動に関わっています。</p>

<p><b class="speaker siraisi">白石:</b> ありがとうございます。では、ヤフーのサービスをHTTPS + HTTP/2化した際のことを伺ってもいいですか？</p>

<p><b class="speaker nibe">新部:</b> まずはヤフーのサービスをHTTPSに移行するところから始めたんです。HTTPS化に伴うコストや影響の試算を踏まえて、2015年10月に、全社横断でHTTPS化するプロジェクトが発足したんです。</p>

<p>HTTPS化するにあたっては大きな問題が2つありました。1つは、TLSの暗号化・復号化の処理が重たいということ。もう1つは、証明書の管理が煩雑にならないようにしなくてはならないということでした。なにせドメインでいうと1,000以上、サービスも100以上ありますので。</p>

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

<p><b class="speaker siraisi">白石:</b> 規模感が普通の会社とは桁違いだ…。</p>

<p><b class="speaker nibe">新部:</b> なので、全社共通のリバースプロキシを作って対応することになったんです。そのリバースプロキシでTLSを一旦終端させて、そこから先は通常のHTTP/1.1に変換し、各サービスにリクエストを転送する。</p>

<p><b class="speaker siraisi">白石:</b> そのリバースプロキシって、だいたいサーバ何台分くらいになるんでしょう…？</p>

<p><b class="speaker nibe">新部:</b> <strong>500台以上</strong>ですね。</p>

<p><b class="speaker ohtsu">大津:</b> 「以上」と言っても幅があると思いますが、<strong>そのかなり上の方</strong>ですよ、実際の数字は(笑)。</p>

<p><b class="speaker siraisi">白石:</b> す、すごい…！</p>

<p><b class="speaker nibe">新部:</b> そして、2016年3月、最初にリバースプロキシに乗ったのはヤフオク！です。</p>

<p><b class="speaker siraisi">白石:</b> なんでヤフオク!を最初のサービスに選んだんですか？</p>

<p><b class="speaker nibe">新部:</b> 検証の意味も強かったので、ある程度以上の規模感のあるサービスをデプロイしたかったんです。あと、下手すると人命を左右するような「何があっても絶対に止められない」サービスは避けたかった。</p>

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

<p><b class="speaker nibe">新部:</b> ヤフオク！も、いきなり全部をHTTPS化したわけじゃなくて、最初は一部だけ、その後範囲を広げていったという感じです。
幸いにもそれほど大きな事故も起こることなく進んでいき、2017年の3月末には、特定のクライアントに提供しているところを除いたすべてのサービスがHTTPSで動作するようになりました。</p>

<h2>HTTP/2化は正直、「エイヤ」でやった</h2>

<p><b class="speaker siraisi">白石:</b> なるほど、HTTPS化は、様々なご苦労はあったことと思いますが、比較的順調に推移したということですね。そして今では多くのサービスがHTTP/2を利用しているんですよね。<strong>HTTP/2化はどういう流れで進んでいったんですか？</strong></p>

<p><b class="speaker nibe">新部:</b> これはちょっと言いにくいし、言っていいのかもわからないんですが…<strong>正直、「エイヤ」でやってしまったところもありますね(笑)</strong>。</p>

<p>全社共通のリバースプロキシを構築できたし、ここをHTTP/2化してしまえば、全部HTTP/2にできるじゃん、と。弊社のエンジニアもHTTP/2サーバの実装に携わっていたりもしたので、自分たちで作った成果を自分たちで使いたいという要望もありまして…。</p>

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

<p><b class="speaker siraisi">白石:</b> で、「エイヤ」でやっちゃったと(笑)。</p>

<p><b class="speaker nibe">新部:</b> まあ、全部をいきなり切り替えたわけじゃないですけどね。こちらも一部のサーバだけを切り替えて、問題がないことを確認しつつ、だんだんと。</p>

<p><b class="speaker siraisi">白石:</b> なるほどー。ちなみにその、最も重要なリバースプロキシですが、具体的にはどのソフトを利用しているんですか？nginxとか？</p>

<p><b class="speaker nibe">新部:</b> いや、<a href="http://trafficserver.apache.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Apache Traffic Server</a>というプロダクトです。元々これは米国のYahoo! Inc.が開発していたものをApache Software Foundationに寄贈したものです。</p>

<p><b class="speaker siraisi">白石:</b> では、Apache HTTP Serverとは関連がないんですね。</p>

<p><b class="speaker nibe">新部:</b> そうです。このサーバをHTTP/2対応させるパッチの開発に、弊社のエンジニアもコミットしているんです。</p>

<h2>「HTTP/2化で速くなったかは…正直わかりません(笑)」</h2>

<p><b class="speaker siraisi">白石:</b> では、HTTP/2への切り替えは、それほど大きな問題もなくうまく行ったと。そうした環境で運用を行ってみて、実際にわかったことや問題などはありますか？例えばHTTP/2化することで、パフォーマンスが向上するんじゃないかという期待はあったと思うのですが。</p>

<p><b class="speaker ohtsu">大津:</b> そうですね…正直に言ってしまうと、HTTP/2でパフォーマンスが上がったかどうかは<strong>よくわからない</strong>んです。</p>

<p><b class="speaker siraisi">白石:</b> ああ、それ<a href="https://html5experts.jp/shumpei-shiraishi/24156/" data-wpel-link="internal">先日インタビューしたあほむさん</a> も同じこと言ってました(笑)。</p>

<p><b class="speaker ohtsu">大津:</b> 個別に見れば、速度が上がっている部分は確実にあるんです。ただ、トータルで向上したかどうかは結局よくわからないんですよね。</p>

<p>例えば、<code>window.onload</code> が速くなったかというと、そうでもないんです。ただ、<code>onload</code>についてはあまりにも様々な要因が絡むんで、測定の指標としてあまり有効でないという問題もありますけどね。なにせ、ずっと昔から運営しているサービスなので、 <code>document.write</code> にブロックされているページも残っていたりしますし。</p>

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

<p><b class="speaker siraisi">白石:</b> 確かに、「トータルで向上したか」と言っても「トータル」ってそもそも何なんだという定義が難しそうです。</p>

<p><b class="speaker ohtsu">大津:</b> そういうところも含めて、測定が十分に行えていないというのも課題ですね。サーバ側のログを見ると、リクエスト数ベースでHTTP/1.1とHTTP/2の割合は現在4:6くらいです。</p>

<p><b class="speaker siraisi">白石:</b> 1.1がまだいるっていうのは…ああそうか、(HTTP/2に対応していない)古いブラウザを使っているクライアントですね。クライアントの環境も様々だから、余計測定が難しいですね…。</p>

<p><b class="speaker ohtsu">大津:</b> そうなんです。一気に切り替えてしまったことで、A/Bテストなども行えていないですしね。A/Bテストを行うために、一部を一旦HTTP/1.1に戻すというのもありかもしれません(笑)。</p>

<h2>HTTP/2がサーバの処理負荷を下げる？</h2>

<p><b class="speaker siraisi">白石:</b> HTTP/2に移行する前の、HTTPSへの切り替えではいかがでしたか？先程、「TLSの処理が重たい」という懸念が事前にあったとのことでしたが。</p>

<p><b class="speaker nibe">新部:</b> 一度それで問題になったことはありますね。</p>

<p>弊社のサービスからプッシュ通知を送った時とかは、ユーザーが一斉に接続するので負荷が一時的に高まるんですが、それでCPUがパツパツになってしまったことがありまして。ただ、HTTPS化する前はCPUがボトルネックになるようなことはなかったので、やはりTLSの処理が影響していたんだろうなあと思います。</p>

<p><b class="speaker ohtsu">大津:</b> ただ、<strong>その後そういう問題は起きていないのは、HTTP/2が一役買っているのかもしれません</strong>。</p>

<p>HTTP/2はTCPセッション数が減るので、TLSの暗号化・復号化に伴う処理負荷も減ります。単純に言えば、HTTP/1.1の時に6セッションだったものがHTTP/2で1セッションになったら、TLSのコストは1/6になるわけで。</p>

<p><b class="speaker siraisi">白石:</b> なるほど！HTTP/2がサーバの処理負荷を下げるという可能性は、今まで思い至りませんでした。</p>

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

<h2>HTTP/2のさらに先へ。新しいプロトコルを知る &#8211; TLS 1.3とは？</h2>

<p><b class="speaker siraisi">白石:</b> HTML5 Conferenceでは、さらに新しいプロトコルについてもご紹介があるとのことですね。</p>

<p><b class="speaker ohtsu">大津:</b> はい、TLS 1.3やQUICについて紹介しようかと思います。</p>

<p><strong>TLS 1.3</strong>というのは、1.2までの技術的負債を精算しつつ、ハンドシェイクを速くすることを目的とした仕様です。仕様はだいたい固まっていて、現在Googleをはじめとした企業が、実験的に使用して調査中です。</p>

<p><b class="speaker siraisi">白石:</b> 技術的負債を精算して、さらに速く…って、いいことづくめですね。</p>

<p><b class="speaker ohtsu">大津:</b> ただ、TLS 1.3にはまだ大きな問題が残っています。<strong>後方互換性に関わる透過性の問題があって、通信できない場合があることが報告されているのです</strong>。</p>

<p>TLS 1.3に対応していない中間機器が、接続を無断で切断しちゃうことがあるんですよね。そういうファイアウォール、IDS（Intrusion Detection System:不正侵入検知システム）、IDP（Intrusion Prevention System:不正侵入予防システム）などが中間経路にあると、ネットワーク全体がダウンしてしまうこともあります。本来は、TLS 1.2にフォールバックしてほしいのですが…現在Googleなどが後方互換の問題を最小にするために透過性の調査を行っているところです。</p>

<p><b class="speaker siraisi">白石:</b> 通信を遮るものをどう扱うか、は難しい問題ですね。正直、簡単に解決する問題には全く聞こえませんね…</p>

<p><b class="speaker ohtsu">大津:</b> そうなんですよ。少し前に、<a href="https://www.theregister.co.uk/2017/02/27/blue_coat_chokes_on_chrome_encryption_update/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GoogleがTLS 1.3を試験的に有効化していたところ、ある学校で問題が発生し、数万台のChromebookが通信もアップデートも行えなくなってしまうということがありました</a>。
こうなるとGoogleですらお手上げなんですよね。TLSに完全に依存しているので。</p>

<p>そう考えると、HTTP/2って「幸運」だったと思うんですよね。</p>

<p><b class="speaker siraisi">白石:</b> 「幸運」ですか。</p>

<p><b class="speaker ohtsu">大津:</b> はい、TLS 1.2という「枯れた」プロトコル上の動作を前提にできたのがラッキーでした。TLS1.2って、2008年に登場したプロトコルで、今は完全に普及しきっていますから。</p>

<p>そういう前提のないプロトコルや機能拡張だと、大変なんです。</p>

<p>例えば、TCPのデータ送受信開始を速める「<a href="https://html5experts.jp/jxck/3529/" data-wpel-link="internal">TCP Fast Open</a>」という仕様もあるのですが、<a href="https://www.nanog.org/sites/default/files/Paasch_Network_Support.pdf" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">うまく通じない現象がAppleのエンジニアによって報告</a>されていて、<a href="http://asnokaze.hatenablog.com/entry/2017/05/09/223534" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">最近Linuxで緩和策が講じられたにもかかわらず</a>、Microsoft Edgeではついにデフォルトで無効化されてしまいました。</p>

<p>TCP Fast Openは2014年に標準化されており、Linux、 macOS、 WindowsなどOSの対応も進んでいるのですが、それでもまだこういう状況です。それほど、低レイヤーのプロトコルを普及させていくのは難しい。</p>

<p>だから、私たちがHTTP/2の移行にあまり苦労しなかったことも含め、HTTP/2のアップグレードがこれほどスムーズなのは大変幸運なことなのです。</p>

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

<h2>QUICという「プラットフォーム」の可能性</h2>

<p><b class="speaker siraisi">白石:</b> <strong>QUIC</strong>についても教えていただけますか？</p>

<p><b class="speaker ohtsu">大津:</b> QUICは、<strong>ざっくり言うとUDPの上でTCP、TLS 1.3、そしてHTTP/2の一部をごちゃっとやる感じのプロトコル</strong>です。</p>

<p><b class="speaker siraisi">白石:</b> ごちゃっと(笑)。</p>

<p><b class="speaker ohtsu">大津:</b> IETFでの標準化も進められていて、今度の10月で1年になりますね。非常に有望なプロトコルで、今後のネットワークのプラットフォームになっていくポテンシャルを秘めていると期待しています。</p>

<p><b class="speaker siraisi">白石:</b> なぜそこまで期待していらっしゃるのでしょう？</p>

<p><b class="speaker ohtsu">大津:</b> 「UDPなので疎通性が良い」というのと「ユーザーランドで動作するプロトコルなのでデプロイが容易」ということが挙げられます。</p>

<p>先程TLS 1.3の普及には苦労しそうだ、という話をしましたが、QUICはUDPなので比較的通りやすいんです。また、通じなかった場合はTCPにフォールバックする機能もある。通信を行うコンピューター同士が、エンドツーエンドでQUICに対応していればいいのです。</p>

<p>ユーザーランドで動作する…というのは、TCP BBR (※) と比較するとわかりやすいと思います。</p>

<p><small>
※参考: 「<a href="http://www.publickey1.jp/blog/17/googletcptcp_bbrgoogle_cloud.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始 (Publickey)」</a>
</small></p>

<p>TCP BBRは、Googleが開発した新しい輻輳制御のアルゴリズムです。モバイル環境のように、パケットロスが非常に多い環境でも速度を最大化できるという利点があります。</p>

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

<p>しかし欠点としては、TCPのスタックってOSのカーネルに実装されているので、<strong>使おうとするとカーネルのアップデートが必要になる</strong>ということです。できれば通信を行うコンピューターがどちらもTCP BBRに対応したカーネルにアップグレードしていることが望ましいのですが、OSのアップグレードサイクルを考えると、どれほど少なく見積もっても普及には数年かかるでしょう。</p>

<p>その点QUICはUDPの上で構築されている。プロトコルの処理はユーザーランドで行われるので、デプロイするのにOSのアップグレードなどを伴いません。プロトコルのバージョンアップも、機能追加も比較的簡単だと考えられます。将来的にHTTPだけでなくDNSやWebRTCなどでQUICが利用されることも検討されています。</p>

<p><b class="speaker siraisi">白石:</b> それが、「<strong>QUICはプラットフォームになりうる</strong>」という先程の言葉の意味ですね。</p>

<p><b class="speaker ohtsu">大津:</b> はい。ただ、QUICも実際には良いことばかりではありません。「QUICを無効にしたらChromeが軽くなった」などのノウハウが最近巷に広まってきています（※）。さきほどUDPの透過性の良さについて話しましたがやはり完全に透過ではなく、これも中間経路での問題が出てきている現象だと見られています。</p>

<p><small>
※参考: 「<a href="http://tanweb.net/2017/07/11/15417/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">最近 Chrome が「重くなった・ひっかかる」と感じたら試してみてほしいこと (Tanweb.net)</a>」
</small></p>

<p><b class="speaker siraisi">白石:</b> やはり、ネットワークプロトコルのデプロイって難しいんですね…。ただ、QUICが持つ素晴らしい可能性についても、よくわかりました。</p>

<p>本日は、実際の大規模なHTTPS &amp; HTTP/2への移行経験から新しいWebプロトコルのお話まで聞けて、大変勉強になりました！
どうもありがとうございました。</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>ソラコムに、開発体制やマイクロサービスについて根掘り葉掘り聞いてきた！</title>
		<link>/shumpei-shiraishi/22754/</link>
		<pubDate>Fri, 14 Apr 2017 01:00:35 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[ソラコム]]></category>
		<category><![CDATA[マイクロサービス]]></category>

		<guid isPermaLink="false">/?p=22754</guid>
		<description><![CDATA[HTML5Experts.jp名物、いろんな会社におじゃまして開発環境や開発体制とかを根掘り葉掘り聞く企画、今回はIoT通信プラットフォームとして大変な注目を集めるソラコムさんに伺ってきました。 インタビューに答えてくれ...]]></description>
				<content:encoded><![CDATA[<p><style>
b.speaker {
  font-weight: bold;
}
b.speaker::after {
  content: ": ";
}
</style></p>

<p>HTML5Experts.jp名物、いろんな会社におじゃまして開発環境や開発体制とかを根掘り葉掘り聞く企画、今回はIoT通信プラットフォームとして大変な注目を集める<a href="https://soracom.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ソラコム</a>さんに伺ってきました。</p>

<p>インタビューに答えてくれたのは、執行役員プリンシパルソフトウェアエンジニアの片山暁雄さん、シニアソフトウェアエンジニアの清水雄太さん、同じくシニアソフトウェアエンジニアの小熊崇さんです。<br>今回は<a href="https://html5experts.jp/yusuke-naka/" data-wpel-link="internal">副編集長の仲さん</a>がインタビュアーを務めます。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3745.jpg" alt="" width="640" height="409" class="alignnone size-full wp-image-22850" srcset="/wp-content/uploads/2017/04/IMG_3745.jpg 640w, /wp-content/uploads/2017/04/IMG_3745-300x192.jpg 300w, /wp-content/uploads/2017/04/IMG_3745-207x132.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>まずは自己紹介から！</h2>

<p><b class="speaker naka">仲</b> 本企画は、イケてるサービスを作っている会社を訪問して、どう開発しているのかなどを根掘り葉掘り聞く企画です。まずは、自己紹介からお願いできますか？</p>

<p><b class="speaker katayama">片山</b> イケてるっていう前提がハードル高いですね(笑) 。</p>

<p>私は現職ではソフトウェアエンジニアで、課金の周りやSIMを管理する仕組みなどを開発しています。どちらかというとバックエンド寄りですね。もともとはJavaのプログラマーを10数年やっていて、以前は金融業界にいたので、ずっとBigDecimalとかを扱うプログラムを書いていました。結局今も同じようなことをやっていますけど(笑)。</p>

<p>前職はAWSでサービスの普及に務めていたのですが、だいぶ普及も進んだのでプログラマーに戻ろうかなと思い、転職して今ここにいるというかんじです。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3732.jpg" alt="" width="640" height="418" class="alignnone size-full wp-image-22852" srcset="/wp-content/uploads/2017/04/IMG_3732.jpg 640w, /wp-content/uploads/2017/04/IMG_3732-300x196.jpg 300w, /wp-content/uploads/2017/04/IMG_3732-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 90%;">▲<strong>株式会社ソラコム 執行役員 プリンシパルソフトウェアエンジニア 片山暁雄さん</strong></span></p>

<p><b class="speaker oguma">小熊</b> 私はソラコムに入社した当初は、Webの管理コンソールを開発していました。</p>

<p>今はAPIのゲートウェイになる部分を作っています。ソラコムのバックエンドは、実際にはいくつものマイクロサービスに分かれているのですが、それを外から見た時に単一のAPI群に見えるようなゲートウェイを作っています。</p>

<p>あとは、コマンドラインインターフェースやSDKなど、開発者の皆様に使っていただく部分を開発しています。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3702.jpg" alt="" width="640" height="413" class="alignnone size-full wp-image-22853" srcset="/wp-content/uploads/2017/04/IMG_3702.jpg 640w, /wp-content/uploads/2017/04/IMG_3702-300x194.jpg 300w, /wp-content/uploads/2017/04/IMG_3702-207x134.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 90%;">▲<strong>株式会社ソラコム シニアソフトウェアエンジニア 小熊崇さん</strong></span></p>

<p><b class="speaker simizu">清水</b> 私はフロントエンドを中心に担当しています。例えば、先ほどの小熊が以前開発していたWebの管理コンソールは、現在私が開発を引き継いでいます。</p>

<p>前職でRuby on Railsを使ってフロントエンド・バックエンドの開発を行っていましたので、ここでもそういう役割が多いですね。</p>

<p>ほかにも、普段の開発作業で行うスタンドアップ・ミーティングやSlackなど、開発体制の整備も行っています。このオフィスを作るにあたってのディレクションなど、開発から少し外れた部分も担当しています。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3735.jpg" alt="" width="640" height="410" class="alignnone size-full wp-image-22855" srcset="/wp-content/uploads/2017/04/IMG_3735.jpg 640w, /wp-content/uploads/2017/04/IMG_3735-300x192.jpg 300w, /wp-content/uploads/2017/04/IMG_3735-207x133.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 90%;">▲<strong>株式会社ソラコム シニアソフトウェアエンジニア 清水雄太さん</strong></span></p>

<h2>ソラコムって…なに？</h2>

<p><b class="speaker naka">仲</b> では、ソラコムさんのサービスの概要を教えていただけますか？</p>

<p><b class="speaker katayama">片山</b> はい、私たちのサービスを一言で言うなら<strong>IoT向けの通信プラットフォーム</strong>です。IoTのサービスを実際に展開しようとした際に発生する、技術的な課題やビジネス上の課題解決を支援するためのプラットフォームです。</p>

<p>具体的には、3GやLTEといったモバイル通信を使った通信サービス、そしてそれらをうまくクラウドにつなぐためのサービスです。 SIMカード「SORACOM Air」は、<a href="https://www.amazon.co.jp/dp/B015FFCZ02" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Amazon.co.jpで1枚から通販で購入可能</a>です。また、世界の120の国と地域で通信を行えるようになります。</p>

<p>SIMカードを提供するとだけでは従来の通信事業者さんと変わらないのですが、私たちの特徴は<strong>IoTに特化している</strong>というところです。</p>

<p>まず私たちの特徴の一つとしては、通信事業者であれば通常必要とされるようなパケット交換機や顧客管理といった<strong>通信用のハードウェアを一切持っていません</strong>。専用のハードウェアを用意する代わりに、それらを実現するソフトウェアコンポーネントを用意して、AWS上ですべてを実現しています。</p>

<p>通信に必要な基地局などは、MVNOとして通信キャリアから借りて、クラウド上ですべてを処理できる仕組みを持っています。</p>

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

<p><b class="speaker naka">仲</b> なるほど、IoTに特化した、クラウドネイティブなMVNOというかんじですね。</p>

<p><b class="speaker katayama">片山</b> <strong>こうしたサービスをAPIの形で公開している</strong>、というのも大きな特徴と言えるでしょう。</p>

<p>IoTをやろうと考えるお客様は、数万から数十万の回線を扱うことも、特別なことではありません。例えばビーコンに通信機器を入れて全国にばらまく、といったことをする場合は相当な回線数になるので、人手では管理しにくい。</p>

<p>そこをAPIで管理できるようにしているので、通信量のモニタリングや、異常があったら通信を止めたりということを自動化していただくことができる。こうしたあたりが、私たちが「IoT向け」と謳っている強みになります。</p>

<p>また、3G網からAWSに専用線でつなぐこともできるので、Internet of Thingsといえども「インターネットを使わない」という環境を作ることもできます。</p>

<p>例えば自社システムがAWSの中だけにあったりする場合に、SIMカードを持っている人しか閉域に入れないような仕組みも簡単に作ることができる。そういった、セキュリティが重視されるIoTのシステムなんかも作ることが可能です。</p>

<p>また最近のアップデートとしては、<a href="https://soracom.jp/services/air/lora/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">「LoRaWAN」という通信量は限られているのですが、非常に省電力で広域まで届く通信プロトコルにも対応</a>します。
そうなってくると、さらに多くのお客様に使っていただけるんじゃないかと思っています。</p>

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

<p><b class="speaker siraisi">白石</b> 私のようなWebエンジニアが、ソラコムさんのサービスを使って、何かしらIoTを試してみたい…ということもできるんでしょうか。</p>

<p><b class="speaker katayama">片山</b> はい、最近だとRasberry Piのような汎用的なデバイスもありますし、簡単に試せると思います。SIMのソケットを持つIoTデバイスを用意して、ほんとに簡単なロジックを書くだけで、クラウドまでデータが届きます。</p>

<p>例えばcurlコマンドでHTTP POSTするだけとかでもいい。JSON形式のデータでクラウドまで届きますので、後はご自由にどうぞというかんじです。</p>

<h2>ソラコムの開発はどのような体制で行われている？</h2>

<p><b class="speaker naka">仲</b> ソラコムさんはWebのフロントエンドから通信キャリア的なバックエンドまで幅広く開発をされていますね。開発チームの体制などについて伺ってもよろしいでしょうか？</p>

<p><b class="speaker katayama">片山</b> あまり、チームに分かれて開発…というっかんじではないかもしれません。私たちは2週間のイテレーションをベースとして開発しており、2週間に1回インテグレートしてリリース、というのを繰り返しています。</p>

<p>なので、イテレーションを開始する際に次に実現する機能のプランニングや担当を割り振って、あとは個々人がそれぞれ進めていきます。</p>

<p><b class="speaker naka">仲</b> なるほど。</p>

<p><b class="speaker katayama">片山</b> ただ、担当の割り振りについては、決まったものがあるわけではありません。エンジニアの平均年齢は30代中盤、ぼくらは各分野で経験を積んできたメンバーが集った、<strong>言ってみれば「おっさんベンチャー」なので(笑)</strong>、「これしかできません」っていう人はあんまりいない。</p>

<p>足りないところがあったら「代わりにやりますね」という雰囲気です。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3730.jpg" alt="" width="640" height="360" class="alignnone size-full wp-image-22863" srcset="/wp-content/uploads/2017/04/IMG_3730.jpg 640w, /wp-content/uploads/2017/04/IMG_3730-300x169.jpg 300w, /wp-content/uploads/2017/04/IMG_3730-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker naka">仲</b> 皆さん、一番得意なスキルはあれども、その他のこともこなせるというかんじなんですね。</p>

<p><b class="speaker simizu">清水</b> 開発者としては実際に10名ちょっとなので、基本的に1チームで開発を進めている雰囲気です。</p>

<p><b class="speaker katayama">片山</b> 弊社は、ベースが開発者っぽい人が多いんです。例えば、ビジネス開発をしているメンバーも、実はデバイスにものすごく詳しかったりして、コマンドラインで作業したり、ハードウェアの調査をしたりというのを普通にやったりするので…。だから、<strong>そういうところからも開発リソースを調達したりしています(笑)</strong>。</p>

<h2>雨だから人が来ていない(笑)</h2>

<p><b class="speaker naka">仲</b> グローバル展開されているので、海外にも開発者がいるわけですよね。海外メンバーとのコミュニケーションはどのように取っていらっしゃいますか？</p>

<p><b class="speaker katayama">片山</b> 基本的にはSlackとかGoogle Hangoutとかですね。ビデオ会議システムについては、いろいろ紆余曲折がある(笑)。</p>

<p><b class="speaker simizu">清水</b> 例えばSlack Callsはまだリリースされたばかりで、機能も不足しています。スクリーン共有ができなかったり。なのでappear.inとかGoogle HangoutとかSkype for Businessとか、いろいろ試しましたね。まだここについては決定版がないという状態です。</p>

<p><b class="speaker siraisi">白石</b> リモートワークが可能な体制になっているわけですね。そういえばこのオフィスも、他にほとんど人がいない状態ですが、皆さん別の場所で仕事してらっしゃるんでしょうか？</p>

<p><b class="speaker katayama">片山</b> はい、今日人が少ないのは雨だからだと思います(笑)。生産性を高く保てる環境で仕事をしているはずです。</p>

<p><b class="speaker simizu">清水</b> もちろんオフィスにいないと困る職種の人もいるので、そういう人は基本的に出社していますね。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3674.jpg" alt="" width="640" height="360" class="alignnone size-full wp-image-22865" srcset="/wp-content/uploads/2017/04/IMG_3674.jpg 640w, /wp-content/uploads/2017/04/IMG_3674-300x169.jpg 300w, /wp-content/uploads/2017/04/IMG_3674-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>マイクロサービス・アーキテクチャが実現する「開発者の自由」</h2>

<p><b class="speaker naka">仲</b> では実際の開発をどのように進めているかも教えてください。具体的にはどのようなプログラミング言語を使って開発していますか？</p>

<p><b class="speaker oguma">小熊</b> 基本的には、先ほども申し上げたように、ソラコムの内側はマイクロサービスとして分かれているので、それぞれのサービスを開発者が選んだ言語で開発しています。</p>

<p><b class="speaker katayama">片山</b> 例えば「使いたいライブラリがその言語にあるから」という理由で言語を採用することもありますね。ぼくらはスタートアップなので、一番早く実装できる方法を選択したいというのがその理由です。</p>

<p>今のところ、使っている言語としてはGo、Java、Node.js、C…。あと、AWS Lambdaの開発は、実はPythonが一番やりやすかったりもするので、Pythonを使ったりということもしていますね。</p>

<p><b class="speaker naka">仲</b> その技術を採用する前に、誰かに相談したりはしないんですか？</p>

<p><b class="speaker katayama">片山</b> CTOに相談したり、といったことは多少ありますけど、基本的には開発者の自由ですね。</p>

<p><b class="speaker naka">仲</b> なるほど、マイクロサービスに分けているからこそ、様々な言語を混在させることも可能なわけですね。興味本位で伺いますが、そこまで自由だと今後エンジニアが増えていったときとかに、「既存のコンポーネントを自分の好きな言語で書き直したい」なんて要望も出てきたりしないのかな…なんて。</p>

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

<p><b class="speaker oguma">小熊</b> 書き直す正当な理由があるなら、それも許されるとは思います。REST APIの定義さえ変わらなければ、あるコンポーネントの中身がごっそり置き換わっても他の部分には影響ないですし。</p>

<p><b class="speaker katayama">片山</b> あとマイクロサービスのいいところは、オーナーシップがわかりやすいことですね。サービスごとに開発した人が大体分かれているので、担当者が自然と定まってくる。もし今後開発者が増えていって、100人とかになった時に、今と同じことができるかはわからないです。</p>

<p>そうなったら、ある程度統一しようという話も出てくるのかもしれませんが、とりあえず現在の段階では、マイクロサービスを開発者それぞれが開発するという体制でスケールアウトを目指したほうが素早くサービスを拡張できると考えています。</p>

<p><b class="speaker naka">仲</b> マイクロサービスによる開発には、開発そのものをスケールアウトできるというメリットもあるわけですね。</p>

<p><b class="speaker siraisi">白石</b> しかしそれだけ多様で自由に開発しているとなると、コードレビューなどが難しくなったりはしないのでしょうか？</p>

<p><b class="speaker katayama">片山</b> コードそのものよりも、仕組みやアーキテクチャ、APIのほうを重点的にレビューするようにしていますね。</p>

<p><b class="speaker oguma">小熊</b> 開発をしていると、呼び出す相手のコンポーネントについて APIの挙動がよく分からなかったり、バグっぽかったりしても、相手に聞いたりする前にまずコンポーネントのコード読んじゃって、「あ、なるほど、こうやってこのAPI呼び出すのか」とかって自己解決しちゃったりすることもあります。</p>

<p>その際に、そのコードが難解すぎて読めないとか、何をするためのコードなのか理解できないとかいったようなことはこれまで経験していません。事前にアーキテクチャなどをレビューしているからということもありますし、各コンポーネントを担当しているエンジニアのスキルが一定以上の水準だからだと思います。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3627.jpg" alt="" width="640" height="360" class="alignnone size-full wp-image-22872" srcset="/wp-content/uploads/2017/04/IMG_3627.jpg 640w, /wp-content/uploads/2017/04/IMG_3627-300x169.jpg 300w, /wp-content/uploads/2017/04/IMG_3627-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker simizu">清水</b> 私の担当しているユーザーコンソールなどは複数人で開発しているので、少しレビューを綿密にやっていたりはしますね。</p>

<p>（筆者補足: ソラコムさんは「理想的なリーダーシップ」について書かれた15の項目「<a href="https://blog.soracom.jp/blog/2016/09/30/leadership-statement/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">リーダーシップ・ステートメント</a>」をメンバー内で共有し、定期的に議論、各自が実践することで、自由なワークスタイル、自由な開発体制、そして各自が責任を持って仕事をすることを同時に実現しているのだそう。見習いたい！）</p>

<h2>DevOpsではなくOpsDev</h2>

<p><b class="speaker naka">仲</b> サービスの運用などについても聞いてみたいです。DevOpsのあたりとかは、どのように運用を自動化しているのでしょうか？</p>

<p><b class="speaker oguma">小熊</b> そこは、弊社だと<strong>OpsDev</strong>と呼んでいるんです。Opsをメインでやっている人間が強いこだわりを持っていまして(笑)。開発したものを運用するんじゃなくて、運用のためにこそ開発がある、と。</p>

<p><b class="speaker naka">仲</b> 運用をメインで行うチームがあるというわけではないんですか。</p>

<p><b class="speaker oguma">小熊</b> まず、そもそも開発メンバー自体が、日々の運用やサポートにも直接参加しています。いわゆるDevOpsです。さらに弊社では、運用の自動化にメインで取り組むエンジニアが一人いて、彼を中心に様々な自動化や監視を行っています。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3622.jpg" alt="" width="640" height="360" class="alignnone size-full wp-image-22870" srcset="/wp-content/uploads/2017/04/IMG_3622.jpg 640w, /wp-content/uploads/2017/04/IMG_3622-300x169.jpg 300w, /wp-content/uploads/2017/04/IMG_3622-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker katayama">片山</b> メインはZabbixによる監視と、Ansibleによる自動化をしています。何か問題があったら、次はどうそれを自動化するかとか、次に問題をどうやって起こさなくするかとかを決めて、あとはそれを担当のOpsDevエンジニア中心にやる、という運用になっていますね。</p>

<p><b class="speaker siraisi">白石</b> 御社だと、<strong>運用そのものがビジネス</strong>かもしれませんよね。</p>

<p><b class="speaker katayama">片山</b> はい、そうなんです。通信コア部分を安定的に、そしてスケーラブルにAWS上で動かすというのが我々のビジネスの根源と言えば根源なので、そこは一番力を入れています。</p>

<p>なのでそれ以外の、例えば私が書いているバックエンドの部分などは、AWSのBeanstalkなどにを使えばそれなりにスケールアウトするし、それに頼って作っているという部分はありますね。</p>

<p><b class="speaker naka">仲</b> 先ほど「スケーラブル」という単語が出てきましたが、スケーラビリティを担保するためにどのようなアーキテクチャになっていますか？</p>

<p><b class="speaker katayama">片山</b> 一言で言うのは難しいですが、例えば一番ネックになるデータベース部分は<strong>Dynamo DBをメインで使っています</strong>。メインとなる通信サービスで、RDB使ってるところはほとんどないんじゃないかな。</p>

<p>ただDynamo DBだと、アプリケーション側で頑張らなきゃいけない部分が出てくるので、そこは頑張るといった感じですね(笑)。</p>

<p><b class="speaker siraisi">白石</b> マイクロサービスだし、DBも分けてらっしゃるんですよね？</p>

<p><b class="speaker katayama">片山</b> はい、そうです。ただ、使っているDBはみなDynamo DBですね。</p>

<p><b class="speaker siraisi">白石</b> 決済の部分とかは、トランザクション処理が必要だと思いますが、そこはどうしてるんでしょう？</p>

<p><b class="speaker katayama">片山</b> そこもDynamo DBで頑張っています。Dynamo DBはトランザクションがあるにはあるのですが、2レコードをアトミックに更新できないので、極力1レコードに寄せるようにしたりとか。あと公式のトランザクションライブラリもありますし。</p>

<p><b class="speaker naka">仲</b> ほかには、ログの管理などはどうしてらっしゃいますか？</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3667.jpg" alt="" width="640" height="373" class="alignnone size-full wp-image-22862" srcset="/wp-content/uploads/2017/04/IMG_3667.jpg 640w, /wp-content/uploads/2017/04/IMG_3667-300x175.jpg 300w, /wp-content/uploads/2017/04/IMG_3667-207x121.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker katayama">片山</b> <a href="https://www.loggly.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Loggly</a>というサービスを使っていますね。ライブラリを使ってログを送ると、よしなにインデックスしてくれるようなサービスです。</p>

<p><b class="speaker naka">仲</b> Elastic Searchを自前で運用したりはしていないのですね。</p>

<p><b class="speaker katayama">片山</b> はい。弊社のサービスは、ログの分析などがビジネスの源泉になるものではないので。ビジネスの源泉になる部分は自社開発にこだわっていますが、それ以外の部分は積極的に外部のサービスを使用するようにしています。</p>

<h2>ソラコムの課題・改善点</h2>

<p><b class="speaker naka">仲</b> では、ソラコムの開発において、課題だと感じていることや今後改善していきたい点などはありますか？</p>

<p><b class="speaker katayama">片山</b> 個人的に継続的に追求していきたい課題としては、<strong>いかにチームを小さく保っていられるか</strong>というところですね。</p>

<p>人が増えるといろんなロスが発生してくるじゃないですか。機動性を確保しておくために、人をなるべく増やさない。そのために必要なのは生産性を上げることなのか、一人が何役もできるようにすることなのか、ということですが、そこを追求していきたいと思っています。</p>

<p><b class="speaker simizu">清水</b> 私も、今の片山の話ともリンクしていると思いますが、作るものをいかに小さく保っておけるかが大事だと考えています。大きなものを作ろうと思うと、沢山の人が必要になるし、メンテナンスも必要になってくる。</p>

<p>なので、同じ価値を少ない機能やコンポーネントで実現するということにはこだわっていきたいですね。今はまだぼくらは、機能やツールを追加していくフェーズではありますが、ある程度、一通り揃ったタイミングで、いかにそれらを減らしていけるか、シンプルにしていけるかは考えていきたいと思います。</p>

<p><b class="speaker oguma">小熊</b> ぼくは…課題とか不満とか、あんまりないですねえ(笑)。すごく自由だし、生産性も高いし、今のところ申し分ありません。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3692.jpg" alt="" width="640" height="360" class="alignnone size-full wp-image-22871" srcset="/wp-content/uploads/2017/04/IMG_3692.jpg 640w, /wp-content/uploads/2017/04/IMG_3692-300x169.jpg 300w, /wp-content/uploads/2017/04/IMG_3692-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>あらゆるものが「目」を獲得し進化する</h2>

<p><b class="speaker siraisi">白石</b> では最後になりますが、まだIoTに取り組んだことのないエンジニアに対して、IoTにどう取り組むべきかを教えてください。</p>

<p><b class="speaker simizu">清水</b> 私はもともとWebエンジニアなんですけれども、IoTをやると、様々な業種の人々と接することになるのが楽しかったりします。</p>

<p>例えばWeb系の勉強会だったら、Webのトピックがやっぱり一番熱いので、Webの話が中心になる。それはそれで楽しいのですけど、ソラコムのユーザーグループだったり、メイカーズ・ムーブメントだったりに顔を出していくと、自分と同じくらいのスキルセットを持った人がぜんぜん違うことをやっていたりするわけです。</p>

<p>サーバーサイドもできるんだけど、Arduinoで何かやっていたりもする。そういう人たちに接すると、IoTに取り組むモチベーションも上がったりするんじゃないかなと思います。</p>

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

<p><b class="speaker oguma">小熊</b> 私はもともと組み込み系の出身なんです。組み込みの業界のエンジニアは、「Webやクラウドについてはまだわからない」という人も多いですが、エンジニアリングの基礎がしっかりしているので、吸収も速いと感じています。</p>

<p>なので、組み込みの方々がIoTに取り組むのはすごく向いているので、ぜひトライしてみるといいと思います。</p>

<p><b class="speaker katayama">片山</b> 個人的には、IoTでワクワクすることの一つは、あらゆるものに「手足」や「目」ができることだと思っています。どんなものにもセンサーが付き、デジタルデータ化できる可能性がある。</p>

<p>例えばぼくは、部屋のあらゆるものの最終アクセス日時が分かったら、片付けとかにすごく便利じゃないかと考えているんですよね。</p>

<p><b class="speaker siraisi">白石</b> 確かに(笑)。</p>

<p><b class="speaker katayama">片山</b> センサーだけじゃなくて、Amazon Goみたいに画像解析によるアプローチもあるし、そういうアイデアが実現可能な時代はもう来ている。これが進んで、身の回りのものがデジタルデータになることで、世界はもっと面白く、便利になるんじゃないかと思っています。</p>

<p>生物はカンブリア紀に目を獲得したことで、大幅に進化が進んだと言われているのですよね。それと同じことが、今まさに起ころうとしているんじゃないかなと。現在、そういう進化の途上なのだと考えると、IoTの波に乗っかってみるのも悪くはないと思えるんじゃないでしょうか。</p>

<p><img src="/wp-content/uploads/2017/04/IMG_3691.jpg" alt="" width="640" height="360" class="alignnone size-full wp-image-22867" srcset="/wp-content/uploads/2017/04/IMG_3691.jpg 640w, /wp-content/uploads/2017/04/IMG_3691-300x169.jpg 300w, /wp-content/uploads/2017/04/IMG_3691-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
			</item>
		<item>
		<title>毎週新しい機能をリリースしている、はてな「Mackerel」の開発環境やツールを聞いてきた</title>
		<link>/miyuki-baba/22378/</link>
		<pubDate>Fri, 10 Mar 2017 00:30:12 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[デザイン]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Assault]]></category>
		<category><![CDATA[Mackerel]]></category>
		<category><![CDATA[はてな]]></category>

		<guid isPermaLink="false">/?p=22378</guid>
		<description><![CDATA[はてな「Mackerel」の開発チームに、HTML5 Experts.jp白石俊平編集長が直撃インタビュー！ チーフエンジニア兼「Mackerel」ディレクターの松木雅幸さん、アートディレクターの村田智さん、アプリケーシ...]]></description>
				<content:encoded><![CDATA[<p>はてな「Mackerel」の開発チームに、HTML5 Experts.jp白石俊平編集長が直撃インタビュー！<br>
チーフエンジニア兼「Mackerel」ディレクターの松木雅幸さん、アートディレクターの村田智さん、アプリケーションエンジニアの濱田健さんに、どのような開発環境やツール・体制などを構築しているのか、お話を聞いてきました。</p>

<h2>社内のエンジニア向けツールをSaaS事業化</h2>

<p><strong>白石</strong>：まずは、皆さんの自己紹介からお願いします。</p>

<p><strong>松木</strong>：はてなはIDで呼び合う文化なんです。僕は本名の松木を中国語読みにしたSongmu（ソンムー）と呼ばれています。3年前にはてなに入社して、Mackerelのディレクターと東京オフィスのチーフエンジニアを任せてもらってます。</p>

<p>元々はPerlのエンジニアですが、最近はGo言語を書くことが多くなってきました。共著で『<a href="http://gihyo.jp/book/2016/978-4-7741-8392-3" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">みんなのGo言語</a>』という本を書いてたりします。</p>

<p><img src="/wp-content/uploads/2017/02/b3c6bdd58451e774c043dd42da0e19a9.jpg" alt="" width="640" height="441" class="aligncenter size-full wp-image-22417" srcset="/wp-content/uploads/2017/02/b3c6bdd58451e774c043dd42da0e19a9.jpg 640w, /wp-content/uploads/2017/02/b3c6bdd58451e774c043dd42da0e19a9-300x207.jpg 300w, /wp-content/uploads/2017/02/b3c6bdd58451e774c043dd42da0e19a9-207x143.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 80%;">　▲<strong>株式会社はてな チーフエンジニア 兼 Mackerelディレクター 松木雅幸（Songmu）さん</strong></span></p>

<p><strong>濱田</strong>：itchynyです。2015年4月に新卒として入社しました。「Mackerel」のアプリケーションエンジニアとして開発していて、リードエンジニア代行も務めています。</p>

<p><strong>村田</strong>：村田（はてなID:murata_s）です。2013年4月に新卒として入社しました。「Mackerel」を担当して3年になります。最近はMackerelのデザインチームをまとめています。</p>

<p><img src="/wp-content/uploads/2017/02/73f6182e694b5a42fa8cbe8c44ccada2.jpg" alt="" width="640" height="426" class="aligncenter size-full wp-image-22451" srcset="/wp-content/uploads/2017/02/73f6182e694b5a42fa8cbe8c44ccada2.jpg 640w, /wp-content/uploads/2017/02/73f6182e694b5a42fa8cbe8c44ccada2-300x200.jpg 300w, /wp-content/uploads/2017/02/73f6182e694b5a42fa8cbe8c44ccada2-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 80%;">▲<strong>株式会社はてな アプリケーションエンジニア 濱田健（itchyny）さん、アートディレクター 村田智（murata_s）さん</strong></span></p>

<p><strong>白石</strong>：今日ははてなさんのサーバー監視サービス「Mackerel」について、いろいろ聞かせてください。</p>

<p><strong>松木</strong>：はてなはこれまではてなブログやはてなブックマークなど、カスタマー向けの事業が中心だったんですが、最近はそのバッググランドを活かした他社との協業も増えてきました。</p>

<p>例えば、KADOKAWAさんと共同開発した小説投稿サイト「<a href="https://kakuyomu.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">カクヨム</a>」、ソニーさんとの共同事業である「<a href="https://kadenkaigi.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">家電会議</a>」、任天堂さんに開発協力した「<a href="https://miiverse.nintendo.net/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Miiverse</a>」などが最近のはてなの流れです。「<a href="https://mackerel.io/ja/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Mackerel</a>」もその流れの一つで、他社との協業サービスではないですが、カスタマ―向け(toC）で培った技術やノウハウを企業向け（toB）に活かしたサービスです。</p>

<p>はてなは今年16年目の会社ですが、かねてより、社内クラウド基盤を構築・運用し、1000台を越える仮想サーバーをスケールさせ、管理しながらサービスを提供してきました。そのための仕組みも社内で内製してきました。それがMackerelの前身となるツールです。</p>

<p>最近ではAWSやGCPなど、パブリッククラウド上で仮想サーバーを増減させるのが当たり前の世の中になってきたこともあり、前述の内製のサーバー管理ツールのノウハウを活かし、「Mackerel」というSaaSを新規開発し、B向けの新規事業として打ち出したんです。</p>

<p>「Mackerel」には、これまでのサーバー監視・管理ツールと考えを変える必要があると思って作っている部分があります。一つはクラウドの思想に沿った設計であること。昔と違って、今はサービスの状況に合わせてクラウドでのサーバーを増やしたり減らしたりすることは普通になってきました。</p>

<p>でも、サーバーを建てたらすぐ監視を開始しなくてはいけないし、サーバーから外したら監視も外さなければいけない。そういった運用コストを解消したいということ。</p>

<p>もう一つは、UI/UXの差別化。既存のサーバー管理・監視ツールはエンジニアだけが使うものが多く、それもあって、デザイナーがツールの開発に関わることは少なく、見た目や使いやすさが考慮されることはあまりありませんでした。しかし、「Mackerel」は使い勝手や見た目を考えて、いろんな人に使いやすいように工夫をしています。開発には専属のデザイナーが3人携わっています。</p>

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

<p><strong>白石</strong>：グラフがメールで送られてくるといった点もそういったこだわりからなんでしょうか。</p>

<p><strong>松木</strong>：はい、メールに限らず全般的にグラフの見せ方にはこだわっています。ブラウザの画面上でグラフを並べて見られるようにしている部分も直感的に見やすいように作っています。</p>

<p><strong>白石</strong>：はてなさんは1000台を超えるサーバーを運営していたとのことですが、今はどうなんですか？自前のオンプレが主なのか、クラウドも併用しているのか。</p>

<p><strong>松木</strong>：今は併用しています。「Mackerel」自体は自社のデータセンターのサーバーを使っています。新規サービスについてはAWSを使うことが増えていますね。</p>

<p><strong>白石</strong>：オンプレのほうが規模が大きくなると、サーバーコストは安くなると思いますが、クラウドを併用する理由は何でしょう？</p>

<p><strong>松木</strong>：安定していて、ゆるやかな成長が見込めるサービスは、見積もりやすいのでオンプレにメリットがあるのですが、新規サービスにはやはり素早く作る必要があるので、クラウドのほうが便利ですね。オンプレは改善を重ねる必要があったり、急激なサービス増強といったときに調達が大変なので。</p>

<h2>コア部分はScala、サブシステムはGoで開発</h2>

<p><strong>白石</strong>：プログラミング言語は何を使っていますか？</p>

<p><strong>濱田</strong>：サーバーのアプリケーションはScala、ユーザーがサーバーにインストールする監視エージェントであるmackerel-agentはGoで開発しています。外形監視とデーターベースインテグレーションのクローラーなどもGoで書いています。</p>

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

<p><strong>松木</strong>：コアな部分はScalaで、サブシステムはGoで書くといったかんじです。</p>

<p><strong>白石</strong>：それぞれ言語を変えてる理由はあるんですか？</p>

<p><strong>松木</strong>：Mackerelは複雑なソフトウェアなので、コアの部分は抽象度の高い表現ができる言語を採用するのがいいだろうと。いろんな言語を検討したのですが、静的型付けができ、表現力が高いScalaを採用しました。</p>

<p>ただサブシステムやマイクロサービス的に作る場合など、局所的に少ない台数でパフォーマンスを出したいようなコンポーネントを開発する場合には、Goのほうがマッチしています。</p>

<p><strong>濱田</strong>：mackerel-agentはWindowsを含めてどんな環境でも動かないといけないし、実行速度の面でもGo言語は優れていると思っています。サブシステムは本体のアプリケーションに比べると機能が少なく、コード構成が把握しやすくてデプロイも簡単なGo言語は適していると思います。</p>

<p><strong>白石</strong>：シングルバイナリになるからとか？</p>

<p><strong>濱田</strong>：そうですね。</p>

<p><strong>白石</strong>：Scalaってやっぱり重いとかメモリ食うなどのトラブルが起きたりしますか？</p>

<p><strong>松木</strong>：現実問題としてはありますね。コンパイル時間の問題もあります。本番ではサーバーを何台か立ててローリングでデプロイする形になるので、ミニマムで構成するにしてもそれなりにコストがかかる。ただ、パフォーマンス自体は悪くありません。開発時間はかかるけど、その分バグが起きにくいので、B向けにはマッチしていると思います。</p>

<h2>グラフで直感的に状況がわかるUIデザイン</h2>

<p><strong>白石</strong>：デザインの話も聞かせていただきますね。UI/UXでこだわっているところ、思い入れがある点などについて聞かせてください。</p>

<p><strong>村田</strong>：Mackerelは日常的に使う道具なので、ストレスなく直感的にグラフの傾向がつかめるようにデザインしています。複数のグラフが並んだときにも機能を落とさず使い勝手を保てるように、細かな部分にこだわっています。</p>

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

<p>このようなツールでは、何かをするためのボタンが多くなりがちですが、それは往々にして最初の学習コストを増やすことにつながります。使い始めたばかりの人でも理解しやすく、必要な時に必要な行動がおこせるような、良い意味で簡素なUIの提供を心掛けています。</p>

<p>最近ではitchynyさんと共同でアラートの絞り込み機能も作りました。</p>

<p><img src="/wp-content/uploads/2017/03/1.jpg" alt="" width="640" height="386" class="aligncenter size-full wp-image-22589" srcset="/wp-content/uploads/2017/03/1.jpg 640w, /wp-content/uploads/2017/03/1-300x181.jpg 300w, /wp-content/uploads/2017/03/1-207x125.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：グラフは何で作ってるんですか？</p>

<p><strong>濱田</strong>：これはD3.jsで作ってます。グラフにマウスオーバーしたらこのようにメトリックの値が表示されます。</p>

<p><img src="/wp-content/uploads/2017/03/3.jpg" alt="" width="640" height="519" class="aligncenter size-full wp-image-22591" srcset="/wp-content/uploads/2017/03/3.jpg 640w, /wp-content/uploads/2017/03/3-300x243.jpg 300w, /wp-content/uploads/2017/03/3-207x168.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>白石</strong>：へえ、すごい！これ、モバイルでも見れたりします？</p>

<p><strong>村田</strong>：モバイル用のUIも用意しているので、お手元のモバイル端末で見ることができます。出先でアラートを確認したいということありますよね。そんなときに便利です。Mackerelの画面はレスポンシブ設計になっているので、タブレットサイズの端末でもご覧になれます。</p>

<p><img src="/wp-content/uploads/2017/03/2.jpg" alt="" width="316" height="640" class="aligncenter size-full wp-image-22590" srcset="/wp-content/uploads/2017/03/2.jpg 316w, /wp-content/uploads/2017/03/2-148x300.jpg 148w, /wp-content/uploads/2017/03/2-102x207.jpg 102w" sizes="(max-width: 316px) 100vw, 316px" /></p>

<p><strong>白石</strong>：レスポンシブなデザインってどんなかんじで作っているんですか？</p>

<p><strong>村田</strong>：開発内容にもよりますが、直接HTMLとCSSを触りながらデザインしていくことが多いです。画面上での表示内容は、単に表示サイズもそうですし、様々な利用状況や設定によっても大きく影響を受けます。</p>

<p>想定されるシステムの状態を思い描き、チームメンバーとコミュニケーションしながら進めていきます。GitHubのIssue上でのやり取りに加え、細かなところは口頭で直接会話をしたり、他の拠点にいるメンバーとはハングアウトを活用して議論したりもします。</p>

<p><img src="/wp-content/uploads/2017/02/28f9aca2b759f1ccbd81bcda1e46f6a9.jpg" alt="" width="640" height="428" class="aligncenter size-full wp-image-22468" srcset="/wp-content/uploads/2017/02/28f9aca2b759f1ccbd81bcda1e46f6a9.jpg 640w, /wp-content/uploads/2017/02/28f9aca2b759f1ccbd81bcda1e46f6a9-300x201.jpg 300w, /wp-content/uploads/2017/02/28f9aca2b759f1ccbd81bcda1e46f6a9-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>松木</strong>：開発体制のことをもう少し詳しく説明します。東京はビジネスメンバー中心で、プロダクトオーナーやセールス、セールスエンジニアという体制で、開発エンジニアは一人です。京都に他の開発メンバーがいます。</p>

<p>Mackerelのリードエンジニアで開発の最初にコードの1行目を書いたエンジニアが愛知にいるんですが、今は育休中です。なので現在は、itchynyさんがリードエンジニア代行を務めています。</p>

<p>リードがリモートなのでオンラインでコミュニケーションするというスキルが発達しているんですよね。開発ログはちゃんと文章で残すし、気軽にビデオで会話しながらコミュニケーションをとるように意識しているし。</p>

<p><strong>濱田</strong>：朝会はスタンダップミーティングの形式なので、10分かからないですね。リモートのコミュニケーションにはZoomというツールを使っています。</p>

<p><strong>松木</strong>：Zoomは2年前から使っていて、いろいろ試してみたのですが、これが安定しているんですよ。最近はハングアウトも導入しています。定期的なミーティングとかはハングアウトを使ってやってます。</p>

<p><strong>白石</strong>：Mackerelチームは、全員で何人いるんですか？</p>

<p><strong>松木</strong>：今はビジネス系含めて16人います。そのうち開発は11人です。</p>

<p><strong>白石</strong>：16人いて10分かからないというのは相当テキパキしてると思うんですが、どんな話をされてるんでしょう。</p>

<p><strong>松木</strong>：各人がはてなのグループウェアに日報を書いているので、その共有を朝会でやっています。最近はそれも減らしていて、各自が話したいことをGitHubでIssuesを上げて、司会がランダムに読み上げていくだけなので、すぐ終わっちゃう。</p>

<p><strong>村田</strong>：デザイナーの分科会もチームの朝会後にやってますね。</p>

<h2>毎週必ず新機能をリリースしている</h2>

<p><strong>白石</strong>：開発ツールや開発の進め方について教えてください。</p>

<p><strong>松木</strong>：開発ツールはGitHubとZenHubでカンバン、日々のコミュニケーションツールはSlackを使っています。</p>

<p>開発体制としては、スクラムぽい開発をしていて、2週間に1回開発会議をしています。だいたい5～6時間くらい、メンバーがそろって会議している。誰が何を担当するかなどを決めて、次の2週間はなるべく打ち合わせせずに、集中して開発してもらう。で、一番最後の日は振り返りをします。アジャイルの世界だと「出荷」っていうと思うんですけど、それをめでたいって祝うかんじです。</p>

<p>デプロイは週に2回火曜と木曜に行なっています。こだわっているのは毎週新機能を出すということ。正式リリースから、お盆や正月などを除くと毎週何かしらのリリースを出していることは、評価いただいています。</p>

<p><strong>白石</strong>：毎週新機能出していることをどうお客さまにお伝えしているんですか？</p>

<p><strong>松木</strong>：告知ブログを毎週日本語と英語で書いています。毎週メールでユーザー全員に告知メールも出しています。楽しみにしてくれるユーザーも多くて、Twitterを眺めていると、告知を見てコメントをしてくれている。祝日の関係で木曜に告知送ると、「今日金曜かと思ってあせった」と書かれていたり(笑)。</p>

<p><strong>白石</strong>：巨大な機能を出すときはどうしているんですか。メインの開発ラインと別にしているとか？</p>

<p><strong>松木</strong>：厳密なスクラムだと、大きいタスクでも小さな単位に区切ってスプリント内に収まるタスクにしてから始めることが多いようですが、それでは見積もりのオーバーヘッドも出てくる。大きめのタスクに関しては担当を決めて張り付いてもらうことが多いですね。</p>

<p>プロダクションに出していく前は、絶対にプルリクエストを送って誰か他のメンバーのレビュー受けてからマージするようにしています。そこで、一人の人に任せきりになって属人化することを避けてバランスをとっているかんじです。</p>

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

<p><strong>白石</strong>：プルリクエストが巨大になるということはないですか？</p>

<p><strong>濱田</strong>：それはそうならないように努めています。まずはテーブルスキーマの変更をレビューに出して本番に反映し、モデル層やAPIなどのレイヤー毎にプルリクエストを出し、順番にレビューしてもらい、リリースしていきます。プルリクエストのサイズを意識して、開発メンバーが誰でも見れるようにしています。</p>

<p><strong>松木</strong>：基本的には、この人が見ないとプロダクションに出せないというやり方はしていません。全員がちゃんと全部レビューできるように務めている。リードエンジニアが育休とっていても、代行が問題なくできるのもそういうのがきちんとできているからなんです。</p>

<p>最近結構ほかのチームから新たにメンバーが異動して来たのですが、そのメンバーはMackerelのことを知らないので、逆に積極的にレビューしてくれたりします。全員がレビューするというのははてなのこだわりです。</p>

<h2>グローバル展開に向け、初期段階からドキュメントを英語化</h2>

<p><strong>白石</strong>：フレームワークは何を使ってますか？</p>

<p><strong>濱田</strong>：WebアプリケーションフレームワークにはPlay Frameworkを用いています。Lightbend社 (旧Typesafe社) の製品で、継続して開発されており、信頼性も高いと思います。フロントエンドでは、AngularJSを使っています。デザイナーさんにもAngularJSのテンプレートを触ってもらっていますね。</p>

<p><strong>白石</strong>：デザイナーさんもプログラミングスキルをお持ちなんですね。すごいなあ。</p>

<p><strong>濱田</strong>：データベースはPostgreSQLを使っています。はてなでPostgreSQLを使っているのはMackerelだけですね。採用理由には、外部キー制約を張ったりチェック制約を設定することでデータを固く守れる点や、JSON型があることでメタデータのようなデータも保持しやすいところにあると思います。</p>

<p><strong>白石</strong>：Scalaを書くのに使っているのは？</p>

<p><strong>濱田</strong>：エディタはVimを使っています。3人ともVimを使っていますね、たまたまですけど(笑)。</p>

<p><strong>松木</strong>：あとはEmacs3人、IntelliJが2人ですね。</p>

<p><strong>白石</strong>：ということは自由なエディタを使っていいんですね。</p>

<p><strong>濱田</strong>：そうですね。私はIDEは使ってないんですが、使っているメンバーもいます。</p>

<p><strong>白石</strong>：最後に、これからチャレンジしていきたいことを聞かせてください。</p>

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

<p><strong>村田</strong>：今後もUIは継続的にブラッシュアップしていきたいですね。ユーザーさんの声を聞いて使いやすくしていきたいと思います。</p>

<p><strong>松木</strong>：ユーザー数がどんどん増えているので今の10倍になっても負荷に耐えられる環境を作っていきたいです。課題としては、マイクロサービスで各種コンポーネントを起動してテスト環境や開発環境を作るのが大変なので解決したい。あとは、せっかくドキュメントを初期段階から全て英語化しているので海外でも使ってもらえるサービスにしていきたいですね。</p>

<p><strong>白石</strong>：Mackerelは僕も使っているので、すごく興味深く聞けました。これからの新機能拡充も期待しています。今日はいろいろ面白い話をありがとうございました。</p>

<p><img src="/wp-content/uploads/2017/02/DSC08316-2.jpg" alt="" width="640" height="417" class="aligncenter size-full wp-image-22385" srcset="/wp-content/uploads/2017/02/DSC08316-2.jpg 640w, /wp-content/uploads/2017/02/DSC08316-2-300x195.jpg 300w, /wp-content/uploads/2017/02/DSC08316-2-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
			</item>
		<item>
		<title>パフォーマンス・バジェット、ADN…ためになりすぎる！竹洞先生に聞く、Webパフォーマンス最新動向</title>
		<link>/shumpei-shiraishi/22028/</link>
		<pubDate>Wed, 18 Jan 2017 01:01:01 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Application Delivery Network]]></category>
		<category><![CDATA[パフォーマンス]]></category>
		<category><![CDATA[パフォーマンス・バジェット]]></category>

		<guid isPermaLink="false">/?p=22028</guid>
		<description><![CDATA[こんにちは、編集長の白石です。 今回は、Webパフォーマンスに関する特集の一環として、株式会社Spelldata CEO、html5j パフォーマンス部 部長などを歴任されている竹洞陽一郎さん（エキスパートNo.54）に...]]></description>
				<content:encoded><![CDATA[<p><style>
b.speaker {
  font-weight: bold;
}
b.speaker::after {
  content: ": ";
}
</style>
こんにちは、編集長の白石です。</p>

<p>今回は、Webパフォーマンスに関する特集の一環として、<a href="https://spelldata.co.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">株式会社Spelldata</a> CEO、html5j パフォーマンス部 部長などを歴任されている竹洞陽一郎さん（<a href="https://html5experts.jp/takehora/" data-wpel-link="internal">エキスパートNo.54</a>）にお話を伺ってきました。</p>

<p>竹洞さんはWebパフォーマンスについて10年以上従事しており、現在でも年間200サイト以上を計測・分析・評価しているという、その道のエキスパート。テクノロジーの知識はもちろんのこと、アカデミックな話題から業界動向まで幅広く押さえていらっしゃる竹洞さんに、「<strong>竹洞さんにしか語れないパフォーマンスの話</strong>」を聞いてきました。</p>

<p>「ADN」や「パフォーマンス・バジェット」など、Webパフォーマンス業界の最新動向の話も盛りだくさん！めちゃくちゃ面白くて歯ごたえのあるインタビューに仕上がったと思います。<br>
どうぞお楽しみください。</p>

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

<h2>「Webパフォーマンス大事」ってわかってる人は2割しかいない</h2>

<p><b class="speaker siraisi">白石</b> 改めて伺いたいんですが、Webパフォーマンスはなぜ重要なのでしょう？</p>

<p><b class="speaker takehora">竹洞</b> 根本的な話から言うと、Webサイトがある、ってことは伝えたいメッセージがあるわけですよね。
そして、多くのサイトは複数のページにまたがっているわけですが、それは伝えたいメッセージが複数ある、もしくは複数に分けているということ。
Webサイトを高速に表示するということは、それらのメッセージを高速に伝えるということにつながるわけです。</p>

<p>ですが、UX業界で著名なロバート・ヤコブソンによると、1秒以上のインタラプトが入ると人間は思考を中断されてしまうといいます。このインタラプトは、可能な限り避けなくてはなりません。
それによって、<strong>ユーザーを「フロー状態」に導くことを作り手としては目標にすべき</strong>であり、それがパフォーマンスを重視する理由となります。</p>

<p><b class="speaker siraisi">白石</b> そうしたフロー状態にユーザーを導くことが、営利企業にとってはビジネス上も大きなアドバンテージになるということですね。
ただ例えば、「パフォーマンスを向上させるとKPI達成につながりやすい」、もしくは端的に「儲かる」といったことを表すデータなどがあれば、多くの企業がパフォーマンスの優先順位を上げると思うのですが、そうしたデータはあるのでしょうか？</p>

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

<p><b class="speaker takehora">竹洞</b> GoogleやYahoo!が出しているデータはあるのですが、あらゆる業界をおしなべて平均化してしまっているので、正直それほど使えるデータだとは思っていません。
業界によって、業務上のKPIって全然違ってきますからね。</p>

<p>となると、業界や企業ごとの事例になってくるのですが、そういう点でまとまったデータは今のところ存在しません。モデルもできていない。
例えばAmazonだと0.1秒パフォーマンスを改善すると売上が1%上がる、といったデータが示されたこともありますが、これも「Amazonだから（特別なんだろう）」の一言で済まそうと思えば済まされてしまう。</p>

<p>私が担当している仕事でなら、具体例はいくらでも挙げられるんですけどね。あるメディアは、表示に6秒かかっていたところを3秒にしたことでPVが倍になったり、売上が3倍になった会社もあります。</p>

<p><b class="speaker siraisi">白石</b> それはすごいですね。ちなみにパフォーマンスがそこまで重要である、という認識は、日本で今どれくらい浸透しているとお考えですか？</p>

<p><b class="speaker takehora">竹洞</b> うーん、エンジニア界隈にはそれなりに浸透しているとは思うのですが、<strong>全体でいうと2割くらいの浸透度</strong>じゃないですかね…。そして、「浸透していない」というのは、「パフォーマンスの重要性に確信が持てなくて投資に至らない」というレベルではありません。<strong>単純に「知らない」ということが多い</strong>です。パフォーマンスについて考えたこともない、という。</p>

<p><b class="speaker siraisi">白石</b> なるほど…。もう少し「パフォーマンス大事」という認識を広めたいところではありますね。この記事が多少なりともそのお役に立つといいんですけど。</p>

<h2>あなたが統計を学ぶべき理由</h2>

<p><b class="speaker siraisi">白石</b> では、パフォーマンスが大事だという前提に立って、パフォーマンスの問題を解決しようとしたら、まずは原因の調査からですよね。具体的に言えば測定という話になりますが、竹洞さんは統計に関する知識を学ぶべき、と普段からおっしゃってますよね。これはなぜですか？ツールが生成するグラフやアドバイスに従うだけではいけないんでしょうか？</p>

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

<p><b class="speaker takehora">竹洞</b> まずですね、パフォーマンスの原因を調べるにあたっては、<strong>「先入観を持たない」</strong>ことが重要なんです。私の経験から言うと、パフォーマンスの問題を抱えたお客様は、まず「データベースが原因だと思う」と必ずおっしゃいます。でも、ちゃんと調べてみると違ってみたりする。統計学を学ぶと、こういう「バイアス」との付き合い方も学びますので、先入観を持って事に当たることが少なくなります。</p>

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

<p><b class="speaker takehora">竹洞</b> あと、統計を学ばずにデータに当たると、「データに騙されちゃう」ということが往々にしてあるんですね。<strong>「データは何も語らない。語るのは人間である。」</strong>という言葉があるんですが、データを解釈して行動に繋げるのは人間なのです。統計について学んでおくと、そこで誤った判断をする可能性を下げることができる。</p>

<p>また、<strong>そもそもデータが正しいのか</strong>、という問題もある。正しくないデータに基づいても、有意な判断は下せないわけです。ただここで一つ重要なのは、<strong>「真の値」を知ることなんてそもそもできない</strong>わけですよ。いろんなゆらぎもありますから、一意に定まるわけがない。絶対ズレている。だからその、神様しか知り得ない「真の値」から、得られたデータがどれだけズレているのかを推測し、それも含めて判断が必要になるわけです。</p>

<p>ちなみに、こういう「ズレの推測」も含めてデータを扱うことを<strong>「推測統計」</strong>、一方、得られたデータをただ（グラフなどに）記述して扱うことを<strong>「記述統計」</strong>と言います。</p>

<p><b class="speaker siraisi">白石</b> 推測統計まで行うことが望ましいってことですね。</p>

<p><b class="speaker takehora">竹洞</b> そうです。とはいえ、まずそもそものデータを信頼度高く取るに越したことはない。そのために、近代統計学の確立者で、<strong>実験計画法</strong>という手法を編み出したロナルド・フィッシャーは、「3つの原則」を打ち出しています。その原則とは、以下の3つです。</p>

<ul>
<li>反復…長期間に渡り、繰り返し採取する。</li>
<li>ランダム…単純無作為抽出を行い、計測を行った値同士が影響を及ぼさないようにする</li>
<li>層別…変数を局所化し、影響を見たい変数だけ可変にする</li>
</ul>

<p>こういう知識があるのとないのとでは、データやグラフに対するスタンスが全然違ってきます。「バイアスを排除して、先入観を持たない」「正確性の高いデータに基づき、精度の高い判断を行う」といったスタンスを身につけるためにも、統計をきちんと学ぶことはお勧めしています。</p>

<h2>なぜGoogle Analyticsでパフォーマンスを測ってはいけないか？</h2>

<p><b class="speaker siraisi">白石</b> 竹洞さんは、Google Analyticsとかでは、パフォーマンスを正確に計測できない、と以前からおっしゃっていますね。その理由を教えていただけますか？</p>

<p><b class="speaker takehora">竹洞</b> まず、GAで「遅い」という問題に気付けたとしても、<strong>原因追求ができない</strong>んです。原因となりうる要因が多すぎるし、絞り込むこともできない。
もう一つは、<strong>欠損値が多いこと</strong>です。遅いということはそもそもGAのスクリプトが読み込まれていないことも多い。そういうのが全てデータから抜けてしまうんですね。</p>

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

<p><b class="speaker siraisi">白石</b> なるほど。遅いなーと思ってリロードしたり、途中で離脱したりしちゃうと、そもそもそれがデータから漏れてしまうんだ。</p>

<p><b class="speaker takehora">竹洞</b> そうです。その影響は実は大きくて、データにバイアスがかかってしまうんですよ。本来注目すべき「遅い」データが見えなくなってしまう。
その状態でデータを眺めると、問題が隠蔽されてしまう。こうなると、<strong>アメリカの鉄道と同じ</strong>です。</p>

<p><b class="speaker siraisi">白石</b> どういうことですか？</p>

<p><b class="speaker takehora">竹洞</b> アメリカの鉄道が廃れた理由って、遅延やサービスの低品質に利用客も慣れてしまい、不満が上がってこなかったことにあると言われているんです。
で、不満が上がってこないから、企業は「顧客は満足している」と判断し、更にコストカットなどを進めてしまう。その結果、鉄道が衰退してしまった。</p>

<p><b class="speaker siraisi">白石</b> なるほど…。GAで欠損値が出るだろう、というのは想像できていたことではありますが、それが経営判断を誤る一因にまでなりうるということですね。
では、パフォーマンスを測定するにあたって、良いサービスはありますか？</p>

<p><b class="speaker takehora">竹洞</b> たくさんありますよ。例えば<a href="https://www.catchpoint.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">catchpoint</a>や<a href="https://www.dynatrace.com/ja/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">dynatrace</a>とか。こういったサービスは、実際のユーザー群に近い環境を国ごとに構築していて、継続的にデータを収集してくれます。こうしたサービスで得たデータと、GAで得られるパフォーマンスデータって実際にかなり開きが出てくるので、面白いですよ。</p>

<h2>Webページの遅延原因の80%を占めるのは…？</h2>

<p><b class="speaker siraisi">白石</b> では、もう少し具体的に、パフォーマンスボトルネックの原因や改善方法についてお話を伺っていきたいと思います。Webサービスのネットワーク遅延の原因は、フロントエンド、ネットワーク、バックエンドに分かれると思いますが、バックエンドの話は原因も多岐に渡りそうですし、時間もないので、今回はフロントエンドとネットワークに絞ってお話を聞かせてください。</p>

<p><img src="/wp-content/uploads/2017/01/DSC09772.jpg" alt="" width="640" height="402" class="aligncenter size-full wp-image-22067" srcset="/wp-content/uploads/2017/01/DSC09772.jpg 640w, /wp-content/uploads/2017/01/DSC09772-300x188.jpg 300w, /wp-content/uploads/2017/01/DSC09772-207x130.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>まずはフロントエンドからいきましょうか。</p>

<p><b class="speaker takehora">竹洞</b> はい、ではまずは<a href="https://html5experts.jp/shumpei-shiraishi/21862/" data-wpel-link="internal">前回の座談会</a>でもお話したとおり、<strong>Webページの遅延原因の80%はサードパーティから読み込むリソースにあります</strong>。</p>

<p><b class="speaker siraisi">白石</b> それって、例えばCDN (Contents Delivery Network) からjQueryのJavaScriptファイルを読み込むとか、ソーシャルボタンとか、広告とかいろいろありますよね。</p>

<p><b class="speaker takehora">竹洞</b> はい。で、あえて言うならやはり広告とかですかね。広告のパフォーマンスを見てみると、サーバーのDBがボトルネックになってるんだろうなあ…とは推測しています。そうなると、こちらでは手が出しようがないんですよね。広告を配信している企業に直接改善を要求するしかない。</p>

<p><b class="speaker siraisi">白石</b> なるほどー。じゃあ、パフォーマンスの観点から言うと、やはり広告はボトルネックになりやすいと。ほか、「いいね！」ボタンとかのソーシャルボタンや、CDNで配信されてる静的なリソースとかはどうなんでしょう？</p>

<p><b class="speaker takehora">竹洞</b> ソーシャルボタンも遅いですよ。ソーシャルボタンのスクリプトって、キャッシュの時間も15分くらいと短いものが多いので、ネットワークアクセスが増加する一因にもなりますしね。CDNについては…いろいろあるので、あとでじっくり語らせてください(笑)。</p>

<p>ちなみに、アメリカだとサードパーティのスクリプトと言えども、速いんですよ。遅いと（ユーザー企業に）呼び出されるから(笑)。</p>

<p><b class="speaker siraisi">白石</b> そうなんですか！アメリカだとユーザー企業の意識も高いんですかねえ。逆に言うと、日本の企業はそこまでパフォーマンスに対する意識が高まってなくて、結局遅いサイトが多数を占めるようになってしまってる、ってことなんでしょうか。</p>

<p><b class="speaker takehora">竹洞</b> そういうことです。あとはフロントエンドで言うと、<strong>画像じゃなくてもいいものを画像にしてる</strong>、ってのがすごく多いです。ちょっと秘密の資料お見せしますけど、ほら。<strong>これ全部画像ですよ。誰でも知ってるような企業のサイトなんですが…</strong>。</p>

<p><b class="speaker siraisi">白石</b> CSSとかでできそうなものばっかり…</p>

<p><b class="speaker takehora">竹洞</b> そうなんです。<strong>HTML5やCSS3のおかげで、Webのポテンシャルってすごく広がりましたけど、そもそもそのポテンシャルが全然理解されてない</strong>んです。残念ながら。</p>

<h2>ミニファイは不要？目からウロコのパフォーマンス改善術あれこれ</h2>

<p><b class="speaker siraisi">白石</b> では次は、ネットワークのパフォーマンスについてのお話を聞かせていただければと思います。ネットワークのパフォーマンスって、転送量、転送速度、転送距離の話に分けられると思います。</p>

<p>まずは転送量の話からいきましょうか。ここは、例えばJavaScriptやCSSのミニファイや結合、画像の最適化など、すでに読者に馴染みのある話も多そうなので割愛してもいいでしょうか？</p>

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

<p><b class="speaker takehora">竹洞</b> あ、一つだけいいですか？実際のところ、<strong>実はスクリプトのミニファイとかって、あんまり必要ない</strong>んです。</p>

<p><b class="speaker siraisi">白石</b> ええっ！そうなんですか？そこを頑張ってるエンジニアたち、ぼくも含めていっぱいいると思うんですけど。</p>

<p><b class="speaker takehora">竹洞</b> もちろんやらないよりはやったほうがいいですけど、パフォーマンス全体から言うと、あまり効果のある施策ではありません。そこに開発コストを投じるべきかどうかは疑問ですね。</p>

<p>それよりもやはり<strong>ネットワークアクセスの回数、もっと厳密に言えばTCPの3ウェイハンドシェイクの回数の方が重要</strong>。で、そこを改善すべくHTTP/2などのプロトコルが登場したわけです（筆者注: HTTP/2は、1本のTCP接続内で複数のHTTPメッセージのやり取りを可能にする）。</p>

<p>ちなみに私としては、HTTP/1.1とHTTP/2は、Webサーバのリソース特性や配信対象地域などを分析した上で、適切に使い分けてほしいですね。</p>

<p><b class="speaker siraisi">白石</b> え、そうなんですか？全部HTTP/2にすればいいのかと思ってました。</p>

<p><b class="speaker takehora">竹洞</b> 近所のスーパーに車で行くか、自転車で行くかってなると、自転車のほうが速い場合も多いわけじゃないですか。それと同じで、条件によっては、実はHTTP/1.1の方が速い場合も存在します。</p>

<p><b class="speaker siraisi">白石</b> 具体的にはどんな条件でしょう？</p>

<p><b class="speaker takehora">竹洞</b> ネットワーク距離、リソース配信サーバ数、オブジェクト数、転送容量などですね。ネットワーク距離の観点では、HTTP/1.1は近いほど、HTTP/2は遠いほど有利です。リソース配信サーバ数の観点では、HTTP/1.1は多いほど、HTTP/2は少ないほど有利です。単純にオブジェクト数だけを考えると、HTTP1.1は少ないほど、HTTP/2は多いほど有利です。</p>

<p><b class="speaker siraisi">白石</b> じゃあ、例えば先ほどから話に上がってるサードパーティのスクリプトなんかは、ドメインもバラバラだし、アクセスはほとんど1回こっきりだし、HTTP/1.1が活きてくる分野かもしれませんね。</p>

<h2>CDNは遅い？？？？？？そして「ADN」ってなんだ？</h2>

<p><b class="speaker siraisi">白石</b> あと、先ほど「後で語る」とおっしゃっていた、CDN (Contents Delivery Network)についてもお話いただきましょうか。</p>

<p><b class="speaker takehora">竹洞</b> CDNについては、実際のところを知ると、皆さん驚かれると思いますよ。<strong>実は、CDNはもう速くないんです</strong>。</p>

<p><b class="speaker siraisi">白石</b> えっ…！そうなんですか？ちょっと意味がよくわからない。</p>

<p><b class="speaker takehora">竹洞</b> ネットワークに対する投資額の規模を表した図としては、こういうものがよく使われます。上がファーストマイル、事業者に最も近い部分で、サーバーやクラウドに代表されるレイヤーです。一方一番下がラストマイル。ユーザーに最も近い部分ですね。</p>

<p>この図を見てわかる通り、ラストマイルとファーストマイルには多くの投資が行われてきました。エンドユーザーに近い部分のネットワークは、相当高速化されてきている。</p>

<p>以前はCDNは、ラストマイルを高速化するためのサービスとして有力でした。ただ、業界全体でラストマイルに多くの投資が行われた結果、CDNの有用性そのものが薄れてしまいました。なので、<strong>CDNに置くよりも自前で配信したほうが速い</strong>という状態が一般的になっているのです。</p>

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

<p><b class="speaker siraisi">白石</b> そうなんですか。CDNが速くないなんて…。</p>

<p><b class="speaker takehora">竹洞</b> なので、CDNのベンダーは速度じゃなくてロバストネス、堅牢性をウリ文句に変えるところも出てきています。ただそれは、第一世代のCDNと言われていたサービスの話です。</p>

<p><a href="https://www.fastly.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Fastly</a>に代表される第2世代のCDNは、POPs (Points of Presense:CDNのサーバーを物理的に配置する位置)を最適化するというアプローチで、大きくこの分野を前進させました。</p>

<p>そして今、この分野は第三世代に入ろうとしています。<a href="https://www.instartlogic.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Instart Logic</a>社なんかはその代表で、私もエヴァンジェリストを務めていますが、自身を「<strong>Application Delivery Network</strong>」と呼んでいますね。</p>

<p><b class="speaker siraisi">白石</b> それは、具体的にはどう違うんですか？</p>

<p><b class="speaker takehora">竹洞</b> ひとことで言うと、<strong>非常にインテリジェント</strong>なのです。まずサーバー側では、機械学習を用いて基地局ごとに最適な経路を割り出すので、非常に動的な最適化が行える。</p>

<p>また、クライアントとサーバーがコミュニケーションしながら、リソース取得の最適化を図ります。具体的には、クライアント側に「ナノバイザー」と呼ばれるJavaScriptのエージェントを走らせます。ブラウザ側の仮想マシンと言ってもいい。そのナノバイザーが、サーバーと様々な情報を常にやり取りしながら、リソースの最適な取得方法を探るわけです。</p>

<p><b class="speaker siraisi">白石</b> なるほど。そういうことをするには、クライアントとサーバー間でステートフルなコネクションが必要になりそうですが、そこはどうしてるんですか？WebSocket？HTTP/2？</p>

<p><b class="speaker takehora">竹洞</b> HTTP/2です。<strong>HTTP/2をフル活用して、初めて実現するアーキテクチャ</strong>ですね。他にも、サーバ側でJavaScriptコードを分析して必要な関数のみをクライアントに送るといったアグレッシブな転送量削減や、サードパーティ製スクリプトを自分のドメインから配信してHTTP/2の恩恵を最大限受けることも可能です。</p>

<p><b class="speaker siraisi">白石</b> それはすごい。</p>

<p><b class="speaker takehora">竹洞</b> モバイル向けのライブラリとかもあるのですが、本当に高速ですよ。速度のためにTCPの代わりにUDPを使用していて、そうなるとパケットのエラー検知と再送制御が必要になるわけですが、一定のパケット数ごとに誤り検知のためのチェックサムを付与して、ライブラリ内でエラー制御することで解決しています。</p>

<p><b class="speaker siraisi">白石</b> 機械学習やHTTP/2といった、基盤技術の進化をフル活用して、コンテンツの配信をこれまでにないレベルで最適化するというわけですね…。面白い。</p>

<h2>「パフォーマンス・バジェット」というパラダイムシフト</h2>

<p><b class="speaker takehora">竹洞</b> あと、パフォーマンス業界の最新動向という点でいくと、アメリカでは「<strong>パフォーマンス・バジェット</strong>」という考え方が浸透してきています。</p>

<p><b class="speaker siraisi">白石</b> なんですかそれは？初めて聞く単語ですが。</p>

<p><b class="speaker takehora">竹洞</b> パフォーマンスの目標を立てると、使えるリソースの量は限られてくるわけです。例えば、<a href="https://html5experts.jp/shumpei-shiraishi/21862/" data-wpel-link="internal">前回の座談会</a>でもお話した「モバイルで3秒以内に表示を開始するためには、リソースを200kb以内に抑えるべき」といったように。で、そのリソースをどう割り振るかをサイトの設計段階から計画しておくという考え方です。（筆者注: パフォーマンスバジェットについては、<a href="https://www.mitsue.co.jp/knowledge/blog/frontend/201612/16_1413.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ミツエーリンクスさんのブログ</a>に詳しい紹介があります）</p>

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

<p><b class="speaker siraisi">白石</b> その考え方は面白いですね！全然知りませんでした。そして、そういう概念が出てくるくらい、海外ではパフォーマンスの重要性が浸透しているということなんですねえ…。パフォーマンスを「リソースの量」という点で定量化することで、リソースのサイズやフェッチのタイミング、開発コストの投下量など、いろんなものをコントロールできるようになりそうです。</p>

<p>うちみたいなスタートアップ企業（<a href="http://techfeed.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">TechFeed</a>というサービスの運営企業）とかだと、機能実装が優先になっちゃって、パフォーマンスという項目がどうしても優先順位上がらないんですが、そういう状況の改善にも役立つかもしれませんね。</p>

<p><b class="speaker takehora">竹洞</b> そうですね、<strong>パフォーマンス・バジェットの考え方は、スタートアップにも有効だと思います</strong>。計測サービスにお金を払い続けるのが厳しい…という事業規模の企業にも有用かな、と。</p>

<p><b class="speaker siraisi">白石</b> え、それどういうことでしょう？</p>

<p><b class="speaker takehora">竹洞</b> 優秀な計測サービスって、やはりそれなりに高額なんですよね。規模の小さい企業だと、サービスを運営しながらずっと使っていくのは厳しい。
ただそれでもパフォーマンスを担保したいという場合、<strong>パフォーマンス・バジェットを見積もるために、最初だけ計測サービスを使用する</strong>ということができるわけです。あとはそのバジェット内でリソースをやりくりするよう注意していけば、一定のパフォーマンスが担保された状態になります。</p>

<p><b class="speaker siraisi">白石</b> なるほど。まずそもそも、パフォーマンス・バジェットを見積もるには、ある程度の計測と実績値が必要だと。そのために<strong>計測サービスに最初だけ課金する</strong>ということですね。一旦見積もったバジェットを守りさえすれば、パフォーマンスが担保された状態になる、というのもロジカルでスッキリしますね。</p>

<h2>品質保証（Quality Assurance）は今後重要なキャリアになる！</h2>

<p><b class="speaker siraisi">白石</b> では、お時間もかなりオーバーしてしまいましたが、最後に読者に向けて伝えたいこととかありますか？</p>

<p><b class="speaker takehora">竹洞</b> そうですねえ、私はパフォーマンスも含め、Webサイトの品質保証というところにずっと注力しているわけですが、<strong>今後このQA (Quality Assurance)という分野は非常に重要になると思っている</strong>のです。例えば、2019年に民法が改正されて、システム開発の受注側が品質保証の責任を負わなくちゃいけなくなります。現在の「瑕疵担保期間」という単語は条文から消えて、品質保証を行って納入しないと「重過失」という扱いになって、永遠に瑕疵責任を負うことになるんです。つまり、<strong>品質を満たすまで、タダ働きになるってことです</strong>。</p>

<p><b class="speaker siraisi">白石</b> それはすごい変化ですね…。開発や制作を受託している企業にとっては大問題だ。</p>

<p><b class="speaker takehora">竹洞</b> こういうこともあるので、今後はQAのスキルが非常に求められてくるのは間違いありません。現在日本にはQAという職種がほとんどない状態ですが、だからこそQAを行えるエンジニアは非常に希少価値があると思います。それができるようになれば、今後のキャリアを考える上でも非常な強みになるのではないでしょうか。</p>

<p><b class="speaker siraisi">白石</b> うーん、最後まで大変示唆に富む発言、感謝です。本日は大変勉強になりました。貴重なお時間を割いてインタビューに答えていただき、どうもありがとうございました！</p>

<p><img src="/wp-content/uploads/2017/01/DSC09860.jpg" alt="" width="640" height="417" class="aligncenter size-full wp-image-22068" srcset="/wp-content/uploads/2017/01/DSC09860.jpg 640w, /wp-content/uploads/2017/01/DSC09860-300x195.jpg 300w, /wp-content/uploads/2017/01/DSC09860-207x135.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>
]]></content:encoded>
			</item>
		<item>
		<title>エキスパートたちが語る、Webパフォーマンス最新テクニック</title>
		<link>/shumpei-shiraishi/21862/</link>
		<pubDate>Wed, 28 Dec 2016 01:40:29 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[パフォーマンス]]></category>

		<guid isPermaLink="false">/?p=21862</guid>
		<description><![CDATA[こんにちは、編集長の白石です。 今回は、HTML5 Experts.jpでWebパフォーマンスに関する特集を行うにあたって、エキスパートの皆様による誌上座談会を開催してみました。 通常であれば数時間語っても尽きないような...]]></description>
				<content:encoded><![CDATA[<p><style>
b.speaker {
  font-weight: bold;
}
b.speaker::after {
  content: ": ";
}
</style>
こんにちは、編集長の白石です。</p>

<p>今回は、HTML5 Experts.jpでWebパフォーマンスに関する特集を行うにあたって、エキスパートの皆様による誌上座談会を開催してみました。</p>

<p>通常であれば数時間語っても尽きないような話を、1時間強でみっちり聞いてきました。
Webパフォーマンスの改善について、初心者から上級者まで楽しめる、有用な記事になっているかと思いますのでどうぞお楽しみください。</p>

<p><img src="/wp-content/uploads/2016/12/DSC09436-2-1.jpg" alt="" width="640" height="400" class="aligncenter size-full wp-image-21931" srcset="/wp-content/uploads/2016/12/DSC09436-2-1.jpg 640w, /wp-content/uploads/2016/12/DSC09436-2-1-300x188.jpg 300w, /wp-content/uploads/2016/12/DSC09436-2-1-207x129.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

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

<p><b class="speaker siraisi">白石</b> 皆様、本日はお集まりいただいてありがとうございました！まずは簡単に自己紹介をお願いできますでしょうか？</p>

<p><b class="speaker siraisi">竹洞</b> <a href="https://spelldata.co.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">株式会社SpellData</a>のCEOを務めている、<a href="https://html5experts.jp/takehora/" data-wpel-link="internal">竹洞</a>です。Webパフォーマンスには10年間くらい関わっており、年間200サイトくらいの計測に携わっています。
今度から、<a href="https://www.instartlogic.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Instart Logic</a>のエヴァンジェリストも務めることになりました。Instart Logicは、Application Delivery Networkを標榜する、いわばCDNの第三世代とも言えるものです。</p>

<p><img src="/wp-content/uploads/2016/12/4b9f72ac26d00e76ffed9c70fb35378f-1.jpg" alt="竹洞陽一郎" width="300" height="225" class="aligncenter size-full wp-image-21928" srcset="/wp-content/uploads/2016/12/4b9f72ac26d00e76ffed9c70fb35378f-1.jpg 300w, /wp-content/uploads/2016/12/4b9f72ac26d00e76ffed9c70fb35378f-1-207x155.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p><b class="speaker siraisi">白石</b> Contents DeliveryじゃなくてApplication Deliveryなんですね。その用語は、Instart Logicが独自で使っている用語なのか、それとも広く使われようとしている用語なんでしょうか？</p>

<p><b class="speaker siraisi">竹洞</b> 業界では広まりつつある用語ですね。具体的には仮想化技術と機械学習と組み合わせて、アプリケーションのリソース配信をこれまでにないレベルで最適化しようとするものです。</p>

<p><b class="speaker siraisi">白石</b> なるほど、コンテンツデリバリーの業界は、そんなふうな進化が起こっているんですね…全然知りませんでした。次は川田さん、お願いします。</p>

<p><b class="speaker siraisi">川田</b> <a href="https://html5experts.jp/furoshiki/" data-wpel-link="internal">川田</a>です。ピクシブ株式会社の執行役員で、Chief Culture Officer (CCO:最高文化責任者) を務めています。
ここ最近は少しエンジニアリングから離れていますが、以前はWebパフォーマンス関連の記事を執筆したり、W3Cのメーリングリストで発言したりしていました。</p>

<p><img src="/wp-content/uploads/2016/12/0b1e076d7e703896cdbcdc7b46425bc0-1.jpg" alt="川田寛" width="300" height="225" class="aligncenter size-full wp-image-21918" srcset="/wp-content/uploads/2016/12/0b1e076d7e703896cdbcdc7b46425bc0-1.jpg 300w, /wp-content/uploads/2016/12/0b1e076d7e703896cdbcdc7b46425bc0-1-207x155.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<p>最近だと、さくらインターネットさんと組んで<a href="https://www.sakura.ad.jp/services/imageflux/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ImageFlux</a>という画像変換のクラウドサービスを提供開始しました。弊社のサービスは、画像についてはユーザー様の要求レベルが極めて高いのです。</p>

<p>そこで得たノウハウを、モバイル時代のサービスの課題、それこそ、低速なネットワーク、多様なスクリーンサイズといった、画像の変換ニーズにあわせる形で他のサービス提供者のみなさんにも使ってもらえるようにしてます。</p>

<p><b class="speaker siraisi">矢倉</b> ピクセルグリッドという会社でフロントエンドエンジニアを務めている<a href="https://html5experts.jp/myakura/" data-wpel-link="internal">矢倉</a>です。Webの標準化にも関心がありまして、いろいろと関わっています。
パフォーマンスについては、レンダリングやスクロールと言った、クライアントサイドでの最適化に関心があります。</p>

<p><img src="/wp-content/uploads/2016/12/33222b9abad1aea66219568c19c3648c-1.jpg" alt="矢倉 眞隆" width="300" height="225" class="aligncenter size-full wp-image-21919" srcset="/wp-content/uploads/2016/12/33222b9abad1aea66219568c19c3648c-1.jpg 300w, /wp-content/uploads/2016/12/33222b9abad1aea66219568c19c3648c-1-207x155.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /></p>

<h2>Webパフォーマンスについて、まず思うこと</h2>

<p><img src="/wp-content/uploads/2016/12/DSC09276-1.jpg" alt="" width="640" height="458" class="alignnone size-full wp-image-21927" srcset="/wp-content/uploads/2016/12/DSC09276-1.jpg 640w, /wp-content/uploads/2016/12/DSC09276-1-300x215.jpg 300w, /wp-content/uploads/2016/12/DSC09276-1-207x148.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石</b> ではまずは、Webパフォーマンスについて思うところをざっくり語っていただけますでしょうか？</p>

<p><b class="speaker siraisi">竹洞</b> そうですね、まず総じて言えるのは、Webページのパフォーマンスに悪影響を及ぼしているのは主にサードパーティ（が配信するリソース）だということです。この1年で200以上のWebサイトを見てきましたが、その80%以上で、ページ内のソーシャルボタンや広告など、サードパーティによって配信されるリソースがパフォーマンス悪化の主な原因になっていました。</p>

<p>またちなみに、モバイルネットワークについては、この1年でdocomoさんがだいぶ頑張ったので、ボトルネックがかなり解消されました。最近だと、SoftBankさんの遅延が少し目立ってきている印象です。</p>

<p><b class="speaker siraisi">白石</b> なるほど、サードパーティが80%…ちなみに、広告がパフォーマンスのボトルネックになっているとして、それをどうやって改善するんですか？手を付けられない部分なのでは？</p>

<p><b class="speaker siraisi">竹洞</b> <strong>広告配信側の企業との交渉ですね</strong>。</p>

<p><b class="speaker siraisi">白石</b> なるほど(笑)</p>

<p><b class="speaker siraisi">竹洞</b> とはいえ海外の企業だと、そういう交渉に応じて改善してくれるところはまずありませんが、国内だと改善してくれる場合はありますね。</p>

<p><b class="speaker siraisi">白石</b> でも、広告のパフォーマンスが悪いというのは配信側にとっても問題なんじゃないでしょうか？</p>

<p><b class="speaker siraisi">竹洞</b> そのはずなんですが、今のところあまりそこに気を払っている業者は少ないです。ただ、海外のアドテク大手である「Criteo」と「SteelHouse」が裁判で争った結果、いろいろな問題のある証拠が出てきたこともあり、アドテク業界そのものがいろいろと見直される時期に来ているのは間違いない。そういう流れの中、広告のパフォーマンスなどについても注目が集まるようになるかもしれません。</p>

<p><b class="speaker siraisi">川田</b> アド周りの問題を除くと、フロントエンドのパフォーマンスにおいては、<strong>ページのリフローがほとんど</strong>と言えるんじゃないかなと思ってます。</p>

<p><b class="speaker siraisi">矢倉</b> 確かに、動きの少ないサイトとかだと、リフローが主な要因なのは間違いないですね。ただ、JavaScriptを多用したインタラクティブなWebアプリとかだと、そもそも「速い、遅い」の定義をどこに置くかというところから問題になってくると思ってます。</p>

<p>インタラクティブになればなるほど、操作にかける時間や回数が多くなるので、その反応速度なども見るのが重要になるんじゃないかと。、そうなると、リフローもそうですが、画面のペイント処理も問題になることが多いですね。たとえば、動きのある要素が別のレイヤーに分けられておらず、画面全体が再描画されちゃう、そういうことが多いかなあと。</p>

<p><b class="speaker siraisi">白石</b> ではそろそろ、具体的なパフォーマンス改善テクニックについて、詳しくお聞きしていきたいと思います。本媒体（HTML5 Experts.jp）はフロントエンドエンジニアが主な読者なのと、インタビュー時間も限られていますので、今回はバックエンドのパフォーマンス改善は取り上げず、フロントエンドとネットワークに絞ってお話をお聞きしたいと思います。</p>

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

<p><img src="/wp-content/uploads/2016/12/c7dec40490f23c2d665265407bfd6718-1.jpg" alt="" width="640" height="462" class="aligncenter size-full wp-image-21920" srcset="/wp-content/uploads/2016/12/c7dec40490f23c2d665265407bfd6718-1.jpg 640w, /wp-content/uploads/2016/12/c7dec40490f23c2d665265407bfd6718-1-300x217.jpg 300w, /wp-content/uploads/2016/12/c7dec40490f23c2d665265407bfd6718-1-207x149.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石</b> では、フロントエンドのパフォーマンス改善テクニックについてお聞きします。ここについては、以下のような項目についてお聞きしようかと思います。</p>

<ul>
<li>リフロー</li>
<li>ペイント</li>
<li>スクロール</li>
<li>DOM</li>
</ul>

<p>先ほど<strong>リフロー</strong>のお話が出ていましたが、リフローに関してパフォーマンスを改善するというのは、具体的にどのようなことなのでしょうか？</p>

<p><b class="speaker siraisi">川田</b> 単純に言うと、リフローを発生させないか、発生してしまったとしてもそのコストを減らすということに尽きると思います。</p>

<p><b class="speaker siraisi">白石</b> なるほど。それは、<code>width</code>や<code>height</code>と言った、レイアウトに影響のあるプロパティの操作を最小限に抑えるとか、でしょうか。</p>

<p><b class="speaker siraisi">矢倉</b> そうですね。最近だと、<a href="https://drafts.csswg.org/css-containment/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CSS Containment</a>っていうCSSプロパティもあります。これは、リフローなどのレイアウト変更や、描画の範囲を制限するためのプロパティです。
（筆者注: 現在はChromeのみ実装で、<a href="https://developers.google.com/web/updates/2016/06/css-containment?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">実装された際の紹介エントリ</a>が詳しい）</p>

<p><b class="speaker siraisi">川田</b> あとこれは以前からあるテクニックですが、リフローを発生させることなく要素の見た目を変化させるために<code>transform:scale()</code>などを使用したり、<code>transform:translateZ()</code>を指定して合成レイヤーを生成したり、でしょうか。
ここらへんは、GPUをいかにうまく活用するか、という話と重なるところがありますね。</p>

<p><b class="speaker siraisi">白石</b> <strong>GPUの活用</strong>、という点で言うと他にもありますか？</p>

<p><b class="speaker siraisi">川田</b> <code>will-change</code>プロパティとかでしょうか。結局、「いかにGPUに載せるか」って話になるんですよね。あと、GPUの活用を始めたブラウザは（意外にも）Internet Explorerだった記憶があります。
（筆者注: <code>will-change</code>については<a href="https://developer.mozilla.org/ja/docs/Web/CSS/will-change" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらが詳しい</a>）</p>

<p><b class="speaker siraisi">矢倉</b> ちょっと違う話ですが、Windows Vistaの動作要件にそれなりの性能を持つGPUが求められていたこともあり、ラップトップでもGPUが普及したという話を聞きました。現在ブラウザでGPUが一般的に使われるようになった遠因とも言えるかもしれませんね。OSとしては、評判良くなかったですが…。</p>

<p><img src="/wp-content/uploads/2016/12/b322bacf309afda62e2ec4784fb906f4-1.jpg" alt="" width="640" height="444" class="alignnone size-full wp-image-21921" srcset="/wp-content/uploads/2016/12/b322bacf309afda62e2ec4784fb906f4-1.jpg 640w, /wp-content/uploads/2016/12/b322bacf309afda62e2ec4784fb906f4-1-300x208.jpg 300w, /wp-content/uploads/2016/12/b322bacf309afda62e2ec4784fb906f4-1-207x144.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石</b> 他には、<strong>ペイント</strong>処理を改善するとしたら、<code>border-radius</code>や<code>box-shadow</code>など、負荷が高いと言われているCSSプロパティの使用をなるべく控える、といったところでしょうか。
（筆者注: <code>border-radius</code>と<code>box-shadow</code>を併用すると遅くなる、というのは<a href="https://www.html5rocks.com/en/tutorials/speed/css-paint-times/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">有名な話</a>です）</p>

<p><b class="speaker siraisi">白石</b> スクロールについてはいかがでしょう？</p>

<p><b class="speaker siraisi">矢倉</b> スクロールや初期ロードについては、ユーザーとのインタラクションを阻害して、体験を損ねてしまう「ジャンク」と呼ばれる処理をいかにうまく避けるかが重要になってきます。
そのためのAPIはいくつかあります。</p>

<p>例えば <strong>Passive EventListener</strong>は、イベントハンドラ内で <code>preventDefault()</code> が呼ばれないことをブラウザに伝える機能を <code>addEventListener()</code>に加えたものですが、これを使用すれば、ブラウザはイベントハンドラの戻りを待たずにスクロール処理を進められます。
（筆者注: Jxckさんの<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>という記事が参考になります）。</p>

<p><b class="speaker siraisi">川田</b> また、スクロール中に走る処理を throttleする（筆者注: 一定期間内に発生した処理をまとめ、一度の処理としてしまう）とかもやりますね。</p>

<p><b class="speaker siraisi">矢倉</b> ほかパララックスなページなどで、<code>scroll</code>イベントに引っ掛けて何かするという処理は多いですが、結局のところ「特定のDOMが出現したら何かの処理を行う」ということでまかなえることが多い。そんな話があって登場した<code>IntersectionObserver</code>というAPIを使うと、要素が画面内に入ったことや、要素同士が交差したことを検知できます。</p>

<p>（筆者注: こちらも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>）。</p>

<p><img src="/wp-content/uploads/2016/12/c562e3c9839b69a2d888b3966874b036-1.jpg" alt="" width="640" height="439" class="alignnone size-full wp-image-21922" srcset="/wp-content/uploads/2016/12/c562e3c9839b69a2d888b3966874b036-1.jpg 640w, /wp-content/uploads/2016/12/c562e3c9839b69a2d888b3966874b036-1-300x206.jpg 300w, /wp-content/uploads/2016/12/c562e3c9839b69a2d888b3966874b036-1-207x142.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石</b> すごく勉強になります、ありがとうございます。ほか、最初に挙げていたトピックとしては<strong>DOM</strong>に関する最適化が挙げられますが、ここは何かありますでしょうか？</p>

<p><b class="speaker siraisi">川田</b>基本的な話としては、Forced Synchronous Layoutを避けるというのがありますね。</p>

<p><b class="speaker siraisi">白石</b> ふぉーすどしんく…？なんですか？</p>

<p><b class="speaker siraisi">川田</b> Forced Synchronous Layoutっていうのは、例えば要素の幅（width）や高さ（height）、位置など、「レイアウト処理を行ってみないと決まらない」タイプの値をJavaScriptから参照したりすると発生する強制レイアウト処理のことです。できる限りそういう値を参照するのは避けなくてはなりません。</p>

<p><b class="speaker siraisi">白石</b> なるほど。ただ経験から言うと、そういうプロパティを参照したくなることって割としょっちゅうあるのではないでしょうか？</p>

<p><b class="speaker siraisi">矢倉</b> はい、なので、そういう処理を可能な限り減らすようにコードを書く努力が必要になります。例えば、一度取得した値を変数にキャッシュして使いまわす、とかですね。どのコードの負荷が高いのかを見極めて、意識したプログラミングが重要ですね。</p>

<p><b class="speaker siraisi">白石</b> ここまでで、たくさんのJavaScript APIが紹介されていましたね。<code>requestAnimationFrame()</code>、<code>IntersectionObserver</code>、Passive EventListenerとか。他にもありますか？</p>

<p><b class="speaker siraisi">川田</b> 例えば、<a href="https://developer.mozilla.org/ja/docs/Web/API/Window/requestIdleCallback" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><code>requestIdleCallback()</code></a>とかですかね。これはそれほど優先度の高くない処理を、ブラウザがアイドル状態な時に実行するというものです。
ちなみにこのAPIは、「<a href="https://developer.mozilla.org/ja/docs/Web/API/Window/setImmediate" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><code>setImmediate()</code></a>が必要かどうか」という議論の中から生まれたものです。ただ、少し用途は違うんですよね。</p>

<p><b class="speaker siraisi">白石</b> <code>setImmediate()</code>は、ただ単に処理をイベントループの末尾に回したいだけですもんね。</p>

<p><b class="speaker siraisi">川田</b> ほかは計測系のAPIでしょうか。<a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigation_timing_API" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Navigation Timing</a>とか、<a href="https://developer.mozilla.org/en-US/docs/Web/API/Resource_Timing_API" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Resource Timing</a>とか。こうしたAPIを使えば、JavaScriptからパフォーマンス計測が行えるので、最適化に役立てられます。</p>

<h2>ネットワーク関連処理の改善</h2>

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

<p><b class="speaker siraisi">白石</b> ではここからは、ネットワーク関連のパフォーマンス・チューニングについて語っていただきたいと思います。まずは転送量の削減についてですが、基本的な項目としては、例えば<strong>ソースコードのminifyと結合</strong>などが挙げられるかと思います。</p>

<p>他には<strong>画像の最適化</strong>なども含まれると思います。<a href="https://github.com/imagemin/imagemin" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">imagemin</a>などを使ってサイズを減らしたり、<a href="https://ja.wikipedia.org/wiki/WebP" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><code>webp</code></a>に変換するなども挙げられますよね。</p>

<p><b class="speaker siraisi">矢倉</b> ほか、レスポンシブイメージのテクニックも重要ですね。<code>img</code>要素の<code>srcset</code>属性や、<code>picture</code>要素とかで、不必要に大きな画像を送らないようにすると。
ただ、最近はスマートフォンの画面のピクセル密度が3倍、4倍とかになっています。そんな端末に合わせて、ばか正直に高解像度の画像を書いてしまうと、転送量も非常に大きくなってしまう。
そうならないようきれいなものを提供したい画像を優先度つけて選ぶとか、あとは可能な限りSVG…ベクター画像を用いるようにも心がけるべきですね。</p>

<p><b class="speaker siraisi">白石</b> ベクターといえば、アイコンフォント（筆者注: アイコンをWebフォントとして作成して利用する）もよく使われるテクニックですよね。</p>

<p><b class="speaker siraisi">矢倉</b> ただ、最近は<strong>アイコンフォントは良くないプラクティス</strong>として認識されつつあります。</p>

<p><b class="speaker siraisi">白石</b> え、そうなんですか。</p>

<p><b class="speaker siraisi">矢倉</b> テキストコンテンツなので、Webフォントファイルが読み込まれた際にリフローが起こることや、Webフォントのファイルががダウンロードされるまでにタイムラグが大きいことが問題です。
あと、iOS Safariのコンテンツブロッカーには、Webフォントをブロックするものもあるんです。そうなると、アイコンが全く表示されないことになってしまう。</p>

<p>そういうこともあって、SVGスプライトなどをを使うのが望ましいという流れになっています。</p>

<p><b class="speaker siraisi">白石</b> そうなんですね…ちなみにWebフォントのダウンロードについてですが、CDNで共有されているものがクライアントのブラウザ上にキャッシュされていることを期待してしまうのですが、実際のところどうなんでしょう？</p>

<p><b class="speaker siraisi">竹洞</b> <strong>いや、あまり期待できないですね。</strong></p>

<p><b class="speaker siraisi">白石</b> ええっ！？</p>

<p><b class="speaker siraisi">竹洞</b> 基本的には自分のサーバーで配信するのが一番速いです。</p>

<p><b class="speaker siraisi">白石</b> そうなんですか！？それは…割とショックです。むしろ「CDNが使えなかったら自分のサーバーからフェッチする」みたいなコードの書き方をしていました。
サードパーティのライブラリも、わざわざファイル結合やモジュールバンドルの対象から外して、CDNから読むようにしていたり。。</p>

<p><b class="speaker siraisi">竹洞</b> 冒頭で申し上げた「遅延原因の80%がサードパーティ」というのは、そこにCDNも含まれるんです。自前で配信するのが結局一番速い。</p>

<p><img src="/wp-content/uploads/2016/12/a05a0c440a5c7da4c5b480d90bd664fb.jpg" alt="" width="640" height="431" class="alignnone size-full wp-image-21925" srcset="/wp-content/uploads/2016/12/a05a0c440a5c7da4c5b480d90bd664fb.jpg 640w, /wp-content/uploads/2016/12/a05a0c440a5c7da4c5b480d90bd664fb-300x202.jpg 300w, /wp-content/uploads/2016/12/a05a0c440a5c7da4c5b480d90bd664fb-207x139.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石</b> なるほど。ではこの流れで竹洞さんに、ネットワーク関係の最適化のお話をもう少し伺いたいと思いますが、<strong>DNS</strong>に関してはいかがでしょう？</p>

<p><b class="speaker siraisi">竹洞</b> DNSに関しては、世界的に遅延している状態です。どのサーバーもパンパンで。Bindのセキュリティ問題などもありますし、DNSは現在大きく問題になっています。
あと、<strong>皆さんTTL短すぎ</strong>なんですよね。5分から10分とかに設定している。</p>

<p><b class="speaker siraisi">白石</b> じゃあ、ちょっと長いコンテンツを読んだりしているうちに、DNSのキャッシュ切れちゃってたりすることもあるわけですね。
なんでそんなに短くしてしまうのでしょう？</p>

<p><b class="speaker siraisi">竹洞</b> それはやはり、何か問題が生じた時に切り替えられないのが怖いからでしょうね。TTLをみんなが1時間とかに設定するだけで、DNSトラフィックの問題は大きく改善するのですが、難しい問題です。</p>

<p><b class="speaker siraisi">白石</b> DNSの話から思い出したのですが、DNSの先行読み込みとか、HTMLで指定できるようになってますよね、たしか。</p>

<p><b class="speaker siraisi">川田</b> はい、 <code>&lt;link rel="dns-prefetch" href="&lt;origin&gt;"&gt;</code>という形式で指定できますね。あと、<code>&lt;link rel="prefetch" href="&lt;URL&gt;"&gt;</code>というのもあって、DNSに限らず、任意のリソースをプリフェッチできます。</p>

<p>（筆者注: <a href="https://www.suzukikenichi.com/blog/dns-prefetching/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">DNSプリフェッチでウェブページの読み込み速度をスピードアップ</a>、<a href="https://developer.mozilla.org/ja/docs/Web/HTTP/Link_prefetching_FAQ" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Link prefetching FAQ</a>）</p>

<p><b class="speaker siraisi">矢倉</b> あと、プリロードという仕組みもあります。<code>&lt;link rel="preload" href="/styles/other.css" as="style"&gt;</code> のように指定して、リソースの先読みを行えます。</p>

<p>（筆者注: <a href="https://www.w3.org/TR/preload/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">仕様書</a>によると、prefetchとpreloadの違いは、前者が必ずしも先読みされるわけではなく、低い優先度で先読みされるのに対し、後者は強制的、高い優先度で先読みされる）</p>

<p><img src="/wp-content/uploads/2016/12/5257ea0a8ec6b5b10035064c6de49db0-1.jpg" alt="" width="640" height="428" class="alignnone size-full wp-image-21926" srcset="/wp-content/uploads/2016/12/5257ea0a8ec6b5b10035064c6de49db0-1.jpg 640w, /wp-content/uploads/2016/12/5257ea0a8ec6b5b10035064c6de49db0-1-300x201.jpg 300w, /wp-content/uploads/2016/12/5257ea0a8ec6b5b10035064c6de49db0-1-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">矢倉</b> 使うといいと思うのが、CSSファイルに書かれているWebフォントや画像でしょうか。ほとんどの場合、それらのファイルは読み込まれるのがわかっているので、それらをプリロードすると、CSSファイルの読み込みを待たずにダウンロードできます。</p>

<p><b class="speaker siraisi">白石</b> 他にお聞きしたいことがあるとすると、<strong>Service Workerのオフラインキャッシュ</strong>とかです。これはどんどん使っていくべきでしょうか？</p>

<p><b class="speaker siraisi">矢倉</b> 自分自身まだ使ったことがないので、あまり語れませんが…Progressive Web Appsの文脈で、<a href="https://developers.google.com/web/fundamentals/architecture/app-shell" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">App Shell</a>という、アプリの「ガワ」をService Workerにキャッシュさせて、最初の描画（First Paint）を速めようという話がありますね。</p>

<p><b class="speaker siraisi">川田</b> ただ、<strong>キャッシュの更新方法についてもきちんと設計しないと酷いことになりますよね</strong>。Webアプリケーションにおけるデプロイを、Service Worker側でどのように扱うのかという問題。サーバー上のリソースが更新されたときに、ブラウザ側へどのように反映するのか。複雑化は避けられないですよね。</p>

<p><b class="speaker siraisi">白石</b> 確かに。それもあって、ぼくらも自分たちのサービスでは、Service Workerのキャッシュを利用するコードまでは用意したのですが、結局有効化してないです。</p>

<h2>最後に、竹洞先生からひとこと</h2>

<p><b class="speaker siraisi">白石</b> では、だいぶお時間もかかってしまったので、まだまだお聞きしたいことはあるのですが、そろそろ締めに入りたいと思います。最後に、読者の皆様に伝えておきたいこととかありますか？</p>

<p><b class="speaker siraisi">竹洞</b> じゃあ、最後に一つだけ。サーバの転送量削減についての目安ですが…。</p>

<p><b class="speaker siraisi">白石</b> はい、お願いします。</p>

<p><b class="speaker siraisi">竹洞</b> モバイルだと、全体で200kbを超えるページは、配信に3秒以上かかってしまいます。転送量削減については、これを目安にするのはいいのではないかと思います。</p>

<p><b class="speaker siraisi">白石</b> えっ、200kbですか？クライアントにキャッシュされているリソースがあることは期待していいんですか？</p>

<p><b class="speaker siraisi">竹洞</b> いえ、キャッシュなしで。先ほどもありましたが、モバイルだと、あんまりキャッシュが期待できないので。</p>

<p><strong>ほか全員</strong>: (マジか…つらい…)</p>

<p><b class="speaker siraisi">竹洞</b> 頑張ってくださいね（ニッコリ）</p>
]]></content:encoded>
			</item>
	</channel>
</rss>
