<?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="/tag/マイクロサービス/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>/shumpei-shiraishi/24247/</link>
		<pubDate>Tue, 19 Sep 2017 05:17:49 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[マイクロサービス]]></category>

		<guid isPermaLink="false">/?p=24247</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (6)こんにちは、編集長の白石です。 この記事は、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> (6)</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>今回お話を伺ったのは、<a href="http://www.starlight-storm.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">合同会社 Starlight &amp; Storm</a> 代表社員の長谷川裕一さんです。</p>

<p><img src="/wp-content/uploads/2017/09/DSC04976.jpg" alt="" width="640" height="405" class="alignnone size-full wp-image-24303" srcset="/wp-content/uploads/2017/09/DSC04976.jpg 640w, /wp-content/uploads/2017/09/DSC04976-300x190.jpg 300w, /wp-content/uploads/2017/09/DSC04976-207x131.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>合同会社 Starlight &amp; Storm 代表社員 長谷川 裕一さん</strong></span></p>

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

<h2>マイクロサービスとは？</h2>

<p><b class="speaker siraisi">白石:</b> 長谷川さん、まずは簡単に自己紹介をお願いします。</p>

<p><b class="speaker siraisi">長谷川:</b> 私は<a href="http://www.springframework.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日本Springユーザー会</a>というコミュニティを運営していて、業務としても<a href="https://projects.spring.io/spring-framework/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Spring Framework</a>関係のコンサルティングを行う企業を経営しています。業務アプリケーションのアーキテクチャ周りを相談されることが多いですね。ほかには、オブジェクト指向そのものに関する教育なども行っています。</p>

<p><small>
※Spring Framework…Javaの世界で著名なフレームワーク。Dependency Injection （依存性注入）というコンセプトを世の中に広めたプロダクトとして名高く、Javaアプリケーションを作る際には、必ずと言っていいほど採用が検討される存在。
</small></p>

<p><b class="speaker siraisi">白石:</b> Spring…ぼく昔、どっぷりJavaエンジニアでしたので、Javaのお話を思いっきりさせていただきたい衝動が沸き起こっておりますが…ここは我慢して(笑)。本題に入らせていただきますと、<strong>マイクロサービスとは簡潔に言うと何なのでしょうか？</strong></p>

<p><b class="speaker siraisi">長谷川:</b> ソフトウェアを部品化しようという流れの中で生まれた、新しい部品だと思います。大きなシステムを構築する際にも、その部品を組み合わせて作りたいと考えているんです。 部品化はこれまでもたくさん考えられてきました。コンポーネントというのも部品ですし、Javaの世界ではEJB (Enterprise Java Beans)というテクノロジーもありました。SOA (Service Oriented Archetecture:サービス指向アーキテクチャ)が流行したこともあります。</p>

<p><strong>その試行錯誤が続いている中で、現在たどり着いたのがマイクロサービスだと思っています</strong>。</p>

<p>粒度で言うと、EJBやSOAの1つのサービスよりは大きく、かと言って基幹システムに含まれる「販売」と「物流」みたいなサブシステムのように大きな単位ではありません。決まった粒度はないのですが、人によっては2週間でリリースできる程度の大きさとも言えますね。</p>

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

<p><b class="speaker siraisi">白石:</b> なるほど、システムを部品化する一つの方法であり、単位であるということですね。</p>

<p><b class="speaker siraisi">長谷川:</b> はい。また、<strong>マイクロサービスはそれぞれが個別にデータベースを持つように設計する</strong>のも特徴です。
これはサービスごとに「状態」を持つということで、<strong>いわばオブジェクト指向的</strong>とも言えるでしょう。</p>

<p><b class="speaker siraisi">白石:</b> どうして今、マイクロサービスはこれほど取り沙汰されているんでしょう？</p>

<p><b class="speaker siraisi">長谷川:</b> 流行している、と言ってもいいと思うのですが、<strong>どこで流行っているかというと、スタートアップ系とエンタープライズ系</strong>ですね。</p>

<p>スタートアップで流行っているのは、基本的にスタートアップでは新しいものを作るわけですが、その際にできるだけ早くリリースして、必要があればサービスを増やしてゆくことができるので、マイクロサービスアーキテクチャを取り込みやすいということだと思います。あと、馴染みのある技術で始めて育てていけるのもいいんんじゃないでしょうか。 RESTfulなWeb APIなど、普段から使っている技術を使ってサービスを作れる。</p>

<p>エンタープライズ系で流行っているのは、ビジネスの変化に素早く追従するためにはどうしたら良いか、とか、既存の古いシステムをどう移行していけばいいか、とか、常に悩ましく思っているという事情があるんじゃないかと思います。</p>

<p>だから、そうした悩みに答えられそうな新しいソリューションがあると、まずはチャレンジしてみようということになる。そうしたソリューションの中で、マイクロサービスが今はかなり魅力的に映っている…という風に、私は個人的には見ていますね。</p>

<h2>マイクロサービスは万能薬ではない</h2>

<p><b class="speaker siraisi">白石:</b> では、マイクロサービスの具体的なところを伺っていきたいと思います。マイクロサービスでシステムを構築するには、まずはどういう設計が必要なのでしょうか？</p>

<p><b class="speaker siraisi">長谷川:</b> 先程も申し上げましたが、マイクロサービスはデータと振る舞いを持つ「オブジェクト指向的」なものです。</p>

<p>だから、それぞれのサービスは小さく、自己完結した形でデータを保持している必要があります。つまり、<strong>データベースがそれぞれ分かれているのが普通</strong>です。<strong>複数のマイクロサービスが一つのデータベースを参照するような設計は、あまり良くありません</strong>。</p>

<p><b class="speaker siraisi">白石:</b> それぞれのサービスが独立するように設計する必要があるということですね。</p>

<p><b class="speaker siraisi">長谷川:</b> そうです。そういう前提のもと、<strong>マイクロサービスは万能薬ではない</strong>ということを認識しておく必要があると思います。例えば、<strong>既存の巨大なシステムをマイクロサービスに分割したいというご相談はすごく多いのですが、実はそういう案件は難易度が高い</strong>。</p>

<p><img src="/wp-content/uploads/2017/09/DSC04941.jpg" alt="" width="638" height="421" class="alignnone size-full wp-image-24306" srcset="/wp-content/uploads/2017/09/DSC04941.jpg 638w, /wp-content/uploads/2017/09/DSC04941-300x198.jpg 300w, /wp-content/uploads/2017/09/DSC04941-207x137.jpg 207w" sizes="(max-width: 638px) 100vw, 638px" /></p>

<p><b class="speaker siraisi">白石:</b> 私も以前エンタープライズ系で働いていましたので、巨大な業務アプリを「分割してスッキリさせたい」という要望が生じるのも分かる気がします。</p>

<p><b class="speaker siraisi">長谷川:</b> 一枚岩で作られた古くて巨大なシステムというのはたいてい、<strong>データもこんがらがってスパゲッティ状態になっている</strong>ものです。で、マイクロサービスはそれぞれデータベースを分けるという前提に立つならば、そのこんがらがったデータとコードを慎重に解きほぐしていくという工程が必要になるんです。</p>

<p>ただ、古い巨大なシステムで、それができるかというとかなり難しいですよね。 全体像を把握することなくシステムを切り出すことはできませんが、全体像を把握するだけでも、凄まじいコストと能力が必要になります。マイクロサービスなどの技術以前の問題です。だからこそ、独立した粒度の小さいマイクロサービスが、古い巨大なシステムを持っている企業からすると魅力的に見えるのだと思いますが。</p>

<p><b class="speaker siraisi">白石:</b> なるほど…言われてみればその通りです。</p>

<p><b class="speaker siraisi">長谷川:</b> なので、<strong>マイクロサービスの導入が最もやりやすいのは、新規のサービスを開発する時</strong>ですね。既存の資産と連携しつつ、新しいお客様向けに新しいサービスを開発をする場合などは、既存のシステムへの機能追加という形ではなく、マイクロサービスとして構築するのがベストだと思います。</p>

<p><b class="speaker siraisi">白石:</b> だから、スタートアップ系では採用しやすいんですね。基本的に新規が多いから。</p>

<p><b class="speaker siraisi">長谷川:</b> ついでに言うと、ビューの部分がStrutsで書かれた業務システムを、Angularなどを使ってSPA (Single Page Application)化したいというご要望もかなり多いです。</p>

<p><strong>「業務アプリを刷新するなら、マイクロサービスもSPAもやっておこう」みたいなノリ</strong>ですね(笑)。</p>

<p><b class="speaker siraisi">白石:</b> なんかそのノリわかる気がします(笑)。</p>

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

<p><b class="speaker siraisi">長谷川:</b> ただ、Struts (※)で書かれたものをSPAに…ってのも、実はすごく難しいんですよね。ビューがちゃんと層として分かれているシステムなら楽ですが、そうなっていないシステムも多いので。</p>

<p><b class="speaker siraisi">白石:</b> <a href="https://www.amazon.co.jp/dp/4798105538" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">エンタープライズ・アプリケーション・アーキテクチャ・パターン</a>に沿っているようなシステムならいいけど、そんなのはごく少数だと。</p>

<p><b class="speaker siraisi">長谷川:</b> そうそう。ひどいのになると、JSP (※)の中に思い切りSQL書いてあったりしますから(笑)。そういうシステムをSPA化するとなると、結局全面的に作り直しが必要になっちゃいますよね。合わせてマイクロサービスも…なんてやってたら、途方もないコストが必要になっちゃう。</p>

<p><small>
※Struts…2000年代初頭に登場し、一世を風靡したJavaのWebアプリケーションフレームワーク<br>
※JSP…Java Server Pagesの略。サーバサイドJavaで使われる標準的なテンプレート機能
</small></p>

<h2>マイクロサービスを設計するには</h2>

<p><b class="speaker siraisi">白石:</b> では、マイクロサービスで具体的にシステムを設計していくには、どうしたらいいんでしょう？</p>

<p><b class="speaker siraisi">長谷川:</b> マイクロサービスは、<strong>それぞれが小さなシステムである</strong>ということを意識して、<strong>その内部もしっかりとレイヤーに分けて設計していく</strong>べきです。</p>

<p><b class="speaker siraisi">白石:</b> <a href="https://ja.wikipedia.org/wiki/%E5%A4%9A%E5%B1%A4アーキテクチャ" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">プレゼンテーション層、ビジネスロジック層、データアクセス層に分けていくという考え方</a>ですね。</p>

<p><b class="speaker siraisi">長谷川:</b> そうです。そこは今までと変わりません。そして、それぞれのサービスがHTTPやキューを使って連携していきます。
小さなサービスがネットワークを介して繋がり合うので、サービスそれぞれに耐障害性を持たせたり、スケーラビリティを確保する必要はあります。</p>

<p>ただ、こうした耐障害性やスケーラビリティの知識って、今までも十分に議論されてきた分野なんですよね。だから、セオリーは確立されていると言ってもいい。今までの知識がそのまま使えますし、マイクロサービスだからといって特別なことはないんです。</p>

<p>それに、私はJavaでシステム開発を行いますが、Javaにはそういう事を行うための部品がすでに数多く揃っているんです。
だから実はそれらをうまく組み合わせるだけです。</p>

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

<p><b class="speaker siraisi">白石:</b> ただ、ぼくも昔Javaでアーキテクトをやっていた時期がありますが、いろんなフレームワークやライブラリを組み合わせて開発基盤を作るのって、すごく骨が折れますよね。</p>

<p><b class="speaker siraisi">長谷川:</b> <a href="https://projects.spring.io/spring-boot/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Spring Boot</a>というプロダクトを使うと、そこら辺の手間がほとんどいらないんです。
これはセッションでも紹介しようと思ってるんですが、Spring Bootは、様々なコンポーネントを組み合わせてセットアップする手間をほとんどゼロにしてしまう。</p>

<p><b class="speaker siraisi">白石:</b> それは興味深い…！（Java屋だった血が騒いでいる）</p>

<h2>スタートアップやるならマイクロサービス？</h2>

<p><b class="speaker siraisi">白石:</b> 実はぼくも<a href="http://techfeed.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">TechFeed</a>というサービスを作っているスタートアップなのですが、マイクロサービスを採用した方がいいのかな…？なんて思いつつ、<strong>たくさんのサービスに分割して管理する手間を考えて、結局モノリシック（一枚岩）に作ってしまっている</strong>んです。もし長谷川さんがスタートアップを始めるとしたら、やはりマイクロサービスで始めますか？</p>

<p><b class="speaker siraisi">長谷川:</b> そうです…と答えたいところですが、実際には場合によります。無理に分割するのも得策ではありませんし。</p>

<p>ただ、ビジネスの観点から考えていくと、「分けるほうが自然」というところが見えてくるんじゃないでしょうか。例えば、B2B2Cのビジネスがあったとして、B2C部分とB2B部分を別のサービスにするといった具合です。</p>

<p><b class="speaker siraisi">白石:</b> なるほどー。具体例を挙げてお話していただくとすると…、どんな感じでしょう？</p>

<p><b class="speaker siraisi">長谷川:</b> そうですねえ、例えば全国展開しているお弁当屋さんがあったとして ―― どんなお弁当屋さんか、私もよくわかりませんが ―― そのお弁当屋さんが、ネットで注文できたとするじゃないですか。一方で、注文から発送までを行うためのサプライチェーンのシステムがあったとします。</p>

<p>そしたら、一般ユーザー向けのサービスと、サプライチェーンのシステムは分けて作ったほうがよさそうですよね。</p>

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

<p><b class="speaker siraisi">白石:</b> 確かに、そこは<strong>システムは分かれていたほうが自然に聞こえます</strong>ね。なるほど、そういう単位でサービスを分けていくんですね。</p>

<p><b class="speaker siraisi">長谷川:</b> これは一例ですし、人によっても違うと思うんですけどね。システムを分割して管理していくのは、やはりそれに伴うコストもかかりますから、ビジネス上の視点が重要なのは間違いないと思います。</p>

<p><strong>分割に伴うコストと、分割によるメリットの、損益分岐点みたいなものがきっとあるはず</strong>。それを意識して設計していくのが、ビジネスを含めて一貫性のあるアーキテクチャに繋がるのではないでしょうか。</p>

<p><b class="speaker siraisi">白石:</b> よくわかりました。本日は貴重なお話どうもありがとうございました。個人的には、久しぶりにエンタープライズなお話ができて楽しかったです<img src="https://s.w.org/images/core/emoji/2.2.1/72x72/1f60a.png" alt="😊" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br>
（この後、Javaな話で盛り上がりました）</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>今話題のマイクロサービス・アーキテクチャについて、本格的に実践中のビズリーチさんに聞いてみた！</title>
		<link>/miyuki-baba/14776/</link>
		<pubDate>Tue, 09 Jun 2015 00:00:51 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[サイト制作]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[アーキテクチャ]]></category>
		<category><![CDATA[フレームワーク]]></category>
		<category><![CDATA[マイクロサービス]]></category>

		<guid isPermaLink="false">/?p=14776</guid>
		<description><![CDATA[連載： アプリケーションアーキテクチャ最前線 (5)巨大化・複雑化したモノリシックなアプリケーション開発から、サービスを小さい単位に分割し、開発のスピードを上げようとするマイクロサービスが注目されています。アプリ開発のア...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/arch/" class="series-287" title="アプリケーションアーキテクチャ最前線" data-wpel-link="internal">アプリケーションアーキテクチャ最前線</a> (5)</div><p>巨大化・複雑化したモノリシックなアプリケーション開発から、サービスを小さい単位に分割し、開発のスピードを上げようとするマイクロサービスが注目されています。アプリ開発のアーキテクチャとして関心はあるのものの、実際にはどのようなメリット・デメリットがあるのかは気になるところ。</p>

<p>そこで、マイクロサービスアーキテクチャを採用して新サービスをリリースしたという株式会社ビズリーチ・CTO室チーフアーキテクトの竹添直樹さんに、お話を伺ってきました。<br>聞き手は、HTML5 Experts.jp編集部・岩瀬義昌（@iwashi86）さん、HTML5 Experts.jp編集長・白石俊平さんです。</p>

<p><img src="/wp-content/uploads/2015/04/microservice-1.jpg" alt="" width="600" height="390" class="aligncenter size-full wp-image-14777" srcset="/wp-content/uploads/2015/04/microservice-1.jpg 600w, /wp-content/uploads/2015/04/microservice-1-300x195.jpg 300w, /wp-content/uploads/2015/04/microservice-1-207x135.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<p><style>
.post-detail-contents p {
  text-indent:0
}
</style></p>

<h2>そもそもマイクロサービスって何ですか？</h2>

<p><strong>岩瀬</strong>：そもそもマイクロサービスとは、どのようなアーキテクチャなのでしょうか。</p>

<p><strong>竹添</strong>：システムをがちっとした一枚岩で作るのでなく、コンポーネントに分割して、小さなサービスの集合体として構築するという考え方がマイクロサービスです。各サービス間は疎結合で、HTTPやMessagingなどでつなぎ、通信し合えるように設計します。</p>

<p><img src="/wp-content/uploads/2015/04/hx2.png" alt="" width="605" height="395" class="aligncenter size-full wp-image-14840" srcset="/wp-content/uploads/2015/04/hx2.png 605w, /wp-content/uploads/2015/04/hx2-300x196.png 300w, /wp-content/uploads/2015/04/hx2-207x135.png 207w" sizes="(max-width: 605px) 100vw, 605px" /><span style="font-size: 90%;">　▲<a href="http://www.slideshare.net/takezoe/scala-jissenscala-44962449" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ビズリーチの新サービスをScalaで作ってみた～マイクロサービスの裏側 #jissenscala</a></span></p>

<p><strong>岩瀬</strong>：一般的に、これがマイクロサービスだという代表例はありますか？</p>

<p><strong>竹添</strong>：外側から見ているとわかりにくいですが、Amazonさんのシステムがそうですね。チームがそれぞれ独立してサービスを作っていて、裏側はそれぞれマイクロサービスになっているというのは有名です。</p>

<p><img src="/wp-content/uploads/2015/04/microservice-12.jpg" alt="" width="640" height="428" class="aligncenter size-full wp-image-14842" srcset="/wp-content/uploads/2015/04/microservice-12.jpg 640w, /wp-content/uploads/2015/04/microservice-12-300x201.jpg 300w, /wp-content/uploads/2015/04/microservice-12-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 90%;">　▲株式会社ビズリーチ CTO室 チーフアーキテクト　竹添直樹さん</span></p>

<p><strong>岩瀬</strong>：モノリシックのほうはどうでしょう。</p>

<p><strong>竹添</strong>：小さくてまだ立ち上げたばかりのサービスは、モノリシックが多いと思います。そうしたサービスが大きくなるにつれて機動力が落ち、メンテナンスコストも増大するにつれ、マイクロサービス化するという流れが多いのかなと。</p>

<p><strong>岩瀬</strong>：ちなみに例えばWordPressは、がっつり一枚岩で作られている印象があるのですが、モノリシックですか？</p>

<p><strong>竹添</strong>：マイクロサービスの粒度をどう考えるかによりますね。ブログという一つのサービスと見ることもできるし、アーキテクチャとしてはがっちり一枚岩だと思います(笑)。</p>

<p><strong>岩瀬</strong>：確かに、人によって解釈が違うから定義は難しいですね。</p>

<p><img src="/wp-content/uploads/2015/04/microservice-7.jpg" alt="" width="640" height="407" class="aligncenter size-full wp-image-14843" srcset="/wp-content/uploads/2015/04/microservice-7.jpg 640w, /wp-content/uploads/2015/04/microservice-7-300x191.jpg 300w, /wp-content/uploads/2015/04/microservice-7-207x132.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 90%;">　▲HTML5 Experts.jp編集部　NTTコミュニケーションズ 技術開発部所属 <a href="https://html5experts.jp/iwase/" data-wpel-link="internal">岩瀬 義昌</a>さん</span></p>

<p><strong>竹添</strong>：たとえば、決済サービスは呼ぶ側からすれば、マイクロサービスと言えるかと。</p>

<p><strong>岩瀬</strong>：たしかに！では、Web制作で最近よく見るシングルページ・アプリケーションはいかがでしょうか？</p>

<p><strong>竹添</strong>：フロントエンドがどうあれ、裏側にあるサーバーサイドのシステムが一枚岩かどうかが、マイクロサービスとモノリシックの違いになります。例えば管理者向けの機能とコンシューマ向け機能がそれぞれが独立されたサービスになっていて、APIで必要なデータだけをやりとりする…といった作りがマイクロサービス。フロントエンドとバックエンドのやりとりが、APIでシンプルになっているからといって、マイクロサービスというわけでもないんです。</p>

<h2>マイクロサービスのメリットとデメリット</h2>

<p><strong>岩瀬</strong>：マイクロサービスのメリットって、どんなところだとお考えですか？</p>

<p><strong>竹添</strong>：そもそも弊社がマイクロサービスを採用したのは、それぞれのサービスが独立して開発やメンテナンスができるからなんです。全サービスのシステムへの影響を考えなくていいのが、最大のメリットと言えるでしょう。どんなシステムも、運用をずっと続けていくとアーキテクチャが古びてしまうことは避けられません。そのときに全部新しいものに載せ換えるのは、全サービスの停止を伴うことが多いので、リスクも高いしコストもかかる。部分的にメンテナンスしたり、稼働できるというのはいいですね。</p>

<p>運用面やバッチ処理、アップデートも、そのサービスごとに単位で入れ替えたりできる。古いアーキテクチャを差し替えるときや、新しいサービスを立ち上げるときも既存システムを止めずに開発できるので、トライアルもしやすいです。また、SEOが重要なサービスと、業務寄りのサービスとでは目指す方向も、適している技術も違います。サービスごとに技術の選択ができるのは大きいですね。</p>

<p>開発者の問題もあって、全部同じ技術でできるかというとそうでもない。エンジニアによって得手不得手があるので、チームとしてもプロジェクトとしてもスケールしやすい面があるなと。</p>

<p><strong>岩瀬</strong>：スケーラビリティはキーワードですね。バックエンドの言語を好きに選べるというのは、生産性も上がるし、組織的なメリットがあると思います。</p>

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

<p><strong>岩瀬</strong>：では、マイクロサービスのデメリットはいかがでしょうか？</p>

<p><strong>竹添</strong>：デメリットの部分ももちろんあります。サービスごとに冗長性を考えなくてはいけないので、コストも手間もその分かかります。モノリシックならロードバランサ一つでサービス全体を冗長化できますが、マイクロサービスだとそうもいかないので、オーバーヘッドとかインフラとか運用のコストがかかるのが悩みどころです。</p>

<p>また、実際に開発をやってみるとデバッグが難しいですね。いろんなサービスがつながっているので、どこで落ちたのかがわかりにくい。プログラミング的にも、今まで単純にトランザクションスクリプトで書いていたのがいろんなサービスに分割されていくので、単純にシリアルで呼び出していくとその分遅くなってしまう。</p>

<p>サーバサイドでも、並列に投げられるところはパラレルに取りに行ったりする並列プログラミングや、非同期的な処理を扱うクライアントサイドの知識が求められるようになってきました。慣れていないとキツイかもしれませんね。アプリケーションプログラマに求められるスキルは上がっていると思います。</p>

<p><strong>岩瀬</strong>：これまで同期的なコードを書いてきたプログラマが、マイクロサービスでNode.jsなどの非同期な並列プログラミングをしようとしても、前の癖で同期的に書いてしまって、全然パフォーマンスが出ないというのもあり得るわけですね。</p>

<p>ちなみに先ほどデバッグの話が出ましたが、モノリシックに比べて、時間がかかって大変だったということはありますか？</p>

<p><img src="/wp-content/uploads/2015/04/microservice-9.jpg" alt="" width="640" height="404" class="aligncenter size-full wp-image-14847" srcset="/wp-content/uploads/2015/04/microservice-9.jpg 640w, /wp-content/uploads/2015/04/microservice-9-300x189.jpg 300w, /wp-content/uploads/2015/04/microservice-9-207x131.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>竹添</strong>：作っているときはそうでもないんですが、動かしてトラブルがあったときが大変ですよね。結合させてテストしているときや、プロダクションで何か起きたときのトラッキングとか。セッションIDを全部のログに含めるようにするなど、エラーをトラッキングできる仕組みを最初から作っておけばなんとかなるんですけど、それでも難しい時は難しいですね。</p>

<p><strong>岩瀬</strong>：設計の段階でわかっていればいいけど、結構大変だってことですね。コツがわかってくるといいのかもしれませんが。</p>

<p>では、サービスの監視についてはいかがでしょうか？<br />
以前、マイクロサービスとして各パーツを構築してみたのですが、クラウド上でサービスを作成・破棄することが多く、監視するサービスが増えて大変でした。もちろん、自動化して監視すればいいと思うんですが、その辺は具体的にどうされてましたか？</p>

<p><strong>竹添</strong>：自動で監視できるようにテンプレート化してますね。監視系の運用は、New Relic、Mackerel、SasS、ほかにも使えるものは何でも使ってます(笑)。サーバーの種類に応じて、Webサーバー用やデータベース用などを作ってます。</p>

<p><strong>岩瀬</strong>：いろいろ試されているんですね！</p>

<h2>マイクロサービスの実践例</h2>

<p><strong>岩瀬</strong>：ビズリーチでのマイクロサービス実践例について、聞かせてください。</p>

<p><strong>竹添</strong>：『<a href="https://jp.stanby.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">スタンバイ</a>』というインターネット上から求人情報をクローリングしてくる求人検索エンジンがそうです。</p>

<p><img src="/wp-content/uploads/2015/04/microservice-301.jpg" alt="求人検索エンジン「スタンバイ」" width="640" height="384" class="aligncenter size-full wp-image-15188" srcset="/wp-content/uploads/2015/04/microservice-301.jpg 640w, /wp-content/uploads/2015/04/microservice-301-300x180.jpg 300w, /wp-content/uploads/2015/04/microservice-301-207x124.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><span style="font-size: 90%;">　　▲求人検索エンジン <a href="https://jp.stanby.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">スタンバイ</a></span></p>

<p>垂直方向のアーキテクチャなのですが、コンシューマを向いている部分や、出稿企業に向いている部分、管理的なものや内部のAPIと接続したりといった、マイクロサービスになっています。</p>

<p>バックエンドのいわゆるAPIサーバーなどは、機能別にいろいろあるんですが、フロントも二層に分かれていて、直接HTMLからWebサーバーにアクセスするのではなく、間にAPIをはさんでいます。バックエンドは基本プリミティブに作っていて、フロントのAPIがHTMLを生成して直接返しているところもあります。</p>

<p><strong>岩瀬</strong>：共通する処理とかも結構あるんですか？</p>

<p><strong>竹添</strong>：認証とかがそうですね。例えばスマホのものであれば、同じようなAPIを共用できます…と言いたいところですが、やはりいろいろ予期せぬことが起こりましたね(笑)。</p>

<p>一応、もともとの思惑としてはチームをスケールさせたいという意図がありました。バックエンドとフロントエンドをきっちり分けて、フロントエンドだけでアプリをメンテできるようにしたかったという意図があったんです。</p>

<p><img src="/wp-content/uploads/2015/04/jissenscala.jpg" alt="" width="611" height="436" class="aligncenter size-full wp-image-14818" srcset="/wp-content/uploads/2015/04/jissenscala.jpg 611w, /wp-content/uploads/2015/04/jissenscala-300x214.jpg 300w, /wp-content/uploads/2015/04/jissenscala-207x148.jpg 207w" sizes="(max-width: 611px) 100vw, 611px" /><span style="font-size: 90%;">　▲<a href="http://www.slideshare.net/takezoe/scala-jissenscala-44962449" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ビズリーチの新サービスをScalaで作ってみた～マイクロサービスの裏側 #jissenscala</a></span></p>

<p><strong>岩瀬</strong>：バックエンドはScalaで書かれているんですよね？フロントエンドの人も頑張ってScalaを書かなくちゃならないようなことにはならなかったんでしょうか？</p>

<p><strong>竹添</strong>：全員ががっちり（Scalaを）書かなくちゃならない、ということにならないよう、役割分担を決めて、なるべくフロントエンドで修正が完結するようにしています。とはいえどうしても、サーバーサイドのプログラミングが必要になることもあるので、各チーム一人サーバサイドのサポートをできる人を配置したりはしています。その人が作ったパーツを使って、フロントエンドの人がテンプレートを作ったり。</p>

<p>フロントエンドのほうで全部できるのが理想的なんですけどね。開発のライフサイクルが全然違うので。フロントだけデプロイとか、もっと短いスパンでやっていけるといいなと。ちょっと画面を変えるだけなのに、サーバーサイドも落とさなくてはいけないのは避けたいので、将来的はフロントエンドだけで回せるようにしたいと思っています。まだまだ試行錯誤しているところです。</p>

<p><img src="/wp-content/uploads/2015/04/microservice-11.jpg" alt="" width="640" height="404" class="aligncenter size-full wp-image-14855" srcset="/wp-content/uploads/2015/04/microservice-11.jpg 640w, /wp-content/uploads/2015/04/microservice-11-300x189.jpg 300w, /wp-content/uploads/2015/04/microservice-11-207x131.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><strong>岩瀬</strong>：フロントとサーバーサイドのライフサイクルの長さの違いって、重要ですね。最近のフロントエンドでも、AngularやReactとかいろいろ流行があるから、必要に応じて対応していかなくてはいけない部分もありますよね。</p>

<p><strong>竹添</strong>：とはいっても、現実的には厳しいところもあります。フロントで完結できずに、サーバーサイドのエンジニアがサポートしなくてはいけない部分はどうしても出てきます。サーバサイドをサポートするエンジニアが少なくてボトルネックになってしまったり、PCとスマホで同じようなAPIを共有できると思っていたら、画面に引きずられて、結局画面のAPIが増えて再利用できなかったりすることもありました。パフォーマンスとか工数面で考えると、レイヤーが増えていくのでいい結果が出なかったり、JSONの処理にCPUを使うなどの性能面の課題もありましたね。</p>

<p>結局、時間的にチューニングしている余裕もないし、直接データベースをいじってしまうこともありました（苦笑）。工数的にも、想定よりかかってしまいましたね。</p>

<p><strong>岩瀬</strong>：その辺の開発はホント大変ですよね…。アーキテクチャは毎回試行錯誤されているのだと思いますが、次に設計するときはもっとうまくいきそうですか？</p>

<p><strong>竹添</strong>：実は、ここに来るまで何度かチャレンジはしているんです。最初はモノリシックに作って、それをバラしたり。この『<a href="https://jp.stanby.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">スタンバイ</a>』というサービス自体も、最初から大規模で開発することがわかっていました。工数の都合で密結合となっている部分もありますが、最終的には落ち着くんじゃないかと思っています。次からは、あらかじめ手を打って切り離せるところもあるんじゃないかと。</p>

<p><strong>岩瀬</strong>：サービスのどの部分が、マイクロサービスに変えていきやすかったといったことはありますか？</p>

<p><strong>竹添</strong>：今作っているサービスは、（モノリシックなサービスを）部分的に切り離してマイクロサービス化していったのではなく、一回捨ててマイクロサービスで構築し直したんですよね。既存の安定したサービスの隣や上とかに、新たなマイクロサービスを乗っけていくのであればまだやりやすいのですが、仕様もゆるい状態で全てのサービス開発が並列で進んでいくのが難しいところでした。最初はこの機能とこの機能だけとか縛りを設けて、少しづつ拡張していくとか、一個ずつサービスを作っていくことができればやりやすいと思います。</p>

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

<h2>マイクロサービス導入の選定ポイントは？</h2>

<p><strong>竹添</strong>：こないだ海外のScalaのカンファレンスに行ってきたときに聞いたのですが、「<a href="https://hootsuite.com/ja-jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HootSuite</a>」というSNSのクライアントツールを作っている会社が、PHPのモノリシックなアプリケーションからScalaのマイクロサービスにリプレイスしているという話がありました。</p>

<p>それによると、まず最初に手をつけたのが、認証系だったそうです。なぜかというと一番難しいところだから。最も難しいところから一番最初にやれば、ほかのところもできるでしょうという考え方なんですよね。我々は経験値があまりないので、簡単なところからやろうとするけど、強いチームで「頑張ってやるんだ」という覚悟があれば、あとはできるだろうと。</p>

<p><strong>岩瀬</strong>：難しいところからやるって度胸ありますね（笑）。</p>

<p><strong>竹添</strong>：コードを静的解析して、どこが一番複雑かを分析してるんですね。リファクタリングと同じでダメなところからつぶしていく考え方じゃないかと。</p>

<p><strong>岩瀬</strong>：マイクロサービスはパーツが多いので、モノリシックなサービスに比べて壊れやすいと思うのですが、何か設計のポイントはありますか？</p>

<p><strong>竹添</strong>：ユーザー向けのサービスで、一個壊れると止まってしまうようなところは、必ず冗長化させるようにしています。ただ、全部冗長化させるとコストがかかるので、社内向けのシステムやバックエンドで動いているバッチ処理など、1日くらい止めてもいいサービスならゆるめにするとか、強弱をつけて冗長化しています。</p>

<p><strong>岩瀬</strong>：クリティカルなところはかなり力を入れているんですね。</p>

<p><strong>竹添</strong>：検索サービスは弊社のサービスとしてかなりメインになっていくので、スケールすることが前提です。コストをかけても実装しておくようにしていました。</p>

<p><strong>岩瀬</strong>：マイクロサービスは冗長化しておくように、頑張って作らないといけない部分もありますよね。</p>

<p><strong>竹添</strong>：弊社はAWSを使っているのと、冗長化についてはかなり学んでいるので、その辺はなんとかなっています。もちろん、エンタープライズのミッションクリティカルなものと比べると、やりきれていない部分もありますけどね。本当なら相乗りさせられるものはしたほうが運用も楽になるし、コストも下げられると思いますが、まだそこまでやりきれてない。</p>

<p><strong>岩瀬</strong>：今回はマイクロサービスで作ったけど、次回はモノリシックで作ったほうがいいとか判断に悩むことがあると思うのですが、何か選定ポイントはありますか？</p>

<p><strong>竹添</strong>：開発のときのオーバヘッドや、インフラコストで見ると、短期的にはデメリットのほうが大きいと思っています。どこかで損益分岐点はあると思うんですが。とりあえずスモール仕立てでやってみようとか、成功するかまったくわから状況なら、モノリシックで作って、後から大きくなったタイミングでマイクロサービスにしてもいいのではないでしょうか。</p>

<p>ただ、Webのサービスが大きくなるときはビジネスとして勝負時だし、攻めどきなので、
その事業が大きくなるタイミングでシステムを止めてコアアーキテクチャを変えるという判断は簡単にはできません。経営判断が必要になるかと。</p>

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

<p>もしリソースがあるなら、現状のモノはエンハンスを続けながら、マイクロサービスで作りなおすなど、体制を組むという選択肢もあるが難しいですね。特に企業向けのサービスをやっていると、機能的に変わってしまうとか、デグレードしてしまうのは、許されない面もあるので。最初からこれだけ大きなサービスにするというように決められたら、マイクロサービスで作るという判断もできると思います。</p>

<p>大きくなったタイミングで経営判断もあるが、あきらかにスケールすることが見えていればマイクロサービスにするほうがいい。ある程度大きくなってくると、プロダクトとしても、チームとしてもマイクロサービスでないとスケールできない。モノリシックだとレガシー化してしまうので、新しい技術も入れられないし、新陳代謝していかないと新しい人も入ってこない。両面的に健全ではないです。</p>

<p><strong>岩瀬</strong>：例えば新しくチームメンバーが増えたとき、モノリシックなら全体像が見えるけど、マイクロサービスは全体像が見えにくくて困る…といったことはないのでしょうか？</p>

<p><strong>竹添</strong>：それはもちろんありますね。ただ、ひとつひとつのサービスのインターフェイスが明確であれば、それほど問題はないはずです。サービス開発を立ち上げたばかりだと難しいところもありますが、なんとか頑張って、インターフェイスだけはちゃんとしようと思っています。まだそこまで到達していない過渡期ではありますが…。</p>

<p><strong>岩瀬</strong>：インターフェイスは、ほぼJSONでやりとりしているようですね。JSONのスキーマはどのように定義しているのでしょうか？<a href="http://json-schema.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JSON Scheme</a>を使ったりしているのでしょうか？</p>

<p><strong>竹添</strong>：インターフェースは、内部ではScalaのオブジェクトで定義しています。JSONを直接さわることはほぼありませんね。ただそれだと、（Scalaを知らない）フロントエンジニアにとってはハードルが高いので、そこもカバーできるようなものがあるといいのですが。型定義の強いTypeScriptにトライしているチームもありますね。</p>

<p><strong>白石</strong>：インターフェース定義がJSONを前提としていないということは、他のシリアライズ方法に切り替えることも難しくなさそうですね。先ほど、JSONのシリアライズ・デシリアライズ処理の負荷の話が少し出ましたが、例えばそれをJavaのシリアライゼーションやProtocol Bufferに置き換えたりすることで、処理負荷を軽減することもできるんでしょうか。</p>

<p><strong>竹添</strong>：その辺も研究はしています。ただ扱っているデータがテキストが多いので、バイナリ形式にしてもあまり速くならないんですよね。<a href="http://msgpack.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">MessagePack</a>とかも試しましたが、あまり変わらなかったので、今は使いやすさでJSONを選んでいます。コンパクトな情報でやりとりしているところは、プロトコルを変えたりとか、今後検討の余地はありますが。</p>

<p><strong>白石</strong>：マイクロサービスのAPI設計はどのように行うのですか？サービス同士が複雑な依存関係を持たないように設計するには？</p>

<p><strong>竹添</strong>：マイクロサービスの設計を適切に行うのはなかなか難しいですが、あるまとまった処理を他の部分から独立させうるかどうか、複数のサービスから利用されうるかどうか、といったところがひとつの判断基準になると思います。その上で、データベース処理を必要とするかどうかによって、ライブラリとして実装するか、サービスとして実装するか判断する感じでしょうか。データベースアクセスを伴わないなら、ライブラリとして配布すればいい。データベースアクセスを伴うのであれば、マイクロサービスにすることを考えますね。</p>

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

<p><strong>白石</strong>：データベースって、どうしているんでしょうか。マイクロサービスごとに別々のデータベースを持っているのか、それともひとつのデータベースを複数のマイクロサービスが共有しているイメージでしょうか？</p>

<p><strong>竹添</strong>：いえ、マイクロサービスごとにデータベースは分けています。</p>

<p><strong>白石</strong>：じゃあ、トランザクションはどうするんですか？</p>

<p><strong>竹添</strong>：マイクロサービスごとに切ってますね。</p>

<p><strong>白石</strong>：マイクロサービスをまたがるような処理を、ひとつのトランザクション内で行いたいという場合はありませんか？</p>

<p><strong>竹添</strong>：それぞれのマイクロサービスを、適切な粒度で切っているので、基本的には大丈夫かと。もっと大きくなって出てこないとは言い切れないかもしれませんが、そうなったら外側の仕組みでなんとかするかんじですね。</p>

<p><strong>白石</strong>：SOAPという選択肢はないですか？<a href="https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=ws-tx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WS-Transaction</a>とかあると思いますが。</p>

<p><strong>竹添</strong>：ないですね。フロントがスマートフォンのアプリだったり、JavaScriptだったりするので、フロントエンドから使いやすいフォーマットということで。トランザクションが必要なところが切り出せているのと、参照系がほとんどなので現段階では問題として浮上していませんね。出てきたときには、大きな課題になるかもしれませんが。</p>

<p><strong>白石</strong>：マイクロサービス・アーキテクチャと、アジャイル開発との相性はいかがでしょう？特に、複数の小さなチームが連携しなくてはならないとなると、それぞれのチームがアジャイルに独立して進めるのは難しいのでは…と思ったのですが。</p>

<p><strong>竹添</strong>：私たちもスクラムで開発していますし、マイクロサービスとアジャイル開発の相性は良いと思っています。マイクロサービス間で、密に連携しなくてはならないという状況はそれほど多くないですし、そうした必要が生じた場合は、マイルストーンを置いて調整します。</p>

<p><strong>白石</strong>：例えばサービスに一個の機能を追加するとき、チームを横断した変更が必要になったりしませんか？</p>

<p><strong>竹添</strong>：チームとしてはマイクロサービスごとに（フロントエンドからデータベースまで）縦に分けているので、チーム内で完結しますね。そして、それぞれのチームの中でフロント・サーバーなどの役割分担があります。ひとつひとつのサービスの粒度も、小さいものから大きいものまであります。単機能のサービスもあれば、大きなWebアプリケーションだけど一つのマイクロサービスというものまであって、その中でスクラムを回すかんじですね。</p>

<p><strong>白石・岩瀬</strong>：いろいろ試行錯誤やチャレンジをされているお話を伺い、マイクロサービス・アーキテクチャ実践のポイントが見えてきた気がします。本日は貴重なお話をありがとうございました！</p>
]]></content:encoded>
		
		<series:name><![CDATA[アプリケーションアーキテクチャ最前線]]></series:name>
	</item>
	</channel>
</rss>
