[DIY] そのスポンサーブース、退屈じゃないですか？

※タイトルは煽りっぽくなりまいたが、内容はいたってマイルドです。(技術的な内容は後半部分から)

## XXXX (Tech イベント) でブース出展します
近年本当に数多くのTech イベントが全国で盛んに開催されるようになりました。
イケイケなIT企業には、今や当たり前のようにイベントに駆り出される専門部隊が暗黙の了解のもと乱立しているのではないでしょうか。

### ブースの目玉コンテンツ、とりあえず swag でごまかしガチ問題
これは僕の勝手な思い込みかもしれませんが、今やTech イベントのブース出展となると、とにかく右を見ても左を見ても、なんとか目立たねば、注目を集めねば！と、それはもう思考を凝らした時としてとんでもない面白ブースが現れます。

- 参考(しゅき)事例: RubyKaigi 2018にて、板チョコを1000個机に積んだ後自己崩壊を起こした CASHさん   
https://twitter.com/mm_hikaru/status/1002040577251196928

ただ…
僕はマーケティング担当者でもなんでもありませんし、何が正解で間違っているかも分かりませんが、何度かブースの出展者側として参加させてもらった経験から、swag に頼りすぎなんじゃないか… という思いがありました。
もちろんティッシュ配りの原則で、役立つ swag を配って広告効果！万歳！というのは間違いなく効果として見込めるのでしょうが、現場でそれなりの権限を持って働いている開発者が一定数は集っているであろうイベントで、もう少し違ったアプローチは取れるんじゃないか？と、思う今日このごろなわけでして。

(あとなんか、swag 目当ての回収業者みたいな方いるじゃないですか… ややブーメラン)

### 短い時間でも双方向のコミュニケーションを取りたい
一般的なブースでやはり思いつくのは、

- マーケティング用の販促資料
- モニタ設置 (ループ動画・場合によって実際にサービスを動かしながら見せる)

などが挙げられると思います。実際にこの2つはほとんどの会社さんが基本やっていると思います。
ただこの場合、どうしても一方向のコミュニケーションになりがちじゃないですか？ swag を起点にお客さんへ会話を持ち出しますが、資料や画面を使って情報を出し続けるばかりで、聞き手側は右から左へ流れていることも多いはずです。

そして、一通り説明を終えた後に例えばデモに持ち込もうとしても、大半の人はその時点で興味の有無が内心ははっきりしていて、あんまり刺さらない、なんだか長くなりそうだ… みたいな印象も与えることもあるかもしれません。

### 「なんだこれ？」と思わせたい
ちゃんと自社のコンテンツと結びつき、なおかつお客さんと気軽に双方向のコミュニケーションが取れ、swag ではない何か、となると、ぱっと見ただけでは何がしたいのか分からない奇妙さを兼ね備えた、お客さんが手を動かして"体験"できる何かがよさそうです。ただ手を動かす奇妙な物ならいくらでも置けますが、重要なのはそれがコンテンツとどう結びつくか、だと思います。

##DIY編: ボタンを置こう ~安易な考え~
![purge-button.jpg](https://qiita-image-store.s3.amazonaws.com/0/19942/4ae1dab4-f9ae-1896-448b-32c4cfbf735c.jpeg)
https://twitter.com/mnot/status/920115481620529154

上の写真は僕が2017年の自社のイベントの際にブース用に作った通称 "Purge Button" です。

### 自社のサービスの強み + ボタン = ?
僕の場合は、CDNの会社にいるので、万人に理解してもらいやすい自社の強みというとコンテンツのキャッシュのinvalidationの速度、つまりはPurgeの高速性でした。
これとボタンを組み合わせるとなると、自然と出来上がる物の方向性は絞られてきます。そこで出来上がったのが "Purge Button" で、赤い大きなボタンを押すと実際にAPIを叩きにいって、画面上のコンテンツが一瞬でPurgeされている様子が体験できるという非常にシンプルなものです。特別なことは何もしておらず、実際にお客さんが使える公開APIしか使っていません。

### 電子工作
あくまでも参考程度にしかなりませんが、電子回路とかすげー苦手な素人がネットの情報を鵜呑みにした結果、とりあえずArduinoを買って、そこにボタン繋げれば後はなんとかなるだろう…くらいの気持ちで組みました。

<img width="568" alt="Screen Shot 2018-10-22 at 17.50.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/19942/a15f2f0b-5088-e2dd-20af-c16229422691.png">

使ったのは、

- Arduino UNO
- 物理ボタン (大、小)
- ブレッドボード
- 3.5mm Audio Jack (ブレッドボードとボタン間の延長用)

くらいで、いずれも秋月電子とかその辺りに行けば簡単に揃います。大きいボタンは確か秋月電子の並びのパーツ屋さんで売ってました。ゲームセンター用のものらしいです。

### Arduinoに書くプログラムは最小限におさえて、後は受け取り側で処理
Arduinoにモジュールを付けて色々頑張る、みたいな凝った作りは腕に自信がなかったので、今回はシンプルに、

- Arduino がボタンの入力をアナログ信号で受け取る (要チャタリング対策)
- Arduino がどのPort(ボタン)が押されたかを判断して、それを接続先のPCへSerial信号で投げる
- Arduino とUSBで接続されたPCは、任意の待受プログラムを実行し、  
Serial信号をトリガーにしてAPIを叩く

といった構成にしました。こうすることで、PC上では使い慣れた言語で処理を書けますし、Arduino そのものはインターネット接続を必要としないので、PCのインターネット回線を使うことができネットワーク的にも安心です。
ちなみに僕は、PC側の待受プログラムに Node.js の [Node Serialport](https://www.npmjs.com/package/serialport) を使いました。

クライアント側だけ作ればそれで立派なボタンを使ったデモ完成！というケースもあれば、僕の場合はブースに置くクライアント環境と、一部そのアクションを受け取るサーバ側の環境も用意する必要がありました。
(GAEを使って、Server Sent Eventsのストリームにボタンの入力アクションを流して、ブラウザ上のイベントを発火させる)

### 動く様子
@jollyjoester さんの投稿からご確認ください…！
https://twitter.com/jollyjoester/status/1002447734777917440

### 反応は？
当初は特定のイベントのためだけに作ったこのPurge Buttonは社内外から意外な反応があり、おかげさまで今でも現役です。やはり"ボタン"という明らかに「押す」ことしかできない単純な物体を置くことで、

「押すと何が起きるんですか？」
「これってなんですか？」
「あ、Arduinoだ、へぇ〜」

というように、普段は中々自分からは会話を持ち出しに行きづらいエンジニア勢の方でも、興味本位で自ら歩み寄って話しかけてくれる場面が非常に多かったです。もちろん swag もあるのですが、ただ swag を置くのと、こういったデバイスがあるのとではやはり全然効果の効き方が違ってくるのではないかなと勝手に感じています。それを示すデータはありません！！

### まとめ
半田付けをする時はちゃんとズボンを履きましょう。