へろへろもへじ

(ブログタイトル募集中)

LINE Bot APIを利用して、父母・義父母向けに ”孫Bot” を作りました

f:id:fukuiretu:20160419182509p:plain


先日LINE社からBot用のAPIが公開されましたね。

linecorp.com

そもそもBotって何?

LINE上にBotを用意し、Botを友だち登録することで何ができるかというと、

  • Botに話しかけると、話しかけた内容(メッセージ)に応じて何かをする
  • 定期的にBotからユーザーに何かをする

ということが可能になります。何かというのは、例えば寿司の出前を頼んだり、何か商品を購入したり、電車の時刻表を表示したり等プログラムを書くことで解決できることは何でもできます。今後はLINE社で何かしらサポートしてくれる仕組みが入って、プログラムを書かなくてもできることが増えるかもしれませんが、現状はプログラムを書かないと何もできません。

Botというとこれまではエンジニア以外の方には利用障壁が高かったと思いますが、 LINEのアプリ上でBotが動かせるようになることで、より一般的になっていきそうな未来が見えますね。

どうして作ったの?

個人的にBotでやりたいことは、 エンジニア御用達のチャットツールSlackで実現できているので、最初は「ヘー」くらいな感じで見てたのですが、 LINEなら父母も義父母も日常的に利用してるし何かできないかなーと思ってパッと思い浮かんだのが 普段なかなか会えない孫と擬似的にいつでも会話ができて、メッセージ付きの写真が送られてきたら嬉しいのでは? というものでした。 実際に使ってもらったら予想以上に喜んでもらえたので、しょぼいものでも意外と需要あるかもなと思い、今回ブログで紹介しようと思った次第です。

Botでできること

機能

今回作った孫Botでできることは以下の2つです。

  • 何か話しかけると、事前に用意した複数枚の写真からランダムで選ばれた孫の写真と、「がんばれがんばれ」というメッセージが送られる

f:id:fukuiretu:20160419153940j:plain

  • 毎朝7時に自動的に、事前に用意した複数枚の写真からランダムで選ばれた孫の写真と、「おはよおきて」というメッセージが送られる

f:id:fukuiretu:20160419153814j:plain

余談になりますが、Botの名前は孫(私の息子)の名前がソウなので、Sou + BotSobotにしました。

利用サービスの料金

  • LINE Bot API
    • 無料(正式版は有料?)
  • Heroku (サーバ)
    • Botの応答と定期的に発信する役割を担う
    • 無料プランの枠内で利用しているので無料
  • Amazon S3 (クラウドストレージ)
    • 写真の保存場所の役割を担う
    • 保存した画像の総容量分 + リクエスト数 + 画像転送(ダウンロード)量で従量課金
    • 現状の利用状況
      • 1枚当たり2MBの写真を10枚保存
      • 1日に約20リクエスト
      • 1枚分の写真の容量 2MB * 20リクエスト分の転送量

このペースでいくとざっくりですが、ひと月2円程度でしょうかね。HerokuさんAWSさん、公私ともにいつもありがとうございます!

さいごに

Web系のエンジニアの方なら簡単に作れると思いますので、お子様のいらっしゃるご家庭でしたら、母の日も近いですしプレゼントの候補としていかがでしょうか?

また、リアルな知り合いの方で、「これ良さそう、作ってほしい!」とか、「作り方教えてほしい!」って方がいらっしゃいましたら、個別にメッセージください!

また何か作ったら紹介しようと思います。それでは皆様、良いBot Lifeを!

※非エンジニアの方が読んでも困惑しないよう、詳細な実装方法や構成などは割愛しました。詳細は後日別途Qiitaにまとめようと思っています。

loose_attrというActiveRecordを拡張するgemをリリースしてました

去年の年末にloose_attrというActiveRecordを拡張するgemをリリースしてました。

github.com

ActiveRecordを拡張するgemは初めて書いたのですが、リリースして満足してしまいREADMEも整備せずに放置してたので、重い腰を上げて整備しました。合わせてブログでもリリースノートとして残しておこうと思います。

何をするものか

JSON形式の文字列としてカラムに保存...いわゆるシリアライズLOBパターンの利用時に、loose_attrを導入すると、JSONのkeyに対しmodelのプロパティとしてアクセスが可能になります(動的にアクセスメソッドを生成しています)

SQLiteMySQLでしか動作確認してませんが、PostgreSQLでもたぶん動くはず。json型は...(動かなかったらPRお願いします:bow:)

作った経緯

JSONをHashに変換して、値を取得してパースして...という作業を各々がゴニョゴニョするのではなく、共通的に(ActiveRecordで)吸収したかったので。コードはRuby界隈で有名なonkさんのshibarakuというgemをパクリ参考にさせて頂き、テストはマネーフォワードさんの、以下の記事を参考にさせて頂きました。

ActiveRecordを拡張するgemでテストを書くには? | Engineers' Blog

この場を借りてお礼申し上げます :pray:

使い方

1. Gemfileに以下を追記し、gemをインストールします
gem 'loose_attr'
2. JSON形式で保存するためのカラムを用意します(デフォルトではext_fieldという名前のカラム)
3. 対象のmodelクラスに以下のように設定します

ext_fildに保存するjson

{
    "comment_count": 100, 
    "user_name": "retz",
    "posted_at": "2016-03-11 00:00:00"
}

Post(仮)というクラスに導入するための設定をしてみます

class Post < ActiveRecord::Base
  loose_attr :comment_count,  default_value: 1
  loose_attr :user_name,   default_value: 'noname'
  loose_attr(
    :posted_date,
    cast_type: :date,
    default_value: '2016-01-01',
    option: { format: '%Y年%m月%d日' }
  )
end
4. これでjsonの各値に以下のようなアクセスが可能になります。
Post.create!(
  id: 1,
  body: 'hogefoobar',
  category: :it,
  actived: true,
  ext_field: {
    comment_count: 10,
    user_name: nil,
    posted_at: '2016-03-11'
  }.to_json
)

post = Post.find(1)
puts post.body #=> hogefoobar
puts post.category #=> it
puts post.comment_count #=> 10
puts post.user_name #=> noname
puts post.posted_at #=> 2016年03月11日

保存(create, update, save)する際にも、gem側でJSONシリアライズするので時に意識せずにOKです。

その他、詳細はGitHubのREADMEをご参照ください。

さいごに

Issue、PRお待ちしてます!よろしければstarもお願いします!

最近実践しているタスク管理/進行術について話しました

f:id:fukuiretu:20160304205156j:plain

3月4日、青森県三沢市で開催された第10回雑談会~はやりそうな技術を考察しよう!~に参加してきました。

昨年暮れに参加表明した際には親族の不幸と重なり参加ができず、今回念願の参加となりましたが、この日は参加者が普段より少なかったそうで、先月開催された働き方の再発明!地方での実践者が語るリモートワークの実態へ参加できなかったことに続き、どうやら私は 持ってない人 ということがわかりました。。。

ちなみに、三沢市は初訪だったのですが、私が住んでいる大鰐町から弘前市経由で約2時間半程でした。

発表

そんな中、ここ最近私が実践しているタスク管理/進行術(ポエム)についてお話しさせて頂きました。 (※タイトルはネタなのでスルーでお願いします:bow:)

発表後、「Slackを利用して何かをする」「Slackに情報を流す」といったSlackに関する談義が多かったので、やはりSlackは偉大だなと。(小並感)

他の参加者の方の発表

といったラインナップでした。

弘前組として一緒に参加した、那須さんのブログ/スライドも公開されておりましたのでシェア。

バックアップ ルール「Backup 3-2-1 Rule」についてお話をしてきました

バックアップは痛い目見てからでは遅いので、よいこのみんなは対策しておきましょうね。

所感

  • 発表の縛りもなく、程よいゆるさの中で雑談ができて有意義な時間が過せました。
  • 普段リモートで一人作業をしていると、家族以外と話す機会がないので、同業の方とオフラインで話せる場は大変貴重でした。
  • 途中ボードゲーム(名前忘れました...)も思いの外楽しめて、盛り上がりましたね!
  • 会終了後、三沢市らしいものということでハンバーガーとドクターペッパーを食しました。(おいしかった!)
  • 弘前界隈でもこんな会ができたらいいなぁ...

f:id:fukuiretu:20160304222934j:plain

また、参加させて頂きたいと思います!お疲れさまでした & ありがとうございました!

平成27年度青森ITビジネス・マッチング交流会に参加しました

f:id:fukuiretu:20160220143613j:plain

2016/2/16(火)に青森ITビジネスマッチング交流会に参加しました。当初は一般参加の予定だったのですが、あおもりIT活用サポートセンター 本田さんのご好意により、スタッフとして参加しました。

イベントの主旨としては、協業をテーマに県で取り組んできた活動の振り返りをするとともに、新たな取り組みのきっかけづくり(出会いの場を提供する)を行うというものでした。以下、所感となります。

所感

第一部 事業報告

クラウド、アプリ、OSS、IoT、Web、オープンデータとこれだけトレンドなものに県がバックアップして取り組んでいることに驚いた。県がここまでバックアップしている都道府県もなかなかないのではなかろうか。地道にコツコツとした取り組みが将来必ず役立つだろうし、そうなって欲しいと思った。

個人的にはRubyRubyのコミュニティが好きなので、島根や徳島のようにOSS事業の一環としてRuby推しの一県になってくれると嬉しいなと思いました。

※県庁の池田さんがおそらく近々動画をアップしてくれるかと思いますので、詳細が気になる方はそちらでどうぞ

第二部 プレゼン道場

プレゼン力の高い方ばかりで驚いた。大学生も3名程登壇していたが、明らかに自分よりもプレゼン力が高かった。内容としてはIoTクラウド農業辺りをテーマにした話が多かった。青森に限らずだけど、IoT、クラウド第一次産業を絡めたビジネスはチャンスがたくさんありそうだし、今後増えていくのだろうなと思った。

※こちらも県庁の池田さんがおそらく近々動画をアップしてくれるかと思いますので、詳細が気になる方はそちらでどうぞ

懇親会

プレゼン道場のプレゼンターを投票形式で最優秀賞、優秀賞を決め、その発表が懇親会内で行われた。受賞者の皆様おめでとうございます!!

最優秀賞
  • タイトル: フリーペーパー・アプリで最新情報をお届け!〜青商祭アプリの開発〜
  • プレゼンター: 青森大学青森県立青森商業高等学校(石川さん)

f:id:fukuiretu:20160216184426j:plain

本人不在のため青森大学のゼミ?の先生

優秀賞
  • タイトル: クラウドフルマネージドサービスのご案内
  • プレゼンター: 株式会社ヘプタゴン(立花さん)

f:id:fukuiretu:20160216184306j:plain

株式会社ヘプタゴンの立花さん

みんなが大好きな:sushi:が出たけど、あまり食べれなかったことだけが唯一の心残り。 あと、cakesnoteを知っている方が予想以上に多くて驚いた。

さいごに

今日登壇された方々は、もちろん営業も兼ねていると思うけど、それ以上に業種の枠を超えて、青森県自体を盛り上げていこうという意志を強く感じた。それが雇用や給与水準の上昇、魅力的な事業や会社の誕生に繋がり、今現在は県外で働いている方がいつかUターン・Iターンして欲しいし、多くの学生が県内で就職したいと思えるような県になればいいなぁと。その中で、自分もリモートワークという形でUターンしてきたわけだから、自分にできることを改めて考え、いつか自分も登壇された方々と同じ目線に立って、少しでも貢献していきたいと思った。また、同業種・異業種かかわらず、もっと様々な方と交流していきたいと思いました。(面白そうなイベントがあれば極力参加しようと思いますので、是非教えて頂ければと!)

準備、運営に携わった県庁の方々、あおもりIT活用サポートセンターの方々、登壇された方々、ブース出展された方々お疲れさまでした!

2015年振り返り

年始に立てた雑な目標ベースに振り返ってみる。

「 勉強したいこと」に対する振り返り

と目標を立てていたので個別に振り返る。

Ruby

一応定量的にgemを最低5つリリースするというのを立てていて、これはなんとか達成できた。以下がリリースしたgem。

そういえば、メタプログラミングRubyはまだ読んでいない。。。買おうと思ったタイミングで絶版していて躊躇していたわけですが、まぁ良かったのは第2版が発売されて電子版もあるので、冬休み中に読もうと思っています。

www.amazon.co.jp

Rails

前職の同僚の方に薦められた「Rails3レシピブック」を読んで幅というか引き出しが増えたなーと思う。あと、「Railsガイド」もお布施の意味も含めて購入し、一時期毎日お風呂の中で掻い摘んで読むを繰り返していて、これもかなり良かった。あとはRailsに限ることではないが、「Everyday Rails - RSpecによるRailsテスト入門」を読んだことで、RSpecの文法の幅も広がり、testを書くことに抵抗がなくなったなーと。(読了以降にリリースしたgemは全てtest書いてるはず)

とはいえ、やはり業務で読み書きすることになったというのが何にも代えがたくRails力がついた一番大きなところ。あと同僚との趣味開発をRailsで作ったのもかなり大きかった。色々試す場としても有用なので趣味開発を常にやっていきたい。

www.amazon.co.jp railsguides.jp leanpub.com

Rails初学者の方で上記3書を読んでいない方がいたら、オススメですので是非読んでみてください!!

ちなみに、GitHubのcontributionsは以下のような感じでした。

private込み f:id:fukuiretu:20151231003824p:plain

publicのみ f:id:fukuiretu:20151231003908p:plain

Docker

ほぼ手付かず。。。何かDockerに関する記事をちょろっと試すレベルで終わってしまいました。

英語

これは全くの手付かず。。。英語の記事やPodcastからのインプットを増やしたいってのはもちろんだけど、業務上で目にすることが圧倒的に増えたので、来年はプライオリティをあげてなんとかしたい。

「習慣づけたいこと」に対する振り返り

  • 読書
  • Qiitaへのアウトプット

と目標を立てていたので個別に振り返る。

読書

技術書以外はほとんど読めなかった。。。

Qiitaへのアウトプット

1000Contributionを目標としていたが約半分の465Contributionという結果。5月以降、Qiitaへのアウトプットが激減してしまったので、来年をもう少し意識的にアウトプットしていきたい。

その他

総評

Ruby/Railsに関する部分はそれなりに合格点レベルかなーと思うが、それ以外の進捗がダメだったので、来年の目標はもう少し絞って、具体化、定量化して深く追求していったほうがいいかもしれない。それとせっかく青森にUターンしてきたので、もっと地域に貢献できる何かをしていければと。

それでは、皆様来年もよろしくお願いします!良いお年を!

f:id:fukuiretu:20151214132224j:plain

リモートワークライフをより快適に送るために個人として取り入れている工夫 #remoteadvent

このエントリは「リモートワーク Advent Calendar 2015」16日目の記事です。

www.adventar.org

明日17日目はリモートワークを実践している企業として著名な、ソニックガーデン社の倉貫さんなので、前座として力量不足ではありますが、生暖かい目でお付き合い頂けますと幸いです...。

簡単な自己紹介など

私はピースオブケイクという、スタートアップが犇めく東京渋谷にある企業に勤務しているエンジニアです。業務ではcakesとnoteというサービスの運用をしていて、Ruby(Rails)でコードを書いたり、たまにAWS周りを見たりしています。

cakes.mu note.mu

ちなみに、同ビル内にはIncrementsさん、スクーさん、Crevoさんもいらっしゃいます。

ピースオブケイクには2015/3に入社し、家庭事情により3か月後の2015/6に神奈川県鎌倉市 -> 青森県大鰐町に引越しをし、以降社の方々の協力を得て自宅からリモートワークをしています。リモートワーク歴は約半年になります。

私の住まいは青森県大鰐町の中でもかなり外れの方に位置しておりまして、周囲は山川田畑ばかりで、夏には熊警報、猿警報が出たりします。近隣のコンビニ(Family Mart)までは、Google Mapによると徒歩54分だそうです。(実際に歩いたことはありませんw)

f:id:fukuiretu:20150625102138j:plain 仕事部屋から撮った風景

f:id:fukuiretu:20150604134531j:plain 家から徒歩5分くらいのところにある秘境

インターネットが繋がれば、このような環境でも仕事ができますし、Amazonもプライム会員かつプライム対象の商品であれば次の日には届けてくれます。インターネットとAmazon素晴らしいですね。

前置きが少し長くなってしまいましたが、今回は、たまたまTwitter@jnchitoさんがアドベントカレンダーの参加者を募集しているのを見かけて脊髄反射で登録しました。当初はチーム(会社)としてリモートワークをどう実践しているか等の知見を公開しようと思っていたのですが、チーム(会社)としての 知見はまだまだこれからというところなので、こちらに関してはまた別の機会にすることにして、今回は個人として取り入れている工夫(アイディア)を紹介したいと思います。

取り入れている工夫

自制心を保つための工夫

通勤時とルーチンや習慣を極力変えないようにする

ON/OFFの減り張りをつけたいというところが大きな目的で、具体的に以下は特に気をつけています。

  • 起床時間
  • 身だしなみ(体調不良の時はラフな時もありますが...)
  • 犬の散歩
タスク管理とポモドーロ

ポモドーロとは、短時間の集中作業を繰り返すことで、仕事を成し遂げる ためのテクニックです。具体的には、

  1. タスクを選ぶ
  2. 25分作業する
  3. 5分休憩する
  4. 1 ~ 2を3, 4回繰り返したら長めの休憩(15分程度)を取る

というサイクルを繰り返し行います。

私はTodoistTomightyというツールを利用して実施しています。

その間、色々なツールを思考錯誤して今に至りますが、ツールを選定したポイントは、シンプルなデザインと操作性です。ご参考までに、ツール選定の際に参考にさせて頂いた記事のリンクも合わせて紹介します。

motemen.hatenablog.com tbpgr.hatenablog.com

作業の流れとしては、

  1. Todistにタスクを登録する
  2. Todistのタスクリストから作業するタスクを選択
  3. Tomightyを起動しポモドーロ開始
  4. タイマーが鳴ったら(25分経過したら)、強制的に5分休憩する
  5. タスクが完了するまで3. ~ 4.を繰り返し、完了したらTodistのタスクに完了のチェックをつける

といった感じです。ちなみにこの記事も上記手順に沿って書いています。

ただまだまだ改善の余地があると思っていて、例えばSlackからある程度操作できて、雑にどこかにまとめておいて後から見返せる仕組みが欲しいなと考えています。まだふわっとですが、

  • Todistが提供しているAPIをSlackからBot経由で叩けるようにして、操作する
  • ポモドーロをBotに管理させる(start, breakの起動と指定日に何回実施したかを参照できるetc)
  • これらを日時でいい感じに(タスク毎に何回のポモドーロで完了できたかetc)自動でまとめてどこか(qiita, esa, google spleadseetなど)にstoreする

をやってみようかと考えていますので、いい感じに仕上がりましたらブログで公開しようと思います。

運動不足を解消するための工夫

大半のリモートワーカーが悩まされる悩みかと思いますが、私も例外ではなく、運動不足だけが原因ではないですが、この半年間で約3kg程太ってしまいました。。。

ながらエアロバイク

通勤していた頃は、往復で毎日40分は歩いていたのですが、それが0になったことで慢性的な運動不足になりました。そこで8月くらいから毎日30分程、アニメを鑑賞しながらエアロバイクを漕いでいます。 ながらでエアロバイクを始めたのは、Rebuild: Aftershow 102: About Time To Kill iTunes (masuidrive)@masuidriveさんが エアロバイクを漕ぎながらコードを書いている というような話をしていたことがきっかけで、実際に試してみたところ、仕事中の気分転換にもなって一石二鳥であることがわかり、それ以来継続しています。 スタンドデスクを持っていないので、間に合わせで家に余っていたカラーボックスで代用していますが思いの外いい感じです。

f:id:fukuiretu:20151214144629j:plain エアロバイク + カラーボックス + MacBookPro

参考までに、使っているエアロバイクはこちらになります。

www.amazon.co.jp

寂しさを埋めるための工夫

ラジオ収録

家族以外と話しをする機会が激減し、たまに寂しくなる時があります。 ラジオ収録のきっかけは私の寂しさを埋めるためというわけではなかったのですが、自社のメンバー3人で定期的にラジオの収録をし、自社サービスのnoteで公開しています。仕事に関係のないたわいのない話ばかりですが、私の中で精神安定剤的な役割を担っています。 軽い宣伝になってしまいますが、noteでは音声ファイルを簡単にインターネット上に公開(サウンドノートという機能)することができます。私たちのラジオは無料で公開していますが、有料販売することも可能ですので、よろしければ使ってみてください。 ちなみに録音は、appear.in – one click video conversationsビデオチャットしつつ、iPhoneのボイスメモで録音するという方法を取っていますが、割と綺麗に取れます。

そういえば少し前に、ソニックガーデンさんで「社長ラジオ」という取り組みをしているという記事が公開されていました。記事中に "口頭で伝えることでふわっとしたニュアンスも伝えられるのがとても良かったのです。" とあり、なるほど!と腑に落ちたと同時に、趣旨は違えど、実際に声に出して話をすることの良さを改めて実感しました。

kuranuki.sonicgarden.jp

分報でぼやく

最近流行りの分報ですね。ご存じない方は以下のクラフトマンソフトウェアさんの記事をご参照いただければと。

c16e.com

分報channelは基本は作業ログの掃き溜め場として利用していますが、ぼやきの場としても利用しています。分報channelにはBotも常駐させているので、ツッコミが欲しい時はBotに話しかけたりしていますw

f:id:fukuiretu:20151215135859p:plain Botのkyokoさんにぼやいている例

ちなみにBot@r7kamuraさん作のr7kamura/ruboty · GitHubを利用しています。 Botとの会話は、こちらも@r7kamuraさん作のr7kamura/ruboty-talk · GitHubというプラグインを利用することで実現していて、内部的にはdocomoの雑談APIを利用する仕組みになっています。詳細は以下の記事をご参照ください。

qiita.com

おわりに

特にこれからリモートワークを始める方、リモートワークをしていないけど興味のある方に少しでも参考になれば幸いです。

また、今後リモートワークをしている方や興味のある方同士で情報交換しつつコミュニティを形成していけたらいいなと思っております。もし興味のある方がいらっしゃいましたらご連絡頂けますと嬉しいです。(Slackのチームとか既にあったりするんでしょうかね?)

最後に、弊社ではエンジニア・デザイナーを募集しておりますので、リモートワークはもちろんコンテンツ・メディア事業に興味のある方は是非Wantedlyからご応募ください!

www.wantedly.com

東北IT物産展に参加しました #tohokuitfes

2015/8/29に東北IT物産展というイベントに、スタッフ・スピーカーとして参加しました。

神奈川から青森に移住して3ヶ月。正直、青森に帰ってきてこんなに学びが多く、楽しく、そして熱いイベントに参加できるとは思ってませんでした。 実行委員長の立花さんを始め、スタッフの皆様、関係各所の皆様には感謝の気持ちしかないです。ありがとうございました!!

スピーカー(ハンズオンの講師)としては、予定していた半分程度しか進捗できず、参加頂いた方々には大変申し訳なく思っております。次にこういったイベントでハンズオンの講師をさせて頂く機会があるかはわかりませんが、機会があれば反省点を生かしリベンジできればなと思います。進捗ダメなハンズオンのスライドは以下となります。

esa-pages.io

また、懇親会では飛び込みでLTに挑戦しました。デモとしてSlackからEC2にRailsアプリをデプロイ、いわゆるChatOpsを試みましたが、まさかのCircle CIでbuild failedとなり、デプロイ失敗。。。ビルド失敗したらデプロイされないから安全だよ!ちゃんとテスト書いておくと幸せだね!というのは見せれたと思うので結界オーライということで。。。build failedなLTのスライドは以下になります。

esa-pages.io

ちなみに、スライドはドキュメント共有サービスのesaで作成しました。markdownからスライドに変換し、よしなにレイアウトしてくれるので、スライドのデザインで悩むことなく内容だけに集中することができたのでとても楽でした。デザインもかわいいのでオススメです!

さいごに、、、

来年の東北IT物産展は秋田で開催されるそうです。今回ご参加できなかった東北の方、来年は是非ご参加ください!私ももちろん参加します! 都会でしかできないこともたくさんあると思いますが、地方でしかできないこともたくさんあると思います。都会から東北まで足を運んでわざわざ参加したいと思えるイベントがたくさん生まれるくらいに、みんなで東北のIT界隈を盛り上げていけたらよいですね!自分も微力ではありますが、協力していければと思います。東北アツイ!!!!!