Project: 「夜間頻尿診断」: GitHub

    何か作ってみたい

     前回の記事の続きでWithingsのAPIを使って何か作るものはないかと無理やり考えてみた結果、夜間頻尿判定サイトを作ってみました。睡眠中の「目覚め」回数をトイレに起きた回数と考えて、夜間頻尿状態かどうかを判断するサイトです。Withingsのサイトで表示される睡眠トラッキングのグラフには「目覚め」回数は数字で表示されていますが、グラフ化されていないので睡眠トラッキングと同じグラフ上に描画しようという魂胆です。Withingsの週単位のグラフは、縦軸に時間、横軸に曜日(日付)となっていますが、睡眠時間を小数表示にして「目覚め」の回数を同じグラフ上にプロットしています。無理やりなんて書きましたが、Withingsのグラフは週単位でしか表示できなくて、もっと長い期間のグラフをまとめて表示したいという不満があったので、その不満を解消する目的もあります。

    • Withingsのグラフ

    Withingsのグラフ

    • 今回作成したグラフ

    夜間頻尿診断グラフ

    開発時に気になったこと

    • アクセストークン/シークレットの保存先
       昔からbot作ったりしてTwitterでOAuth認証(認証ではない?)やRails2時代にgoogleのOpenIDによる認証を使ったりしたことはありますが、そういう認証方式を取るのは、ユーザー登録という手間を省きたい、ユーザー情報を管理したくない、使いたい人は自己責任で勝手に使ってください、個人情報を入力させたりして余計な責任負いたくないという理由があるわけですが、今回のアプリの場合扱うデータが結構秘匿性が高いというか、人によっては知られたくないデータだと思うのでちょっといろいろ考えさせられました1。というのも前回の記事でoauth_signatureを作成する方法をネットで調べていた際に、一度取得したアクセストークン/シークレットはDBに保存すればいいという書き込みをよく見かけたからです。でも、自社サーバーでコストかけて運用している企業ならいざ知らず、そんなことをして何かの原因で全ユーザーのIDとセットで漏洩したらマズイと思ったので、DBには保存せずセッションに保存することにしました。「クライアントにデータが渡る方が危険」、「盗聴されたら同じ」、「セッションが残ったままになる可能性が有る」とかいろいろ意見はありそうですが、無料枠のherokuで適当に運用する以上DBに保存するよりセッション(cookieに保存)の方が安全だと思いました。WithingsのUserIDはDB内で管理し、クライアントに渡るのはRailsが付加するUserIDとアクセストークン(暗号化済み)という感じで、Withings社のUserIDとアクセストークン/シークレットが別々に格納されているほうが安全でしょう。
       結局、DBに保存するかセッションに保存するかはサイトのポリシー次第と言えると思いますが、私の場合ソースも公開するから心配ならローカルで動かして使ってくださいっていうポリシーでいきます。
       と、長々と書きましたが実際には利用する人なんてほとんどいないと思われるので、心配する必要もないのですが苦労性な性格なんです。

    • ユーザー情報が入っていない
       Twitterの場合認証を済ませてアクセストークンを取得する時にユーザー名などのユーザー情報(infoデータ)を返してくれます(Facebookもそのようです)が、Withings社のAPIの場合ユーザー情報が何も返ってきません。そのためユーザー認証を済ませた直後にいきなりユーザー情報を取得するためのAPIを発行するという重たい処理をしてWelcome表示しています。前回の記事でも愚痴っぽいことを書きましたが、ネットを検索している最中にもWithings社のAPIの仕様に文句を言っている海外の書き込みを見かけました。自社のWebAPIを公開する企業の姿勢というのは開発者としてもユーザーとしても応援したいのですが、そのことで企業のイメージを悪くするのであれば状況が変わってくる可能性もありそうです。日本でも自社サービスのAPIを公開している企業があると思いますが、どうなのでしょう、あまり利用されてないのかもしれませんが。

    その他、Withings Activitéを使ってみて気づいたこと

    • 毎日スマホと同期しないとデータが抜け落ちる
       時計本体に保存しておけるのは1日分のデータだけのようです。言われてみれば活動量計の針も深夜0時になると0(ゼロ)の位置にリセットされるので当然かもしれませんが、Withingsのグラフでデータが抜けている日を見つけてはじめて気がつきました。CSVファイルでアップロードすることは可能なようですが試していません。
    • 睡眠中の一時的な「目覚め」か、もう起きたのか?
       基本的には「目覚め」回数とは睡眠中に一時的に起きた回数で、本当に起きた回数は数えないようです2が、朝起きて布団の中でウダウダしていると「目覚め」回数に数えられるようです。朝起きてすぐに活動を開始した日は「目覚め」回数は0になるようですが、私の場合サイレントアラームで目覚めてももう一つの時計のアラームが鳴るまで起きないためか、夜中にトイレに起きたわけでも無いのにほとんどの日が「目覚め」回数が1回以上になっています。
    • サイレントアラームの止め方
       ネットの情報によるとWithings Activitéのサイレントアラームは「12回の振動が終わるまで待たないといけない3」とか「There’s no way of stopping the ‘silent alarm’ which is a series of 12 vibrations.4」なんて書いてあるのですが、ダブルタップ(アラーム時刻の設定確認をする時と同様のはず)で私は振動を止めることが出来ています。製造時期によるのでしょうか?ネットでそれらしき書き込みを見かけないので私が持っているものが壊れている可能性もありますね^^;でもその止め方のコツはなかなか掴めず、うまくいけば1、2回振動させたところで止められるのですが、未だにポンポン叩いて結局12回振動させる日があります。確かに時計自身が起こす振動とタップによる振動を区別するのは仕様に無理があるのかも。