みかづきブログ その3

本ブログは更新を終了しました。通算140万ユーザーの方に観覧頂くことができました。長い間、ありがとうございました。

👆

引越し先はこちらです!

2017年に買ってよかった「モノ」、つかってよかった「サービス」 まとめ

こんにちは。@ki_230です。
いたるところにクリスマスツリーが飾られ、年末って感じがしてきましたね。
近所のクリスマスツリーには、なぜか短冊が飾られていて、
子どもたちがサンタさんに欲しいものを書いては飾るという運用がされているのですが、
ツリーってそういうものでしたっけ?そういう文化は七夕だったような。。。

で、最近の子供はどんなものをほしいと思っているのかな。
と思って何枚か見てみたところ、「リーフチケット」とか「魔法石」とか書いてありました。

なるほど。もはや、子供の欲しいものさえも、「モノ」ではなく「サービス」に移行しつつあるのですね。
よく考えたら、僕も高専生のときに「携帯電話」が欲しいと思ったんですが、
それも「モノ」じゃなくて「サービス」を欲していたんだなぁとしみじみ思いました。

そんなこんなで、2017年に買ってよかった「モノ」、つかってよかった「サービス」を紹介します。


UQ mobile

www.uqwimax.jp

さて、いきなり「モノ」ではなく「サービス」ですが、
今年一番よかったと思ったのは、auからUQ mobileへの乗り換えです。
月々のスマホ代が、だいたい四分の一になりました。

kimizuka.hatenablog.com


iPhone SE

www.apple.com

UQ mobileに乗り換えるためにSIMフリーのiPhone SEを買ったのですが、
これもとても満足しています。サイズ感も性能も。
そう。このサイズのiPhoneが発売されるまでSEで頑張ろうと思うほどに。


Blue Sea Kingmobile iPhone5/5S/5C/6/6Plus/6S/6S plus/7/7Plus専用 NaNoSIMサイズアクティベートカード au用 6007

地味に買ってよかったと思ったのがアクティベート用のSIMです。
au時代につかっていた、iPhone6を検証機として使おうと思ったら、
解約後はアクティベートできなくなってとても困っていたのですが、
アクティベート用のSIMを購入したことで、いまでも検証機として活用できています。

kimizuka.hatenablog.com


Apple MacBook Pro (足マット(4個セット))

なぜか、MacBookの足をよく無くすので買いました。
純正品とは、明らかにさわり心地が違うのですが、
足が外れっぱなしの状態よりは数段良いと思っています。
一度、海外から純正品を取り寄せたこともあるのですが、
送料込みで3,000円以上かかったので、こちらの商品には感謝してます。


ダイソン 掃除機 コードレス V6 Slim SV07 ENT2

[asin:B071716SRS:detail]

サイバーマンデーセールで買いました。
コードレスになるだけで部屋の掃除をするのが400倍ぐらい楽になりました。(個人の感想です)
本当に買って良かったです。


超・箇条書き―――「10倍速く、魅力的に」伝える技術

今年読んだ本の中で、「一番読むのに時間がかからなかった」 かつ 「実際に試したいと思うことが書いてある数が多かった」なので、買ってよかったと思ってます。


サンデーうぇぶり

サンデーうぇぶり

サンデーうぇぶり

  • SHOGAKUKAN INC.
  • ブック
  • 無料

無料のアプリです。僕がサンデーが好きということを差し引いても良くできたアプリだと思いました。
「少年ジャンプ+」と比べてみると、「毎日コインが貰えて、そのコインで漫画を読めると」いう座組は同じものの、
サンデーうぇぶりは、

  • なにもせずとも15分に1コインもらえる
  • コインのストック量に上限がある

の2点が、ジャンプよりも優れていると思いました。
この2点のコンビネーションにより、コインのストック量がマックスの時は「漫画を読まないと損」という感情が生まれるからです。



以上です。何処かで誰かの参考になれば幸いです。
今週のお題「今年買ってよかったもの」

Google Apps ScriptでDateオブジェクトをつくろうとしたときのメモ

new Date("2017-12-12 10:00"); // => Thu Jan 01 09:00:00 GMT+09:00 1970

という感じで「あれー?」と思っていたんですが、

new Date(2017, 11, 12, 10, 0, 0); // => Tue Dec 12 2017 10:00:00 GMT+0900 (JST)

としたら解決しました。

mozillaのサイトのdatastringの箇所を確認したら、

ブラウザごとに動作が異なり一貫性がないため、Date コンストラクタ (または同等の Date.parse) で日付文字列を解釈しないように強くすすめます。

と書いてありました。

developer.mozilla.org

これからは、引数に文字列を渡すのをやめようと思います。

IoTデバイスの効果測定にはGoogleアナリティクスのMeasurement Protocolがおすすめ!(サンプルコード付き)

この記事に書いてあること

  • GoogleアナリティクスのMeasurement Protocolのつかいかた
  • Measurement Protocolの実装例(Node.js)

この記事のターゲット

  • IoTデバイスをGoogleアナリティクスをつかってイベットトラッキングして、効果測定してみたい人

はじめに

このエントリーは IoTLT Advent Calendar 2017 の8日目の記事です。

こんにちは。フロントエンドエンジニアの @ki_230 です。
今年は何回か IoTLT に出場させていただいたご縁で、 アドベントカレンダー にも参加させていただくことになりました。どこかでだれかの役に立てるような記事を書けるように頑張ります。


自己紹介

まずは、自己紹介がてら、今年IoTLTで発表させていただいた資料を紹介していきたいと思います。

ウェバイスをつくろう(健康促進編)

www.slideshare.net

6月に エンタープライズIoTLT #8 ヘルスケアIoTLT @デジハリ - connpass でLTさせていただいたときの資料です。
資料に初々しさが残っています。
-

ウェバイスをつくろう(合コンさしすせそボタン編)

www.slideshare.net

8月に IoT縛りの勉強会! IoTLT vol.30 @ DMM - connpass でLTさせていただきたときの資料です。
発表の際に資料内の動画の音が流れませんでした。
-

天才になろうとしました

www.slideshare.net

10月に IoT縛りの勉強会/LT会「失敗編」【増枠】@Microsoft - connpass でLTをさせていただいたときの資料です。
8月の失敗の反省から、音がなくても伝わるように動画にキャプションを足すことにしました。
そう。人は失敗を経て成長していくのです。
-



と、普段はこんな感じのことをやっています。
LTでは毎回のように、

「IoTはインターネットにつながっているので、Googleアナリティクスとかでログを取るのが簡単なんですよ」

的な説明をさせていただいたものの、時間の関係で、具体的な方法までは紹介してきませんでした。
そこで本エントリーでは、

GoogleアナリティクスのMeasurement Protocolをつかった、IoTデバイスのイベントトラッキング方法

をご紹介したいと思います。


Googleアナリティクスとは

Google Analyticsは、Googleが提供するトラッキングサービスです。
基本的には無料でつかうことができるので、
ウェブページとかスマホアプリとかに組み込んでつかったことがある方は多いのではないでしょうか。

ウェブページでつかう際には、

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXX-X"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-XXXXXXXX-X');
</script>

こんな感じのタグを埋め込むだけで、基本的なトラッキングをしてくれるので大変便利です。

さらに、ウェブページでイベントを計測したいと思ったら、

gtag("event", "アクション名", {"event_category": "カテゴリ名", "event_label": "ラベル名"});

タグを読み込んだ時点で、gtagというグローバル関数が宣言されているので、
という感じで、アクション、カテゴリ、ラベルをいい感じに引数に渡して実行すればOKです。
いい感じにイベントをトラッキングしてくれます。

かなりふわふわ系の説明なので、詳しく知りたい方は下記リンクを読んでみてください。
developers.google.com


IoTデバイスでのイベントトラッキング

上記の例のように、ウェブページではかなり簡単に設定でき、
なおかついい感じにトラッキングレポートをつくってくれるGoogleアナリティクスなので、
是非ともIoTデバイスの効果測定にもつかいたいところなのですが、
ウェブ版を組み込むためには、JavaScriptの実行環境とWindowが、
アプリ版を組み込むためにはSDKの組み込み(最近ではFirebaseアナリティクスをつかうことも多いらしいです)が必要となり、
IoTデバイスに組み込むのは、どうしてなかなか手軽にできる感じではありませんでした。
そこで個人的におすすめなのが、Measurement Protocolというわけです。

Measurement Protocolとは

HTTPリクエストでユーザーの利用状況に関する生データをGoogleアナリティクス サーバーに直接送信できる仕組みです。

developers.google.com

GETでもPOSTでもつかえるので、古くはメルマガの開封率を測定するのにつかわれていたようですね。
IoTデバイスはインターネットにはつながっているので、HTTPリクエストはできるはず。うってつけのインターフェイスといえるでしょう。

つかいかた
https://www.google-analytics.com/collect

こちらのURLをエンドポイントにし、アクション、カテゴリ、ラベルをパラメータに含めGETかPOSTでリクエストを送ります。
なので、

https://www.google-analytics.com/collect?v=1&t=event&tid=GoogleアナリティクスのID(UA-XXXXXXXX-X)&cid=デバイス識別子&ec=カテゴリ&ea=アクション&el=ラベル

という感じのリクエストを送れば、

gtag("event", "アクション名", {"event_category": "カテゴリ名", "event_label": "ラベル名"});

と、ほぼほぼ同等のトラッキングが可能です。
(Measurement ProtocolではUAとか画面サイズなど、gtagで自動でトラッキングしてくれる情報を取得したい場合は、自分でパラメータにつけないといけないので、厳密には同じ情報をトラッキングできてません)

やはり、かなりふわふわ系の説明なので、
パラメータなど詳細を確認したい場合は下記リンクをご確認ください。
https://developers.google.com/analytics/devguides/collection/protocol/v1/reference?hl=ja

実装例

Measurement Protocolがどんなものかわかったところで、
「マットマックス4DX with Yumake」を例に実装例を紹介します。


マットマックス4DX with YuMake

https://hacklog.jp/works/52458hacklog.jp


「マットマックス4DX with Yumake」は、振動で外の天気をつたえるハプティクスマットなのですが、

  • 踏むと振動するマット
  • 天気を取得する地域を設定するウェブサイト

の2つの要素で構成されており、
「天気を取得する地域を設定するウェブサイト」側のイベントは、
ウェブ用のGoogleアナリティクスで問題なくトラッキングできます。

Measurement Protocolを使うべきは、
「踏むと振動するマット」のイベントをトラッキングしたいときで、
踏まれるたびに、Measurement Protocolのエンドポイントに対してHTTPリクエストを送れば、
イベントをトラッキングできるわけです。
「マットマックス4DX with Yumake」のマットの内部にはNodeサーバが立っているので、

const request  = require("request");
const url      = requite("url");
const GA_ID    = "UA-XXXXXXXX-X";

let deviceid = "";

class Logger {
  static ga(deviceid, area) {
    let param   = {
          v   : 1,
          t   : "event",
          tid : GA_ID,
          cid : deviceid, // 引数でデバイスIDを受け取る予定
          ec  : area,     // 引数で地域を受け取る予定
          ea  : "step",   // 踏まれたイベント
          ev  : 1         // 踏まれた回数をvalueとして送信
        },
        options = {
          uri : url.format({
            protocol : "https:",
            slashes  : true,
            host     : "www.google-analytics.com",
            pathname : "/collect",
            query    : param
          }),
          timeout: 1000
        };

    request.get(options);
  }
}

module.exports = Logger;

というようなクラスをつくり、

Logger.ga("mat-0001", "13"); // マットマックス1号機が東京設定で踏まれた

という感じでつかっています。
これで、どれぐらい踏まれたのかがまるわかりですね。^ ^


おわりに

IoTデバイスは課題を解決するためにつくられることが多いですが、
実際に課題が解決できたかどうかを測定するためにも、イベントトラッキングはとても重要だと思っています。
Measurement Protocolは、HTTPリクエストが使える環境(IoTであればつかえるはず)であれば、
驚くほど簡単に導入できるので、とてもおすすめです!

明日は、@wamisnetさんによるおもしろいエントリーです。
引き続きよろしくお願いいたします。