すくすく!子育てエンジニア Meetup #3 で登壇してきた #子育てエンジニア

すくすく!子育てエンジニア Meetup #3 で登壇してきた。
新生児〜生後6ヶ月を支えた技術というテーマで、主に GoogleHome をつかっての 育児ログの運用を発表した。


登壇資料はこちら
speakerdeck.com


育児をするうえでの VUI はもう手放せない存在で、
それは、つい先日自宅の赤外線リモコンが全く使えない状況というのが発生した際あらためて思い知らされた。


すくすく!子育てエンジニア Meetup は、子育てに関する知見得られるし
子供用のお土産があってありがたいです。

次も発表ネタがあれば登壇したいと思ってます!

childcare.connpass.com

GoogleHomeのある日常 - 家庭を支える技術 Advent Calendar 2017 3日目

このエントリーは 家庭を支える技術 Advent Calendar 2017 - Adventar の 3日目として書きました。

日本でもようやく Google Home が発売されたので即購入し、家庭を支える一端として活用しています。
妻も 子育てがラクになる!?Google Homeを使ってみた - Yahoo!不動産おうちマガジン のような記事を書きました。

f:id:tknzk:20171203175817j:plain

VUI で手が離せないときに活用

娘は2歳になりましたが、目や手が離せないこと日常的にあります。そこで以前からNatureRemoをつかってテレビや電気を手元のスマホから操作するということを行っていました。
しかし、寝かしつけのときや、抱っこしたまま何かをしなければいけないときなどにどうしても手が足りないということがありました。
そこで Google Home と NatureRemo を IFTTT で連携し、操作を行えるようになりました。

連携しているもの

先にあげた NatureRemo は赤外線のリモコンを操作できるのでGoogleHome単体でできないことをするには必要不可欠です。
また、物理ボタンを操作するために SwitchBot を導入していたので、これも IFTTT を経由してGoogleHomeから操作することができるようになりました。

SwitchBot でお風呂を入れる
Instagram

娘が喋る様になってきてる

娘が、日本語を習得するようになってきていて、TV のチャンネル権を声で奪い合う未来がそうそうにきそうです。

娘「オーケーグーグル Eテレつけて」
私「OK Google テレ東つけて」
娘「オーケーグーグル Eテレつけて」

まあ、それも面白いので、良いかなとは思いつつ、対策は考えておいて方が良さそうです。

まとめ

手が足りなければ喋ればいいじゃないという感じで VUI をお手軽に導入できるのは子育て家庭にとってはだいぶたすかりました。
ただ、我が家はそもそも NatureRemo や SwitchBot を持っており、それを起動するためのGoogleHomeだったので、GoogleHome 単体だとうまく活かせないかもしれません。


nature.global
ifttt.com

www.switch-bot.com
ifttt.com

寝かしつけに導入したもの - 子育てエンジニア・クリエイター Advent Calendar 2017 2日目

このエントリーは、 子育てエンジニア・クリエイター Advent Calendar 2017 の 2日目として書きました。

娘が生まれて、あっという間に2年が経ちました。最近は、少しづず喋ることができるようになり、意思の疎通ができるようになってきました。

寝かしつけの改善

1歳半を過ぎたあたりから、自己の主張が激しくなり、またアンパンマンに激ハマりしてしまったため、リビングのTVには Hulu のアンパンマンが無限に流れている状態がありました。良くないなと思いながらも、なかなか TV を断つことができず、寝る時間になっても TV の前から離れなくなってしまいました。

そこで、寝室にプロジェクタを導入し、amazon fire stick で Hulu のアンパンマンを寝室の壁に投影して寝室に引き込むことを行いました。
効果はてきめんで、娘は布団に横になりつつ、アンパンマンを見て、そのまま寝てしまうということがかのうになり、寝かしつけの第一段階 寝室につれていくをスムーズに突破することができるようになりました。
f:id:tknzk:20171202174139j:plain
f:id:tknzk:20171202174215j:plain

現在の寝かしつけ

しかし、これも続けていると、アンパンマンを見たがために興奮して逆に寝なくなるケースが多発したので、現在は、寝室につれていく口実としてアンパンマンをつけておき、寝る時間になったら止めて、リビングも寝室も暗くし、GoogleHomeで spotify の BabySleep のプレイリストをかけ、寝かしつけを行っています。

まとめ

寝室につれていくことができれば、一定のルーチンを行うことで寝てくれるようになった。
プロジェクタの導入はいろんなご意見があるかもですが、我が家には効果がありました。



www.happyon.jp

adventar.org

子育てエンジニアになって1年2ヶ月 - 子育てエンジニア Advent Calendar 2016 9日目

このエントリーは 子育てエンジニア Advent Calendar 2016 - Qiita の9日目として書きました。

昨年 10月末に娘が生まれて、最近では、一人で歩けるようにもなってきました。
行動範囲もぐんぐん広がってますます目を離せないぐらい順調に育っています。
昨年のアドベントカレンダーでも 生まれて2ヶ月の段階での運用フローを 子育てを支える運用フロー - 子育てプログラマ・ITエンジニア・Webデザイナー Part 2 Advent Calendar 2015 として書きました。

https://www.instagram.com/p/BNwOc3YDSCp/
kickstarterでbackした gopher 届いた!

娘はなんとか無事保活をクリアし、4月から保育園にかよっています。
運用フローも細かく修正をおこなって改善を図っています。

起床からの登園準備

6時過ぎには、娘がおきるので、8時に登園できるように準備をします。
朝ごはんを食べさせて、オムツを替えて、体温を測り、保育園の連絡帳を書いて着替えをして登園です。

起きてすぐ無心でバナナを食べる

保育園の送り迎え問題

10月に妻がフルタイムに復帰するまでは、基本的には、私が登園担当で、妻がお迎え担当でした。今は逆になっていて、妻が登園担当、私がお迎え担当になっています。
これを実現するために、会社への出社時間を通常の時間から2時間ほど前倒して出退勤をしています。*1
朝は早いものの、今は夕方17:30に退社するので、ミーティングなど考慮してもらっています。

また、保育園が設立2年目だったりすることもあり、モダンな考え方で運営されていて、時間もある程度融通がきくのでだいぶ助かっています。

晩御飯

18:00にお迎えに行き、18:15ぐらいには、帰宅し、娘のご飯を食べさせます。
準備に手間取ってると、娘が激おこするので、一旦食パンを半分渡して食べさせて、気をそらしておき、メインのご飯を準備するなどしています。*2

お風呂

妻が帰宅する頃には、ご飯も食べ終わっているので、お風呂に入ります。
新生児の頃からお風呂はほぼ毎日いれているのですが、先日ついに、膝の上で💩されました。


寝かしつけ

お風呂から上がったら寝かしつけです。基本的には一緒に寝室にいき横になって寝かせるという方法で寝かしつけています。時間はかかりますが、最近は卒乳にもほぼ成功したので、哺乳瓶で白湯を飲みながら寝てくれることが多いです。
一時期、話題になった「おやすみロジャー」という本を朗読しているYouTubuを有効活用していたのですが、朗読DVDなるものが販売されたタイミングを境にYouTubeから一掃されてしまいました。。

テレビ問題

子育てとして迷いはありつつ、ちょっとした時にテレビを見せておくと、集中してくれるので、テレビは、それなりに見せてしまっています。
ただし、みるものはYouTubeみんなのうたの英語版みたいなチャンネルを中心にしています。英語の勉強にもなるしなという言い訳をしつつ、だいぶ助かっています。

www.youtube.com

まとめ

1年2ヶ月ほどたった、最近の子育て状況を挙げてみました。振り返ると子供中心の生活ですが、
基本的には共働きの夫婦2人のみで育児をしていく上で、ヘイトがたまらないようにうまく外部サービスをつかって運用できているかなと思います。
結論、娘かわいい

*1:裁量労働制なので大変助かっています

*2:アレルギー問題が起きていないので助かっています

serverless でチャットを確実に受取りたい - 家庭を支える技術 Advent Calendar 2016 2日目 #家庭を支える技術

このエントリーは、家庭を支える技術 Advent Calendar 2016 - Adventar の2日目の記事として書きました。

昨年までとは、趣きを変えて、家庭内における連絡手段の冗長化についてです。

家庭内チャットについて

我々のチームでは、チャットサービスとして以下のサービスを利用しています。

  • slack
  • LINE
  • chatwork

使い分けとしては、帰宅の連絡など普段のコミニケーションとしてはLINE、Calendarやtodoの共有、事案メールの通知などにはslackという感じになっています。
chatworkは、slack導入までは、メインに使っていましたが、今は、家庭内の連絡に使うことはほぼなくなっています。ただし妻が仕事で利用しているので、妻としては見やすいということで、アカウントはそのままになっています。

気づかない問題

どれか一つの方法でだけ連絡した場合、気づかないときには、全然気づかず、レスポンスがすぐ欲しいときに困ることがありました。
もちろん、緊急のときは、電話を鳴らしたりもしますが、それも気づかないということがあったりもしました。*1

マルチポストしたい

複数の経路をもっているので、マルチポストできれば、どれかには、気づいてもらえるかもしれません。
そこで、どこか一つに書くとそれをよしなに他のチャットにも書き込んでくれる仕組みを作りました。

実装のはなし

今回は、slackの特定のchannelに書き込むと、Outgoing Webhookによって、その内容を GCPの Cloud Functionsの http trigger に送り、Cloud Functionsが LINE Notifyと chatworkの APIをキックして、内容を書き込んでくれる仕組みを整えました。

/**
 * HTTP Cloud Function.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */

var request = require('request');
var config = require('config');
var lineConfigAccessToken = config.Line.access_token;

exports.sendLineNotify = function sendLineNotify (req, res) {
  var options = {
    url: 'https://notify-api.line.me/api/notify',
    method: 'POST',
    headers: {
      'Content-Type':'application/x-www-form-urlencoded',
      'Authorization': 'Bearer ' + lineConfigAccessToken,
    },
    form: { message : `${req.body.text}` }
  };
  // request LINE Notify
  request(options, recallback);

  function recallback(error, response, body) {
    if (error == true) {
      console.log(body);
    }
  }

  res.send('ok');
};
/**
 * HTTP Cloud Function.
 *
 * @param {Object} req Cloud Function request context.
 * @param {Object} res Cloud Function response context.
 */

var request = require('request');
var config = require('config');
var chatworkConfigRoomId = config.Chatwork.room_id;
var chatworkConfigApiToken = config.Chatwork.api_token;

exports.sendChatwork = function sendChatwork (req, res) {
  var options = {
    url: 'https://api.chatwork.com/v1/rooms/' + chatworkConfigRoomId + '/messages',
    method: 'POST',
    headers: {
      'Content-Type':'application/x-www-form-urlencoded',
      'X-ChatWorkToken': chatworkConfigApiToken,
    },
    form: { body : `from_slack [${req.body.user_name}]: ${req.body.text}` }
  };
  // request Chatwork API
  request(options, callback);

  function callback(error, response, body) {
    if (error == true) {
      console.log(body);
    }
  }

  res.send('ok');
};

その他packegeなどをふくめたソースは↓

Outgoing Webhookのリクエストを受取り、LINE Notifyとchatwork API のエンドポイントにPOST requestを送るだけで完了です。
APIをcallした時のエラーハンドリングなどをほぼしていないので、異常系の処理ができていないですが、正常系は問題なく稼働しています。

プロトタイプ

slackにherokuで動かしているhubotがいたので、はじめは、hubotのscriptを実装して、意図通り動くところまでのプロトタイプを作りました。

# Description:
#   Emergency bot
#
# Commands:
#   emergency channel hear
#
# Author:
#   tknzk

module.exports = (robot) ->

  robot.hear /.*/, (res) ->
    room = res.envelope.room
    text = res.message.text
    console.log room
    console.log text

    if room == 'emergency'

      # line
      request = res.http("https://notify-api.line.me/api/notify")
        .headers("Authorization": "Bearer " + process.env.HUBOT_LINE_NOTIFY_API_TOKEN)
        .headers("Content-Type": 'application/x-www-form-urlencoded')
        .post("message=" + text)
      request (err, resp, body) ->
        if err
          res.send err
        else
          if body.length == 0
            res.send "Failed "
          else
            res.send body

      # chatwork
      request = res.http("https://api.chatwork.com/v1/rooms/" + process.env.HUBOT_CHATWORK_ROOM_ID + "/messages")
        .headers("X-ChatWorkToken": process.env.HUBOT_CHATWORK_API_TOKEN)
        .headers("Content-Type": 'application/x-www-form-urlencoded')
        .post("body=" + text)
      request (err, resp, body) ->
        if err
          res.send err
        else
          if body.length == 0
            res.send "Failed "
          else
            res.send body

ただ、それではあんまりにも技術的な進歩がなさすぎたのと、昨今の流行りからお手軽に試すにはserverlessでしょうということでCloud Functionsで実装してみました。
AWS lambda を選ばなかったのは、趣味の問題です。*2 *3

さて、動作的には、↓のようなかんじになります。slackの特定のchannelに書き込むと同じものがLINEとchatworkに転送されます。

f:id:tknzk:20161201215219g:plain

まとめ

チャットを確実に受け取りたいということで、Cloud Functionsでマルチポストを実装してみました。
Advent Calendar Drivenで開発したので、実は運用はまだ行っていないのが実情です。。
なので、今日から運用開始です。

www.adventar.org

*1:妻がnotificationを切りがちという可能性もあります

*2:GCPに寄せていきたいと思っている

*3:AWS lambda + API GATEWAYは、機能はそれなりにそろってるが、その分設定も細かいのでめんどくさいっていうこともあったりもする。

子育てを支える運用フロー - 子育てプログラマ・ITエンジニア・Webデザイナー Part 2 Advent Calendar 2015 #childadvent

このエントリーは、子育てプログラマ・ITエンジニア・Webデザイナー Part 2 Advent Calendar 2015 - Adventar の11日目の記事です。

10月末に初めての娘がうまれまして、子育てエンジニアになりました。
約2ヶ月の新米ですが子育てにあたって用いたルールを紹介してみます。

妻と2交代制での対応

初めての子供で、夫婦一緒に全力で子育てを行うと、共倒れになる可能性をしり、夜の時間を2交代制に分けて運用をしています。
私が18時過ぎに会社を出て、19時前に帰宅。すぐに夕食を食べて、娘をお風呂にいれて、授乳/ミルクを済ませてということをして、20時前後になります。
このタイミングで妻には寝てもらい、24時の授乳/ミルクまでの時間の対応を私が行います。あやしたり、おむつ交換をしたりします。
その後の深夜帯~朝にかけて妻に担当してもらい、その時間は私は寝ます。
知人などに聞いていたよりも、よく寝てくれて、ある程度決まった時間に起きてくれるので、だいぶ助かっていますが、それでも2交代制を取り入れることで、
夫婦ともに、ある程度まとまった時間睡眠をとることができるので共倒れは防げています。

SNSネーム

昨今、SNS上での子供の実名、写真公開が話題ですが、だったらSNSネームをつけたらいいんじゃないかと思い、とある方にソーシャルゴッドファーザーになっていただきました。
これにより、友人が気にせずfacebookのコメントにSNSネームを書き込んだりができるようになりました。

0,3,6,9,12 ~ でのミルクの時間

母乳とミルクの混合で授乳をしていますが、3時間おきにミルクの時間がやってきます。いつやったかわからなくならないように、時間をきめています。
0時,3時,6時〜と3の倍数の時間に授乳タイムとなります。今後は4時間などだんだん間隔が開くようになると思いますが、その時も0時を起点に固定する予定です。

ネットスーパー/amazonの活用

大人の食事用の買い物は、基本的にネットスーパーを利用しています。イトーヨーカドーのネットスーパーで母子手帳を登録すると送料が100円になるので、それを活用しています。
子供のおむつ、ミルクなどは、amazon familyに加入して定期便で購入しています。

ベビーモニターの活用

寝室で妻と娘が寝ていて、リビングで作業したり、テレビを見たりする際にベビーモニターを活用しています。
暗い部屋でも自動で赤外線モードになり、音声も拾うので、寝ている娘が泣き出したりしてもすぐ気づくことができて便利です。
参考にしたブログ: 「子供が生まれた時、本当に使えるものだけ集めたウィッシュリスト」の例を作ってみたのでどうぞ - 941::blog

肌着の固定化

新生児の時は、私の実家から送ってもらった肌着を着せていたのですが、メーカーがばらばらだったり、ヒモで止めるタイプだったりで、
その時々でどうやればいいんだっけとなってしまい、時間がかかって娘が泣くということを繰り返していました。
そこで最近、娘に着せる肌着を某ユニクロのクルーネックボディ肌着に固定しました。体の部分を4点をスナップボタンでとめられるのでとても楽です。
固定化することで、着せる手順にまよいがなくなるので、時間も短縮されます。

子供の写真の共有について

私と妻の実家それぞれにどうやって写真を共有していくのがいいのか、いろいろ試したり検討したりしました。
生まれてすぐは、一旦google photoでやればいいかということになり、google photoにアップロードして、共有URL をそれぞれの実家に送って見てもらってました。
しかし、私のgmailのアカウントに紐付いている状態だったので、妻の端末でとった写真をアップロードする手段がなく、そこが厳しい状態でした。
子供のアカウントを作って、それを私と妻の端末からログインして使うことも検討しましたが、切り替えコストを考えて、実施はしませんでした。
いろいろ、アプリなどを試していく中で、mixiがつくっているmiteneが夫婦ともにアップロードできることと、それぞれの両親のリテラシーにちょうどいい感じだったので、今では、それを全面に利用しています。
機能、使い勝手には申し分ないのですが、一点だけ、マネタイズをする気が無いようで*1、そこだけ今後使い続けていって大丈夫かという不安はあります。。

mitene.us

育休について

私も育休を取ることも検討はしました。ただ、4月に転職したばかりであることと、実際に育休をとった場合の家計のキャッシュフローをシミュレーションした結果、無理だという結論になりました。
育休をとると、給与の66%のお金をハローワークから給付金としてもらうことができますが、それの支払いサイトは、2ヶ月おきとかになります。夫婦ともに育休をとると、タイミングによっては、家計に入るお金が0になる月が発生し、貯金がこころもとない我が家にとっては、これが完全にアウトでした。
子供手当ても大事だとは思いますが、出産や育児に伴う一時金をもっとふやすだけで、出生率はあがるのかもしれないですね。。*2

まとめ

まだ、2ヶ月弱ですが、子育での運用ルールを書いてみました。
これから成長していくとルールに合わないことも起きていくと思いますが、率先して子育てしていきたいと思っています。


明日は、mei331さんです。

*1:唯一nohanaの紹介分があるだけでリンクもなし

*2:都内に限った話かもしれないですが

夫婦間における監視の強化 -家庭を支える技術Advent Calendar 2015 4日目 #家庭を支える技術

このエントリーは家庭を支える技術 Advent Calendar 2015 - Adventarの4日目の記事として書きました。
昨年の家庭を支える技術 Advent Calendar 2014 - Adventarに引き続き夫婦間の監視についてです。

fitbit Charge HRの導入

昨年の記事に書いたとおり、バイタルデータを取得できる方法を探り、いろいろ検討した結果、
fitbit ChargeHRを導入しました。
これにより、バイタルデータとして、心拍数を常時監視できることが可能になりました。
f:id:tknzk:20151202224009p:plain

共有方法は、雑に、妻のiPhoneとPCで私のfitbit ChargeHRが紐付いているaccountでログインを行い、必要なときに心拍数を確認できるようにしています。
データの即時性は、fitbitのAll-Day Syncが有効になっていれば、バックグランドでsyncが走るので、fitbitのアプリを頻繁に起動する必要は無いです。(ただし、iPhoneや、fitbit本体のバッテリーがある程度ないと、勝手にAll-Day Syncがoffになるので注意が必要です)
PC経由でのsyncができるUSBドングルも同梱されていたのですが、iPhoneとのbluetoothを奪う弊害があったので、断念しました。

死活監視

fitbitはAPIを公開していて、OAuth2で認証すると、心拍数のデータも取得することができます。*1
rubyで簡単なscriptを書いて、herokuで 10分間隔で稼働させて、その結果をslackに送るものを実装しました。
コードはこちら:tknzk/hralert · GitHub
f:id:tknzk:20151204005201j:plain

日づけまたぎの処理や、エラーハンドリングはまともにやっていないのと、自宅に妻といる時にも稼働するので、その辺をslackから停止できるような機能などは、今後の課題としています。
また、心拍データが取れないことが一定期間続いたら、twilioをつかって電話をかけるということも実装してみたいと思っています。

なぜここまでするのか

昨年の記事でも、ブコメtwitterなどの反応をみると、位置情報の共有とか気持ち悪いみたいな反応が少なからずありました。
今回は、位置情報だけでなく、バイタルデータも共有を始めています。
なぜここまでしているかというと、簡単にいうと、私の健康リスクの問題に起因しています。ざっくりいうと、未破裂脳動脈瘤があるため*2、一人でいる時に問題が発生した際に対応をできるようにするためと、共有することで、妻に安心をしてもらうためです。

以上、健康リスクに伴う不安をテクノロジーの力ですこしでも解消する方法でした。
明日は、ffi さんです。

www.adventar.org

*1:application typeを Personalにする必要があります

*2:瘤自体は小さいので半年に一回の定期検査で経過観察中