heyheytower

日々のメモです。誰かのお役に立てれば幸いです。

家庭内の情報共有(Slack, Trello, IFTTT, HUBOT, Zaim, MyThings)

目次

目的

家庭内の情報共有を円滑にするために、チャットアプリ・タスク管理アプリ等を導入したことについてまとめたエントリーです。

概要

情報を Slack*1に集約します。

  • ToDo管理はTrelloで自動タスク生成・実行管理(リマインドはHUBOTより実行)
  • 郵便物の配達情報の共有は Gmail->IFTTT->Slack
  • 勤怠情報は Google Calendar に保存しているので Slack への編集時・予定前日の通知
  • 金魚・熱帯魚のご飯やり状況の共有(ご飯あげたら Amazon Dash Button 押下。忘れたらHUBOTよりリマインド)
  • 買い物リスト共有と、定時リマインド
  • お財布情報はZaimで管理しているので、出入金があったら Slack へ通知

方法

ToDo管理

下記ができるプラットフォームとして Trello*2 を選択しました。

  • 定期タスク追加が可能
  • やったかやっていなかチェックできる
  • Slack と連動できる
  • API を公開している (HUBOT と簡単に連携できる。リマインドのために使える仕組みがある)

定期タスク登録は Power-Up > Card Repeater を用いました。

trello_todo
Pic.1 Trello でのToDo管理

Slack 通知には簡単に Trelloアラート*3を使ってます。

未処理タスクのリマインド

Trello の特定のリストのカードで、チェックリストが未完了のものを抜き出し、Slack へ定時投稿します。
下記の "scripts/trello-todo.coffee" が作ったリマインダーです。

trello_todo_remind
Pic.2 Trello でのToDoリマインドの様子

郵便物の配達情報の共有

下記にて Gmail から Slack への転送を実現します。

  1. Gmail にて自動ラベル付与
  2. ラベル付与されたメールを Slack へ転送

Gmail にて自動ラベル付与の設定

下記の運送業者からのメールに対し、自動的にラベル「delivery」が付与されるよう Gmail にて設定を行いました。

Gmail->IFTTT->Slack 転送の設定

配達情報は Gmail に届くので、IFTTT*4にて「If new email in inbox labeled delivery, then post a message to a Slack channel」を作製して、Slack に投稿するように設定しました。

配送状況の通知 (2018/10/01 現在、これまで機能が動いていることを確認できていないので使うのを辞めました。)

下記のサービスをIFFTと連携させて、Slack から配送状況を追えるようにしました。

下記のレシピをテスト運用中です。

  • 「If shipment status changes, then post a message to a Slack channel」
  • 「Add package delivery dates to Google Calendar

Google Calendar 情報の Slack への転送

  1. Slack > アプリを検索する > Google カレンダー から「Slack とカレンダーを連携させる」を選択
  2. Google calendar の特定のカレンダーを、Slack のチャンネルと連動するように設定

設定が完了すると「App管理」の配下から、下記のように設定されていることが確認できます。

勤怠 はカレンダーの更新情報やリマインダーを #予定 へ投稿します

これで Google calendar で "前日に通知" などのリマインダーが予定に設定されていれば、 Slack にも前日にリマインダーが飛ぶようになります。(当然、追加・編集時にも Slack へ投稿されます)

金魚・熱帯魚のご飯やり状況共有

下記の記事を参考に Amazon Dash Button を用いて、簡単に管理します。

ご飯をあげたら Amazon Dash Button を押して、ご飯をあげたことを Slack で共有します。

Slack-feed
Pic.3 Amazon Dash Button を押して Slack へ自動投稿

[defunct]mac-mini setup

Amazon Dash Button 検知のサーバーとして、mac-mini を用いているので下記のようにセットアップを実施しました。 (2018/1/23現在 Raspberry Pi で運用しています。)

// nodebrew
curl -L git.io/nodebrew | perl - setup
touch .bash_profile
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
// node.js, npm
nodebrew install-binary stable
nodebrew use v8.9.3
// brew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
// git
brew install git
// dash-button
mkdir dash-button
npm init
npm install node-dash-button --save

"Raspberry Pi2 Model B" setup

省電力化したいため、mac-mini の変わりに Raspberry Pi*5 を用いることにした。

// pcap install
sudo apt install libpcap-dev
// install anyenv
git clone https://github.com/riywo/anyenv ~/.anyenv
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(anyenv init -)"' >> ~/.bashrc
source ~/.bashrc
// dasher clone
mkdir Programs
cd Programs
git clone https://github.com/maddox/dasher.git
cd dasher
// node
ndenv install v8.9.3
ndenv local v8.9.3 
// dasher install
npm install
// For `sudo npm` (ref. http://make.kosakalab.com/make/electronic-work/nodejs_raspi/)
sudo visudo
// edit config.json
vi config/config.json
// running
nohup sudo npm start &

ご飯を忘れていた場合はリマインダーが届くようにする

ボットが時間指定でご飯忘れフラグが立っているかをチェックして、ご飯を与えていなくフラグが立ったままの時にリマインドを行うように HUBOT*6 を作製しました。

後述するレポジトリの下記3つが連動してリマインドを行います。

  • "scripts/*_fish-reset.coffee" (トリガーは Amazon Dash Button の押下で投稿される文章で、フラグを消します)
  • "scripts/*_fish-reminder-1.coffee" (フラグが立っている場合に、ご飯を忘れていると判断しリマインド実行)
  • "scripts/*_fish-reminder-2.coffee" (リセット用で、フラグを立てます。ここでもう一度通知をすることも可能)

下記は参考ページ。

水槽の温度管理の通知

下記の記事で適正水温から外れた時に Twitter へアラートを投げるようにしていたので、「If new tweet by specific user @Aquarino2501, then post a message to a Slack channel」という条件で、Slack に投稿するように設定しました。

買い物リストの共有とリマインド

trello_buy
Pic.4 Trello での買い物リスト管理

下記と Trello Developers を参考に、Trello の "買い物リスト" の "お使い" カードからチェックリスト情報を取得して、未チェックのものを夕方にリマインドするように HUBOT を作製しました。

下記の "scripts/trello-buy.coffee" が作ったリマインダーです。

お財布情報の共有

下記の記事を参考に、Zaim*7 を MyThings*8を連動させています。

zaim+MyThings+slack
Pic.5 Zaim で入出金があった場合の slack への連動

まとめ

目的については、取り急ぎまとめは完了です。

現在試験運用中なので、これから使用感・運用に伴う変更点や追加点など随時更新したいと思います。

以上

言語別開発ツールの棚卸し

HaskellLogoStyPreview-1.png

Pic.1 Haskell Logo

目次

目的

開発スタイルについて思うところがあり見直したため、自分用のメモとして言語別の開発ツール群をまとめた。

自分の環境

$ cat /etc/debian_version
stretch/sid
$ uname -a
Linux calc0 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:10:15 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"

言語別の開発ツール群

エディタは"neovim"*1を用いており、補完・シンタックスチェック(syntastic*2)・タグジャンプ(+tagbar*3)などを用いていることを断っておきます。

また、開発はフレームワークを用いたものではなく、ライトなプログラム作製が主です。

Table.1 言語別の開発ツール群

言語 C言語 Python Ruby Haskell Shell Script Markdown
環境 - pyenv(anyenv*4 rbenv(anyenv) stack*5 - -
パッケージ管理 - pip(requirements.txt) gem Cabal - -
Lint・スタイルチェック gcc flake8(pyflakes+pep8)+Pylint rubymotion+rubocop Hlint+scan*6+hdevtools*7 ShellCheck*8 mdl*9
ドキュメンテーション Doxygen*10 Sphinx(docstring) Yard haddock Doxygen*11 -
テスト-ドキュメント例示 (assert.h) doctest p0deje/yard-doctest(minitest-doctest) docktest - -
テスト-実装 CUnit unittest Rspec Hspec (shUnit) -
テストライナー Make Sphinx+watchdog Guard Cabal - -
デバッグ gcc -g -C0 -Wall test.c && gdb a.out pdb test.py ruby -rdebug test.rb ghci test.hs(:step、:list) bash -x test.sh、コード内に trap 'read 〜' DEBUG *12 -
タグ ctags ctags ctags hasktags*13 ctags ctags(markdown2ctags*14
Travis CI autotools+Make unittest Rspec Cabal - -
Code Climate:カバレッジ率計測 - o o o - -
heroku デプロイ - o o - -

【2017/02/22 追記】デバックについて追記を行いました。

ソースコードのコメントからのドキュメント生成については、"Javadoc" ライクなものが好みだったため、それが反映されています。

参考にしたサイト

自分の開発スタイルが学生時代から変わらず「vimPHP書いてCGI」みたいなレベルだったので、TDDのバイブルを読んだり、下記のサイトなどに触発されつつ、開発スタイルについて改めました。


書籍:テスト駆動開発入門
著者:ケント ベック

所感

言語別に網羅的に見ることによって、何ができていないかをチェックすることができましたし、記憶の棚卸しができました。

言語選択・開発スタイル・使用ツールについては様々な選択肢・組み合わせがありますが、その組み合わせ考案の一助になればと思います