近況(5年くらい分と最近と)
この記事は Rubyist近況 Advent Calendar 2021 - Adventarの12月16日の記事です。kei-s が担当します。
Rubyist近況 Advent Calendar、いろんな人の近況が知れてよい企画です。人々の日常の話って面白いですね。
近況の範囲も人それぞれですが、私はちょっと長めに5年前(2016年)あたりからの近況と、直近の近況とを綴ります。
2016年からの近況
転職周りは LinkedIn に載せてますが、経緯など。
前々職を辞めて、2016年4月に転職することにしました。前々職までは設立1年とかのスタートアップだったので、ちょっと大きめの組織で働きたいのもあって選択しました。
4月1日入社予定の直前の3月末日、配属先部署の飲み会があるというので遊びに行くと「ちょっとご相談が」と話があり、「急に決まったんだけど、スピンアウトで独立予定なんだよね」と言われたのでした。マジか、またどスタートアップじゃん、ていうか立ち上げメンバーじゃん、という感じで当初の期待とは違っていたのですが、分野は変わらないはずということでそのまま入社しました。
その年の11月に正式に新会社が立ち上げになり、そこからちょうど5年所属しました。引き続き Rails がメインになりつつ、自然言語処理まわりのプロダクト開発を Python だったり Elixir と Phoenix だったり Java だったりと色々と手を出して開発してました。サービス提供ではなくパッケージ提供なものが多くて、それなりの難しさや進め方の違いを感じられたのも得難い経験でした。研究チームと近い距離だったのも刺激が多くて良かったです。途中からは万葉さんとお隣りになり、最後らへんは nay3 さんと一緒にお仕事できたのも楽しかったです。
前職に所属している間には生活にもいろいろな変化がありました。子供が生まれて育休を取ったり、新型コロナでの保育園休園で毎日公園に連れ出す日々だったり、子供の保育に起因して2回引っ越したり。横浜市に住んでたけど、子育てさせる気あるんかいなという気持ちになることが多々あったよね...*1
直近の近況
2021年11月から ANDPAD に転職して働いています。
前職にも5年いて自分が少し停滞しているような感じもあり、ちょうどよくお声がけいただいて転職することにしました。ベンチャーではあるけど既にかなり大きな組織になっていて、業務もコードベースの広い範囲に携わるのでたくさんの関係者がいて、経験のない規模の環境で刺激的です。入って1ヶ月半くらいだけど :waiwai: やっております。Ruby/Rails の世界に戻ってきたので Rubyist 近況を書くのも良さそう、というのがエントリした経緯でもあります。
仕事以外の話で言うと、仕事と生活をやっていくだけで手一杯なイマココです。
子供も、年少さんになったと思ったらもうすぐ次の学年で、時間の流れが早くてやばい。絵を描いたりレゴやったり絵本を読んだり近所の交通公園で補助付き自転車に乗ったりして遊んでます。
最近のハマり絵本は、
で、佐藤雅彦ファンなので上巻だけ買って置いておいたら子供が勝手に持ってきて、食いつきが良すぎて次の日に下巻を買いに行く、というほどでした。
構成はストーリー付きのほぼ一本道のすごろくで、行ったり来たりする過程がプログラミング的思考になっているというものです。リンゴを拾ったり道端のカエルにあげたりしつつ現在手持ちのリンゴの数だけ進む、というので変数を表現したり、帽子をたくさんかぶってスタックとして push/pop したり、「じゃんけんで出した手の指の数だけ進め」という指令を loop してゴールに辿り着いたり、プログラミング的思考のエッセンスとすごろく遊びが一緒になっている楽しいやつです。
急に食いつくシリーズでは、
を1年くらい前に祖父母からのプレゼントでいただいて、最近急に出してきて遊べるようになってました。自分でおもちゃ、絵本などを出せる環境が大事そう。
iPad で遊ぶこともあり、
apps.apple.comをやっていることが多いです。ひらがなを完全には読めない頃からやれていて、親に罪悪感が少ないゲームとして優秀ですね...
足し算引き算より前の、数の概念を教えるところから丁寧にできていて、数字に興味持つきっかけになってそう。
iPad では他にはトド英語やNHKキッズやYouTube Kidsを使ってます。車移動の時など動画見せて間を持たせてます。あとは、3歳児からリングフィットアドベンチャーやってますね。リングコンの強度を最低にしておくとけっこうできてすごい。確実に私よりやる気がある。
自分自身の生活は特筆すべきことないな... だいたい毎日園への送りとお迎え業をやってます。共働きかつ私だけリモートなので、やれる方がやるスタイル。
=== 追記ここから
そうだ、書き忘れてた!
妻の論文執筆のためにデータクローリングなどを手伝ったりしていて、社会情報学会 に「Twitterに見る不妊治療当事者のリアリティとメディアとしての役割の検討」というタイトルの発表論文を、妻がファースト、私がセカンドオーサーで出したりしました。私はデータ取りと壁打ち相手くらいの役割だったけど、なかなかにいい話でした。
=== 追記ここまで
コードの話としては、全然直近じゃないけど、
を Rust でやる、というのをやってました。
これに関しては前職の公開セミナーで話したり、勉強会で話したりしました。これ以来公開の場で話してないのか...
そのあと原書の続編の「Go言語で作るコンパイラ」
を Rust でやる、のも挑戦してました。
実はこれ完成してなくて、関数のスコープのところでバグが取れないまま1年以上放置してしまっています。バイトコードのデバッグつらくて... またどこかでやろうかな。
Ruby は継続して書いてますが、外に見せられるようなものはあんまりないかも。Rubocop の disable を rubocop_todo.yml
じゃなくてコードコメントに入れ込むスクリプトを書いてどこか(gist)におきました、くらい。
私の近況はこれくらいです。
2022年は、対面でお話しできるといいですね。それまで皆様無理せずがんばっていきましょう。
*1:google: 横浜市 待機児童 からくり とか、google: 横浜市 医療証 所得制限 とか、直接被ってないけど google: 横浜市 中学校 給食 ハマ弁 とか、ヘイトを溜めるには十分すぎる。市長代わって良くなれ...!
床暖房を押したいけど、押せてない話
おうちハック Advent Calendar 2016 13日目です。
これまでのあらすじ
去年のアドベントカレンダーで、IRKit + Slack + hubot + IFTTT を使って、最寄り駅に着いたらエアコンをつける、という記事を書きました。
このネタで、Developers Summit 2016 のおうちハックLT祭でお話しする機会もいただきました。
というわけで、今年はおうちハック Advent Calendar に参加します!
Microbot Push で床暖房をつけたい
上記の記事で、今後の展望として「MicroBot Push を使って床暖房をつけたい」と書きました。 本当はエアコンよりも床暖房のほうが好みなのですが、赤外線リモコンがないため IRKit では操作できませんでした。 11月ごろ、Indiegogo で Contribute していた Microbot Push が届いたので、今年のアドベントカレンダーではこの Microbot Push の解説と、IFTTT 経由で床暖房をつける方法を解説したいと思います。
が...!
実際には、この記事を書いている時点で最後までたどり着いておりません。原因は Microbot Push のソフトウェア的な問題なのですが、その理由もこの記事で解説したいと思います。
Microbot Push とは
Naran という会社が発売している、Bluetooth 経由で物理ボタンを押すデバイスです。
うちの床暖房のコントローラは壁に備えついており、赤外線リモコンもないのですが、このデバイスがあれば離れたところから操作ができる!と喜び勇んで買いました。 私がこれを発見した時は Indiegogo というクラウドファンディングサービス上で募集がされているところでしたが、今は公式サイトから直接買うことができるようです。
どんな感じに動くの?
Microbot Push をボタンの上に被さるように貼り付けます。起動するとバーがグイーッと動いて、ボタンを押します。 その場で人が押したいときは、Microbot Push の正面にあるタッチセンサーを押せば起動します。物理ボタンのラッパーって感じです。
Microbot Push はバッテリー式で、必要なときはマイクロ USB 経由で充電できます。
Microbot Push と Prota S
Microbot Push は Bluetooth 通信しかできない機器で、これだけだとインターネット経由から操作できません。 インターネット経由で操作するには、親機となる Prota S という機器が必要になります。
Prota S は USB で給電し、Wifi に常時接続します。Prota S がブラウザや専用アプリから命令を受け、Microbot Push と Bluetooth 接続して起動させます。
試してみた
11月ごろ、Microbot Push、Prota S が共に届き、早速試してみました。 床暖房のボタンに合うように調整して貼り付け、動作させるとスムーズに動きました! また、Prota S との接続もでき、iPhone アプリから起動させることができました。 Microbot Push には IFTTT 連携もあり、Prota S の設定画面から登録することができました。
Prota S の信頼性問題
さて、セットアップから何週間か経ち、Slack と IFTTT を連携させ、エアコンをつける代わりに床暖房をつけようと作業を始めました。 しかし、Prota S に接続しようとすると、エラーが出て接続できなくなってしまいました。 いろいろと調べていたのですが、正直言って Prota S の出来があまり良くない、という印象を受けました。
給電問題
Prota S は USB 給電なのですが、電力が不安定な状態だと落ちてしまうようです。5V-2A で動作するのですが、4.8V や 5.2V になると再起動したり、起動が正常に行われないとのことです。これは公式ブログでも言及されています。
さらに面倒なことに Prota S を購入した際に付属する USB アダプタの品質が悪く、安定した電力が供給されません。 私もセットアップ時にこの問題に当たり、正常にセットアップできませんでしたが、USB アダプタを別のものに変えると問題なく動きました。 Indiegogo 経由で買った方には、USB アダプタを交換するプログラムがあるようなので、応募すると良いかもしれません。
"Invalid link" 問題
この問題が解決できていないため Prota S に接続できず、IFTTT 経由で床暖房をつける、という今回の目標が達成できていません。
Prota S のセットアップは以下のような手順をとります。
- iPhone/Android に Prota Space という専用アプリを入れる
- 初回設定時、もしくはリセットボタンを押しながら給電すると、Prota S 自身が Wi-fi アクセスポイントとなるので、iPhone 等でこの無線に接続し、専用アプリを立ち上げる
- アプリの流れに従って、利用する Wi-fi の登録、メールアドレスの登録、機器の識別名を登録する
- 登録したメールアドレスにアクティベーションのメールが届き、メール内のリンクにアクセスしてアクティベーションする
- Prota S が再起動、アップデートが自動で走る
- 再度メールが届き、Prota S にアクセスするためにアクセスリンクが手に入る
最後に手に入るアクセスリンクで、インターネット越しでも家庭内の Prota S に接続できるようになります。
問題は、このアクセスリンクが不意に失効したり、セットアップ手順の最後に届くアクセスリンクを押しても正常にアクセスできない、という状況になることです。
この状況が解消されず、手詰まりになってしまいました...*1 公式ブログ*2によると、アプリ側のアップデートをすると上手くいくらしいとのことですが、昨日時点の最新版で試してもダメでした。
まとめ
出先から床暖房を操作したい、という目標は現時点で達成できませんでした。 とはいえ、Microbot Push 自体の製品は良さそうなので、Prota S の進化に期待しています。
問題が解決し、床暖房をつけられるようになったらまた記事にします...!
おまけ
購入者の方へ情報共有
今回、いろいろとハマった末に手に入れた情報を共有します。
- Power Supply issues | Prota Blog
- 給電不安定問題についてです。対象者にはメールが届いていて、送料が無料になるクーポンが付いていました。
- (プロタS)LEDステータス – Naran Inc.
- Prota S の LED の意味です。特に、起動中を表す青色点滅の後、正常起動を表す緑の点灯が短いため、起動が失敗したと勘違いしやすい気がします。手で触れると再度緑が点灯するので、確認しましょう。
- アクセスリンクを受信しました。しかし”有効なリンクではありません”というメッセージが表示されます。 – Naran Inc.
- 今回ハマった "Invalid link" の件です。リセットするしかない、と書かれていて辛いです。
*1:サポートに連絡したけど返事待ち
家庭 Chatops #家庭を支える技術
このエントリは、家庭を支える技術 Advent Calendar 2015 の6日目です。
シーズン2
昨年につづいて、「家庭を支える技術」アドベントカレンダーを立てました。いろんなかたちの家庭があり、それぞれ違う課題を解決していて、とても楽しいです。あともう少しだけ空いてますので、よろしければご参加ください。
外から家庭のもろもろを操作したい
私達は共働きで、帰宅の時間がほぼ一緒になったりします。そうするとこの季節、帰宅時に部屋が寒くてつらい、という問題があります。
タイマーで起動するにも、帰宅時間は一定ではないですし、無駄につけっぱなしにするのも気が引けます...
そこでまず IRKit を導入して、外からエアコンなどを操作できるようにしました。

IRKit - iPhone,iPadを使って外出先からエアコン等の家電を操作できる学習リモコン
- 出版社/メーカー: maaash.jp
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
エアコンの赤外線受光部が高い位置にあるため、部屋の反対側の壁上部に貼り付けるようにして設置しました。
貼り付けシールはこちらが便利でした。買っておいて損はないです。

3M コマンド タブ(はがせる両面粘着) S 16枚 CMR2
- 出版社/メーカー: 3M(スリーエム)
- メディア: オフィス用品
- 購入: 2人 クリック: 8回
- この商品を含むブログ (1件) を見る
IRKit は USB 電源なので、長めの USB ケーブルと小さめの AC アダプタも準備しました。*1
IRKit のセットアップが出来たので、外からエアコンをつけることが可能になりました。
家庭 Chatops
hubot から IRKit を操作できるようにする
私達の家庭では、情報共有に Slack を使っています。Slack に hubot を立て、Slack から IRKit を操作するために ngs/hubot-irkit を導入しました。(下記、妻の発表から抜粋)
最寄り駅についたら Slack に通知する
また、これとは別個に、IFTTT を使って最寄り駅に近づいたら Slack に通知する、というのもやっています。
これは、IFTTT で "iOS Location" と "Slack" を組み合わせ、最寄り駅を中心とした一定範囲に Enter したら Slack のチャンネルにメッセージを送る、というレシピです。妻と二人とも設定しており、毎度「最寄り駅に着いたよ」という連絡をしなくてよいのでとても便利です。*2
最寄り駅についたらエアコンをつける
今回、上記ふたつを組み合わせて、「最寄り駅についたらエアコンをつける」ができるようにしました。
IFTTT のレシピを新たに作成し、最寄り駅についたら IRKit をキックする URL を叩く、としても実現可能ですが、Chatops の観点から hubot を使い Slack 上で動作を共有できるようにしました。
hitsuji/ifttt-irkit.coffee at master · shiratsuchi/hitsuji
面倒だった点を箇条書きにすると、
- hubot プラグインの設計の問題で、hubot-irkit プラグインで設定された赤外線情報を、別のプラグインから参照したり実行するのが困難。
- ほとんどの動作が robot.respond /.../, (msg) -> のように定義されるため、最後の callback だけ動作させるのが厳しい。
- 幸運なことに hubot-irkit は Webhook を用意してくれているので、上記プラグインから hubot-irkit の Webhook を叩くようにする。
- フルオープンにならないように、BASIC 認証をかける。
- IFTTT が Slack に投げる発言を hubot で拾うためには、通常の robot.hear ではなく hubot-slackでbotの発言にも反応させる - 下林明正のブログ のように、SlackBotListener を作成して渡す必要がある。
- 二人が同時に帰ってきたときに二重起動しないよう、最終起動時刻を記録してブロックするようにする。
というかんじです。
最終的に、
のように、最寄り駅にたどり着いたらエアコンを起動することができ、家についた頃には部屋が暖かくなっているようになりました。
もし間違って起動していた場合は、Slack で hubot に停止するよう伝えることで止められます。
今後の展望
ホントはエアコンじゃなくて、床暖房をつけたいのですが、床暖房のコントローラには赤外線リモコンがないため、諦めてました。
しかし、最近話題になっている MicroBot Push を見つけて、即 back しました。これを使って床暖房をつけられるか楽しみです(到着予定は4月です...!)。
まとめ
IRKit + Slack + hubot + IFTTT で、最寄り駅に着いたらエアコンを起動できるようになりました。
明日の家庭を支える技術は becyn さんです。
定期的に買う必要があるものをアラートする仕組みを作った #家庭を支える技術
このエントリは、家庭を支える技術 Advent Calendar 2014 の一日目です。
「家庭を支える技術 Advent Calendar」とは
エンジニアの友人たちとおしゃべりしているうちに、各ご家庭の生活を豊かにするためにしている技術的な工夫や、これからやりたいアイデアが話題に上がることが多くありました。そんななか、誰が言い出したか『家庭を支える技術』というキーワード*1が出てきていました(もちろん元ネタは WEB+DB PRESS plusシリーズ の「〜を支える技術」です)。
仲間うちだけでも面白い話が出てくるので、いろんな家庭の話を聞いてみたいとおもい、せっかく12月なので「家庭を支える技術 Advent Calendar」として世に問うてみた次第です*2。
ありがたいことに公開から数日で全日程が埋まり、「家庭を支える技術」への関心の高まりを感じています。
定期的に買う必要があるものをアラートする仕組みの話
本題です。事前に Adventar に予告した話とは変わってしまいました。
私達の家庭での課題のひとつに、消耗品の入れ替え、買い替えを忘れがち、というものがありました。例えばゴミ箱のニオイとりや防虫剤のような、3ヶ月・半年に一度交換するようなものです。入れ替えすること自体を忘れてしまって、いつの間にか効能が切れてニオイが発生したりするなど、イヤな体験が何度かありました。
この課題に対応するために、まず「買い忘れない」というところから始めることにしました。Amazon からモノが届けば、入れ替え作業を忘れることはなさそう、ということにしました。
解決方法はいくつかあると思いますが、私達の家庭ではこのような技術をつかって解決することにしました。
- Google Spreadsheet に、消耗品と買い替えサイクルの期間を記録する
- 別のシートに、消耗品を買ったログを残していく
- Google App Script を使って、最後に買ってからサイクル期間が過ぎていたらメールを投げる
なぜ Google Spreadsheet かというと、ウチで流行っているからです。実際、「データ投入と編集が簡単」「運用コストがゼロ」「Google App Script で結構いろいろできる」という利点があります。
買い替えサイクルのシート
こんなかんじです。ASIN カラムと商品名カラムは手入力ではなく、IMPORTXML関数でA列のURLのHTMLをフェッチし xpath で切り出して自動入力にしています。
B2 のセル =IMPORTXML($A2,"//*[@id='ASIN']/@value") C2 のセル =IMPORTXML($A2,"//*[@id='productTitle']")
購入記録のシート
こちらも同じく、C列、D列はIMPORTXML関数を使って自動入力です。Amazon の商品ページの URL は、商品名が入っていたりと正規化が大変なので、商品ページから ASIN コードを切り出すことで一致をラクにしようという意図です。
最後に買ってからサイクル期間が過ぎていたらメールを投げる Google App Script
Google Spreadsheet のメニューから、「ツール」→「スクリプトエディタ」を選択してエディタが開きます。ここの JavaScript を使ってスクリプトを書くことで、シートのデータを取り出したり加工したりなど、いろんなことができます。
スクリプト自体は https://gist.github.com/kei-s/322aeb83f9284396734a にあります。MailApp.sendEmail メソッドを使えば、自由にメールを投げることができます。
また Google App Script では、いわゆる crontab のような時間によるトリガーを作ることができます。上記のスクリプトを一日一回トリガーすることで、もし買う必要があるものがあればメールを投げるようにしました。
購入記録を投入する Google Chrome extension
購入記録を簡単に投入するための Google Chrome extension も作りました。
ソースコードは https://github.com/shiratsuchi/sorosoro-alert です。Amazon の商品ページで「購入ログに記録する」を押すと、ページの URL をポストします。ポストするのは URL だけで、ASIN や商品タイトルの切り出しは面倒なので先のとおり spreadsheet 側でやっています。
この Spreadsheet はプライベートにしているので、そのままだと API 経由でデータを投入することはできません。
そこでまた Google App Script を頼ります。Google App Script には「Web アプリとして公開する」という機能があります。スクリプトで GET や POST を受け取る処理を書き「Web アプリとして公開する」と、GET/POST 先のエンドポイントが与えられます。
まず、POST を受け取って購入記録シートにデータを追加する、というスクリプトを書いて公開し、Chrome 拡張でオプションから POST 先のエンドポイントを登録できるようにしました。
これで、プライベートなシートにデータを投入することができるようになりました。
Google App Script 側のスクリプトは
https://gist.github.com/kei-s/69e65376c37202e103db です。*3
まとめ
Google Spreadsheets を使って、定期的に買うものをアラートする仕組みをつくりました。また Google Chrome で簡単に買ったものを記録する拡張をつくりました。
この仕組み一式を共有したいのですが、Spreadsheet のデータ以外の関数セットやスクリプト一式を簡単に使う方法ってあるのでしょうか...?
明日 12/2 は @negipo さんです。
june29 と mamipeko の結婚式で、Google Chrome 拡張をプレゼントをした
@june29 さんと @mamipeko ちゃんの結婚式が、いい夫婦の日である2014年11月22日の執り行われました。披露宴にて私達夫婦で友人代表スピーチをする機会をいただきました。そこで、なにか二人にプレゼントできるといいなあと考えて、Google Chrome 拡張を作ってプレゼントしました。
あの日のふたり
「あの日のふたり」という名前の拡張をつくりました。日常生活の中で、ふといつかの二人での出来事を思い出すような、そんなプレゼントです。
「あの日のふたり」を入れて Google でキーワード検索をすると、二人の Twitter での発言からそのキーワードを含んだ tweet をポップアップで表示する、というものです。
拡張本体とソースは https://github.com/shiratsuchi/anohi にあります*1。
披露宴でのスピーチで動画を見せてプレゼントしたら、スピーチ後に @darashi と @hmsk がそれぞれ、「バックエンドどうしてるんですか?」と質問してきたのが面白かったです。実際のところバックエンドシステムは無く、二人の Tweet*2 を Google Spreadsheet に記録したものを準備し、拡張の起動時に TSV フォーマットで読み込んでメモリ上に展開しています。リアルタイムにデータを反映するのはできないですが、バックエンドなしのお手軽運用にしました。
ちなみに、二人へのプレゼントなので、元データの取得先はハードコードしています。
30歳のエンジニアのポエム
まだ前職でお仕事をしていた27歳くらいの時、いつも優しげな、札幌にいるあの先輩エンジニアの方から、こういう質問をされた。
「3年後、30歳のとき、どういう自分になっていたい?」
こう答えた。
「正直、全く想像できてないです。」
心からそう思っていた。
答えが自分の中になにもなかった。
自分がやりたいことはなんなのか、何を大事に思っているのか、言葉にできなかった。
「じゃあ、こうなっていたくない、という姿はある?」
「それならあります。」
「じゃあ、そうならないようにしていれば、悪いことにはならないよ」
悪いことにはならない。
先月30歳になって、悪いことにはなってない。
それどころか、かなり楽しくやれているとおもう。
まだやっぱり、どうなりたいかは見えてないけど。
ありがとうございます。
最近こんな話を何回かして、冒頭の質問を投げかける機会も増えた。
ちょっと節目っぽいかんじになって、記録しておくのもいいかと思って書いた。
おじさんからは以上です。
濱崎、会社やめるってよ
「桐島、部活やめるってよ」は読んでないから上手いこと言うのできなさそう。「ゴドーを待ちながら」と同じ構成だっていうのは知ってる。
最初に会ったのはいつなんだっけな。あまり覚えてないけど、なにかしらイベントかなにかで @june29 さん経由で紹介されたんだと思う。そんで、なにかしらで飲みにいったり、RubyKaigi スタッフを一緒にやったり、@june29 の家で飲んだり、#oblove の講演を聴いたり、ゴールデンボンバーの DVD を見たりした。
自分の芯を持ってて、かっこいいなあと素直におもう。あと、たぶん自分に嘘つけないひとなんだろうなあって感じがする。
会社をやめるというのは、やっぱり人生の大きな節目というか転機というか勇気のいることで、勇気をもって新しい環境に飛び出す決断をするのは、ほんとうに素晴らしい*1。自分が前の会社をやめるとき、何人かから「Congratulations. おめでとう」と言ってもらってとてもよかったので、誰かが会社をやめたり新しい環境に行くときは「おつかれさまでした、おめでとう」と言うことにした。
おつかれさまでした、おめでとう。
誰かのことをこんなふうに適当だけど書き散らかすことってなかなかなくて、キッカケと流れっていうのは面白いものだなあとおもう。
桐島もゴドーもまたどっかで会えるといい。
*1:傍から見ている人が、「どうして?」というのもしょうがないのだけれど。心配するし