<?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>IoT &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/iot/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>Webブラウザからハードウェアにアクセス！WebUSB APIを使ってログイン認証を実装してみよう</title>
		<link>/tokutoku393/24790/</link>
		<pubDate>Wed, 20 Dec 2017 01:00:12 +0000</pubDate>
		<dc:creator><![CDATA[ちゃんとく]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[WebUSB API]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=24790</guid>
		<description><![CDATA[近年「IoT」がバズワードとなっていますが、「WoT（Web of Things）」というワードを聞いたことがあるでしょうか？ 「WoT」はごくごく簡単にいうと、既に普及しているHTMLやJavaScriptなどのWeb...]]></description>
				<content:encoded><![CDATA[<p>近年「IoT」がバズワードとなっていますが、「WoT（Web of Things）」というワードを聞いたことがあるでしょうか？</p>

<p>「WoT」はごくごく簡単にいうと、<strong>既に普及しているHTMLやJavaScriptなどのWeb技術を使ってIoTの開発を標準化しよう</strong>、という考え方です。WebBluetooth APIやWebNFC APIなど、みなさんが慣れ親しんでいるWeb技術を使ってハードウェアを制御する方法も増えてきています。</p>

<p>今回は、WebページからPCに繋がれたUSBデバイスを制御することができる「WebUSB API」の概要とサンプルを紹介します。</p>

<p>HTMLと簡単なJavaScriptで試せる内容になっていますので、Webデザイナーやディレクターなどエンジニアではない方もぜひチャレンジしてみてください！</p>

<h2>WebUSB APIとは</h2>

<p>WebUSB APIは<strong>PCに接続された全てのUSBデバイスにウェブから直接アクセスすることができる技術</strong>です。USBデバイスの認識、読み出し、書き込みなどを行うことができます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/e60c1a3a-95f1-a163-598e-e9214908c49e.png" alt="スクリーンショット 2017-12-13 18.23.13.png" title="スクリーンショット 2017-12-13 18.23.13.png" /></p>

<p>Googleの2人のエンジニアによって開発され、2017年9月にはChromeブラウザ（Google Chrome 61）で正式に採用されました。</p>

<p>WebUSB APIを利用するとただちにユーザのUSBデバイス全てにアクセスできる、というわけではなく、ユーザがWebページとUSBデバイスの相互通信を明示的に許可することで開始されます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/c98a6e79-dff6-b100-7413-01fc77b20901.png" alt="スクリーンショット 2017-12-13 16.19.16.png" title="スクリーンショット 2017-12-13 16.19.16.png" /></p>

<p>WebUSB APIのポリシーやセキュリティについては、Googleの開発者向けページで詳細に紹介されています。</p>

<p>⇒ <a href="https://developers.google.com/web/updates/2016/03/access-usb-devices-on-the-web" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Access USB Device on the Web</a>（Google Developers）</p>

<h3>WebUSB APIの活用シーン</h3>

<p>WebUSB APIを活用することで、これまで事前にドライバやソフトウェアのインストールが必要だったUSBデバイスのセットアップが、サイトにアクセスして許可するだけで自動で行えるなどの連携が考えられそうです。</p>

<p>またデバイスの開発者サイドのメリットとしても、OSごとに異なっていたドライバ開発がJavaScript SDKを使ってクロスプラットフォームに構築できるそう。</p>

<p><a href="https://github.com/webusb/arduino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">webusb/arduino</a>などの例を利用してArduinoなどのマイコンボードをWebから制御することも可能になりました。</p>

<p>詳細な仕様は開発者のドラフトを確認してみてください。</p>

<p>⇒ <a href="https://wicg.github.io/webusb/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WebUSB API</a></p>

<h3>本格利用はこれから</h3>

<p>ただし、実際にWebUSB APIを導入するにはまだまだ課題がありそうです。</p>

<p>USBアクセスを求めるWebページを公開するために資格や証明が必要ということはなく、利用ユーザは「本当に信頼できるWebページか」ということを知る方法が今のところありません。</p>

<p>また開発者サイドも、USBデバイスの情報が新しくなったり変更されたりするたびにWebページを改修する必要がある可能性もあります。</p>

<p>利用には気をつけるべきポイントが多く、WebUSBはまだ開発中の段階と捉えたほうがよさそうです。安全面、実装面ともに改良され、より使いやすい機能となっていくことに期待ですね。</p>

<h2>WebUSB APIを使ってログイン認証を実装してみよう</h2>

<p>今回は「登録済みのUSBデバイスならログインする」というWebページを作ってみます。</p>

<p><a href="https://gyazo.com/efdd078ea499c97f4b846c271cba0866" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="https://i.gyazo.com/efdd078ea499c97f4b846c271cba0866.gif" alt="https://gyazo.com/efdd078ea499c97f4b846c271cba0866" /></a></p>

<h3>用意するもの</h3>

<ul>
<li>Chromeブラウザ</li>
<li>任意のUSBデバイス（筆者はiPhone7）</li>
</ul>

<h3>手順1：Chromeのバージョンを確認する</h3>

<p>はじめに、ChromeブラウザがWebUSB APIに対応したバージョンになっているか確認します。</p>

<p>Chromeのツールバーから［Google Chromeについて］を選択します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/8ea91b14-86f0-ecc1-2e25-3700fa093e79.png" alt="スクリーンショット 2017-11-22 20.21.35.png" title="スクリーンショット 2017-11-22 20.21.35.png" /></p>

<p>Chromeの情報ページが開くのでバージョンが62以上であることを確認します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/809c864a-c55d-0f09-d82f-2eb59a13291f.png" alt="スクリーンショット 2017-11-22 20.23.10.png" title="スクリーンショット 2017-11-22 20.23.10.png" /></p>

<p>基本的には自動でアップデートされているはずですが、万が一されていない場合は下記を参考にアップデートしましょう。</p>

<p>⇒ <a href="https://support.google.com/chrome/answer/95414?hl=ja" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google Chromeを更新する</a>（Google Chrome ヘルプ）</p>

<h3>手順2：ログインページを作る</h3>

<p>WebUSB APIを設置するWebページを作ります。今回はコード共有サービス「<a href="http://codepen.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CodePen</a>」からログインフォームのソースコードを利用しました。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/119003/d01701d7-a934-74ea-3349-9ec138efa074.png" alt="スクリーンショット 2017-11-26 18.11.58.png" title="スクリーンショット 2017-11-26 18.11.58.png" /></p>

<p><a href="https://codepen.io/Lewitje/pen/BNNJjo?q=login%20&amp;order=popularity&amp;depth=everything&amp;show_forks=false" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Calm breeze login screen</a>（CodePen）</p>

<p>［Export］からソースコードを取得しローカルに配置します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/119003/11162f82-8510-3be3-17e6-0452e538ae1c.png" alt="スクリーンショット 2017-12-12 19.42.00.png" title="スクリーンショット 2017-12-12 19.42.00.png" /></p>

<p>今回は<strong>「Username」「Password」は不要</strong>なので、<code>index.html</code>のフォーム部分から消去しておきます。</p>

<p></p><pre class="crayon-plain-tag">&lt;form class="form"&gt;
	&lt;input type="text" placeholder="Username"&gt; // この行を消去
	&lt;input type="password" placeholder="Password"&gt; // この行を消去
	&lt;button type="submit" id="login-button"&gt;Login&lt;/button&gt;
&lt;/form&gt;</pre><p></p>

<h3>ログインのイベントを作成する</h3>

<p>LoginボタンをクリックしたらWebUSB APIのイベントが発火するよう、Submitボタンを変更します。</p>

<p><code>auth()</code>というfunctionを呼ぶようにし、記述用のJSファイルの呼び出しも追加しておきます。</p>

<p></p><pre class="crayon-plain-tag">&lt;form class="form"&gt;
		&lt;button type="button" onclick="auth()" id="login-button"&gt;Login&lt;/button&gt;
	&lt;/form&gt;
	&lt;script src="js/webusb.js"&gt;&lt;/script&gt;
&lt;/body&gt;</pre><p></p>

<p>ログイン成功時のイベント（デフォルトのJQuery）は名前つき関数にしておきます。</p>

<p></p><pre class="crayon-plain-tag">function login() {
  $('form').fadeOut(500);
  $('.wrapper').addClass('form-success');
}</pre><p></p>

<h3>USBデバイスにアクセスして識別情報を取得する</h3>

<p>認証に使用するデバイスを識別するために、［Vendor ID］, ［Product ID］, [Serial Number]を調べてみます。</p>

<p>Macの方は［システム情報］-&gt;［USB］で確認できます。</p>

<p>Windowsの方はMicroSoftの<a href="https://github.com/Microsoft/Windows-driver-samples/tree/master/usb/usbview" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">usbview</a>などを利用しましょう。
<img src="/wp-content/uploads/2017/12/4c4c20ebf1b9d2c14a27ef276ede753e-300x144.png" alt="" width="300" height="144" class="alignnone size-medium wp-image-24956" srcset="/wp-content/uploads/2017/12/4c4c20ebf1b9d2c14a27ef276ede753e-300x144.png 300w, /wp-content/uploads/2017/12/4c4c20ebf1b9d2c14a27ef276ede753e.png 640w, /wp-content/uploads/2017/12/4c4c20ebf1b9d2c14a27ef276ede753e-207x99.png 207w" sizes="(max-width: 300px) 100vw, 300px" />
※このシリアル番号は、iPhone自体のシリアル番号とは別です。</p>

<p><code>/js</code>フォルダの配下に<code>webusb.js</code>ファイルを作成し、<code>auth</code>functionを作成します。コード内には取得したVendor ID（製造元 ID）、Product ID（製品 ID）、Serial Number（シリアル番号）を追加します。</p>

<p></p><pre class="crayon-plain-tag">'use strict';

const auth = () =&gt; {
  const vendorId = XXXX; // ここにVendor ID
  const productId = XXXX; // ここにProduct ID
  const serialNumber = 'XXXXXXXX'; // ここにSerial Number
  navigator.usb.requestDevice({ 'filters': [
      { 'vendorId': vendorId, 'productId': productId }
    ]
  }).then(device =&gt; {
    if (device.serialNumber === serialNumber) {
      console.log('success!');
      login();
      return device.open;
    } else {
      console.log('false!');
      alert('認証に失敗しました');
    }
  }).catch(error =&gt; {
    console.log(error);
  });
}</pre><p></p>

<p>今回は簡易的にJSファイルに直接認証情報を書いています。</p>

<h3>ログイン機能を試してみよう</h3>

<p>登録したUSBデバイス（今回はiPhone）で試してみます。<br />
<a href="https://gyazo.com/efdd078ea499c97f4b846c271cba0866" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="https://i.gyazo.com/efdd078ea499c97f4b846c271cba0866.gif" alt="https://gyazo.com/efdd078ea499c97f4b846c271cba0866" /></a>
認証が成功しました。</p>

<p>登録していないiPhoneでも試してみます。<br />
<a href="https://gyazo.com/c7af13bc72c09579ff6604ede333a825" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="https://i.gyazo.com/c7af13bc72c09579ff6604ede333a825.gif" alt="https://gyazo.com/c7af13bc72c09579ff6604ede333a825" /></a>
認証に失敗しました。</p>

<p>これでUSBデバイスを識別することができました！</p>

<h2>まとめ</h2>

<p>今回はUSB接続したスマートフォンを利用しましたが、マウス、キーボード、フラッシュメモリなどUSBデバイスならどんなものでも利用可能です。</p>

<p>またWeb USB以外にも、WebBluetooth APIやWebNFC APIなどWeb技術を使ってハードウェアにアクセスする方法は増えています。ぜひこれからの開発に利用してみてください！</p>
]]></content:encoded>
			</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>JavaScriptエンジニアへのIoTのすすめ：Node.jsとArduinoでスマートデバイスのプロトタイプをしてみよう</title>
		<link>/girlie_mac/17684/</link>
		<pubDate>Thu, 26 Nov 2015 00:00:36 +0000</pubDate>
		<dc:creator><![CDATA[Tomomi Imura]]></dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Internet of Things]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[PubNub]]></category>

		<guid isPermaLink="false">/?p=17684</guid>
		<description><![CDATA[ここ、HTML5Experts.jpでも今年になって IoTやWoT関連の話題がことかかず、みさなんも関心を持ち始めていることかと思われます。 私もフロントエンド・エンジニアではありますが、もともと関心があったことと、去...]]></description>
				<content:encoded><![CDATA[<p>ここ、HTML5Experts.jpでも今年になって IoTやWoT関連の話題がことかかず、みさなんも関心を持ち始めていることかと思われます。</p>

<p>私もフロントエンド・エンジニアではありますが、もともと関心があったことと、去年からデータ・ストリームのPaaS (platform as a service) 会社である<a href="http://pubnub.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PubNub</a>で働いていることもあって、IoTを避けずには通れなくなり、電子工作を始めるようになりました。</p>

<p>そこで、最近東京・渋谷で行われた、東京Node学園で登壇した際に話したテーマ、<a href="https://speakerdeck.com/girlie_mac/tokyo-nodefest-2015-hardware-hacking-for-javascript-developers-japanese-ri-ben-yu" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Hardware Hacking for JavaScript Developers</a> から、ArduinoとNode.jsを使ってプロトタイプする、という内容についてチュートリアル形式で書いてみたいと思います。</p>

<h3>Arduinoが変えたMakerムーブメント</h3>

<p>みなさん、<a href="https://www.arduino.cc/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Arduino</a>の名前は聞いたことがあると思います。Arduino、もしくはGenuinoとして知られているこのオープンソースのAVRマイクロコントローラ電子工作キットは、既存のマイコンボードと違い、安価で、I/Oポートもあり、USB接続で今すぐ始められます。開発環境（IDE）とサンプルコードなども簡単にダウンロード、インストールできることから初心者でも簡単に電子工作ができるようになったという面では、今までハードウェアに縁がなかったソフトウェアエンジニアが、Makerムーブメントに積極的に参加するようになった火付け役ともいえると思います。</p>

<p>しかし、同じソフトウェアといえども、ウェブエンジニアはどうでしょう？Arduinoで使用される言語はC-ベースのSketchということで敷居が高く感じたり、興味がなかったりするのではないでしょうか？でも、もし馴染みのJavaScriptで好きなことができたら、遊んでみたくなりませんか？</p>

<h3>Johnny-Five: JSロボティクス・フレームワーク</h3>

<p>そこで紹介したいのが、JavaScript ロボティクス・フレームワークである、<a href="http://johnny-five.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Johnny-Five</a>。日本ではまださほど知られていない感じがしますが、オープンソースでディベロッパ・コミュニティの結束も固く、<a href="http://nodebots.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">インターナショナル NodeBots Day</a>などでユーザ・コミュニティも大きくなってきたこのフレームワークを使えば、JavaScriptをで簡単にプログラマブル電子工作ができるようになります。ここは説明よりも実践してみるほうが理解も深まると思いますので、さっそくチュートリアルを始めましょう！</p>

<p><img src="/wp-content/uploads/2015/11/arduino-loves-j5.png" alt="arduino nodejs johnny-five" width="640" height="236" class="aligncenter size-full wp-image-17712" srcset="/wp-content/uploads/2015/11/arduino-loves-j5.png 640w, /wp-content/uploads/2015/11/arduino-loves-j5-300x111.png 300w, /wp-content/uploads/2015/11/arduino-loves-j5-207x76.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>1. Arduino のセットアップ</h2>

<p>用意するハードウェアとインストールの必要なソフトウェア</p>

<ul>
<li><a href="https://www.arduino.cc/en/Main/ArduinoBoardUno" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Arduino (Genuino) Uno</a></li>
<li><a href="http://arduino.cc/en/main/software" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Arduino IDE</a></li>
<li><a href="https://nodejs.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Node.js</a> </li>
</ul>

<p>始めにセットアップから始めます。ArduinoボードをUSBで、コンピュータにつなぎます。Arduino IDEをダウンロード、インストールして、起動させたら、ボードとシリアルポートの設定をします。</p>

<p>メニューの<strong>ツール</strong> &gt; <strong>マイコンボード</strong>の中の<strong>Arduino Uno</strong>を選択し、 <strong>ツール</strong> &gt; <strong>シリアルポート</strong>の中の<strong>/dev/tty.usbmodem</strong>、もしくは<strong>cu.usbmodem</strong>という名前が含まれる項目を選びます。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-johnnyfive-setup-jp.png" alt="Arduino setup" width="640" height="180" class="aligncenter size-full wp-image-17690" srcset="/wp-content/uploads/2015/11/arduino-johnnyfive-setup-jp.png 640w, /wp-content/uploads/2015/11/arduino-johnnyfive-setup-jp-300x84.png 300w, /wp-content/uploads/2015/11/arduino-johnnyfive-setup-jp-207x58.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>Johnny-FiveはFirmataプロトコルを使ってArduinoと通信をするので、今度は<strong>StandardFirmata</strong>をインストールします。</p>

<p>メニューから<strong>ファイル</strong> &gt; <strong>スケッチの例</strong> &gt; <strong>Firmata</strong> &gt; <strong>StandardFirmata</strong>を選択すると新しいウィンドウが開きます。そこから左から２番目にあるアップロードボタンをクリックします。下のGIFアニメーションの通りです。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-johnnyfive-firmata-jp.gif" alt="Arduino setup GIF animation" width="640" height="512" class="aligncenter size-full wp-image-17727" /></p>

<p>終わったら閉じ、このIDEはもうこれからは必要ありません。</p>

<h2>2. Hello World</h2>

<p>まずコンピュータに、Node.jsがすでにインストールされていることを、確認してください。そして適当なディレクトリ (e.g. /j5-hello/) を作ったら、そのディレクトリ内にパーケッジマネージャであるnpmを使って、Johnny-Fiveをインストールします。</p>

<p><code>$ npm install johnny-five</code></p>

<p>さっそくJohhny-Fiveを使ってはじめの一歩である、Hello Worldを書いてみましょう。新しい言語やフレームワークを学ぶ際に初めて書くプログラムは&#8221;Hello world&#8221;という2つの単語を出力する、というのが一般ですが、ここでは、ハードウェア界のHello Worldとも言える「Lチカ」（LEDを点滅させる）をしてみます。</p>

<h3>必要なハードウェア</h3>

<ul>
<li>セットアップ済みのArduino Uno</li>
<li>LED</li>
<li>ブレッドボード </li>
<li>ジャンパー・ワイヤー（両側がピン状になっているオス〜オス）</li>
<li>抵抗　（200-330Ω 程度）</li>
</ul>

<p><img src="/wp-content/uploads/2015/11/arduino-hello-world-jp.jpg" alt="Arduino LED blink" width="640" height="318" class="aligncenter size-full wp-image-17692" srcset="/wp-content/uploads/2015/11/arduino-hello-world-jp.jpg 640w, /wp-content/uploads/2015/11/arduino-hello-world-jp-300x149.jpg 300w, /wp-content/uploads/2015/11/arduino-hello-world-jp-207x103.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>まずはハードウェア側のセッティングです。
部品などどこで買ったらわからない、という方はAmazonなどでキットを買うのをお勧めします。</p>

<h3>LEDの基本</h3>

<p>LED（発光ダイオード）には、極性があり、その＋極を<strong>アノード</strong>、ー極を<strong>カソード</strong>と呼びます。普通のLEDには通常、足が二本ついていますので長い方がアノードです。これは回路を作るときに重要になってきますので必ず覚えておいてください！</p>

<p><img src="/wp-content/uploads/2015/11/led-anode-cathode-jp.png" alt="LED anode and cathode" class="aligncenter" /></p>

<h3>電気回路の作成</h3>

<p>ArduinoからLEDを光らせるための回路はこんな感じになります。ここでは便宜上、電源からつながるプラス側を赤、Groundにつながるマイナス側を黒のワイヤーで示してあります。何色を使っても構いませんが、混乱を避けるために2つの異なる色にすることをお勧めします。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-uno-led_bb.png" alt="Fritzing Arduino Uno LED" width="640" height="483" class="aligncenter size-full wp-image-17716" srcset="/wp-content/uploads/2015/11/arduino-uno-led_bb.png 640w, /wp-content/uploads/2015/11/arduino-uno-led_bb-300x226.png 300w, /wp-content/uploads/2015/11/arduino-uno-led_bb-207x156.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ブレッドボードや抵抗についての基本、そしてこの「Lチカ」の回路については<a href="https://html5experts.jp/youtoy/12029/" data-wpel-link="internal">初心者でもわかる・できる！Arduinoを使った初めての電子工作実践</a>の<strong>「部品をつなぐ」</strong>セクションで豊田陽介さんが詳しく説明されているので、それを参考にしましょう。</p>

<h3>Johnny-FiveでLチカ</h3>

<p>では、適当なファイルネーム、例えば<code>blink.js</code>を作成し下のコードをコピーペーストしてください。</p>

<p></p><pre class="crayon-plain-tag">var five = require('johnny-five');
var board = new five.Board();

board.on('ready', function() {
  var led = new five.Led(13);
  led.blink(500);
});</pre><p></p>

<p>ターミナルからこのファイルを走らせましょう。</p>

<p><code>$ sudo node blink.js</code></p>

<p>正しく作動しましたか？回路が正しく、コードにエラーがない場合は、500ms間隔でLEDが点滅します。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-johnnyfive-blink.gif" alt="LED blink animated GIF" class="aligncenter" /></p>

<p>これで、JavaScriptとハードウェアを使う基本を学びましたので、今度は実際にスマートデバイスのプロトタイプを作ってみましょう。</p>

<h2>3. スマート照明システムをプロトタイプする</h2>

<p><a href="http://www2.meethue.com/ja-JP/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Philips HUE</a>や、<a href="http://www.lifx.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">LIFX</a>は、ムードや状況によってスマートフォンやタブレットから、明かりの色や照度をカスタマイズできるLED電球です。さっそく Arduinoを使ってこれらのように色を自在に変えられるLEDを作ってみましょう。色を変えるためのコントローラはHTML５を使ってブラウザから操作できるようにしましょう。</p>

<h3>JavaScript で Internet of Things</h3>

<p>さて、ここで重要なのは、デバイス（ハードウェア）とモバイルUI (HTML5)をインターネットでつなげて、IoT化するということです。Bluetoothなどと違い、インターネットにさえ繋がっていれば、あなたが世界のどこにいようともモバイルから自宅の照明の操作をすることができるのです。この2ウェイ・コミュニケーションを可能にするにはソケット・コネクションが必要になります。ここで、この双方向通信を簡単に行うことにできるPubNubのJavaScript APIを使って、IoTのプロトタイプをしてみましょう。</p>

<p><a href="http://pubnub.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PubNub</a> はグローバルなデータストリームネットワーク (DSN) で、 このAPIを使ってリアルタイムアプリケーション、IoTデバイスなどを接続、拡張、管理することができます。今から作成するスマートLEDは下の図のようにモバイルデバイス（このプロトタイプの場合はブラウザ）とハードウェアをインターネットでつなげることが可能です。</p>

<p><img src="/wp-content/uploads/2015/11/pubnub-arduino.png" alt="How PubNub makes an Arduino as an IoT device" width="640" height="233" class="aligncenter size-full wp-image-17720" srcset="/wp-content/uploads/2015/11/pubnub-arduino.png 640w, /wp-content/uploads/2015/11/pubnub-arduino-300x109.png 300w, /wp-content/uploads/2015/11/pubnub-arduino-207x75.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>例えば、サンフランシスコにいるモバイルユーザが東京にあるArduinoを操作する場合：</p>

<ol>
<li>ユーザがモバイルから「緑い照明にしたい」と送信（パブリッシュ）</li>
<li>メッセージがPubNubのサンスランシスコデータセンターに送信される</li>
<li>データは世界各地のデータセンターと同期</li>
<li>Arduinoが東京データセンターからデータを受信（サブスクライブ）して、LEDを緑に</li>
</ol>

<p>この全てのオペレーションがわずか¼秒かそれ以下で行われるのが、PubNubの利点です。</p>

<p>このチュートリアルではJavaScriptを使ってプロトタイプを作りますが、PubNubの組み込みとモバイルのSDKを使えば、実際にHUEのようなスマートデバイスを製品化することも可能なのです。</p>

<h3>必要なハードウェア</h3>

<ul>
<li>Arduino Uno</li>
<li><a href="http://www.amazon.co.jp/100%E5%80%8B-5%E3%83%9F%E3%83%AA%E3%83%A1%E3%83%BC%E3%83%88%E3%83%AB-4%E3%83%94%E3%83%B3-RGB-%E3%82%AB%E3%82%BD%E3%83%BC%E3%83%89/dp/B00HIUDSJK/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">RGBフルカラーLED（カソードコモン）</a></li>
<li>ブレッドボード </li>
<li>ジャンパー・ワイヤー（オス〜オス）</li>
<li>抵抗　（220Ω x 2, 330Ω x 1）</li>
</ul>

<p><img src="/wp-content/uploads/2015/11/arduino-rgbled-jp.jpg" alt="Arduino RGB LED JP" width="640" height="273" class="aligncenter size-full wp-image-17702" srcset="/wp-content/uploads/2015/11/arduino-rgbled-jp.jpg 640w, /wp-content/uploads/2015/11/arduino-rgbled-jp-300x128.jpg 300w, /wp-content/uploads/2015/11/arduino-rgbled-jp-207x88.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h3>RGBフルカラーLEDの基本</h3>

<p>RGB (Red-Green-Blue) フルカラーLEDは、赤、緑、青の3色のLEDが一本になったもので、この三原色の組み合わせで無数の色を作り出すことができます。ほとんどのこのタイプのLEDは、各色のピンが一本づつと共通のカソード（もしくはアノード）の合計4本のピンがあります。このチュートリアルでは、カソードコモンのものを使用しています。</p>

<p><img src="/wp-content/uploads/2015/11/led-rgb-cathode-jp.png" alt="RGB LED JP" width="640" height="151" class="aligncenter size-full wp-image-17703" srcset="/wp-content/uploads/2015/11/led-rgb-cathode-jp.png 640w, /wp-content/uploads/2015/11/led-rgb-cathode-jp-300x71.png 300w, /wp-content/uploads/2015/11/led-rgb-cathode-jp-207x49.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h3>電気回路の作成</h3>

<p>Hello World を成功させたからには、この下の図の回路も問題なく作れるのではないでしょうか。がんばってみてください。</p>

<p>ワイヤーを差し込むピンは、単純な「Lチカ」とは違い、PWM (Pulse Width Modulation：パルス幅変調) ピンを使っています。Arduinoボードにラベルされているピン番号の前に「〜」が付いているものがPWMピンになります。</p>

<p>これらと他のピンの違いは、簡単にいえばアナログかデジタルかの違いになります。例えばLEDの場合、一般のデジタルピンにつなぐとオフかオンの2つのステートしか表現できません。Lチカ（点滅）はこのデジタル信号をオンとオフと交互に発しています。しかしRGBフルカラーLEDで無数の色を表現するには、各色の値の組み合わせで色を作り出すので中間の値が必要になりますので、アナログであるPWMピンを使います。</p>

<p><img src="/wp-content/uploads/2015/11/arduino-uno-rgb-led_bb.png" alt="Fritzing Arduino RGB LED" width="640" height="476" class="aligncenter size-full wp-image-17719" srcset="/wp-content/uploads/2015/11/arduino-uno-rgb-led_bb.png 640w, /wp-content/uploads/2015/11/arduino-uno-rgb-led_bb-300x223.png 300w, /wp-content/uploads/2015/11/arduino-uno-rgb-led_bb-207x154.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>ここで抵抗を220Ωと330Ωにわけてあるのは、同じ抵抗だと赤が強くなるので、抵抗を増やして赤を控えめな明かるさになるように調整してあります。抵抗の計算方法やカラーコードの読み方については、ここで割愛しますが、自分でいろいろ調整してみてください。</p>

<h3>IoT リモートコントローラーUIの作成</h3>

<p>ブラウザでLEDの色をコントロールするUIを作ってみましょう。</p>

<p><img src="/wp-content/uploads/2015/11/hue-prototype-ui.png" alt="hue-prototype-ui" width="640" height="434" class="aligncenter size-full wp-image-17707" srcset="/wp-content/uploads/2015/11/hue-prototype-ui.png 640w, /wp-content/uploads/2015/11/hue-prototype-ui-300x203.png 300w, /wp-content/uploads/2015/11/hue-prototype-ui-207x140.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>HTML5の&#8220;、&#8221;R&#8221;、&#8221;G&#8221;、&#8221;B&#8221;の各色調整をするスライダーバーを描写します。各色は0から255まで(<code>min="0" max="255"</code>)の整数の値(<code>step="1"</code>)を、つまみで調節できるようなUIにしてみましょう。</p>

<p></p><pre class="crayon-plain-tag">&lt;input id="red" type="range" min="0" max="255" step="1" value="0"&gt;</pre><p></p>

<p>これで赤色を調節するスライダーができました。このチュートリアルではCSS部分は省略しますが、スクリーンショットのようなスタイルにするには、<a href="https://github.com/girliemac/arduino-led-rgb" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GitHubのソースコード</a>の<a href="https://github.com/girliemac/arduino-led-rgb/tree/gh-pages" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">gh-pages ブランチ</a>を参照してください。</p>

<p>次はJavaScriptでこの値がユーザによって変更された時に、その値をArduino側に反映させるようにします。これを実現させるためにPubNub JavaScript APIで両デバイスを接続させてみましょう。</p>

<p>PubNub JavaScript API を使うには、まず自分の<a href="https://admin.pubnub.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">APIキーを取得</a>を取得したら、CDNライブラリ（もしくはローカルファイル）を読み込みます。</p>

<p></p><pre class="crayon-plain-tag">&lt;script src="//cdn.pubnub.com/pubnub-3.7.15.min.js"&gt;&lt;/script&gt;</pre><p></p>

<p>そして自分のキーを使ってインスタンスを初期化します。</p>

<p></p><pre class="crayon-plain-tag">var pubnub = PUBNUB({
　subscribe_key : '自分の subscribe key',                          
　publish_key   : '自分の publish key'
});</pre><p></p>

<p>UIイベント発生時に自動的にLEDの色を変える仕様にしてみましょう。
スライダーDOMに<code>change</code>イベントが発生した時に、変更値をPubNubに <code>publish</code> メソッドを使って送信（パブリッシュ）します。</p>

<p></p><pre class="crayon-plain-tag">var red = document.getElementById('red');

red.addEventListener('change', function(){
  pubnub.publish({
    channel: 'smart-led', 
    message: {color: 'red', brightness: +this.value}
  });
}, false);</pre><p></p>

<p>この時の <code>channel</code> 名は何でも構いませんが、のちにこのデータを受信する際にはこれと同じチャンネル名にします。</p>

<p>では次はNode.jsを使ってハードウェア側でこの値を反映させてみましょう。</p>

<h3>Johnny-Five と PubNub で Arduino を IoTデバイスに</h3>

<p>Johnny-FiveでRGBフルカラーLEDを動かすコードは、いたって簡単。npmでjohnny-fiveをインストールしたら、次のコードを動かしてみてください。</p>

<p></p><pre class="crayon-plain-tag">var five = require('johnny-five');
var led;

five.Board().on('ready', function() {
  console.log('ready');

  // RGB LED を初期化
  led = new five.Led.RGB({
    pins: { // pin 番号
      red: 6,
      green: 5,
      blue: 3
    }
  });

  // テスト
  led.color({red: 255, blue: 0, green: 0});
  
  led.on();
});</pre><p></p>

<p>LEDが赤色に光ましたか？
何も起こらない場合はコードと配線などを確かめてください。それでも作動しない場合は、使っているRGB LED がカソードコモンではなくアノードコモンの可能性があります。その場合は、GND（図上の黒のワイヤー）を、Arduinoの5Vのピンに変えてみてください。</p>

<p>「テスト」とコメントされた行をみてください。<code>color</code> メソッドでLEDの色を指定しているのがわかると思います。この場合、赤の値が255で他が0となっているので、LEDを赤で光らせることができます。Johnny-Fiveでは、CSSのcolorプロパティと同じようにRGBの値を0～255で指定することができるのです。RGBの各値を変えながらどんな色になるか実験してみてください。</p>

<p>さて今度は、このRGBの値をブラウザUIからリモートコントロールして、動的にLEDの色を変えてみましょう。</p>

<p>さきほどのUI側からパブリッシュされたデータを受け取って、ハードウェアに反映させるには、PubNub <code>subscribe</code> メソッドで受信（サブスクライブ）しましょう。</p>

<p>まず、npm で pubnub をインストールします。</p>

<p><code>$ npm install pubnub </code></p>

<p>フロントエンドと同様に、pubnubインスタンスの初期化します。</p>

<p></p><pre class="crayon-plain-tag">var pubnub = require('pubnub').init({
  subscribe_key: '自分の subscribe key',
  publish_key:   '自分の publish key'
});</pre><p></p>

<p>UI側から送信されたデータは、同じ <code>channel</code> にアクセスすることによって自動的に送信することができます。データが送信された際には、<code>subscribe</code> メソッドの <code>callback</code> が返されます。このコールバック内で送信された色データをLEDに反映させます。</p>

<p></p><pre class="crayon-plain-tag">pubnub.subscribe({
  channel: 'smart-led',
  callback: function(m) {
    if(led) {
      r = (m.color === 'red') ? m.brightness : r;
      g = (m.color === 'green') ? m.brightness : g;
      b = (m.color === 'blue') ? m.brightness : b;

      led.color({red: r, blue: b, green: g});

      console.log( 'color change to...' );
      console.log( led.color() );
    }
  }
  error: function(err) {console.log(err);}
});</pre><p></p>

<p>送信されたメッセージ、<code>m</code> は、UIから送られたオブジェクト、例えば青の値が150の場合、<code>{color: 'blue', brightness: 150}</code>、となります。次に送信された値が、<code>{color: 'red', brightness: 150}</code> ならば、前の値の青＝150はそのままで、ここに赤＝150が加わることによって、LEDは紫に近い色になります。さらに赤緑青の3つの値が変われば、LEDはさまざまな色に変わります。</p>

<p><img src="/wp-content/uploads/2015/11/poormans-philips-hue.jpg" alt="IoT 101 Arduino with RGB LED" width="640" height="480" class="aligncenter size-full wp-image-17705" srcset="/wp-content/uploads/2015/11/poormans-philips-hue.jpg 640w, /wp-content/uploads/2015/11/poormans-philips-hue-300x225.jpg 300w, /wp-content/uploads/2015/11/poormans-philips-hue-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>全コードは、<a href="https://github.com/girliemac/arduino-led-rgb" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GitHubのソースコード</a>の<a href="https://github.com/girliemac/arduino-led-rgb" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">master ブランチ</a>内の <code>/node/index.js</code>を参照してください。</p>

<p>さて、これでIoTスマート照明のプロトタイプができあがりました！</p>

<p><img src="/wp-content/uploads/2015/11/arduino-johnnyfive-hue.gif" alt="arduino-johnnyfive-hue" width="371" height="317" class="aligncenter size-full wp-image-17706" /></p>

<p>Johnny-FiveもPubNubもArduinoだけではなく、他のいろいろなマイクロコンピュータに使うことができます。いろいろなセンサーやカメラなどを組み合わせて、IoTプロトタイプに挑戦してみてください。</p>

<p>では、Happy hacking!</p>

<h2>References</h2>

<ul>
<li><a href="http://johnny-five.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Johnyy-Five</a>: The original JavaScript Robotics programming framework</li>
<li><a href="https://www.pubnub.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">PubNub</a>: The global realtime Data Stream Network for IoT, mobile, and web applications</li>
</ul>
]]></content:encoded>
			</item>
		<item>
		<title>Web技術でここまでできるのか！IoT/WoTの可能性を探る、「第59回 HTML5とか勉強会」レポート</title>
		<link>/shumpei-shiraishi/16760/</link>
		<pubDate>Thu, 27 Aug 2015 04:42:15 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[CHIRIMEN]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[WebRTC]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=16760</guid>
		<description><![CDATA[連載： イベントレポート (39)こんにちは、編集長の白石です。 昨日（2015年8月27日）、「IoT / WoT」をテーマにした「第59回 HTML5とか勉強会」に参加してきました。 この記事では、イベントの模様や参...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/eventarchives/" class="series-159" title="イベントレポート" data-wpel-link="internal">イベントレポート</a> (39)</div><p>こんにちは、編集長の白石です。</p>

<p>昨日（2015年8月27日）、「IoT / WoT」をテーマにした「第59回 HTML5とか勉強会」に参加してきました。
この記事では、イベントの模様や参加した感想をレポートしたいと思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3111.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3111-640x480.jpg" alt="IMG_3111" width="640" height="480" class="aligncenter size-large wp-image-16761" srcset="/wp-content/uploads/2015/08/IMG_3111.jpg 640w, /wp-content/uploads/2015/08/IMG_3111-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3111-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>ちなみに、「IoT」（Internet of Things）はバズワードなのでご存じの方も多いと思いますが、「WoT」というのは「Web of Things」の略です。「IoTのWeb版」と言えばわかりやすいでしょう。個人的には「WoT」という言葉にはどうも「IoTブームに乗ってやれ」という（何者かの）意図があるような気がしていて、ちょっと懐疑的でした。リソース食いだし、デバイスの機能を自由に使うこともできないWeb技術は、IoTとは相性悪いんじゃないか…と。</p>

<p>しかし、今回のイベントに参加して、そうした疑いは晴れました。「Web×デバイス」の勢い、まがい物ではなさそうです。そしてその勢いをさらに推し進める一員になりたいな…と思ったのも正直な気持ちです。それくらい、最先端では楽しいことが起きている。</p>

<p>では、前置きが長くなりましたが、イベントの内容を簡潔にご紹介していきたいと思います。
イベント自体の内容が盛りだくさんでしたので、今回のレポートでは前半の2セッションのみのご紹介となりますがご容赦ください。</p>

<p>また、講演資料はアップされたのを確認次第、追記していきます（現在のところ、2つ目のセッションに関する資料しか見当たりませんでした）。</p>

<h2>「myThings開発者のMaker Faire Tokyo体験記」</h2>

<p>1つ目のセッションは、ヤフー株式会社の河合将臣氏と畑元氏による 「myThings開発者のMaker Faire Tokyo体験記」でした。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/DSC08527.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/DSC08527-640x480.jpg" alt="DSC08527" width="640" height="480" class="aligncenter size-large wp-image-16780" srcset="/wp-content/uploads/2015/08/DSC08527.jpg 640w, /wp-content/uploads/2015/08/DSC08527-300x225.jpg 300w, /wp-content/uploads/2015/08/DSC08527-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>「<a href="http://mythings.yahoo.co.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">myThings</a>」とは、2015年7月にヤフージャパンがリリースしたプロダクトです。
複数のWebサービスやデバイスを自由自在に繋いで、いろんなことをオートメーションさせられるサービス／モバイルアプリです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3116.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3116-640x480.jpg" alt="IMG_3116" width="640" height="480" class="aligncenter size-large wp-image-16763" srcset="/wp-content/uploads/2015/08/IMG_3116.jpg 640w, /wp-content/uploads/2015/08/IMG_3116-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3116-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>と、この説明を聞くと「それって<a href="https://ifttt.com/recipes" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">IFTTT</a>と何が違うの？」と思ってしまうのが自然な流れ（？）。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3121.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3121-640x480.jpg" alt="IMG_3121" width="640" height="480" class="aligncenter size-large wp-image-16765" srcset="/wp-content/uploads/2015/08/IMG_3121.jpg 640w, /wp-content/uploads/2015/08/IMG_3121-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3121-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>このセッションでは、その疑問にもしっかり答えていました。いわく、</p>

<ul>
<li>日本語対応</li>
<li>Yahoo! Japanのサービスが使える。特に、通常API経由では利用できないサービスやデータを使えるのは強み</li>
<li>国内で展開されているサービスも利用できる。代表的なのははてなブックマーク。</li>
</ul>

<p>だそうです。</p>

<p>また、<a href="http://www.idcf.jp/cloud/iot/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">IDCF Cloud</a>というプラットフォームも用意されており、自作のガジェットとmyThingsをつなぐことも可能。MQTTやWebSocket、REST APIに対応しているそうで、Web技術者でも簡単に扱えそうなのが魅力。</p>

<p>セッションの後半では、Maker Faireにヤフーさんが出展された時の（もちろんmyThingsとIDCF Cloudを使った）デモアプリを、内部設計や作業工程も含めて情報共有していただきました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3124.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3124-640x480.jpg" alt="IMG_3124" width="640" height="480" class="aligncenter size-large wp-image-16766" srcset="/wp-content/uploads/2015/08/IMG_3124.jpg 640w, /wp-content/uploads/2015/08/IMG_3124-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3124-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Web技術者がハードウェアの設計・製造まで行ったということで、その過程で気づいたことを以下のようにわかりやすくまとめています。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3139.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3139.jpg" alt="IMG_3139" width="640" height="640" class="aligncenter size-full wp-image-16767" srcset="/wp-content/uploads/2015/08/IMG_3139.jpg 640w, /wp-content/uploads/2015/08/IMG_3139-150x150.jpg 150w, /wp-content/uploads/2015/08/IMG_3139-300x300.jpg 300w, /wp-content/uploads/2015/08/IMG_3139-207x207.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>「WebController for V-Sido CONNECT：WebRTCとWebGLで作る人型ロボット遠隔操縦システム」</h2>

<p>２つ目のセッションは、株式会社アトモスデザインの児玉 哲彦さんによる「WebController for V-Sido CONNECT：WebRTCとWebGLで作る人型ロボット遠隔操縦システム」でした。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/DSC08580.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/DSC08580-640x480.jpg" alt="DSC08580" width="640" height="480" class="aligncenter size-large wp-image-16781" srcset="/wp-content/uploads/2015/08/DSC08580.jpg 640w, /wp-content/uploads/2015/08/DSC08580-300x225.jpg 300w, /wp-content/uploads/2015/08/DSC08580-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a class="embedly-card" href="http://www.slideshare.net/ecru0606/html5150826" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">第59回 HTML5とか勉強会 ーIoT/WoT発表資料「Web Controller for V-Sido CONNECT：WebRTCとWebGLで作る人型ロボット遠隔操縦システム」</a>
<script async src="//cdn.embedly.com/widgets/platform.js" charset="UTF-8"></script></p>

<p>このセッションのウリは、とにかく「ホンモノのロボットをWebブラウザで動かせる！」という点。Google Chrome上で動作するWebアプリから、ロボットの手を動かしたり足を動かしたり、果ては怒らせたり。</p>

<p>「JavaScriptでロボットを動かす」なんて、数年前では考えられなかった事態に感動です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3151.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3151-640x480.jpg" alt="IMG_3151" width="640" height="480" class="aligncenter size-large wp-image-16770" srcset="/wp-content/uploads/2015/08/IMG_3151.jpg 640w, /wp-content/uploads/2015/08/IMG_3151-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3151-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3150.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3150-640x480.jpg" alt="IMG_3150" width="640" height="480" class="aligncenter size-large wp-image-16769" srcset="/wp-content/uploads/2015/08/IMG_3150.jpg 640w, /wp-content/uploads/2015/08/IMG_3150-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3150-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>そもそも<a href="http://www.v-sido.com/ja/product/connect/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">V-Sido CONNECT</a>というのは、人型ロボットを作るためのOS（そんなのがあったのか…）である「<a href="http://www.v-sido.com/ja/product/os/index.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">V-Sido OS</a>」用のマイコンで、公式HPによると「シリアルサーボモーターをつなぐだけでロボットを作ることが可能です。」「V-Sidoの一部機能がマイコンに搭載されているので初心者でも簡単にロボットを動かすことができます」とのこと。</p>

<p>今回の児玉さんの発表は、この「V-Sido CONNECT」をWebブラウザ上から制御できるというプロダクトの紹介というわけです。
このWeb Controllerはどう動作しているかというと、Webアプリとスマホアプリを連動させ、スマホからBluetoothでロボットの制御信号を送っているとのこと。先ほどのmyThingsといい、スマホがIoTデバイスのハブになるという流れなのは間違いなさそうです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3160.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3160-640x480.jpg" alt="IMG_3160" width="640" height="480" class="aligncenter size-large wp-image-16771" srcset="/wp-content/uploads/2015/08/IMG_3160.jpg 640w, /wp-content/uploads/2015/08/IMG_3160-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3160-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>また、Webアプリとスマホアプリの通信はWebRTC（及び、NTTコミュニケーションズの<a href="http://nttcom.github.io/skyway/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Skyway</a>）を使用しているそう。WebRTCを使う決め手となったのは、映像や音声を扱うことができるから（ロボットのカメラから映像を受信したりできる）。</p>

<p>以下の比較表は中々興味深いです（写真ボケててすいません）。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3161.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3161-640x480.jpg" alt="IMG_3161" width="640" height="480" class="aligncenter size-large wp-image-16772" srcset="/wp-content/uploads/2015/08/IMG_3161.jpg 640w, /wp-content/uploads/2015/08/IMG_3161-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3161-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>WebRTCのおかげで、なんと<strong>ドイツから日本のロボットを動かす</strong>といったような接続性を確保できたとのこと。地球狭い。</p>

<p>そして、Webエンジニアであれば気になるコーディング方法ですが、以下の表に示すように、非常に簡潔なAPIです。たったこれだけでロボットに複雑な制御を行わせることができるというのは、Web技術者にとってはありがたい限りです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3164.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3164-640x480.jpg" alt="IMG_3164" width="640" height="480" class="aligncenter size-large wp-image-16773" srcset="/wp-content/uploads/2015/08/IMG_3164.jpg 640w, /wp-content/uploads/2015/08/IMG_3164-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3164-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>2000年代の「ユビキタスコンピューティング」に足りなかったものは今は揃っており、WoT時代の幕開けを感じさせてくれるセッションでした。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/08/IMG_3174.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/08/IMG_3174-640x480.jpg" alt="IMG_3174" width="640" height="480" class="aligncenter size-large wp-image-16774" srcset="/wp-content/uploads/2015/08/IMG_3174.jpg 640w, /wp-content/uploads/2015/08/IMG_3174-300x225.jpg 300w, /wp-content/uploads/2015/08/IMG_3174-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h2>まとめ</h2>

<p>今回紹介しなかった後半の内容（MozillaのFirefox OSベースのマイコン「CHIRIMEN」や、NTTコミュニケーションズ小松さんによるRaspberry PiとWebRTCを連動させた話）も非常に興味深かったので、気になる方は<a href="https://twitter.com/search?f=tweets&amp;vertical=default&amp;q=%23html5j&amp;src=typd" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Twitter</a>でイベントの様子を確認してみてください。</p>

<p>イベント全体の模様をを動画でご覧になりたい方はこちらからどうぞ。</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/rXiJNgN6l3Y" frameborder="0" allowfullscreen></iframe>

<p>このIoTブームの中、「Web技術者にできることを広げようとしている人たちが多く存在する」「Web技術者にできることはたくさんある」ということを実感させてくれる、非常にバリエーション豊かな内容でした。</p>
]]></content:encoded>
		
		<series:name><![CDATA[イベントレポート]]></series:name>
	</item>
		<item>
		<title>スクエニのデモすごかった！HoroLensも、Edgeも！見どころ多すぎで長文失礼！- Microsoft de:code基調講演後半レポート</title>
		<link>/shumpei-shiraishi/15034/</link>
		<pubDate>Tue, 26 May 2015 09:18:27 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[Edge]]></category>
		<category><![CDATA[FINAL FANTASY]]></category>
		<category><![CDATA[HoroLens]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Microsoft Band]]></category>
		<category><![CDATA[Rasberry Pi]]></category>
		<category><![CDATA[Square Enix]]></category>
		<category><![CDATA[Windows 10]]></category>
		<category><![CDATA[de:code]]></category>
		<category><![CDATA[機械学習]]></category>

		<guid isPermaLink="false">/?p=15034</guid>
		<description><![CDATA[2015年5月26日から、マイクロソフトが主催するエンジニア向けカンファレンス「de:code 2015」が開催中です。 2日間に渡るカンファレンスでは、開発者向けのセッションがてんこ盛り。 この記事は、基調講演レポート...]]></description>
				<content:encoded><![CDATA[<p>2015年5月26日から、マイクロソフトが主催するエンジニア向けカンファレンス「<a href="http://www.microsoft.com/ja-jp/events/decode/2015/default.aspx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">de:code 2015</a>」が開催中です。
2日間に渡るカンファレンスでは、開発者向けのセッションがてんこ盛り。
この記事は、基調講演レポートの後半です。</p>

<p>Microsoft Azureの話題が中心だった前半（<a href="https://html5experts.jp/shumpei-shiraishi/15016/" data-wpel-link="internal">レポート記事</a>）とは対照的に、後半はWindows 10やHoloLensなど、コンシューマ向けプロダクトの紹介が主でした。
よって、内容が<strong>派手</strong>！見栄えのするデモや、ぼくらが大好きなコードの話も出てきて、見どころ満載でした。</p>

<h2>ジョ〜〜！！！</h2>

<p>「前後半の合間に、ちょっとした息抜きをしましょうか。<a href="https://powerbi.microsoft.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Power BI</a>の勉強でもしましょう」って言われた時は「えっ」という気持ちでいっぱいでしたが、フタを開けてみると本当に息抜きのコンテンツでした。</p>

<p>次の登壇者である「Giorgio Sardo」（ジョー）さんの名前を観客が全力で叫び、その音量を視覚化するというもの。
何やらせんだ。</p>

<div id="attachment_15036" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/011.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/011-640x480.jpg" alt="最後はメーター振り切ることができて、マイクロソフトの方々もご満悦" width="640" height="480" class="size-large wp-image-15036" srcset="/wp-content/uploads/2015/05/011.jpg 640w, /wp-content/uploads/2015/05/011-300x225.jpg 300w, /wp-content/uploads/2015/05/011-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">最後はメーター振り切ることができて、マイクロソフトの方々もご満悦</p></div>

<p>で、ジョーが出てきました。</p>

<div id="attachment_15037" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/021.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/021-640x480.jpg" alt="デベロッパーエクスペリエンス &amp; エヴァンジェリストグループ シニアディレクターのGiorgio Sardo氏" width="640" height="480" class="size-large wp-image-15037" srcset="/wp-content/uploads/2015/05/021.jpg 640w, /wp-content/uploads/2015/05/021-300x225.jpg 300w, /wp-content/uploads/2015/05/021-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">デベロッパーエクスペリエンス &amp; エヴァンジェリストグループ シニアディレクターのGiorgio Sardo氏</p></div>

<h2>Windows 10で、目指せ10億台！</h2>

<p>話題はもちろんWindows 10です。
Windows 10は、「巨大なターゲット市場」「スマートエンゲージメント」「One Store &amp; Dev Center」「統合された開発プラットフォーム」という特徴を備え、大きなチャンスを生み出すと言います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/031.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/031-640x480.jpg" alt="03" width="640" height="480" class="aligncenter size-large wp-image-15038" srcset="/wp-content/uploads/2015/05/031.jpg 640w, /wp-content/uploads/2015/05/031-300x225.jpg 300w, /wp-content/uploads/2015/05/031-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>巨大なターゲット市場</h3>

<p>この画像で言いたいことは、「Windows 10はスゲエよ！10億台のデバイスを繋げるんだ！儲かるぜ！」ということ（超意訳）。</p>

<div id="attachment_15039" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/041.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/041-640x480.jpg" alt="「儲かるぜ！」は、さすがに言ってなかったっけな。" width="640" height="480" class="size-large wp-image-15039" srcset="/wp-content/uploads/2015/05/041.jpg 640w, /wp-content/uploads/2015/05/041-300x225.jpg 300w, /wp-content/uploads/2015/05/041-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">「儲かるぜ！」は、さすがに言ってなかったっけな。</p></div>

<h3>スマート エンゲージメント</h3>

<p>あらゆるデバイスを統合した通知機能や、Cortanaによるインテリジェントな検索により、アプリケーションとユーザの接点をより緊密なものにします。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/051.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/051-640x480.jpg" alt="05" width="640" height="480" class="aligncenter size-large wp-image-15040" srcset="/wp-content/uploads/2015/05/051.jpg 640w, /wp-content/uploads/2015/05/051-300x225.jpg 300w, /wp-content/uploads/2015/05/051-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/061.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/061-640x480.jpg" alt="06" width="640" height="480" class="aligncenter size-large wp-image-15041" srcset="/wp-content/uploads/2015/05/061.jpg 640w, /wp-content/uploads/2015/05/061-300x225.jpg 300w, /wp-content/uploads/2015/05/061-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>（Windows 10がどこでも動くから）Windows 10アプリは一度書けばどこでも動く！HoloLensでも！</h3>

<p>Windows 10の目指す所は、あらゆるデバイスに対して一つのOSという「One Windows」というビジョンです。
それにより当然ながら、アプリストアも一つに統合されます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/071.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/071-640x480.jpg" alt="07" width="640" height="480" class="aligncenter size-large wp-image-15042" srcset="/wp-content/uploads/2015/05/071.jpg 640w, /wp-content/uploads/2015/05/071-300x225.jpg 300w, /wp-content/uploads/2015/05/071-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>そうなると、「一つのアプリがあらゆるデバイスで動作する」必要も出てきます。つまり、あらゆるスクリーンサイズで動作する…<strong>レスポンシブであることが望まれる</strong> ということです。
レスポンシブなWindows 10アプリの例を、楽天のポータルアプリ「楽天Gateway」で実演。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/081.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/081-640x480.jpg" alt="08" width="640" height="480" class="aligncenter size-large wp-image-15043" srcset="/wp-content/uploads/2015/05/081.jpg 640w, /wp-content/uploads/2015/05/081-300x225.jpg 300w, /wp-content/uploads/2015/05/081-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/091.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/091-640x480.jpg" alt="09" width="640" height="480" class="aligncenter size-large wp-image-15044" srcset="/wp-content/uploads/2015/05/091.jpg 640w, /wp-content/uploads/2015/05/091-300x225.jpg 300w, /wp-content/uploads/2015/05/091-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>あらゆるデバイスを統合するプラットフォームとしての、Windows 10のデモはまだまだ終わりません。
この画像が、マイクロソフトさんの言いたいことをよく表しているように思います。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/101.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/101-640x480.jpg" alt="10" width="640" height="480" class="aligncenter size-large wp-image-15045" srcset="/wp-content/uploads/2015/05/101.jpg 640w, /wp-content/uploads/2015/05/101-300x225.jpg 300w, /wp-content/uploads/2015/05/101-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>こんなすごい3Dマップも…</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/111.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/111-640x480.jpg" alt="11" width="640" height="480" class="aligncenter size-large wp-image-15046" srcset="/wp-content/uploads/2015/05/111.jpg 640w, /wp-content/uploads/2015/05/111-300x225.jpg 300w, /wp-content/uploads/2015/05/111-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>一行書くだけで実現できます。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/121.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/121-640x480.jpg" alt="12" width="640" height="480" class="aligncenter size-large wp-image-15047" srcset="/wp-content/uploads/2015/05/121.jpg 640w, /wp-content/uploads/2015/05/121-300x225.jpg 300w, /wp-content/uploads/2015/05/121-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>こういう、3Dモデルを作れるアプリも…</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/131.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/131-640x480.jpg" alt="13" width="640" height="480" class="aligncenter size-large wp-image-15048" srcset="/wp-content/uploads/2015/05/131.jpg 640w, /wp-content/uploads/2015/05/131-300x225.jpg 300w, /wp-content/uploads/2015/05/131-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>HoloLensがあればホログラム化！これはすごい！</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/141.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/141-640x360.jpg" alt="14" width="640" height="360" class="aligncenter size-large wp-image-15049" srcset="/wp-content/uploads/2015/05/141.jpg 640w, /wp-content/uploads/2015/05/141-300x169.jpg 300w, /wp-content/uploads/2015/05/141-207x116.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>Edgeの話も忘れずに</h3>

<p>Webエンジニアとしては、最近一番ワクワクする話題だった「Microsoft Edge」の発表。
もちろんこの基調講演でも大きく扱われていました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/15.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/15-640x480.jpg" alt="15" width="640" height="480" class="aligncenter size-large wp-image-15050" srcset="/wp-content/uploads/2015/05/15.jpg 640w, /wp-content/uploads/2015/05/15-300x225.jpg 300w, /wp-content/uploads/2015/05/15-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>EdgeHTMLという新しい描画エンジンにより、4,200以上の相互運用性を改善したそうです。</p>

<p>もちろん、JavaScriptの実行速度を向上させるのも忘れません。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/16.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/16-640x480.jpg" alt="16" width="640" height="480" class="aligncenter size-large wp-image-15051" srcset="/wp-content/uploads/2015/05/16.jpg 640w, /wp-content/uploads/2015/05/16-300x225.jpg 300w, /wp-content/uploads/2015/05/16-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Edgeの大きなウリをMicrosoftさん自身でまとめるとこうなります。
「定期的な更新」っていうのが個人的には一番ツボです（IEは後方互換性の問題があって、これができなかったからなあ…）。
あと、ChromeやFirefoxの拡張機能が（ちょっとした修正で）動くと噂の、「新しいエクステンションモデル」も気になります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/17.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/17-640x480.jpg" alt="17" width="640" height="480" class="aligncenter size-large wp-image-15052" srcset="/wp-content/uploads/2015/05/17.jpg 640w, /wp-content/uploads/2015/05/17-300x225.jpg 300w, /wp-content/uploads/2015/05/17-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>新機能「Hosted Web Apps」は、WebサイトをそのままWindowsアプリにしてしまえる機能。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/18.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/18-640x480.jpg" alt="18" width="640" height="480" class="aligncenter size-large wp-image-15054" srcset="/wp-content/uploads/2015/05/18.jpg 640w, /wp-content/uploads/2015/05/18-300x225.jpg 300w, /wp-content/uploads/2015/05/18-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>こんな感じのフライトシミュレーターアプリ（Webアプリ）も…</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/19.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/19-640x480.jpg" alt="19" width="640" height="480" class="aligncenter size-large wp-image-15053" srcset="/wp-content/uploads/2015/05/19.jpg 640w, /wp-content/uploads/2015/05/19-300x225.jpg 300w, /wp-content/uploads/2015/05/19-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>っと、デモを本格的にやる前に、プレイヤーとしての心の準備。
（最近のMicrosoftさん、エンジニアが好むゆるい雰囲気をよくよくわかってらっしゃる）</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/20.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/20-640x480.jpg" alt="20" width="640" height="480" class="aligncenter size-large wp-image-15055" srcset="/wp-content/uploads/2015/05/20.jpg 640w, /wp-content/uploads/2015/05/20-300x225.jpg 300w, /wp-content/uploads/2015/05/20-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>Windowsアプリにしてしまえば、よりネイティブな機能を利用できるので、<a href="https://www.microsoft.com/Microsoft-Band/en-us" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Microsoft Band</a>と連携して飛行機を操縦…なんてこともできちゃう。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/21.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/21-640x480.jpg" alt="21" width="640" height="480" class="aligncenter size-large wp-image-15056" srcset="/wp-content/uploads/2015/05/21.jpg 640w, /wp-content/uploads/2015/05/21-300x225.jpg 300w, /wp-content/uploads/2015/05/21-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>IoTも！機械学習も！</h3>

<p>見どころ多すぎて、書くの疲れてきたんですが、まだまだ行きます。</p>

<p>Windows 10をIoTに対応させる動きも活発ですが、Minnowboard MaxとRasberry Pi 2ですでに利用可能です。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/22.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/22-640x480.jpg" alt="22" width="640" height="480" class="aligncenter size-large wp-image-15057" srcset="/wp-content/uploads/2015/05/22.jpg 640w, /wp-content/uploads/2015/05/22-300x225.jpg 300w, /wp-content/uploads/2015/05/22-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>なんか偉い人らしいんですが、コスプレして出てきました。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/23.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/23-640x480.jpg" alt="23" width="640" height="480" class="aligncenter size-large wp-image-15058" srcset="/wp-content/uploads/2015/05/23.jpg 640w, /wp-content/uploads/2015/05/23-300x225.jpg 300w, /wp-content/uploads/2015/05/23-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>これは何のデモかというと、富士通と共同で開発した「牛管理アプリ」だそうで（コスプレしてた偉い人は「Connected Cow」という札を下げてました）、牛にセンサーを付けて集めたデータを、Azure Machine Learningを使って機械学習＆統計出力していました。なんでもありだな、マイクロソフト。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/24.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/24-640x480.jpg" alt="24" width="640" height="480" class="aligncenter size-large wp-image-15059" srcset="/wp-content/uploads/2015/05/24.jpg 640w, /wp-content/uploads/2015/05/24-300x225.jpg 300w, /wp-content/uploads/2015/05/24-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<h3>スクエニ来た！なんかすごいデモや！</h3>

<p>そろそろ最後の山場。</p>

<p>Windows 10のゲームとグラフィックの機能をプレゼンする段になり、スクウェア・エニックスの第2ビジネス・ディビジョンから田畑 端氏がいらっしゃいました。</p>

<div id="attachment_15060" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/25.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/25-640x480.jpg" alt="中央がスクウェア・エニックス 第2ビジネス・ディビジョン ディレクター・プロデューサー 田畑 端氏" width="640" height="480" class="size-large wp-image-15060" srcset="/wp-content/uploads/2015/05/25.jpg 640w, /wp-content/uploads/2015/05/25-300x225.jpg 300w, /wp-content/uploads/2015/05/25-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">中央がスクウェア・エニックス 第2ビジネス・ディビジョン ディレクター・プロデューサー 田畑 端氏</p></div>

<p>発表はふたつありました。</p>

<p>ひとつは「FINAL FANTASY AGITO on Windows 10」。</p>

<div id="attachment_15061" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/26.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/26-640x480.jpg" alt="年内ローンチって言った？言ったよね？え？予定？" width="640" height="480" class="size-large wp-image-15061" srcset="/wp-content/uploads/2015/05/26.jpg 640w, /wp-content/uploads/2015/05/26-300x225.jpg 300w, /wp-content/uploads/2015/05/26-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">年内ローンチって言った？言ったよね？え？予定？</p></div>

<p>もうひとつは、Windows 10に搭載されるDirectX 12、そしてNVIDIAも巻き込んで開発された、アートとテクノロジーを融合させたデモンストレーション。</p>

<p>このクオリティの3D CG（髪の毛の本数も、実際の人間と同じだそうです）を、リアルタイムに視点移動させることができます。思わず会場からはため息が漏れました。
これは、動画見ないと伝わらないかも…。</p>

<div id="attachment_15062" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/05/28.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/28-640x480.jpg" alt="WITCH CHAPTER 0 [cry]" width="640" height="480" class="size-large wp-image-15062" srcset="/wp-content/uploads/2015/05/28.jpg 640w, /wp-content/uploads/2015/05/28-300x225.jpg 300w, /wp-content/uploads/2015/05/28-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">WITCH CHAPTER 0 [cry]</p></div>

<p>ってことで動画貼っておきますね！</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/CGsJXINz0LQ" frameborder="0" allowfullscreen></iframe>

<h3>すべてのエンジニアとアプリのために</h3>

<p>基調講演の最後は、MacやLinuxでも動作することで話題になった「<a href="https://code.visualstudio.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Visual Studio Code</a>」や、Dockerを一例としてオープンソースコミュニティへの貢献を拡大させていることなど、Microsoftの開発者に向けた取り組みが、Windowsに囲い込もうとしていた以前とは全く異なることへの言及でした。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/29.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/29-640x480.jpg" alt="29" width="640" height="480" class="aligncenter size-large wp-image-15063" srcset="/wp-content/uploads/2015/05/29.jpg 640w, /wp-content/uploads/2015/05/29-300x225.jpg 300w, /wp-content/uploads/2015/05/29-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>

<p>「Empower every engineer」（すべてのエンジニアに力を与える）というフレーズは、このキーノートで一貫して取り上げられていましたが、聞いていたぼくとしてはその本気度が十分に伝わる内容でした。この記事を読んでいらっしゃる皆様にも、その雰囲気が少しでも伝われば幸いです。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/05/30.jpg" data-wpel-link="internal"><img src="/wp-content/uploads/2015/05/30-640x480.jpg" alt="30" width="640" height="480" class="aligncenter size-large wp-image-15064" srcset="/wp-content/uploads/2015/05/30.jpg 640w, /wp-content/uploads/2015/05/30-300x225.jpg 300w, /wp-content/uploads/2015/05/30-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></a></p>
]]></content:encoded>
			</item>
		<item>
		<title>JJUGのエキスパートが語るエンタープライズ・アーキテクチャの過去、現在、未来──SOAP・RESTからIoT・ウェアラブルまで</title>
		<link>/yoshikawa_t/14403/</link>
		<pubDate>Fri, 15 May 2015 00:00:38 +0000</pubDate>
		<dc:creator><![CDATA[吉川 徹]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[アーキテクチャ]]></category>
		<category><![CDATA[エンタープライズ]]></category>
		<category><![CDATA[クラウド]]></category>

		<guid isPermaLink="false">/?p=14403</guid>
		<description><![CDATA[連載： アプリケーションアーキテクチャ最前線 (4)特集企画「アプリケーションアーキテクチャ最前線」では、さまざまな視点からアプリケーションアーキテクチャをエキスパートたちに語っていただきます。今回は、エンタープライズ・...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/arch/" class="series-287" title="アプリケーションアーキテクチャ最前線" data-wpel-link="internal">アプリケーションアーキテクチャ最前線</a> (4)</div><p>特集企画「アプリケーションアーキテクチャ最前線」では、さまざまな視点からアプリケーションアーキテクチャをエキスパートたちに語っていただきます。今回は、エンタープライズ・アーキテクチャについて取り上げます。</p>

<p>HTML5・モバイル・IoT・ウェアラブルなどビジネス環境が激変する中、エンタープライズ・アーキテクチャはどういう課題を抱えていて、どうあるべきなのか。今回は、<a href="http://www.java-users.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JJUG (日本Javaユーザーグループ）</a>でご活躍中のお二人に話を伺うことにしました。</p>

<p><img src="/wp-content/uploads/2015/04/hx-21.jpg" alt="" width="600" height="354" class="aligncenter size-full wp-image-14671" srcset="/wp-content/uploads/2015/04/hx-21.jpg 600w, /wp-content/uploads/2015/04/hx-21-300x177.jpg 300w, /wp-content/uploads/2015/04/hx-21-207x122.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" /></p>

<p>アーキテクチャを主軸に第一線で活躍している<a href="https://www.gxp.co.jp/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">グロースエクスパートナーズ株式会社</a> 執行役員の鈴木雄介さんと、「流しのアーキテクト」を自称する<a href="http://www.architectus.co.jp/" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">株式会社アーキテクタス</a> 代表取締役の細川努さんを交えて、エンタープライズ開発出身の白石俊平編集長がさまざまなトピックスをぶつけていきます。</p>

<h2>XML Webサービスは今どうなったのか</h2>

<p><br>
<strong>白石：</strong>とりあえず、昔話から軽く聞いてみたいですね。まずは、エンタープライズ内のシステム間連携でよく話題に上がる、<a href="http://ja.wikipedia.org/wiki/SOAP_%28プロトコル%29" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">SOAP</a>とRESTについての現状について、どうお考えでしょうか？
<br><br>
<strong>鈴木：</strong>SOAPは下火だと思われがちですが、私の知る限り、今でもよく利用されています。RESTとJSONの組み合わせも当然よく使われているんですが、（SOAPは）<a href="http://ja.wikipedia.org/wiki/Web_Services_Description_Language" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">WSDL</a>で型定義ができるので、それなりにかたいシステム間連携だったりすると、WSDLがあるほうがコードの自動生成もできるし、非常に楽なのでよく使われています。</p>

<p><img src="/wp-content/uploads/2015/04/hx-131.jpg" alt="" width="600" height="370" class="aligncenter size-full wp-image-14680" srcset="/wp-content/uploads/2015/04/hx-131.jpg 600w, /wp-content/uploads/2015/04/hx-131-300x185.jpg 300w, /wp-content/uploads/2015/04/hx-131-207x128.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />　　 ▲グロースエクスパートナーズ株式会社 執行役員 鈴木雄介さん</span>
<br><br>
<strong>細川：</strong>とはいえ、SOAPの上位レイヤで規定されている<a href="http://en.wikipedia.org/wiki/WS-Reliability" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">WS-Reliability</a>だとか<a href="http://ja.wikipedia.org/wiki/WS-Security" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">WS-Security</a>などの様々なプロトコルは、あまり使われていない印象です。
<br><br>
<strong>白石：</strong>では、システム間連携などではプレーンなSOAPがよく使われているということですね。
<br><br>
<strong>鈴木：</strong>まあSOAPもRESTも用意する、というパターンが多いんじゃないでしょうか。オブジェクトモデルは同じで、それをSOAPでもJSONでも表現できるように設計しておくというパターンは、比較的多いような気がします。
<br><br>
<strong>細川：</strong>あと僕が気になるのは、スケーラビリティなんですよね。SOAPだとちょっと気になるのはやっぱりシリアライズ・デシリアライズの処理が重いし、トラフィックも増大するじゃないですか。そういった意味だとやっぱりREST + JSONのほうにもメリットがありますね。本来だったら使い分けみたいなところが重要なんですけど、いまだにSOAP一択という開発現場も多い。</p>

<p><img src="/wp-content/uploads/2015/04/hx-151.jpg" alt="" width="600" height="357" class="aligncenter size-full wp-image-14692" srcset="/wp-content/uploads/2015/04/hx-151.jpg 600w, /wp-content/uploads/2015/04/hx-151-300x179.jpg 300w, /wp-content/uploads/2015/04/hx-151-207x123.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />　　　▲株式会社アーキテクタス 代表取締役 細川努さん</span>
<br><br>
<strong>白石：</strong>どっちかに寄せちゃったほうが考えることが少なくて、楽ってこともあるかもしれないですね。
<br><br>
<strong>鈴木：</strong>一長一短…というとつまらない話になってしまいますが（笑）、実際のところそういう結論になっちゃいますね。HTML5が盛り上がっている現在、JavaScriptと相性が良いJSONにはすごく価値がある。一方で例えば、日付型をどう扱うんだとか、型定義やコードの自動生成がしづらいというJSONには苦手な分野もあるのですが、SOAPはそういう部分に強い。「SOAPはXMLだからダメ・ダサい」ということは、実際のシステム開発には全く当てはまらないと思いますよ。
<br><br></p>

<h2>エンタープライズアーキテクチャパターンは今も有効か</h2>

<p><br>
<strong>白石：</strong>アーキテクチャという点では、<a href="http://www.amazon.co.jp/dp/4798105538" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">マーティン・ファウラーのエンタープライズ アプリケーションアーキテクチャパターン</a>が昔は王道だったかとと思うんですが、それは今も有効なんでしょうか？
<br><br>
<strong>鈴木：</strong>あれは普遍的なものなので、時代が変わったからといって使えなくなってしまうようなものではありません。ただ、昔と比べると今はWeb API主導型のアプリケーションが主流になりつつありますね。クライアントのマルチデバイス化は当然エンタープライズでも相当重要なので、「サーバー側はAPIを提供するだけ」というスタイルに移行しつつあるのは、Webでもエンタープライズでもまったく変わらないと思います。
<br><br>
<strong>白石：</strong>具体的には、<a href="http://ja.wikipedia.org/wiki/JAX-RS" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">JAX-RS</a>を利用するとか？
<br></p>

<p><img src="/wp-content/uploads/2015/04/hx-18.jpg" alt="" width="600" height="390" class="aligncenter size-full wp-image-14678" srcset="/wp-content/uploads/2015/04/hx-18.jpg 600w, /wp-content/uploads/2015/04/hx-18-300x195.jpg 300w, /wp-content/uploads/2015/04/hx-18-207x135.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>鈴木：</strong>JAX-RSもありますし、JSON用のバインディングAPIもJava EE 7で標準化されたので、何の違和感もなく使えますね。
<br><br>
<strong>細川：</strong>エンタープライズ アプリケーションアーキテクチャパターンは非常に洗練されていたのですが、実際のエンタープライズ・アプリケーションはもっと泥臭いです（笑）。
例えば<a href="http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%83%BB%E3%83%95%E3%82%A1%E3%82%A6%E3%83%A9%E3%83%BC" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">マーティン・ファウラー</a>の提唱するモデルだと、プレゼンテーションレイヤからデータレイヤまでが3、4層ぐらいなんですが、実際はビジネスロジックだけで3層以上に分けたりとか、ビジネスロジックとプレゼンテーションの間にいろいろ挟んだりとか、端から端まで数えると下手したら10層ぐらいあるものも実際のプロジェクトでは山ほどありました。
<br><br>
<strong>白石：</strong>僕もそういうプロジェクトをやったことがあります。なんか別のメソッドを呼び出してるだけのメソッドが大量にあったり（笑）。
<br><br>
<strong>細川：</strong>そうそう。なので、どちらかというとほんとに綺麗なレイヤリングはできてなかったというのが現実ですね。最近、６〜７年以前につくられた数十万ステップくらいのシステムをいくつか実際に解析してみたんですけど、結構面白い結果が出たんですよ。サーバーサイドJava（JavaEE）としては最新ではなく、まだJ2EEと呼ばれていた頃のシステムです。どのシステムも、一番複雑度が高いのはビューとデータアクセス（永続化）、アーキテクチャ共通系のモジュールです。ビジネスロジックの部分は量は膨大なんですけど、複雑度自体は比較的シンプルなんです。 
<br><br>
何が言いたいかというと、古い世代のサーバーサイドJavaは、ビューとアーキテクチャ制御に作り込みが必要で、そこのところが本当に大変だった。例えば、ビューのところのバリデーションなんかは、かなり作り込みが必要で、簡単な画面作るのも相当手間がかかってたんですよね。結局は、<strong>かつてのJava EE（J2EE）って、エンタープライズ系プログラマーが本来集中すべき業務上のロジックにあんまり集中できていなくて、もっと簡単にできるはずのところに手間がかかっていた</strong>のが現実だったんじゃなかったかなと。
<br><br>
<strong>白石：</strong>ほんとにそうですよね。オブジェクトの変換とか、別のメソッド呼び出すだけとか、<a href="http://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3" target="_blank" data-wpel-link="external" rel="follow external noopener noreferrer">ファサード</a>作ってそこに一生懸命集めるだけとかやっていて、なにやってるんだろうこれは…とか思っていました。
<br><br>
<strong>細川：</strong>以前はそうでしたね。そのレガシーなところが今はみんなの足を引っ張ってる（笑）。現在は、それがどれだけ良くなってるか、というところですよね。
<br></p>

<p><img src="/wp-content/uploads/2015/04/hx-16.jpg" alt="" width="600" height="343" class="aligncenter size-full wp-image-14675" srcset="/wp-content/uploads/2015/04/hx-16.jpg 600w, /wp-content/uploads/2015/04/hx-16-300x172.jpg 300w, /wp-content/uploads/2015/04/hx-16-207x118.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>白石：</strong>今の流れをまとめると、ビューの複雑なところっていうのが、だんだんクライアント側に寄ってきていて、ようはHTML5でリッチクライアント化されてきて、サーバー側はAPIを提供しているだけになっていると。
<br><br>
<strong>鈴木：</strong>大きくはそうです。ただ、エンタープライズシステムの場合、とにかくシステム間連携が多くて、1つの企業の中でいろんなシステムがあって、ほとんどのシステムが関連付いているのが当然になっています。そうするとクライアント側からするといろんなシステムにいちいちログインして使うのは面倒くさいので、どうやってシンプルに使うのかというのが今の大きなテーマになっていると思います。サーバー間で連携したり、クライアント側でアグリゲーションしたりというのが今の課題としてあって、エンタープライズの場合は、そこがシンプルにならないので、それがひとつの前提になっています。
<br><br>
<strong>白石：</strong>なるほど。そのシステム間連携がさきほどおっしゃっていたようにXMLベースだったり、RESTだったりという感じですね。
<br><br>
<strong>鈴木：</strong>はい。企業って、いろんなユーザーといろんなシステムがあるので、いわゆる一般コンシューマー向けのECサイトのようなシステムもあれば、例えば人事システムみたいなものもありますよね。人事システムだと、人事部だけが使うのでユーザーが10人しかいなかったり、でも社員数10万人を支える人事システムっていうと相当でかいっていうものだとか。じゃあその2つが同じアーキテクチャで、同じ作り方でいいんですかっていうと全然そうじゃないですよね。
<br><br>
企業の中のさまざまなシステムの中で、HTML5に合うものもすごく増えてますし、HTMLの可能性が広がったことでやれることもすごく増えましたが、一方でそれが銀の弾丸ではないです。ここはRESTでつくったらいいよねとか、ここはWSDLがちゃんとあってSOAPでやったほうがいいよねっていうのがある。そこは全体の中での選択してやっていけばよいことです。エンタープライズの人って古めかしい人印象があるかもしれないですけど、新しいことも古いこともやらきゃいけないので、そういう意味ではちゃんとまともにやっている人は、それを両方うまくバランスよくやっていますね。</p>

<h2>エンタープライズとモバイル</h2>

<p><br>
<strong>白石：</strong>最近のエンタープライズ業界に疎くて、初心者的な質問で申し訳無いのですが、モバイルをエンタープライズで使うというのはもうかなり普通に行われていることなんでしょうか。
<br><br>
<strong>鈴木：</strong>そうですね。モバイル、タブレット、PC、専用の機器とか、何を何に使うといいよねっていうユースケースはちゃんと考えなきゃいけないですが、モバイルはものすごく重要なツールとして使われています。
<br><br>
<strong>白石：</strong>エンタープライズでモバイルといえば結構HTML5が使われているという話を聞くのですが、実際そうなんですか？コンシューマ向けだと、ネイティブアプリが全盛です。</p>

<p><img src="/wp-content/uploads/2015/04/hx-19.jpg" alt="" width="600" height="369" class="aligncenter size-full wp-image-14679" srcset="/wp-content/uploads/2015/04/hx-19.jpg 600w, /wp-content/uploads/2015/04/hx-19-300x185.jpg 300w, /wp-content/uploads/2015/04/hx-19-207x127.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>鈴木：</strong>そもそもモバイルという文脈で求められる操作性とか機能が、エンタープライズの場合はそんなにネイティブでやらなくてもいいようなものが多いので、HTML5がフィットしてるんじゃないかと思います。例えば、ゲームはネイティブアプリがいいといわれますが、別にあそこまでビジュアル的なものとか、細やかな操作性はあんまり求められることはないと。
<br><br>
なので、HTML5でやるっていうのは多いんじゃないでしょうか。Webアプリであれば、リリースも楽ですしね。去年ぐらいまでは写真とか音声とかでいろいろやろうとすると、まだまだHTML5では制約が多いということでネイティブアプリという選択もありましたが、そうした制約もブラウザが進化してきてだんだん問題にならなくなってきています。
<br><br>
<strong>白石：</strong>なるほど。ちなみに、そうしたHTML5で書かれた業務アプリは、ハイブリッドアプリとしてインストールする形が多いのか、それともWebサイトとしてURLでアクセスする形で作るんでしょうか。
<br><br>
<strong>鈴木：</strong>それは両方あります。どちらにも利点があるので。</p>

<h2>クラウドがアーキテクチャに与えた影響は？</h2>

<p><br>
<strong>白石：</strong>これも初心者的な質問で恐縮です。クラウドがエンタープライズのアーキテクチャに与えた影響はありますか。
<br><br>
<strong>鈴木：</strong>もちろんあります。クラウドができたことで一番大きかったのは、PaaSという概念ができたことですね。あるニーズに特化したものっていうのは共有化されたものが使われるべきだっていう概念がはっきりしたのはPaaSのおかげです。例えばAWSのラインナップを見て貰うとわかるんですが、CDNありますねだとか、ロードバランサありますねだとか、ストレージ、サーバーノード、認証認可とか、メールの配信サービスとか、ああいうものはPaaSとしてみんなが共有して使うべきだという概念ができた。
<br><br>
なので、そういうプラットフォームを用意してその上にアプリケーションを作って、アプリケーションはUIを含めてそれだけに特化して、なるべくプラットフォームの機能をうまくつかってやっていくていうアイデアは、今のエンタープライズでも浸透している考え方だと思います。</p>

<p><img src="/wp-content/uploads/2015/04/hx-17.jpg" alt="" width="600" height="394" class="aligncenter size-full wp-image-14677" srcset="/wp-content/uploads/2015/04/hx-17.jpg 600w, /wp-content/uploads/2015/04/hx-17-300x197.jpg 300w, /wp-content/uploads/2015/04/hx-17-207x136.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>細川：</strong>開発者視点でいうと、開発者ができる領域が増えてきましたね。従来だと、サーバ構築とソフトウェア開発は別々のものでしたが、プログラマーがだんだんとクラウドを前提にして、環境を構築するようになってきた。そうすると、同時にパフォーマンスだとかセキュリティだとかをエンジニアが自分で考えなきゃいけない時代になってきていて、Webエンジニアだとかエンタープライズエンジニアとかの区別はなくなってきている。そういう意味では、フルスタックで両方できなきゃまずいんじゃないでしょうか。
<br><br>
<strong>鈴木：</strong>もうそれはエンタープライズでも間違いなくそうですね。
<br><br>
<strong>細川：</strong>もうひとつの特徴としては、昔は大規模＝エンタープライズということが多かったんですが、今ではコンシューマー向けとかゲームだとか、そっちのほうがより大規模なんですよね。それを実現しているのがやっぱりクラウドなのかと思っています。そういった意味でも、これからはWebエンジニアこそ大規模を得意にならなきゃいけないんじゃないかと。サーバーとクライアントのメッセージの単位なんかもパフォーマンスに大きく影響するので、そういったところも、かなりノウハウを積まないといけなくなってきています。</p>

<h2>エンタープライズ・アーキテクチャの未来像</h2>

<p><br>
<strong>白石：</strong>IoTとかウェアラブルとかを見据えて、今後どういうふうにエンタープライズ・アーキテクチャが変わっていくべきか、ご意見はありますか？
<br><br>
<strong>鈴木：</strong>IoTを真剣にやろうとすると、先ほど細川さんが言っていた大規模っていうのがエンタープライズに戻ってくるんですよね。対応するデバイスの数が、今まではユーザーが数万人ですんだのが、億になるかもしれない。例えば、すべてのダンボール箱にチップがついたらどうなるんだろうっていう世界を考える。そうすると日本で流通しているダンボール箱は何箱あるんだとか、ものすごいクライアントの数になってしまう。そうなってくると、エンタープライズがまた大規模な性能を頑張らないといけなりますね。
<br><br>
例えば、わかりやすい例でB2Bのケースを考えると、トラックをトレースする仕組みを作ることになったとします。じゃあ全国にあるトラックを全台管理しますとなったときに、全部で何台あるのか。1台のトラックにセンサーがいくつついているのかということになると、センサーが車輪それぞれにあって、それぞれのタイヤのすり減り方を計測して、運転手が寝てるんじゃないかというのを監視するセンサーがあって、速度・加速度をとるセンサーがあって…というようにトラックにすごい数のセンサーがある。</p>

<p><img src="/wp-content/uploads/2015/04/hx-22.jpg" alt="" width="640" height="353" class="aligncenter size-full wp-image-14690" srcset="/wp-content/uploads/2015/04/hx-22.jpg 640w, /wp-content/uploads/2015/04/hx-22-300x165.jpg 300w, /wp-content/uploads/2015/04/hx-22-207x114.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />
<br>
そして、トラックを1万台管理します、データを500msごとに取るとすなると、ものすごい数になる。つまり、B2BでIoT、ウェアラブルというのはB2Cのスケーラビリティをエンタープライズでもう1回頑張らないといけないということになる。今、Webの人が大規模で頑張っているテクノロジーセット、例えば大量のストリームを処理しながらイベントドリブンでやるっていうのは昔からエンタープライズにあって、それがWeb側ですごく実用化されて使われていたのが、またエンタープライズに戻ってくる。そういう流れが未来にはやってくるんじゃないかなと考えています。
<br><br>
<strong>白石：</strong>なるほど。ちなみに、もう実際にIoTの案件とか発生しているんでしょうか。
<br><br>
<strong>鈴木：</strong>相談はかなり増えてきてますね。まだ実証実験ぐらいが多いという感覚ですが。今は車がうまくいっていて、ホンダの事例がわかりやすいです。日本中の車のブレーキの発生情報を集めてるんですけど、それを解析すると事故が発生しやすい曲がり角がわかるんですよね。みんながたくさんブレーキを踏んでいる曲がり角がどこかっていうのを提供しているんですよ。そしたらそれを元に道路の信号とか標識とかを改善するってことをやっています。</p>

<h2>まとめ</h2>

<p><br>
<strong>白石：</strong>本日は、エンタープライズ・アーキテクチャについて様々なご意見をいただき、誠にありがとうございました。最後に、読者に向けて一言お願いします。</p>

<p><img src="/wp-content/uploads/2015/04/hx-20.jpg" alt="" width="600" height="387" class="aligncenter size-full wp-image-14681" srcset="/wp-content/uploads/2015/04/hx-20.jpg 600w, /wp-content/uploads/2015/04/hx-20-300x194.jpg 300w, /wp-content/uploads/2015/04/hx-20-207x134.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>鈴木：</strong>自分たちの生活を考えると、やっぱりエンタープライズ業界の会社が自分達の生活を支えてるわけじゃないですか。それがより便利になったり、役立つようになったり、世の中が進化するっていうのはとても大事なことだと思うんですよ。なので、それが実現されるためにはどうしたらいいのかっていうときに、エンタープライズとかWebとかそういう区切りはどうでもよくて、どうやれば本当に価値がでるのか、そういうのを考えるのが面白い。
<br><br>
ただ、社会基盤として変えてはいけないところもエンタープライズにはどうしてもあるので、それをどのように変えずに、より新しいことにトライしながら今あるものの価値をより高めるのかというところが大事ですね。なので「エンタープライズwww」という風潮はよろしくないと思います（笑）。</p>

<p><img src="/wp-content/uploads/2015/04/hx-211.jpg" alt="" width="600" height="381" class="aligncenter size-full wp-image-14682" srcset="/wp-content/uploads/2015/04/hx-211.jpg 600w, /wp-content/uploads/2015/04/hx-211-300x191.jpg 300w, /wp-content/uploads/2015/04/hx-211-207x131.jpg 207w" sizes="(max-width: 600px) 100vw, 600px" />
<br>
<strong>細川：</strong>2点あって、ひとつは、今までのエンタープライズ開発は、ユーザーの言われたものを作るという風潮が多かったんですが、今後はユーザーと一緒につくるっていうのは大事になってくるんじゃないかと考えています。そういう意味ではエンタープライズ業界もWeb業界と同じようにUXとか、よりユーザーが求めるものは何かというところを柔軟に対応してかなきゃいけない。エンタープライズもWebに学ばなきゃいけないということ。
<br><br>
もうひとつは、今後、変化がたくさんあって、それに対応するためにエンタープライズ側、Web側が両方対応しないと対応できないんじゃないかなと思う。これらの技術の変化に対応できるようにフルスタック、両方できるようなエンジニアが増えてくると心強いんじゃないでしょうか。</p>
]]></content:encoded>
		
		<series:name><![CDATA[アプリケーションアーキテクチャ最前線]]></series:name>
	</item>
		<item>
		<title>EspruinoではじめるWeb開発者のWoT</title>
		<link>/rockymanobi/13648/</link>
		<pubDate>Mon, 16 Mar 2015 00:00:06 +0000</pubDate>
		<dc:creator><![CDATA[興梠敬典]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[JS Board]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=13648</guid>
		<description><![CDATA[連載： IoTxWeb (8)IoT/WoTという言葉があちこちから聞かれるようになって久しいですが、最近は言葉だけではなくなってきた気がします。新しいマイコンボードや、XXセンサーのデータをクラウドに溜めて○○する商品...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/iot_web/" class="series-240" title="IoTxWeb" data-wpel-link="internal">IoTxWeb</a> (8)</div><p>IoT/WoTという言葉があちこちから聞かれるようになって久しいですが、最近は言葉だけではなくなってきた気がします。新しいマイコンボードや、XXセンサーのデータをクラウドに溜めて○○する商品などが続々と発売され、IoT/WoTのバックエンド専用のサービスまで登場してきています。</p>

<p>これから出てくるサービスやツールは、画面の中からの情報だけでなく、画面の外からの情報を使うことができそうです。逆に画面の外に影響を及ぼすようなことも可能になるかもしれません。解決できる課題の幅がグンと広がってきそうな予感がします。</p>

<p>加えて、先日の<a href="https://html5experts.jp/bathtimefish/13109/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">村岡さんの記事</a>でも紹介されていたように、JavaScript等のWeb技術で開発できるマイコンボードも続々と登場し、IoT/WoTはWeb開発者にとっても身近なものになりつつあります。</p>

<p>今回はその中でもシンプルで扱いやすい、<strong>Espruino Board</strong>を使い、JavaScriptでIoT/WoTに挑戦したいと思います。</p>

<p>ボードを購入するところから、温度センサの値を読み取る方法、Wifiに接続する方法について、ステップバイステップで解説していきます。「IoT/WoT、やってみたいけど敷居が高くてできない！」というWeb開発者の皆様に、一歩を踏み出すお手伝いができれば幸いです。</p>

<h2>Espruino Boardとは</h2>

<p>冒頭で紹介したとおり、<a href="http://www.espruino.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino Board</a>は、JavaScriptを利用してハードウェア制御ができるマイコンボードです。ざっくり言ってしまえば、<a href="http://www.arduino.cc/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Arduino</a>のJavaScript版のようなもので、まずはこの理解でいきましょう。</p>

<p>「とりあえずJSでハード制御してみる」を実現するには最も簡単で、かつ財布にも優しい選択肢とも言えるマイコンボードです。筆者もこれでIoT/WoTの第一歩を踏み出しました。</p>

<p><img src="http://www.espruino.com/img/ESPRUINOBOARD.jpg" width="200" alt="Espruino" class="alignnone" /></p>

<p>他の多くのマイコンボードと違い、<a href="https://github.com/espruino/Espruino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">自前でJavaScriptの実行環境を実装</a>しているところも熱いポイントです。</p>

<p>また、Espruinoの今後の展開として注目されている、Espruino Picoについても触れておきます。Espruino Picoは、今回紹介するEspruino Boardよりもさらに小さい基盤(USBメモリサイズ)で、Espruino Board同様にJavaScriptでの制御が可能です。2015年春にプレオーダー分が出荷予定となっています。</p>

<p><img src="http://www.espruino.com/images/pico.jpg" width="600" height="267" alt="Espruino Pico" class="alignnone" /></p>

<h3>どうしてJavaScript?</h3>

<p>ただWeb開発者が知っている言語だから、というわけではなく、筆者はマイコン上でセンサー等のハードウェアを制御する言語として、JavaScriptは適した言語だと考えています。主な理由としては、イベントドリブンな記述がしやすいことと、setTimeoutやsetIntervalを使って、ループ処理を非同期に逃がすことができることが、挙げられます。</p>

<p>実際にマイコンボードを使ったサービスを運用してみると、マイコンボードにはやらなければならないことが意外とたくさんあることに気づきます。センサーの値を読みとってPOSTするだけでなく、センサー自体の死活監視のためのリクエストを投げるといった、運用のための処理や、Too Muchなリクエストの発生を避けるためにデータを間引いたりする処理がどうしても必要になります。</p>

<p>一例として、多くの言語がサポートする、無限ループを回しつつ、sleepで時間調整をする方法で、以下のような処理を実装することを考えてみましょう。</p>

<ul>
<li>5秒に１回センサーの値を読み込む</li>
<li>1分に１回はマイコン自体の死活監視用にPingリクエストを投げる</li>
</ul>

<p>普通に実装すると、5秒のスリープ処理の入った無限ループを作り、その中でセンサー値の読み取りを毎回実行します。Pingリクエストについてはカウンタ等を用意してIF分を切って実行有無を判定する、という実装になりそうです。やることが増えてくると、困りそうですね。</p>

<p>一方、JavaScriptでは2つのsetIntervalにそれぞれの処理を実装してしまえば事足ります。マイコンボードのようなpoorな環境でこれができるのは、Espruinoを始めとするJavaScriptで開発できるマイコンボードの強みであると筆者は考えています。</p>

<p>メインのテーマではないのでこの辺りで…</p>

<h2>Espruinoを使い始める</h2>

<p>では早速、Espruinoを使ってみましょう。
ボードを購入するところから、JavaScriptでLEDを光らせるところまでを、以下の流れで解説していきます。</p>

<ul>
<li>必要物品を調達する</li>
<li>Web IDEをインストールする</li>
<li>ファームウェアをアップデートする</li>
<li>JavaScriptコードを実行する</li>
</ul>

<h3>必要物品を調達する</h3>

<p>IoT/WoTの&#8221;T&#8221;はThings、つまりモノです。何をするにもまずは物理的にモノを購入する必要があります。お金もかかる上に届くまでに時間もかかります。新しいツールをタダでダウンロードして、すぐに試せる環境に慣れ親しんだソフトウェア開発者にとっては、最初のハードルかもしれません。</p>

<p>でも大丈夫です。すぐに慣れて、いろいろ買いあさるようになると思います。</p>

<h5>最低限必要になるのはコチラです。</h5>

<ul>
<li>Espruinoボード</li>
<li>マイクロUSBケーブル(Aタイプ オス/ マイクロBタイプ オス)</li>
</ul>

<h5>そしてWeb開発者であれば必ずWifiに繋ぎたくなるはずなので、以下も用意しておきます。</h5>

<ul>
<li>CC3000 Wifi モジュール</li>
</ul>

<p>Espruinoボードは国内販売されていないので、<a href="http://www.espruino.com/Order#distributors" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">公式サイト</a>にある販売サイトへのリンク一覧の中から何れかを選んで購入します。</p>

<p>オススメはEspruinoとCC3000の両方を取り扱っているAdfruitです。ここで一緒に買うことで、送料を節約することができます。</p>

<ul>
<li><a href="https://www.adafruit.com/products/1887" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino</a></li>
<li><a href="https://www.adafruit.com/products/1469" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CC3000 Wifi Module</a></li>
</ul>

<p>ちなみに筆者は<a href="http://www.seeedstudio.com/depot/Espruino-board-p-1715.html?cPath=6_12" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">seed studio</a>より購入しました(当時、AdfruitはEspruinoを取り扱っていませんでした）。送料に積む金額によって配送期間が変わるようです。無料だと2週間程度、30ドル払ったら4日で届きました。</p>

<p>補足 : 公式で推奨されているモジュールとは異なりますが、CC3000については国内販売されている<a href="http://strawberry-linux.com/catalog/items?code=18253" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">コチラのモデル</a>でも動作することを確認しています。筆者の手元での確認なので保証することはできませんが、国内で調達できるので、コチラを利用するのもアリです。</p>

<h3>Web IDEのインストール</h3>

<p>Espruinoの上で自分の書いたJavaScriptコードを実行するには、本家から提供されているWeb IDEを使用します。Espruinoとの接続や、ファームウェアのアップデート等もサポートしているので、まずはコレを導入します。Chrome Extensionとして提供されているので、<a href="https://chrome.google.com/webstore/detail/espruino-web-ide/bleoifhkdalbjfbobjackfdifdneehpo" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Chrome Webストア</a>からインストールしましょう。</p>

<h4>EspruinoとPCを接続</h4>

<p>EspruinoのマイクロUSB端子とPCのUSB端子を繋ぎ、WebIDEを立ち上げます。立ち上がったら、画面左上の接続ボタンをクリックします。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/f8c8e693-21a1-3f93-50c8-63df11dbd26c.png" alt="image" /></p>

<p>ダイアログが表示されるので、接続するシリアルポートを選択します。OSやマシンによって選択すべき項目が異なるため、下記を参考に選択します。</p>

<ul>
<li>Windowsの場合 :  COM# のうち、数字が一番大きいもの</li>
<li>Mac OSXの場合 :  /dev/tty.usbmodem1234 (1234はマシン依存)</li>
<li>Linuxの場合 :  ttyACM0/ttyUSB0</li>
</ul>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/0e6e19e3-9a03-d1d9-6912-6bd93343d233.png" alt="image" /></p>

<p>Web IDEの左側のコンソールにConnectedと表示され、Espruinoのアスキーアートが表示されれば成功です。</p>

<h4>ファームウェアのアップデート</h4>

<p>JavaScriptのコードを書く前に、まずはEspruinoのファームウェアをアップデートしておきます。出荷時期によってこの作業の要否は分かれますが、自前でJavaScriptの実行環境を実装している関係上、ファームウェアが古いと思わぬエラーが発生したりもするので、アップデートしておくことをおすすめします。</p>

<ul>
<li>WebIDEの右上の歯車アイコンをクリックして、設定画面を開きます。</li>
<li>設定メニューのFLUSHERを選択し、Flush Firmwareボタンをクリックします。ダイアログが表示されます。</li>
</ul>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/5942abcc-0474-8f93-d16a-4a659c61f6e3.png" alt="image" /></p>

<ul>
<li>ダイアログの指示通り、EspruinoのBTN1(USBコネクタから遠い方のボタン)を押しながら、RSTボタン(USBコネクタ寄りのボタン）を押します。</li>
<li>ボード上の青色のLEDがゆっくり点滅するはずです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/51384/334aeaa8-6020-71e4-8749-d387b27aa552.png" alt="image" /></li>
<li>ダイアログのNEXTをクリックし、デバイスを選択します。</li>
<li>ファームウェアの更新が始まり、ボード上のLEDが激しく点滅を繰り返します。</li>
<li>完了後、ダイアログのNEXTボタンをクリックした後、ボードのRSTボタンを押します。</li>
<li>再びWebIDE左上の接続ボタンをクリックして、Espruinoと接続します。</li>
</ul>

<p>以上でファームウェアのアップデートは終了です。</p>

<h3>JavaScriptコードを実行する</h3>

<p>いよいよEspruino上でJavaScriptコードを実行します。
Espruinoボード上のLEDを光らせてみましょう。
WebIDEの左側のコンソールに、下記コードを打ち込んでEnterを押してみます。</p>

<p></p><pre class="crayon-plain-tag">LED1.write(true);</pre><p></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/e5838ac4-837a-c373-b024-7d75660b9b17.png" alt="image" /></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/2b94ae62-0248-9787-99e8-b8b9694710a3.png" alt="image" /></p>

<p>Espruinoボード上の赤いLEDが点灯しました。
続いて下記を入力してEnterを押します。</p>

<p></p><pre class="crayon-plain-tag">LED1.write(false);</pre><p></p>

<p>予想通り、LEDを消灯することができます。簡単ですね。</p>

<p>こんな風に対話的にプログラムを実行することができるのは、Espruinoの一つの特徴と言えると思います。Webインスペクタのコンソールのような感覚でコードを動かして試すことができるので、デバックや開発途中のお試し実行に重宝しています。</p>

<p>さて、ここでプログラムについても少し解説をしておきます。</p>

<p></p><pre class="crayon-plain-tag">LED1.write(true);</pre><p></p>

<p>Espruinoに備え付けられているLEDやGPIOのピンは、ビルトインのグローバルオブジェクトとして、あらかじめ登録されています。上記のコードで言うとLED1がそれにあたります。このオブジェクトに対して、書き込み(&#8216;write&#8217;)や読み込み(`read&#8217;)の命令を投げることで、LEDやピンの入出力をコントロールすることができる、という仕組みです。</p>

<h2>Espruinoで温度を計る</h2>

<p>前項までで、Espruinoの上でJavaScriptを実行する準備が整いました。ここからはセンサ等と組み合わせてEspruinoを使う方法について解説します。まずは温度センサ「DS18B20」を使い、Espruinoで温度を計ってみましょう。</p>

<p>なお、この段階からはハンダ付け等の電子工作的な作業が必要になります。筆者が以前に書いた記事になりますが、以下を参考に、Espruinoをセンサー等のモジュールに繋げる準備を行います。（ピンヘッダを取り付ける、と聞いてピンとくる方は読み飛ばしてもらって問題ありません）</p>

<ul>
<li><a href="http://rocky-manobi.com/blog/?p=224" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruinoにセンサーとかをつなげるために必要な準備</a></li>
</ul>

<p>また、ブレッドボードやワイヤー等、電子工作の基礎的な事柄については、以下の記事にて非常に丁寧にまとめられています。</p>

<ul>
<li><a href="https://html5experts.jp/youtoy/12029/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">初心者でもわかる・できる！Arduinoを使った初めての電子工作実践</a></li>
</ul>

<h3>調達</h3>

<ul>
<li>温度センサ「DS18B20」: おなじみ<a href="http://akizukidenshi.com/catalog/g/gI-05276/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">秋月電子</a>さんより通販、店頭にて購入することができます</li>
<li>4.7kΩ抵抗 : 通販であればこちらも<a href="http://akizukidenshi.com/catalog/g/gR-25472/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">秋月電子</a>さんより購入することができます。ただし、100本単位の購入になってしまうので、そこが気になるという方は<a href="http://www.sengoku.co.jp/shop_01.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">千石電商秋葉原本店B1F</a>等のバラ売りをしているお店で購入しましょう。</li>
</ul>

<h3>結線</h3>

<p>温度センサ「DS18B20」には3つの端子がついています。それぞれの役割は、平らな面をこちらに向けて左から、GND、DATA、Vddとなります。GNDはグランドと結線するための端子、Vddは電源をとる端子です。温度のデータはDATA端子から読み取ることができます。</p>

<p>次のように結線してみましょう。</p>

<ol>
<li>温度センサのDATAとVddを4.7kΩの抵抗で繋ぐ。</li>
<li>下記表の通り、Espruinoと温度センサを繋ぐ。</li>
</ol>

<table>
<thead>
<tr>
  <th>Espruinoのピン</th>
  <th>温度センサの端子</th>
</tr>
</thead>
<tbody>
<tr>
  <td>GND</td>
  <td>GND</td>
</tr>
<tr>
  <td>A1</td>
  <td>DATA</td>
</tr>
<tr>
  <td>3.3v</td>
  <td>Vdd</td>
</tr>
</tbody>
</table>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/04801128-2618-ab2f-bfdf-3039e4b56850.png" alt="image" /></p>

<p>【写真だとこんな感じです】</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/3366c7cf-f02f-9f81-34aa-6ae13171ec75.png" alt="image" /></p>

<h3>プログラム</h3>

<p>結線ができたら、次はプログラムです。先ほどはWeb IDEの左側のコンソールを使いましたが、今回は複数行のプログラムを実行する必要があるので、Web IDE右側のエディタを利用します。</p>

<p>以下のプログラムをWeb IEDの右側のエディタに記述してみましょう。温度センサから読み取った値を、1秒毎にコンソールに出力するプログラムです。</p>

<p></p><pre class="crayon-plain-tag">// センサーモジュールをセットアップ
var ow = new OneWire(A1);
var sensor = require("DS18B20").connect(ow);
// 1秒ごとに温度を表示
setInterval(function() {
  // getTemp メソッドで温度を取得
  console.log(sensor.getTemp());
}, 1000);</pre><p></p>

<p>記述したプログラムを実行するには、書き込みボタンをクリックします。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/7f65ff42-3a83-f2bd-aee3-3ee159c4837c.png" alt="image" /></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/33ef5c82-e498-ad31-1eea-e608c8ba0178.png" alt="image" /></p>

<p>温度センサの値がコンソールに出力されました。センサー部分を指で摘んだり、コタツの中にセンサを入れたりすることで、温度の変化を確認することができます。</p>

<p>ここでプログラムについて解説します。</p>

<p>ポイントは3行目の<code>require("DS18B20")</code>と7行目の<code>sensor.getTemp()</code>です。
7行目の<code>sensor.getTemp()</code>の命令一つで温度センサの値[℃]が取得できていることに注目してください。
本来、温度センサを始めとする電子部品から読み取れるのは、電圧の値です。ここから意味のある値、つまり温度を取得するには、センサの仕様を元に、電圧値に対して何らかの計算をしてやらなければなりません。
上記プログラムでは、最初にrequireしたDS18B20モジュールがこの辺りの計算を全て隠蔽してくれているので、末端のプログラムでは<code>getTemp()</code>の命令一つで温度値を取り出すことができるようになっています。下図のようなイメージです。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/c789ed26-209f-aea8-5d9a-51a5145495b1.png" alt="image" /></p>

<p>Espruinoでは各種ハードウェアに対応するモジュールが多数提供されており、電圧値等の生データを意識せずに、センサーの値を取得することができるようになっています(<a href="http://www.espruino.com/Modules" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">モジュール一覧</a>)。</p>

<p>そしてこれらのモジュールはオープンソースとして<a href="https://github.com/espruino/EspruinoDocs" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">EspruinoDocs</a>というリポジトリで管理されています。ここにプルリクエストを送ることで、誰でもモジュールを開発/公開することができます。筆者も最近、IoT向けプロトコルといわれている<a href="http://www.espruino.com/MQTT" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">MQTTのクライアントモジュール</a>に機能追加を行い、取り込んでもらいました。自分で自分の好きなプロダクトに手を加えられるのは、オープンソースの醍醐味ですね。</p>

<h3>Web IDEについてもう少し</h3>

<p>とりあえず温度センサの値を取得することに成功したので、ここでWeb IDEの使い方について、もう少し触れておきます。</p>

<h4>コンソールとエディタの併用</h4>

<p>例えば先ほどの温度センサのプログラム実行中に、コンソールにて下記プログラムを実行してみます。</p>

<p></p><pre class="crayon-plain-tag">clearInterval();</pre><p></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/2efee643-ed4e-776e-aacb-77d154e9f6d2.png" alt="image" /></p>

<p>1秒毎に行われていた温度センサの値のコンソール出力が止まります。
続いて、温度を取得する命令を実行してみましょう。</p>

<p></p><pre class="crayon-plain-tag">sensor.getTemp();</pre><p></p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/243dc0ad-34d9-9715-e5a6-b9917471880d.png" alt="image" /></p>

<p>温度が表示されました。</p>

<p>エディタで書き込んだコードに対して、自分の好きなタイミングで任意のコードを実行することができます。まさに、Webインスペクタのコンソール的な使い方ですね。</p>

<h4>resetメソッド</h4>

<p>画面左側のコンソールにて<code>reset();</code>を実行することにより、書き込んだプログラムの内容をリセットすることができます。コンソールにていろいろやりすぎてわけが分からなくなってしまったときや、単純にEspruino上で実行中のプログラムの動作を止めたい場合に使用します。</p>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/ed971ec7-ff43-fa8b-eaab-f2cfc527bb3d.png" alt="image" /></p>

<h2>Wifiに接続する</h2>

<p>いよいよEspruinoをインターネットに繋げます。
冒頭の「Espruinoを使い始める&gt;必要物品を調達する」で紹介した、<a href="https://www.adafruit.com/products/1469" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">CC3000 Wifi Module</a>を用意しましょう。こちらにもピンヘッダを付ける必要があります。</p>

<h3>結線</h3>

<p>ピンが多いですが、慌てずに落ち着いて結線しましょう。少なくとも、GNDとVBatだけは絶対に逆にしてはいけません（多分壊れます）。</p>

<table>
<thead>
<tr>
  <th>Espruinoのピン</th>
  <th>CC3000のピン</th>
</tr>
</thead>
<tbody>
<tr>
  <td>GND</td>
  <td>GND</td>
</tr>
<tr>
  <td>VBat</td>
  <td>VIN</td>
</tr>
<tr>
  <td>B3</td>
  <td>IRQ</td>
</tr>
<tr>
  <td>B4</td>
  <td>VBEN(CS)</td>
</tr>
<tr>
  <td>B5</td>
  <td>CS</td>
</tr>
<tr>
  <td>B6</td>
  <td>MOSI(DIN)</td>
</tr>
<tr>
  <td>B7</td>
  <td>MISO(DOUT)</td>
</tr>
<tr>
  <td>B8</td>
  <td>CLK(SCK)</td>
</tr>
</tbody>
</table>

<p><img src="https://qiita-image-store.s3.amazonaws.com/0/51384/10f6cb5e-a48c-96ca-4b13-18250e5963c3.png" alt="image" /></p>

<h3>プログラム</h3>

<p>下記プログラムをWeb IDEのエディタに貼付け、<code>wifiConfig</code>の<code>ssid</code>と<code>key</code>を、接続可能なWifiのSSIDとパスワードに編集します。</p>

<p></p><pre class="crayon-plain-tag">// wifi接続情報 ssidとパスワード
var wifiConfig = {
  ssid: "",
  key: ""
};

// コネクション確立時のコールバック
function onWifiConnect(s) {
  if (s=="dhcp") {
    // GETリクエストを投げる : 公式の Hello World! と返してくれるURL
    require("http").get("http://www.pur3.co.uk/hello.txt", function(res) {
      var data = "";
      res.on('data', function(chunk) {
        // 細切れのデータを変数に足し込む
        data += chunk;
      });
      res.on('close', function(){
        // レスポンスが全部返ってきたら溜め込んだデータをコンソールに出力
        console.log(data);
      });
    });
  }
}

// CC3000Wifiモジュールに繋ぐ
var wlan = require("CC3000").connect();
// wifiネットワークに繋いで、GetRequestを実行
wlan.connect( wifiConfig.ssid, wifiConfig.key, onWifiConnect);</pre><p></p>

<p>書き込みボタンを押して、プログラムを実行します。Wifiに接続しに行くので、少し実行に時間がかかります。</p>

<p><a href="https://html5experts.jp/wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e.png" data-wpel-link="internal"><img src="/wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e.png" alt="スクリーンショット 2015-03-10 3.33.54" width="598" height="480" class="alignnone size-full wp-image-13659" srcset="/wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e.png 598w, /wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e-300x241.png 300w, /wp-content/uploads/2015/03/4a5e6bafc154f962f9ad5d061f17435e-207x166.png 207w" sizes="(max-width: 598px) 100vw, 598px" /></a></p>

<p>コンソールに&#8221;Hello World!&#8221;と表示されました。この文字列は、Espruino本家がGetリクエスト用に用意しているURLから取得したものです。</p>

<p>しばらくWifiに接続していると、多少熱くなりますが大丈夫です。ただ、配線を悪い感じで間違った場合は、触った瞬間に尋常ではない熱さを感じることができます。すぐに電源を抜きましょう。当然ですが誤配線は故障やケガの原因になりますので、慎重に、落ち着いて結線することが大事です。</p>

<p>では、プログラムについて解説します。</p>

<p>26行目と28行目にて、Wifi接続処理を行っています。connectメソッドが2つ出てきているのが少しややこしいですが、26行目の<code>require("CC3000").connect()</code>のconnectメソッドはCC3000Wifiモジュールとの接続を意味し、28行目の<code>wlan.connect()</code>のconnectメソッドはWifiネットワークへの接続を意味しています。</p>

<p>後者28行目のWifiネットワークへのconnectメソッドは、SSIDとパスワード、そして接続完了後に実行されるコールバックを引数に取ります。今回のプログラムでは、<code>onWifiConnect</code>が呼び出され、このコールバックの中でGETリクエストが実行されます。</p>

<p>10行目でGetリクエストを実行しています。インターフェイスは、node.jsのhttpモジュールのgetメソッドと同様です。http://www.pur3.co.uk/hello.txtに対してGetリクエストを実行し、レスポンスをコンソールに表示しています。</p>

<p>今回のサンプルはGETリクエストでしたが、もちろんPOSTリクエストを投げたり、EspruinoをWebサーバとして動かすことも可能です。</p>

<p><strong>参考</strong></p>

<ul>
<li><a href="http://qiita.com/rockymanobi/items/d50fcaf26cb59afb586b" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">POSTリクエストを投げる</a></li>
<li><a href="http://qiita.com/rockymanobi/items/e85a57408fa07da6b29c" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">WEBサーバとして動かす</a></li>
</ul>

<h1>まとめ</h1>

<p>駆け足でしたが、Espruinoを購入し、温度センサで温度を測り、Wifiに繋ぐところまでたどり着きました。
センサーとインターネットに繋がれば、とりあえずセンサー情報をクラウドに上げて、それをブラウザで面白おかしく表示するようなサービスは作れます。これを機に、とりあえず何でもよいから作ってみるのはいかがでしょうか。</p>

<p>筆者も<strong>会社のトイレの空き状況をブラウザで見れるサービス</strong>を作ったり、<strong><a href="http://rocky-manobi.com/blog/?p=232" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">すだちの木に水を上げるとマスコットが喜ぶ玩具</a></strong>等々をEspruinoで作って運用しています。実際に作って運用してみると、本当にいろいろなことに気づきます。この手のサービスやシステムを設計するにあたっての勘所や注意すべきこと、開発当初は思いもよらなかったサービスの&#8221;効果&#8221;等、とにかくいろいろなことに気づかされます。もちろんハードウェアの専門家になることが目的ではないのですが、とても勉強になりますよ。</p>

<p>ちなみに、Espruinoは日本語ドキュメントが少ないことがネックです。なんとかできないものかと、去年ひっそりと<a href="http://qiita.com/advent-calendar/2014/espruino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino Advent Calendar 2014</a>なるものを作りました。（ところどころ挫折していますが）これらを参考に、一緒に面白いものを作っていけたらと思います。</p>

<p>最後に、Web開発者がIoT/WoTに挑戦してみる理由について、筆者の思うところを少しだけ。</p>

<p>これからはIoTだ！WoTだ！大きなビジネスチャンスだ！乗り遅れるな！……と、そういった現実的なものもよいとは思いますが、筆者個人としては、Web開発者がIoT/WoTに挑戦してみる理由は、「その方が面白いものが作れそうだから」で十分なのではと思っています（記事の冒頭ではえらそうなこと言っていますが）。</p>

<p>これまでのWebサービスは、人間にインプットしてもらった情報を収集して、それを便利で面白い形にしてアウトプットするものが多かったように思えます。紙でやっていたことをシステムに落としたようなものです。でも、たくさんのインプットがなければ面白くも便利にもならないし、面白くも便利でもなければ誰も情報をインプットをしてくれません。様々なサービス、システムがこんな鶏と卵のような悩みと戦ってきたのだと思います。</p>

<p>でも、インプットをするのが人だけでなく、モノが自ら語ってくれたら、少なくとも有益なインプットを作り出すことはできますよね。情報さえそろえば後はそれをどう見せるか、それは我々Web開発者の土俵です。面白いものが作りやすくなるのではないかと思っています。</p>

<p>で、面白いことをやっていたら、結果儲かっていた。となったら、ラッキーだなと。
エンジニアが勉強する理由なんてそんなものでよいのでは、と最近考えています。
(あ、でもこの辺の市場が拡大することは間違いないと思いますよw。実際、この手のサービスのお仕事のお話をいただく機会が増えてきています^^）</p>

<p>というわけでIoT/WoT。言葉自体は流行っていますが、取り組んでいる人はまだまだそう多くはありません。
これを機に、まずはEspruinoで、面白いモノを作っていきましょう。</p>
]]></content:encoded>
		
		<series:name><![CDATA[IoTxWeb]]></series:name>
	</item>
		<item>
		<title>WoTはここからはじめる！？JavaScriptで開発できる3つのJS Boardデバイス</title>
		<link>/bathtimefish/13109/</link>
		<pubDate>Mon, 02 Mar 2015 00:00:16 +0000</pubDate>
		<dc:creator><![CDATA[村岡 正和]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[JS Board]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=13109</guid>
		<description><![CDATA[連載： IoTxWeb (6)JavaScriptではじめる組み込み系プログラミング さまざまなデバイスがWebを介してつながるWeb of Things（WoT）。WoTの普及によってさまざまな分野からWeb上に新しい...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/iot_web/" class="series-240" title="IoTxWeb" data-wpel-link="internal">IoTxWeb</a> (6)</div><h2>JavaScriptではじめる組み込み系プログラミング</h2>

<p>さまざまなデバイスがWebを介してつながるWeb of Things（WoT）。WoTの普及によってさまざまな分野からWeb上に新しいサービスがローンチされ、Webを利用するユーザーに新しい体験が提供されるタイミングが、すぐそこまできている感じがします。</p>

<p>一方で、WoTの普及はWebクリエイターにとっても、新しいビジネスチャンスかもしれません。ひと昔前まで、Web技術は、PCのWebブラウザ上でしか使われないものでした。しかし現在では、Firefox OSのようにモバイル・ネイティブで動作するようになりました。さらに最近では、マイコンなどの組み込み機器でも、直接JavaScriptなどのWeb技術が動作するものが出てきました。</p>

<p>ここ最近、海外でリリースされているデバイスの中には、JavaScriptなどのWeb技術を強くキャッチアップしている製品が増えてきています。今回はそれらJS Boardの中から、筆者がよく使っているのものを3つ紹介したいと思います。</p>

<h2>Espruino</h2>

<p><a href="https://tessel.io/espruino.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">espruino.com</a></p>

<p>2013年に<a href="https://www.kickstarter.com/projects/gfw/espruino-javascript-for-things" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Kickstarterで資金調達が開始</a>され、目標額を大きく超える調達額を獲得し開発されたデバイスです。リファレンスボードであるEspruino Boardは、72MhzのCortex-M3でJavaScriptプログラムがコンパイルされ、動作する小さなマイコンです。</p>

<p><img src="http://www.espruino.com/img/ESPRUINOBOARD.jpg" alt="Espruino Board" width="280" height="440"></p>

<p>JavaScriptコードは、専用の<a href="https://chrome.google.com/webstore/detail/espruino-web-ide/bleoifhkdalbjfbobjackfdifdneehpo" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino IDE</a>で編集し、EspruinoをPCとUSB接続すれば、IDEからEspruinoへ直接プログラムが転送できるようになっています。ArduinoのようにIDEが用意されているので、気軽に開発できるのがよいですね。</p>

<p>例えば、Espruinoに人感センサーをつないで人の動きを検知するサンプルコードは、このようになります。</p>

<p></p><pre class="crayon-plain-tag">setWatch(function() {
        LED2.write(1);
        setTimeout(function() {
        LED2.write(0);
    }, 3000);
}, A1, {repeat:true, edge:"rising"});</pre><p></p>

<p>EspruinoのJavaScriptには、ハードウェアを制御するための専用APIが、搭載されています。上記のコードでは <a href="http://www.espruino.com/Reference#l__global_setWatch" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">setWatch</a> というsetIntervalに似た関数で、センサーの状態を取得するループ処理を行っています。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20150222_153543-640x480.jpg" alt="Espruinoで人感センサーが動作しているようす" width="640" height="480" class="alignnone size-large wp-image-13116" srcset="/wp-content/uploads/2015/02/IMG_20150222_153543.jpg 640w, /wp-content/uploads/2015/02/IMG_20150222_153543-300x225.jpg 300w, /wp-content/uploads/2015/02/IMG_20150222_153543-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>筆者はこのプログラムをもうちょっと作りこんで、ウチの猫のトイレに設置しています。猫ちゃんがトイレに入ったり出たりするのを検知して、クラウドにデータを送信し、スマートフォンにプッシュ通知するような仕組みをつくりました。猫のトイレがすぐに掃除できるようになったので、猫ちゃんのストレスが減りました（減ったにちがいないｗ）。この事例は<a href="http://special.nikkeibp.co.jp/ts/article/ad0h/172223/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日経テクノロジーオンライン</a>で取り上げていただきました。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20140612_183305-480x640.jpg" alt="Espruino猫トイレセンサーを猫トイレに設置している" width="359" height="500" class="alignnone size-large wp-image-13117" /></p>

<p>Espruinoに関する日本語の情報はあまり多くないですが、いまのところ<a href="http://qiita.com/advent-calendar/2014/espruino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino Advent Calendar 2014</a>がよくまとまっていると思います。個人的にはJS Boardの中で一番気に入っているデバイスなので日本でももっとユーザーが増えてほしいところですね。</p>

<p>これからEspruinoを買おうと思っている方には、上記のEspruino Boardもいいんですが、現在開発中の<a href="https://www.kickstarter.com/projects/gfw/espruino-pico-javascript-on-a-usb-stick" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino Pico</a>もオススメです。Espruino PicoはEspruino Boardよりもさらに小さいUSBメモリサイズの基盤です。とても小さな基盤なのでいろいろなケースに活用できるのではないでしょうか。Espruino Picoのプレオーダー分は、2015年春ごろに発送される予定のようです。</p>

<h2>Tessel</h2>

<p><a href="https://tessel.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">tessle.io</a></p>

<p><a href="https://www.dragoninnovation.com/projects/22-tessel" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">DragonInnovationで資金調達された</a>プロジェクトで、Espruinoよりも少し大きなマイコンです。Wifiチップを搭載しているので、単独でWebにアクセスする機能を持っています。</p>

<p><img src="https://s3.amazonaws.com/technicalmachine-assets/technical-io/tessel-red-usb.jpg" alt="Tessel main board" width="280" height="440"></p>

<p>Tesselの特長は、多くの専用モジュールが販売されていることです。加速度センサ、GPS、BLE、サーボコントローラー、NFCなど多くのモジュールが別売りで販売されていて、Tesselのポートに差し込むだけで利用できます。Espruinoに市販のセンサーを接続する場合は電子回路の知識が必要ですが、Tesselの場合は専用ポートに差し込むだけなので回路の知識は不要です。</p>

<p>TesselのJavaScript APIはnode.js互換な仕様になっています。例えば、加速度センサーモジュールを接続してデータを取得するサンプルコードは以下です。</p>

<p></p><pre class="crayon-plain-tag">var tessel = require('tessel');
var accel = require('accel-mma84').use(tessel.port['A']);

accel.on('ready', function () {
    accel.on('data', function (xyz) {
        console.log('x:', xyz[0].toFixed(2), 'y:', xyz[1].toFixed(2), 'z:', xyz[2].toFixed(2));
    });
});

accel.on('error', function(err){ console.log('Error:', err); });</pre><p></p>

<p>JavaScriptらしいイベントドリブンな記述で、加速度センサーのデータがリアルタイムに受信できます。このコードでrequireしているtessel, accel-mma84といったnode.jsのモジュールライブラリはnpmでインストールできます。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20150222_133033-640x480.jpg" alt="Tesselで加速度センサーのデータを取得している。デバイスを傾けると、値が変化する" width="640" height="480" class="alignnone size-large wp-image-13118" srcset="/wp-content/uploads/2015/02/IMG_20150222_133033.jpg 640w, /wp-content/uploads/2015/02/IMG_20150222_133033-300x225.jpg 300w, /wp-content/uploads/2015/02/IMG_20150222_133033-207x155.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>Tesselは基本的に、4つのモジュール専用ポートに専用モジュールを接続して利用するスタイルですが、専用モジュール以外が利用できないかというと、そうではありません。Tesselには汎用的なGPIOポートも搭載されているので、<a href="http://akizukidenshi.com/catalog/top.aspx" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">秋月電子</a>あたりで買ってきたセンサーをつなげることもできます。下図はTesselのGPIOポートでLEDを点滅させてみたところです。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20150222_132105-640x4801.jpg" alt="TesselのGPIOポートにLEDを接続してLEDを点滅させている" width="640" height="423" class="size-full wp-image-13146" srcset="/wp-content/uploads/2015/02/IMG_20150222_132105-640x4801.jpg 640w, /wp-content/uploads/2015/02/IMG_20150222_132105-640x4801-300x198.jpg 300w, /wp-content/uploads/2015/02/IMG_20150222_132105-640x4801-207x137.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />　▲TesselのGPIOポートにLEDを接続してLEDを点滅させている</p>

<p></p><pre class="crayon-plain-tag">/*
* TesselのGPIOでLチカ
* LEDのアノードをTesselの TX/G1
* LEDのカソードをTesselの GND
* に接続する
*/
 
var tessel = require('tessel');
var gpio = tessel.port['GPIO'];
 
gpio.digital[0].write(0); // TX/G1
 
flag = true;

setInterval(function() {
  if(flag == true) {
    flag = false;
  } else {
    flag = true;
  }
  console.log(flag);
  if(flag) gpio.digital[0].write(1);
  if(!flag) gpio.digital[0].write(0);
}, 1000);</pre><p></p>

<p>Tesselは今回紹介するデバイスで唯一国内販売されているデバイスです。<a href="https://www.switch-science.com/catalog/list/563/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">スイッチサイエンス</a>で購入できます。国内で買える、電子回路の知識が不要、node.js互換など、ハードウェアのない方でも入門しやすいデバイス、といえるのではないでしょうか。</p>

<h2>Spark</h2>

<p><a href="https://www.spark.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">spark.io</a></p>

<p>Sparkはマイコンというよりは、サーバーサイドを含めたオープンなIoTプラットフォームとして開発されています。<a href="http://makezine.jp/blog/2014/07/spark-lands-4-9-million-in-funding-launches-new-cloud-based-operating-system.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">昨年、Lion Wells Capital、O’Reilly AlphaTech Venturesなどから出資を受けて話題</a>となりました。</p>

<p>Sparkから発売されている小型マイコンボード Spark Coreは、72 Mhz Cortex M3とCC3000 Wifi moduleを組み合わせた「マイコン付きWifiモジュール」と呼べるようなもので、Arduino互換な言語でプログラムを記述します。</p>

<p><img src="https://store.spark.io/assets/core-a6fcc2b47e235d529ab58fe0a1124588.png" alt="Spark Core" width="280" height="440"></p>

<p>EspruinoやTesselと違って、JavaScript使わへんやんけと思われるかもしれませんが、Spark Coreから取得したデータはすべてWeb APIで取得できるようになっており、Web APIをラップしたJavaScript SDKがnode.js、Webブラウザで利用できるよう提供されています。</p>

<p>Spark Coreへプログラムを転送する場合は、Espruino、Tesselと違って、PCとUSB接続をする必要がありません。クラウド上のIDE <a href="https://www.spark.io/build" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Spark Build</a>で編集したコードをFlashすると、ネットワークに接続されているSpark Coreにリモート転送され、実行される仕組みになっています。</p>

<p>下のコード例では、Spark Coreと人感センサーをつないでセンサーの値を detected 変数にバインドしています。（一部抜粋）</p>

<p></p><pre class="crayon-plain-tag">Spark.variable("detected", &amp;detected, INT);
...
detected = motionDetect();</pre><p></p>

<p>上記のようにバインドされた値は以下のようにアクセスすることで、クラウドからセンサーの値を同期的に取得することができます。</p>

<p></p><pre class="crayon-plain-tag">curl -G https://api.spark.io/v1/devices/[Device ID]/detected \
  -d access_token=[Access Token]</pre><p></p>

<p>これをSparkのJavaScript SDKを利用して記述すると以下のようになります。</p>

<p></p><pre class="crayon-plain-tag">var spark = require('spark');
var ret = spark.login({"accessToken": "[Device Token]"});
device.getVariable('detected', function(err, data) {
  if (err) {
    console.log('An error occurred while getting attrs:', err);
  } else {
    console.log('Core attr retrieved successfully:', data);
  }
});</pre><p></p>

<p>SparkはSDKの他にサーバー、デバイス間の通信プロトコルが、node.jsモジュールで実装されています。それを利用するモックアップサーバーもnode.jsコードで公開されているので、結構JS成分が多いです。SparkのプロトコルはCoAP+SSLで設計されていて、このあたりはWoTというよりはIoTなんですが、かなり興味深い実装です。</p>

<p>筆者がSpark Coreを使ってみた感覚では、長時間にわたる動作についてはTessel、Espruinoに比べて安定していると感じました。Tessel、Espruinoは実験や製品の試作レベルでカジュアルに利用できるデバイスですが、Sparkは、それらよりも一歩製品レベルに踏み込んでいるような印象があります。</p>

<p>現在販売されているデバイス Spark Core は39ドルで販売されていますが、次世代のSparkデバイスである PhotonとそのコアモジュールP0が2015年5月に発売予定となっており、現在プレオーダーが受け付けられています。価格はPhotonが19ドル、P0が10個で100ドル（1個あたり10ドル）となっており、IoT製品の量産に利用できるような価格帯となっています。</p>

<h2>まとめ</h2>

<p>個人的な話ですが、最近<a href="http://morning.moae.jp/lineup/362" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ハルロック</a>の影響で電子工作にはまってます。仕事が終わってからハンダ付けをしたり、ブレッドボードで配線したりしてる今日この頃なんですが、マイコンのプログラミングはC++とかJavaとかでやるのはなんか負けた気がするので、JavaScriptでプログラミングできるものにこだわっています。</p>

<p>そういったWeb技術、特にJavaScriptを中心的に利用している組み込み機器を個人的に”JS Board”と呼んでいて、<a href="https://atnd.org/events/57672" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">勉強会</a>を開催したりしています。先日のHTML5 Conference 2015でも出展させていただきました。今後も勉強会などをやって、情報共有などをしていこうと思っています。</p>

<p><img src="/wp-content/uploads/2015/02/IMG_20150125_155111-640x4801.jpg" alt="" width="640" height="441" class="alignnone size-full wp-image-13150" srcset="/wp-content/uploads/2015/02/IMG_20150125_155111-640x4801.jpg 640w, /wp-content/uploads/2015/02/IMG_20150125_155111-640x4801-300x207.jpg 300w, /wp-content/uploads/2015/02/IMG_20150125_155111-640x4801-207x143.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" />　▲HTML5 Conference 2015にJS Board勉強会が出展。さまざまなJS Boardデバイスが展示されている。</p>

<p>これからまだまだJavaScriptを活用するデバイスが続々と登場してきそうです。
JS Boardに興味を持った方々、ぜひ一緒に勉強していきましょう！</p>
]]></content:encoded>
		
		<series:name><![CDATA[IoTxWeb]]></series:name>
	</item>
		<item>
		<title>【IoT時代のWebとモノづくり】WebクリエイターもMakeしようぜ！ぶっちゃけ対談60分</title>
		<link>/miyuki-baba/13039/</link>
		<pubDate>Wed, 25 Feb 2015 01:00:47 +0000</pubDate>
		<dc:creator><![CDATA[馬場 美由紀]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[WoT]]></category>

		<guid isPermaLink="false">/?p=13039</guid>
		<description><![CDATA[連載： IoTxWeb (5)ArduinoやRaspberry piをはじめとした低価格のマイコンが登場し、ハードウェアの知識がなくても、手軽に電子工作が楽しめるようになってきました。HTML5 Experts.jp読...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/iot_web/" class="series-240" title="IoTxWeb" data-wpel-link="internal">IoTxWeb</a> (5)</div><p>ArduinoやRaspberry piをはじめとした低価格のマイコンが登場し、ハードウェアの知識がなくても、手軽に電子工作が楽しめるようになってきました。HTML5 Experts.jp読者の皆さんも、こうしたIoTやWoTに関心を持ち始めた方も多いのではないでしょうか。</p>

<p>WebクリエイターがMakeするにあたって、Webで培った技術は役に立つのか・立たないのか、これから活躍の場はあるのか。白石俊平編集長を聞き手に、すでにモノづくりの世界に足を踏み入れ始めたエキスパート<a href="https://html5experts.jp/bathtimefish/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">村岡正和さん</a>、<a href="https://html5experts.jp/dsuket/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">高岡大介さん</a>、もうバリバリのハードウェアの人として活躍している<a href="http://y-okajima.com/post/62798714861" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">岡島康憲さん</a>にぶっちゃけトークを展開してもらいました。</p>

<p><img src="/wp-content/uploads/2015/02/iot-1.jpg" alt="" width="640" height="373" class="alignnone size-full wp-image-13061" srcset="/wp-content/uploads/2015/02/iot-1.jpg 640w, /wp-content/uploads/2015/02/iot-1-300x174.jpg 300w, /wp-content/uploads/2015/02/iot-1-207x120.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">　▲左から、白石俊平編集長、岡島康憲さん、高岡大介さん、村岡正和さん</span></p>

<h2>IoTやハードウェアの世界に踏み込んだきっかけは？</h2>

<p><br>
<strong>白石：</strong>まずは、皆さんのIoTに対する取り組みを、教えてください。
<br><br>
<strong>村岡：</strong>僕はJavaScriptが得意なバリバリのWeb系エンジニアなんですが、最近IoTやWoTがIT業界で重要視されてきたので、ハードウェアの勉強を始めたところです。
<br><br>
でも、いまさら組込みの世界でJavaとかC++を始めてもかなわないし、そもそも自分はWebのエンジニアなんで、そっちに行ったら負けかなとも思ってるんです。僕のIoTへのこだわりは、ハードのアプリケーションやデバイスが動くWeb技術を取り入れていきたいってことなんですよね。</p>

<p><img src="/wp-content/uploads/2015/02/muraoka_1.jpg" alt="" width="550" height="371" class="alignnone size-full wp-image-13053" srcset="/wp-content/uploads/2015/02/muraoka_1.jpg 550w, /wp-content/uploads/2015/02/muraoka_1-300x202.jpg 300w, /wp-content/uploads/2015/02/muraoka_1-207x139.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲村岡 正和さん（※今回はリモートで参戦）<br>神戸でシステム開発を行っているフリーランスのエンジニア。コミュニティ活動では、html5jのスタッフやマークアップ部部長、HTML5-WEST.jpの代表として関西でHTML5を中心としたWeb技術の普及に努めている。<a href="https://atnd.org/events/57672" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JS board勉強会</a>や、「<a href="http://w-ug.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">日本ウェアラブルデバイスユーザー会</a>」を運営している。</span>
<br><br>
JavaScriptで組込み機器を動かすというソリューションに注目していて、その技術を追っかけるために、「<a href="https://atnd.org/events/57672" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">JS board勉強会</a>」を立ち上げました。自分の家にも、JavaScriptを使った組込みボードで、猫の監視センサーを作ったりしています。</p>

<p><img src="/wp-content/uploads/2015/02/muraoka_2.jpg" alt="" width="550" height="399" class="alignnone size-full wp-image-13057" srcset="/wp-content/uploads/2015/02/muraoka_2.jpg 550w, /wp-content/uploads/2015/02/muraoka_2-300x217.jpg 300w, /wp-content/uploads/2015/02/muraoka_2-207x150.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲猫の監視センサー　※詳しくは<a href="http://www.slideshare.net/bathtimefish/espruino" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">こちらの資料</a>参照</span>
<br><br>
<a href="http://www.espruino.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Espruino</a>というマイコンボードをネコのトイレに設置して、猫が出たり入ったりすると検知して、僕のスマホに送ってくれるんですよ。焦電センサーを使って、マイコンとWifiのモジュールとつないでいるんです。僕が外出していても猫がトイレに行ったことがわかるし、家にいると、すぐトイレが掃除できるのは便利なんです。なんかスマートハウスぽいでしょ？(笑)。これはJavaScriptで操作します。Arduinoのようにセンサーをつけて、JavaScriptで動かせるので、僕みたいなWebエンジニアでも普通に使えます。
<br><br>
あと1つ、<a href="https://tessel.io/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Tessel</a>もJavaScriptで操作できるものもあります。Espruinoよりももっと簡単に操作できる端末。Wifiが内蔵されているので、Intel Edisonに近いかんじです。Tesselの場合は、センサー類が別売りされている。簡単に装着することができるので、電子工作の知識がなくても使えます。スーパー簡単です。Espruinoはいろんな機能が使えるけど、電子工作の知識が必要ですね。
<br><br>
<strong>高岡：</strong>私は「<a href="http://aitc.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">先端IT活用推進コンソーシアム</a>」で活動しているのですが、IT企業がIoTに対してどう取り組んでいくかを考えるために、2014年11月から月1回、一から勉強するIoT勉強会やハッカソンなどを主催しています。</p>

<p><img src="/wp-content/uploads/2015/02/takaoka.jpg" alt="" width="550" height="404" class="alignnone size-full wp-image-13065" srcset="/wp-content/uploads/2015/02/takaoka.jpg 550w, /wp-content/uploads/2015/02/takaoka-300x220.jpg 300w, /wp-content/uploads/2015/02/takaoka-207x152.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲高岡 大介さん<br>外資系SIerでエンタープライズシステムの開発を経験した後、独法研究所にて形式手法やセマンティックWeb関連の研究に従事。ベンチャー企業などを経て現在はフリーランスとして、技術支援、開発、執筆、講演など様々な仕事に携わる。<a href="http://www.buildinsider.net/column/takaoka-daisuke" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Build Insider</a>でオピニオンコラムを執筆中。Senchaユーザーグループや<a href="http://aitc.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">先端IT活用推進コンソーシアム</a>で活動している。</span>
<br><br>
例えばこの<a href="http://jp.littlebits.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">littleBits（リトルビッツ）</a>を使って、勉強会でデモをやったりしてます。Arduinoも試してみたんですが、Wifiシールドを付けないとインターネットにつながらないので、<a href="http://www.intel.co.jp/content/www/jp/ja/do-it-yourself/edison.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Intel Edison</a>を買ってつないだりします。
<br><br>
<a href="http://www.seeedstudio.com/wiki/GROVE_System" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GROVE System</a>とか、さっきのTesselとか組み合わせれば簡単にできるというのは、最近の流行ですね。littleBitsは磁石でつながるし、ショートしないようになっているから子供でも使える。間にセンサーにはさんだり、シンプルなボタンにラッチというモジュールを挟むだけでトグルスイッチにもなります。あとはcloudBit（クラウドビッツ）はインターネットにつながる秘密兵器なので、注目しています。IFTTTに対応したBitモジュールが便利なんですが、まだ日本では正式発売されていないんです。
<br><br>
こんなかんじでデバイスやセンサーのことは勉強してますが、自分はあくまでもアプリケーションレイヤーの部分で頑張りたいと思っています。だからデバイスはお手軽に組み合わせて、使えるものを選んで試しているかんじです。
<br><br>
<strong>岡島：</strong>私は、もともとはWebサービスの企画屋だったんです。2009年くらいから友人たちとハードウェアをいじり始めて、2011年に岩淵技術商事を起業。<a href="http://tokyodevices.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">東京デバイセズ</a>研究開発用製品を製造販売するメーカーを展開しています。それ以外にも<a href="http://abbalab.com/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ABBALab</a>でいうハードウェアスタートアップアクセラレータへのサポートを通じて、ハードウェアのスタートアップ支援や、アクセラレーションのプログラム提供などを行っているので、IoTに関わる機会は多いですね。</p>

<p><img src="/wp-content/uploads/2015/02/okajima.jpg" alt="" width="550" height="383" class="alignnone size-full wp-image-13067" srcset="/wp-content/uploads/2015/02/okajima.jpg 550w, /wp-content/uploads/2015/02/okajima-300x208.jpg 300w, /wp-content/uploads/2015/02/okajima-207x144.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲岡島 康憲さん<br>岩淵技術商事株式会社 執行役員。インターネット関連企業・NECビッグローブにて、Webサービスの企画立案・運用やインターネット接続型ハードウェアの企画立案に6年間従事する。2011年7月、エネルギー関連ハードウェアや、Webサービスの企画開発を主業務とする岩淵技術商事株式会社を創業。研究開発用電子製品を開発・販売する「<a href="http://tokyodevices.jp/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">東京デバイセズ</a>」を運営している。</span>
<br><br>
友人たちと作った代表的なもの1つは、2009年にTwitterと脈拍のセンサーをつないで「<a href="http://www.engadget.com/2009/06/28/device-judges-your-pulse-and-shares-the-results-with-your-mom-an/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">死んだらツイートするデバイス」こと「秋月パルス」</a>。毛細血管の赤外線吸収量から、血流の変化を検出し、Twitterに生命活動を投稿する自作デバイスです。Twitter APIを活用したハードウェアなんですが、同じように個人が開発したWebサービスと絡めたハードウェアで、PCなしで装置単体でネットもつながるのは当時はほとんどなかったと思います。海外のTechCrunchやEngadgetで取り上げられて、日本で話題になりましたね。
<br><br>
<strong>白石：</strong>へえ、すごいですね。ところで、ハードをいじり始めたきっかけは何だったんですか？
<br><br>
<strong>岡島：</strong>起業する前は、NECビッグローブで動画配信サービスなどWebサービスの企画運営をやってたんです。多くのWeb系企業が展開していたサービスの大半がPCや携帯電話向け中心だった状況に限界を感じて、上司と研究開発部を作って、今で言うChromecastのようなハードウェアプロトタイプをはじめ、いくつかのハードウェアの企画や試作をしました。また、Kickstarterのようなクラウドファンディングが普及し始めた時期に、個人間送金のようなかたちで投げ銭ができるサービスをリリースしたりしていました。
<br><br>
<strong>白石：</strong>東京デバイスセズは、販売代理店をやってるんですか？
<br><br>
<strong>岡島：</strong>いえ、全体の半分以上は自社製品です。複数人で製品開発を行う場合もありますが、大半のものは弊社の代表自身が開発しています。利用シーンやユーザーニーズををうまくとらえることで、少人数であっても魅力ある製品を作れるのではないかと考えています。</p>

<h2>WebクリエイターがMakeする必要って、あるの？</h2>

<p><br>
<strong>白石：</strong>ではそろそろ本題に。そもそもWebクリエイターがMakeする必要性って、あると思いますか？
<br><br>
<strong>村岡：</strong>絶対やらないといけないということはない。jQueryと同じで使いたい人だけやればいいんじゃないかと。ただし、やったら絶対面白いと思いますね。これまでなかった新しいビジネスのチャンスにもなるし、勉強すればハードウェア業界に打って出れるチャンスでもある。
<br><br>
別にフリーランスだから新しい仕事を取りにいこうとか、自分で製品を作って売ろうとかも、今のところ考えてない。じゃあ、なんでかと言えば、答えはハードウェアの人と組んで仕事をするためには、最低限の知識が必要だと思っているから。これからはWebクリエイターもある程度のハードの知識は必要だと思うし、ハードウェア側の人も勉強しているはず。
<br><br>
お互いに共通言語で話せるくらいにならないと、いいものは作れないと思うんです。これからは絶対Makersみたいな仕事が増えていくし、ハードウェア屋さんの発想や知識だけではできないことを作りたいんですよね。Webクリエイターにしかできない新しいソリューションを生み出していきたい。ハード屋と仲良くなりたいから勉強しているし、自分のスキルアップや新たな分野にシフトチェンジするチャンスだと思ってます。
<br><br>
<strong>白石：</strong>なるほど。今の村岡さんの話には「IoTの仕事が増えていく」、「その中にWebクリエイターの仕事がある」という2つの仮説がありましたね。岡島さんは、どう思われますか？</p>

<p><img src="/wp-content/uploads/2015/02/okajima3.jpg" alt="" width="550" height="353" class="alignnone size-full wp-image-13073" srcset="/wp-content/uploads/2015/02/okajima3.jpg 550w, /wp-content/uploads/2015/02/okajima3-300x192.jpg 300w, /wp-content/uploads/2015/02/okajima3-207x132.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>岡島：</strong>IoTの仕事は実際、今も増えています。ここ2～3年は、「ネットとセンサーをつなげてこんなことができませんか？」といった問い合わせも多いですね。CES（Consumer Electronics Sh.ow）でもIoT系のデバイスやプロダクトも増えて、盛り上がっていた。大手メーカーやハードウェアベンチャーからこれまでインターネットと関係なかったデバイス屋さんからの相談も増えてます。
<br><br>
Webクリエイターの仕事チャンスはあると思います。僕自身もハードとソフトの中間の立場なので、バリバリのハードウェア業界の方々にはWebサービス界隈の人の顔をする。
「IFTTT（イフト）っていうのはなあ…」なんて話を偉そうにするし、逆にWebサービス業界の方々にはハードウェア界隈の人の顔をして「お前は知らないかも知らないけど、ハードウェアって超大変なんだぞ」って！
<br><br>
ハードウェア業界の方々の中には、Webサービスの可能性や実装に必要な技術を把握しきれていない人もいる。例えば、福島で放射能のセンサーを作ろうとしたときに、GPSとネットをデバイスにつなぐにはどうしたらいいの？って相談されたとします。通信は3Gならいけるな、Webサーバーを立てて、管理画面作らなきゃとか、Googleアカウント立ててみようかとか…。Web系のエンジニアが必要とされるところはたくさんあります。特にセンサー、デバイス周りの認証回りは、相性がいいと思いますね。
<br><br>
Web的な発想で企画提案する人や、管理画面が必要なのであれば、UIデザイナーも必要とされてくるはず。だから、その仮説は正しいんじゃないかと。</p>

<h2>ハードウェアエンジニアとWebクリエイターの違い</h2>

<p><br>
<strong>村岡：</strong>さっきの話すごくわかりますね。最近、ハードウェア屋さんと話をすることが多くなって気づいたんですけど、彼らはソフトウェアやインターネットの知識が意外と少ない。ハードウェアは業務が高度に専門化しているから、設計者だけでは製造できないし、設計も業種が細かく細分化されている。何でもふんわり全部やるWeb業界の文化とは全然違うんですよね。でも、文化の違いを理解するだけでもずいぶん歩み寄れる。まずは業界・風土や仕事の理解ができてから、彼らと話がスムーズにできるというのがスタート地点。
<br><br>
そうなるとWebクリエイターはここからどういうソフトを作ったらいいか、サービスまで広げて考える。ソフトからサービスまで考えることがハード屋さんにはないから、新鮮に映るみたいです。デバイスを作る理由をサービスを作ることまでつなげてあげると驚かれるんです。これはやってみてわかったこと。ハード屋さんには刺激を与えられているし、面白いと言ってもらえる。本質的な新しいジャンルとのマッシュアップだと思っている。まだまだ可能性があるし、新しくて楽しい仕事が増えていくので、みんなも早くやったほうがいいと言いたい。
<br><br>
<strong>白石：</strong>僕は自分がハードを知らなさすぎるせいか、ハード屋さんがソフト屋さんになるほうが簡単じゃないのって思ったりします。ソフトウェア作りって、そんなに難しい気がしないっていうか…。
<br><br>
<strong>村岡：</strong>むこうも同じこと思ってますよ(笑)。電気回路を覚えるほうが、ソフトウェアやWebサービス考えるより簡単じゃないかって。</p>

<p><img src="/wp-content/uploads/2015/02/okajima2.jpg" alt="okajima2" width="550" height="367" class="alignnone size-full wp-image-13075" srcset="/wp-content/uploads/2015/02/okajima2.jpg 550w, /wp-content/uploads/2015/02/okajima2-300x200.jpg 300w, /wp-content/uploads/2015/02/okajima2-207x138.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>岡島：</strong>どういうレイヤーで作るかにもよりますけど、例えば銀行のシステムを作るのって個人レベルじゃ厳しいじゃないですか。PHPでちょいちょいとWebサイト作るのとは全然違う。
<br><br>
それと同じで、東京デバイセズは何千万の製品を完全なものを安定的に供給するのは無理だけど、ハッカブルな製品を毎月数台出すくらいなら問題ない。十分売り上げが立つんです。やること次第だし、比べることはあまり意味がない。
<br><br>
IoTの意味って、サービスのモノ化だと思っています。IoTはソフトのハード化なんだと。サービスを作るためにスマートフォンだけじゃ足りないからモノに手を出しているんだと。それが本質なんですね。僕がハードをいじりはじめた理由なんです。興味があったわけじゃないし、PCとガラケーでできることに限界を感じていたから。</p>

<p>大手メーカーが扱っていないモノを作ろうと思ったときに、画面の外に出たくてハードに手を出した。やりたいことに限界を感じたからハードを作り出したんです。ハード屋さんハードがあるからこそ、いわゆる従来型のハードウェアの企画開発フォーカスしてしまって、Webサービスによってハードウェア製品の価値を伸ばすことに検討の余地を残してしまっていると思います。</p>

<h2>今後のIoTビジネスはどうなる？</h2>

<p><br>
<strong>村岡：</strong>サービスというのは「モノを売ってなんぼ」だけじゃない。ハード屋さんはモノを作って売る対価のやりかたに慣れすぎて、それに気づかないんです。クラウドを使うとか、ソフトばらまいて広告を売るとか、Webのマネタイズの話をすると、ハード屋さんに「思いもつきませんでした」と驚かれます。
<br><br>
<strong>高岡：</strong>今後のIoTビジネスの話は興味深いですね。IoT勉強会をやっていると大きく二つの流れがあるような気がします。Makersやデジタルファブリケーションの文脈のIoTと、IBMやインテル、シスコなどの大きいビジネスやスマートグリッドなどの文脈。これが両方が融合していない気がするんですよね。分断されてるというか。Webエンジニアがどっちの文脈でいくのがいいか悩みますね。
<br><br>
先日ガートナーは、ハードウェアスタートアップベンチャーはあと2～3年後で限界がくると指摘していましたね。スタートアップが大企業にとって食われて、やれることがなくなってくるというものでした。</p>

<p><img src="/wp-content/uploads/2015/02/iot-4.jpg" alt="" width="550" height="367" class="alignnone size-full wp-image-13077" srcset="/wp-content/uploads/2015/02/iot-4.jpg 550w, /wp-content/uploads/2015/02/iot-4-300x200.jpg 300w, /wp-content/uploads/2015/02/iot-4-207x138.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>白石：</strong>メイカームーブメントが終わるということ？
<br><br>
<strong>岡島：</strong>今の話で2つ面白いと思ったことがあります。1つはシスコやインテルのIoTと、スタートアップのIoTに乖離があるという点。シスコやインテルは、ネットに繋がるハードウェアをどういうプロトコルでつなぐといいかという点にフォーカスしている。そもそも考えている土俵が違うから、ずれがあるんですよね。理由はレイヤーが違うから。
<br><br>
ハードウェアスタートアップ限界説については、ハードウェアスタートアップがハードウェアを作るのはものすごく大変なので、実際今も起きている問題です。イニシャルコストが大きい、設計や試作も大変、サポートも大変と、ハードウェアはお金がかかるビジネスだから。
<br><br>
<strong>村岡：</strong>Kickstarterはバブルみたいなものだって、言われてますもんね。
<br><br>
<strong>岡島：</strong>僕は、ハードウェアを作るコストが下がってくれば、その構造が変わっていくと思っています。ガートナーの発表は製品を設計・製造・販売する環境が今と変わらない前提でのものだけど、製造コスト、サポートのハードルが下がれば、それぞれの枠組みが変わって、さらに多くハードウェアスタートアップが入ってくる。そうなると必然的に、ブレイクスルーが起きてくる。
<br><br>
それは、インターネット業界のスタートアップと仕組みは同じなんですよね。サーバーにはお金がかかるし、新しい技術の伝搬コストや情報共有するコミュニケーションコストもかかるから、大手しかできないと思われてたことが、今はサーバーも安くなったし、GitHubが出てきてベンチャーでも遜色なく作ることができる。
<br><br>
<strong>高岡：</strong>そこでまさに、私たちWebクリエイターの力が役立つ可能性が高いわけですよね。
<br><br>
<strong>岡島：</strong>インターネット業界では、例えばUberのように、物理的な不動産や動産に対してブレイクスルーを起こしてきた。それと同じことが起こればいいだけ。
<br><br>
<strong>白石：</strong>ハードウェアの製造コストが今は高いと思われているけど、ブレイクして、コストが下がれば、スタートアップは引き続き盛り上がるということですね。
<br><br>
<strong>岡島：</strong>もしハードウェアスタートアップのこの盛り上がりが落ち着くとしたら、潜在的な燃料がありそうなバイオ領域に関心が移ることじゃないかって思っています。大手の伸びに押されて尻つぼみになるシナリオはあんまりピンとこないですね。
<br><br>
<strong>村岡：</strong>ああ、確かにそれはありますね。</p>

<h2>IoTの時代、Webクリエイターの仕事はどう変わる？</h2>

<p><br>
<strong>白石：</strong>IoTの時代が来るとして、僕らの仕事ってどう変わっていくのか意見を聞かせてください。
<br><br>
<strong>岡島：</strong>まず、Webのビジネスにどう関わっているかが、1つ大事な判断材料ですね。Webサービスの企画立案している人にとっては、企画の幅を広げるのにいいブーム。アタマのかたすみに考えておいたほうがいいと思います。サーバーサイドをやっている人は、IoTはセキュリティやプライバシーの問題とかで、ツッコミどころが多いから需要が増えると思います。
<br><br>
<strong>白石：</strong>TechCrunchでも、IoTのセキュリティとプライバシー問題は取り上げられてましたね。　
<br><br>
<strong>高岡：</strong>求められる人材としては、ハードウェアの知識もWebの知識もある人だけど、今はまだそうそういないですよね。私たちがハードウェアを理解したり、ハードウェアエンジニアがソフトを理解する必要がある。</p>

<p><img src="/wp-content/uploads/2015/02/iot-3.jpg" alt="" width="550" height="367" class="alignnone size-full wp-image-13071" srcset="/wp-content/uploads/2015/02/iot-3.jpg 550w, /wp-content/uploads/2015/02/iot-3-300x200.jpg 300w, /wp-content/uploads/2015/02/iot-3-207x138.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>白石：</strong>今は売り手市場だけど、ハードウェアエンジニアのニーズってどうなんですか？
<br><br>
<strong>岡島：</strong>ハード系のエンジニアも、めちゃくちゃ足りないって言われてますね。ハード系はフリーエンジニアはほとんどいないんです。大手メーカーがつぶれたら、数万人のエンジニアがが野に放たれる。エンジニアを解放してほしいって思ってます(笑)。
<br><br>
「DMM.make AKIBA」の施設運営やハードスタートアップ支援プログラムを小笠原という人間と一緒にやっているんですけど、いろいろなビジネスを通じた売上も重要である一方で、職業の枠をどれだけ増やすか、ハードウェアエンジニアの仕事をどれだけ楽しくできるかをよく話したりします。 
<br><br>
ハードウェアビジネスに関わるためには大手メーカーに入るしか道がない、その状況を変えたい。これからは、想像もしないような職業が、新たなハードウェアニーズの隙間から出てくるはずなんです。そのためにもハードウェアのフリーエンジニアをどうやって増やすかを考えています。
<br><br>
<strong>白石：</strong>IT業界はゼネコン構造が多いですが、ハードウェア業界はどうなんですか？
<br><br>
<strong>岡島：</strong>見方によっては、今のハードウェア業界は20年前のインターネット業界に似ていると言われています。だが、大手しかできなかったことがより低コストでできるようになって、つまり「ハードウェアビジネスの民主化」が進むことで、個人でもビジネスでできるようになった。これからはもっと盛り上がっていくんじゃないでしょうか。
<br><br>
<strong>高岡：</strong>我々Webエンジニアがハードウェアビジネスに飛び込んで、成功する確率はあるのでしょうか？ IoTを勉強すれば、仕事の幅は広がるけど、ガチに参入したらどのくらい成功できるものなのか気になります。</p>

<p><img src="/wp-content/uploads/2015/02/iot-5.jpg" alt="" width="550" height="367" class="alignnone size-full wp-image-13078" srcset="/wp-content/uploads/2015/02/iot-5.jpg 550w, /wp-content/uploads/2015/02/iot-5-300x200.jpg 300w, /wp-content/uploads/2015/02/iot-5-207x138.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<strong>岡島：</strong>インターネットのサービスの成功確率とほぼ変わらないと思います。0.00001％とか(笑)。Webのサービスも、生き残る確率は限りなくゼロに近いですよね。
<br><br>
<strong>白石：</strong>大半がつぶれるってことですか？
<br><br>
<strong>岡島：</strong>生まれてつぶれていくのが認識できないくらいですね(笑)。今はまだ母集団が少ないから、目立っているけど。ただ認識しないといけないのは、きちんとバリューが提供できるサービスなのかどうか、お客さんに価値を与えることができるのかどうか、自分達でないとできないサービスなのかということ。ハードもソフトも、そこを設計してサービスを考えられる人は生存確率が高い。
<br><br>
生粋のハードウェア屋よりも、そういう意味ではWebクリエイターの方が成功できるはず。みんな、はてブの「成功するための○○の法則」とか大好きじゃないですか。そいう思想に慣れているのが、Web系エンジニアの強みですよね。</p>

<h2>だから、WebクリエイターもMakeしよう！</h2>

<p><br>
<strong>白石：</strong>では、最後にWebクリエイターとしてのメッセージを一言！
<br><br>
<strong>村岡：</strong>Webクリエイターもハードウェア知識も身に付けるべき、ということですね。ソフトとハードエンジニアの垣根がなくなってきたし、フルスタックエンジニアもハードの設計ができることが求められるようになると思います。
<br><br>
5年くらい前にHTML5の時代がくるって言われたけど、実際にHTML5が勧告されてから勉強し始めてたんでは、すでに遅い。たぶんそれと同じことが起こるんじゃないかと。「Arduinoとかできますよね？」って聞かれて、普通に「はい、やれます」と答えるような人が給料もらえるようになるんじゃないでしょうか。
<br><br>
<strong>高岡：</strong>なんだかんだ言っても、現実のものが動くのは楽しい。スクリーンを出て「現実をハックしよう！」ってことです。
<br><br>
<strong>岡島：</strong>画面の中だけに満足できなければ、ハードをやればいい。ただし、自分が興味があるものをやればいいし、世間にまどわされなくていい。受け身じゃなくて、好奇心をもってやるべき。時代の先端にいた人たちは、今に満足できなくて、踏み出した人たちなだけなんですから。</p>
]]></content:encoded>
		
		<series:name><![CDATA[IoTxWeb]]></series:name>
	</item>
		<item>
		<title>Webエンジニアが、量産品のハードウェアを作るようになるまで─Cerevoの中の人に聞いてみた！</title>
		<link>/shumpei-shiraishi/12913/</link>
		<pubDate>Tue, 24 Feb 2015 00:00:30 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Cerevo]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[SmartTrigger]]></category>
		<category><![CDATA[ハードウェア]]></category>

		<guid isPermaLink="false">/?p=12913</guid>
		<description><![CDATA[連載： IoTxWeb (4)Arduinoなどのマイコンのおかげで、ハードウェア開発、特にプロトタイプづくりに関するハードルはだいぶ下がりました。自分（白石）のような人間でも、LEDをチカチカさせるくらいのことはやって...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/iot_web/" class="series-240" title="IoTxWeb" data-wpel-link="internal">IoTxWeb</a> (4)</div><p>Arduinoなどのマイコンのおかげで、ハードウェア開発、特にプロトタイプづくりに関するハードルはだいぶ下がりました。自分（白石）のような人間でも、LEDをチカチカさせるくらいのことはやってみたことがあり、「こんなに簡単にハードを制御できるなんて！」と感動したのを覚えています。ただ、プロトタイプを一度作ってみると、更なる大きな疑問がわいてきます…<em>身の回りにあるハードと、自分の作ったプロトタイプの落差に驚愕する</em>のです。</p>

<p><em>自作したプロトタイプを、カッコいい量産ハードウェアに持っていくためには、どんな作業が必要なの？</em>
今回はそんな素朴な疑問に答えてもらうべく、Cerevoさんにお邪魔してプロダクトマネージャーの國舛さんにお話を聞いてきました。</p>

<p>Cerevoといえば「LiveShell」などのハードウェア制作で有名なハードウェアスタートアップ。先日のCESでは「Top Tech of CES」を受賞されたりと、その快進撃は止まりません。今回インタビューに答えていただいた國舛さんは、現在はCerevoのプロダクトマネージャーを務めていらっしゃいます。が、「<a href="http://smart-trigger.cerevo.com/ja/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">SmartTrigger</a>」という製品を手がける前までは、ハードウェア開発の経験を持たないWebエンジニアでした（僕らと一緒ですね！）。</p>

<p><img src="/wp-content/uploads/2015/02/cerebo2.jpg" alt="" width="550" height="399" class="alignnone size-full wp-image-13083" srcset="/wp-content/uploads/2015/02/cerebo2.jpg 550w, /wp-content/uploads/2015/02/cerebo2-300x217.jpg 300w, /wp-content/uploads/2015/02/cerebo2-207x150.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲株式会社Cerevo プロダクトマネージャー　國舛等志さん</span></p>

<p>そんな國舛さんに、「量産ハードウェアの作り方」をわかりやすく語っていただきました。では、お楽しみください！</p>

<h2>SmartTriggerの説明</h2>

<p><br>
<b>白石:</b> 今回は、國舛さんがはじめて中心となって手がけられた量産型ハードウェア、「SmartTrigger」を題材に、ハードウェア開発の実際についていろいろ伺いたいと思っています。どうぞ、よろしくお願いします。
<br><br>
<b>國舛:</b> よろしくお願いします。ではまず、SmartTriggerとはどんな製品かを簡単に説明したあと、開発のお話をしましょうか。</p>

<p><img src="/wp-content/uploads/2015/02/cerebo3.jpg" alt="" width="550" height="331" class="alignnone size-full wp-image-13084" srcset="/wp-content/uploads/2015/02/cerebo3.jpg 550w, /wp-content/uploads/2015/02/cerebo3-300x180.jpg 300w, /wp-content/uploads/2015/02/cerebo3-207x124.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
こちらがSmartTriggerです。簡単に言うと、カメラとこのデバイスをつないでおくことで、スマホからリモートでカメラを操作できる、という製品ですね。
シャッターを押すのはもちろん、連写やタイマー撮影もできます。</p>

<p><img src="/wp-content/uploads/2015/02/cerebo5.jpg" alt="" width="550" height="364" class="alignnone size-full wp-image-13086" srcset="/wp-content/uploads/2015/02/cerebo5.jpg 550w, /wp-content/uploads/2015/02/cerebo5-300x198.jpg 300w, /wp-content/uploads/2015/02/cerebo5-207x136.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" /><br><span style="font-size: 80%;">　▲聞き手：HTML5 Experts.jp編集長　白石俊平</span>
<br><br>
<b>白石:</b> おもしろいですねー。SmartTriggerが、スマホから送られてくる命令に従って、カメラを操作するという感じなんですね。
<br><br>
<b>國舛:</b> そのとおりです。タイムラプス動画（時間をかけて連続撮影した写真を動画のように高速再生するテクニック。時間を圧縮したような感覚の動画を得られる）も、間隔や秒数などのパラメータをセットしたら、あとはSmartTriggerが勝手にやってくれます。その間、スマホでは別の操作をしていても全然構いません。
<br><br>
<b>白石:</b> カメラとSmartTrigger、スマホはどういう風に通信するんですか？
<br><br>
<b>國舛:</b> SmartTriggerとスマホの間はBluetoothで無線通信します。SmartTriggerとカメラはケーブルで有線接続。メーカーの違いはケーブルで吸収していますので、国内メーカーのカメラはほとんどサポートできています。
<br><br>
<b>白石:</b> なるほど、手持ちのカメラに合うケーブルも同時に購入する、というかんじなんですね。<br />
では本日は、この「SmartTrigger」を制作するにあたってのいろいろなお話を伺いつつ、「Webエンジニアが量産品のハードウェアを作るまで」をお聞きしたいと思います。</p>

<h2>元々はWebエンジニアが趣味で始めたプロジェクト</h2>

<p><br>
<b>白石:</b> 國舛さんは以前はWebエンジニアだったとお聞きしていますが、そんな國舛さんがSmartTriggerを作るようになった経緯と製作過程を教えて下さい。
<br><br>
<b>國舛:</b> はい、元々私はJavaで業務系のアプリを作っているエンジニアだったのですが、数年前にCerevoに転職しました。この会社では、最初はPythonでサーバサイドのプログラミングを担当していて、そこからiOSのアプリエンジニアにシフトしていきました。<br />
<br>
SmartTriggerについては、最初は趣味でやっていたんです。テレビを見ていたら「タイムラプス」という表現方法があることを知り、それをキレイに撮れるようなデバイスはないかと探していました。
<br><br>
でもその当時の製品は割と高くてかっこよくなかったんです。買おうかどうか迷って、ネットで情報を収集しているうちに、「どうやら自分でもプロトタイプなら作れるんじゃないか」と思うようになりまして。同じようなものを作っている方の情報を参考にしながら、同じようにやったらとりあえずできた。
<br><br>
でもそこで自己満足してしまって、その後はしばらくほっといてたんですよ。その後会社でアイデアを出す場があったので、そこでこのアイデアを提案したことが、仕事になったきっかけですね。
<br><br>
<b>白石:</b> なるほど、会社の仕事とも関係なく、純粋に個人的なプロジェクトとして始められたんですね。
<br><br>
<b>國舛:</b> そうなんです。全然仕事にするつもりはなかった。
<br><br>
<b>白石:</b> ちなみに結論を先取りしてしまうと、結局これが量産ハードウェアづくりにつながるわけですが、その時点で量産ハードウェア開発の知識とかはあったんですか？
<br><br>
<b>國舛:</b> いえいえ、それが全然…。周りに助けられながら、なんとかやり遂げた感じです。
<br><br>
<b>白石:</b> それはソフトウェアしか触ったことのないぼくのようなエンジニアからすると、朗報です。いい仲間さえいれば、なんとかなるもんなんですね！</p>

<h2>まずはプロトタイピング</h2>

<p><br>
<b>白石:</b> では、SmartTrigger開発がどのように進んだのかをお聞かせください。最初のプロトタイプってどんな感じだったんですか？
<br><br>
<b>國舛:</b> 最初はAndroidとArduino、あとカメラを全部有線でつないだようなものでしたね。ネットの情報を見ながら、「Androidで操作したらカメラのシャッターが切れる」というところまで作りました。
プロトタイプは3つくらい作りましたね。
<br><br>
まず最初のプロトタイプは、そもそものコンセプトが実現できるかどうかを、形や大きさを気にせず試してみました。</p>

<p><div id="attachment_12920" style="width: 234px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/02/prototype1-224x300.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/02/prototype1-224x300.jpg" alt="SmartTrigger最初のプロトタイプ" width="224" height="300" class="size-full wp-image-12920" srcset="/wp-content/uploads/2015/02/prototype1-224x300.jpg 224w, /wp-content/uploads/2015/02/prototype1-224x300-154x207.jpg 154w" sizes="(max-width: 224px) 100vw, 224px" /></a><p class="wp-caption-text">SmartTrigger最初のプロトタイプ</p></div>
<br>
2回目のプロトタイプは、個人的な興味もあって<a href="https://mbed.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">mbed</a>という基板を使ってみたりと、ちょっと寄り道したりもしましたが、基本的にはどんどんサイズを小さくしていくのが目標でした。</p>

<p><div id="attachment_12921" style="width: 310px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/02/proto2.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/02/proto2.jpg" alt="SmartTrigger2番目のプロトタイプ" width="300" height="200" class="size-full wp-image-12921" srcset="/wp-content/uploads/2015/02/proto2.jpg 300w, /wp-content/uploads/2015/02/proto2-207x138.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">SmartTrigger2番目のプロトタイプ</p></div>
<br>
3回目のプロトタイプでは、BLE (Blootooth Low Energy) を使って動作させてみることが目標でした。BLEを触った経験がなかったもので、BLEのモジュールを取り寄せるところから始めて、手探り状態でしたね。</p>

<p><div id="attachment_12922" style="width: 310px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/02/proto3.jpg" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/02/proto3.jpg" alt="SmartTrigger3番目のプロトタイプ" width="300" height="200" class="size-full wp-image-12922" srcset="/wp-content/uploads/2015/02/proto3.jpg 300w, /wp-content/uploads/2015/02/proto3-207x138.jpg 207w" sizes="(max-width: 300px) 100vw, 300px" /></a><p class="wp-caption-text">SmartTrigger3番目のプロトタイプ</p></div>
<br>
<b>國舛:</b> SmartTriggerはクラウドファンディングを前提としていたので、プロトタイプの段階でできるだけホンモノをイメージできるものを作るようにしました。その後クラウドファンディングで無事成立し、製品化が決定。そこからは最終製品づくりに向かいました。</p>

<h2>量産に至る過程</h2>

<p><br>
<b>白石:</b> ちょっとそこ、詳しくお聞きしてもいいですか？Arduinoとかを使ったプロトタイピングまではまだイメージできるんですが、そこから最終製品を量産するというところまでのイメージがさっぱりわかなくて…
<br><br>
<b>國舛:</b> ぼくの場合はまず、リリース時期を決めてしまいます。例えばクリスマス商戦に間に合わせるぞ、とかですね。そこから逆算して、各工程にかけられる時間を見積もります。
<br><br>
そうして今度は、量産を前提とした試作を行っていきます。試作は毎回、明確な目標を定めて行うようにします。
<br><br>
まず必要なのは基板の設計と製品のデザインですね。それぞれ専門の方に担当していただき、まずは荒くてもいいから動くものを作ります。で、ここでトラブルがたくさん起きる。
<br><br>
それを受けて次の試作では、1度目の試作で出たトラブルに対処しつつ、信頼性の検証を行いました。
例えば静電気が発生しても壊れないとか、ボタンを何回押しても壊れないとか。
<br><br>
こんな感じで、次に何をやるかをイメージしながら、どんどん試作を改良していくイメージです。
<br><br>
<b>白石:</b> デザインはどんどん変化していくんですか？
<br><br>
<b>國舛:</b> いえ、<em>デザインは最初のほうでしっかり固めなくてはなりません</em>。ハードウェアは、デザイン修正のコストが大きいので。そこがWebとは大きく違うところですね。
でも最近は3Dプリンタで簡単に出力できるのがありがたいです。基板が入るかどうかとか、ボタンが押せるかどうかとか、そういったことを確認するためには3Dプリンタで作った試作品がとても役に立ちます。
<br><br>
<b>白石:</b> なるほど。そして、何度か試作を行って完成度を高めたら、いよいよ量産に向けて動き始めるんですよね。
<br><br>
<b>國舛:</b> はい、そうですね。<em>量産するにあたっては、部品を購入したり、工場を決めたりということが必要になってきます</em>。<br>
部品も、物によっては中々入手できなかったりするので、どこからどうやって調達するかを考えなくてはなりません。ぼくらは中国の工場を使ったのですが、部品を現地で調達したほうがいいのか、こちら（日本）で入手したり作ったりしてから送ったほうがいいのかとか、いろいろとトレードオフがあります。<br><br>
また工場を決定するにあたっては、実際に現地の工場に足を運んで、設備や品質管理のレベルを確認します。スタッフの熟練度は非常に重要で、実際にサンプルを作ってもらって、クオリティを確認する必要があります。
そうして選んだ基板工場や金型工場、組み立て工場に3Dデータや回路図を渡し、量産を依頼するわけです。
<br><br>
<b>白石:</b> 工場に量産をお願いしたら、あとはスムーズに製品ができ上がるんですか？
<br><br>
<b>國舛:</b> それが理想なんですが、実際にはよくトラブルが起きてしまうんですよね。
あらかじめテスト項目を用意しておくんですが、テストにパスしないものが多く出てくると「不良率が高い」ということになって、なかなか出荷したい台数に届かないということになります。
<br><br>
量産するにあたっては、「量産試作」という工程があって、実際の工員さんを使って量産ラインを流してみます。
例えばそこで100台とか、多めの数を流して検証してみて、組立方法を変更して時間を短縮したり、製品に不具合がないかどうかを検証して調整します。
そうして問題が出なくなったら、あとはどばっと流すかんじですね。</p>

<h2>ハードウェア開発の体制と工程</h2>

<p><br>
<b>白石:</b> 量産に至るまでの流れが、少しイメージできるようになりました。これも聞きたいんですが、ハードウェアを作るとなると、実際にはどういうスキルを持った人が必要になるんでしょうか？
<br><br>
<b>國舛:</b> 大きく分けると4つくらいの職種が共同で作業に当たる感じですね。
<br><br>
まずは<em>電気設計</em>。基板づくりを担当します。
<br><br>
<em>デザイナー</em>。製品の見た目はもちろん、ボタンの押し心地などの機構も考えます。他にはパッケージや製品アクセサリのデザインもするし、場合によってはWebサイトのデザインも行ったりします。
<br><br>
<em>組み込みエンジニア</em>。ハードウェアに搭載する組み込みのソフトウェアを担当します。
<br><br>
そして一般的な<em>アプリエンジニア</em>です。
<br><br>
他にもサーバインフラのエンジニアやプロジェクトマネージャーなどもいたりしますが、基本的には先程申し上げた4つの職種がメインになります。
<br><br>
<b>白石:</b> あと、工程や期間についても、少し具体的に教えていただけますか？
<br><br>
<b>國舛:</b> 原理試作、EVT、DVT、そして量産と言った流れですね。</p>

<p><div id="attachment_12963" style="width: 650px" class="wp-caption aligncenter"><a href="https://html5experts.jp/wp-content/uploads/2015/02/4c39d2a07e17ffc686015473bd582e28.png" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer"><img src="/wp-content/uploads/2015/02/4c39d2a07e17ffc686015473bd582e28.png" alt="量産型ハードウェア開発プロセス（一例）" width="640" height="299" class="size-full wp-image-12963" srcset="/wp-content/uploads/2015/02/4c39d2a07e17ffc686015473bd582e28.png 640w, /wp-content/uploads/2015/02/4c39d2a07e17ffc686015473bd582e28-300x140.png 300w, /wp-content/uploads/2015/02/4c39d2a07e17ffc686015473bd582e28-207x96.png 207w" sizes="(max-width: 640px) 100vw, 640px" /></a><p class="wp-caption-text">量産型ハードウェア開発プロセス（一例）</p></div>
<br>
Cerevoでいう原理試作というのは、どんな大きさでもいいから、やりたいことが出来るかを検証します。この過程でArduinoとかが使われますね。
<br><br>
EVTはEngineering Verification Testの略で、Cerevoでは社内で（作業が）完結する試作のことを指します。デザインを3Dプリンタで出力してみて、基板や部品が中にきちんと収まるかどうかを検証するのが主な目的です。ソフトウェアもちょっと書いたりしますね。EVTは1〜3回行い、1回のフェーズでだいたい1ヶ月から1ヶ月半かかります。
<br><br>
EVTを進めて行く中で、そろそろ工場にお願いしてもいいかな、という段階になったら、1〜3ヶ月くらいかけて工場の選定を行います。新しい工場を使うなら、契約とかも必要になりますね。
<br><br>
決定したら、DVTを行います。DVTはDesign Verification Testの略で、工場側がきちんと設計通り製造できるかのチェックが目的の試作になります。ここで問題がなければ、量産を行います。
<br><br>
最後に量産ですが、そもそも最初に電子基板作るのに3〜4週間かかりますね。<br>
その上で、1,000台とか3,000台作るとなると、2〜3週間かかるかな。部品が全部揃っているという前提ですけどね。量産にかかる時間は、製品によってかなりまちまちです。あとは販売ルートとかマニュアルの整備とか、そういう実務も必要になってきます。</p>

<h2>「とにかく作ってみる！」それが大事！</h2>

<p><br>
<b>白石:</b> ではそろそろインタビューを終えたいと思いますが、これまでソフトウェア開発しかしたことがないエンジニアに向けて、一言いただけますでしょうか？</p>

<p><img src="/wp-content/uploads/2015/02/cerebo4.jpg" alt="" width="550" height="352" class="alignnone size-full wp-image-13088" srcset="/wp-content/uploads/2015/02/cerebo4.jpg 550w, /wp-content/uploads/2015/02/cerebo4-300x192.jpg 300w, /wp-content/uploads/2015/02/cerebo4-207x132.jpg 207w" sizes="(max-width: 550px) 100vw, 550px" />
<br><br>
<b>國舛:</b> 「とにかく作ってみる」それが重要ですね。最近は3Dプリンタもあるし、マイコンも流行っているので、ハードウェアを触るのもずいぶん敷居が下がりました。エンジニアは、どうしても「小さく」「カッコよく」を目指してしまいがちなんですが、最初はそんなのどうでもいい。とにかくやってみることが重要です。あとは、最近はイベントとかもよくやっているので、そういうのにも参加してみてはいかがでしょうか。
<br><br>
<b>白石:</b> 本日は、実際にハードウェア製品をリリースするまでの過程を詳しくお話いただき、ありがとうございました！とてもためになりました。</p>

<p>ちなみに、國舛さんが<strong>「ハードウェアスタートアップでアプリエンジニアは何をしているか」</strong>というテーマでブログを書かれています。こちらも合わせてお読みいただくと、より理解が深まると思います！</p>

<ul>
<li><a href="http://tech-blog.cerevo.com/archives/753/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">ハードウェアスタートアップでアプリエンジニアは何をしているか</a> | Cerevo TechBlog</li>
</ul>
]]></content:encoded>
		
		<series:name><![CDATA[IoTxWeb]]></series:name>
	</item>
	</channel>
</rss>
