あんパン

こしあん派

ghqの配下に良い感じにリポジトリを新規作成する

どんどん小ネタ放出していくぞ

ghqが便利なんだけど、新しいリポジトリをローカルに作るときにいちいち適当な既存のリポジトリに入ってからcd ..してmkdirして…とやるのがだるかったので、そのあたりを1コマンドでやってくれるgit subcommandを作った。適当にPATHの通ったとこに置いとくとgit new-repo [-u user] [-s service] repo_nameで良い感じにやってくれます。ghq.rootは複数指定できる(~/.go/src~/.ghqみたいな)ので、pecoで選択できるようにしてる。

って思ったらid:Sixeightさんが4年くらい前にすでに同じようなの作られてるじゃん!!!

blog.nishimu.land

しかも丁寧にREADME.md作ってるところもほぼ一緒!!! 思うことはみな一緒ということで。

最近のタスク管理とか

昔からタスク管理ツールを使うのが苦手。WunderlistもTodoistもGoogle Keepもいろいろと試したんだけど、結局使うのを諦めた。ここ2年くらいはMarkdownでタスクリストを書くようにしている。その心は:

  • キーボードだけで操作が全て完結する
    • 複数項目を一気に移動したいときは範囲選択してカット&ペーストしたら良い
  • 付随する情報の表現が簡単で、一覧性に優れている
    • 買い物というタスクには、卵を買うとかピーマンを買うみたいな情報があるはず
    • 階層化されたツールだといちいち買い物タスクの小タスク(中身)を見に行く必要があって不便

といった感じ。これに加えて、使うツール極力減らしたいという意図もあって、家事についてはGitHubのIssue上で管理している。結構こまごましたことも書いておいて、ちまちま潰すのが達成感があって良い。

f:id:masawada:20190304182154p:plain

スマートフォンからチェックボックスを操作できないのが若干痛いけど、だいたい常時PCを開いているので苦にはならない。

では業務ではどうなのかというと、いろいろと理由はあるけれど主にだるいという理由でやっていない。頻繁にタスクの優先度を上げ下げしたりいろんなメモを書き込んでいきたいわけだけれど、都度Issueを開いて書き換えるという行動はコストになる。あとはローカルに保存しておきたいという話題もある。

これまではMacを使っていたのでStickiesとかでお茶をにごしていたのだけれど、最近はLinuxデスクトップを使っていて(このあたりは今度別に書く)、いい感じのアプリがないのでどうしたものかなーと思っていた。そういう状態を放置していたらだんだんとタスクを管理しきれなくなってきたので、最近は手元でうまいぐあいにMarkdownファイルを生成してToDo管理ができる小さなツールを書いて使ってる。

これを todo というファイル名で適当にパスの通った場所に置いてる。

  • todo [edit]
    • $HOME/.todo ディレクトリに YYYY-mm-dd.md という名前のファイルを作成して開く
      • 今日のファイルがなかったら新規作成or前日のデータをコピーして開く
  • todo history
    • pecoで過去の日付のファイルを開く

くらいの機能がある。タスク管理くらいのフロー感のある情報だとホームディレクトリとか適当なところに置きがちだけど、いちいち vim ~/todo.md とかで開くのはだるいし、ホームディレクトリにそういうファイルがあるのも気になって仕方がないタチなのでできれば隠したい。todoコマンド一発で今日の日付のタスク管理ファイルを開けるのは気軽だし、毎日新たに作りなおすので日次で作業がどれだけ進んだのかとかどれだけタスクが積まれたのかなどがわかって良い。と思う。Gitで管理/検索などできるようなサブコマンドとかあれば良いのかなーと思いつつ、いまのところこれくらいで不自由していないので手をつけていない。

あとはお好きなエディタにMarkdownをいい感じに編集するプラグインなどを入れて、チェックボックスに一発でチェックを入れられるようにしたら良いと思う。

仕事上常に端末を開いているので、僕にはこれくらいのタスク管理方法が合っている。

Scrapbox Drinkup Self-made Keyboard Edition参加レポート

こんにちは、id:masawadaといいます。普段は、はてなブログの開発をして生活しているエンジニアです。自作キーボードはレツプリ祭りのころにウォッチしはじめましたが、まだLet's Splitしか作ったことがない初心者です。

いつも便利につかわせていただいているScrapboxと、普段からいろいろ見て回っていて興味マックスな自作キーボードのイベントがあるときいて即座に申し込みました。今回はブログ枠での参加ということで、簡単ですが参加レポートです。

nota.connpass.com

もうおひとかたのブログ枠の記事はこちら

オープニング

まずはid:Pasta-Kさんのオープニング。

f:id:masawada:20190124193223j:plain

これまで自作キーボードに手をつけたことがなかったので、当日の昼に自作キーボードのお店「游舎工房」で製作したとのこと。これは自作キーボード設計入門のPetit Splitですね。

id:daiizさんも同じく游舎工房でPetit Splitを製作された模様。

f:id:masawada:20190124191756j:plain

もともとKiCadなどを使ってキーボードを設計する入門の例として作られたものですが、はんだづけにあまり馴染みがない人にとっての入門としても最適かもしれませんね。

なお、自作キーボード設計入門についてはこちら。

shokaiさん

トーク1本目はid:shokaiさんによるScrapboxの紹介。

f:id:masawada:20190124194122j:plain

資料はこちら。これを読んだらだいたい分かりそうです。

Scrapbox、脳内のダンプに最適だと思っています。適当なキーワードをもとに検索してリンクを辿ることで目的の情報に辿りつくことができる。特別な記法はあまり覚える必要がなくて、とりあえず[]囲うとなんとかなる。複数人で書いている場合は、他人の書いた行にフォーカスすることでどのように書けばどんな表示になるのかもわかる。このように読み書きの学習コストが低いのも特徴だと思います。もしまだ使ったことがなければ、是非試してもらいたいサービスのひとつです。

htomineさん

トーク2本目はid:htomineさんの「自作キーボードとScrapbox」。

f:id:masawada:20190124200304j:plain

自作キーボードScrapbox Self-Made Keyboards in Japanを開設された経緯についてでした。

以前の自作キーボード界隈は日本語の情報が少なく、Wikiなども権限管理や独自の記法などが難しかったのでScrapboxで作成されたとのこと。現在は300ページ超えるほどの盛況ぶりで、わからないことがあったら検索すればだいたい出てくる状態になっていそうです。突然増井先生がキーボードに欲しい機能のページを作られたという話で会場の笑いを誘うシーンは良かったですね。

個人的にはLublicationのページがとても充実していてありがたい限りです。

biaccoさん

最後のトークはid:biacco42さんの「なぜ自作キーボードなのか」。

f:id:masawada:20190124202133j:plain

発表メモについてはこちらが詳しいです。(もうこのレポートいらないんじゃないかな、、、)

個人的には一番刺さったトークでした。What(自作キーボードとは)とHow(どうやって作るのか)についてはいろいろと記事になっているが、何故自作キーボードなのかという話題がまだ語られていないという話題。この問題提起はかなり共感できるものでした。確かにそういった情報はまだ少ないし、もっとアウトプットがあると良いなーと思う点ですね。自分も何か書いていきたいと思いました。ちなみにbiaccoさんは「かっこいいから」という理由だそう。

LT

飛び入りが多くてちゃんと全員分記載できているかわかりませんが簡単にメモまで。(もしお名前間違ってたら教えてください!!!!)

  • waturaさん: とにかくキー数が少ないキーボードを作りたいという話題。いまはCorne Cherryを使われているそうですが、組み立てに失敗して一部キーがきかない状態で使っているとのこと。
  • 内山さん: Scrapboxを使うのに、縦置きディスプレイがあると捗るという話題。
  • youさん: スタビライザーのLubricationの話題。このミートアップで一番濃くて、一番キーボード寄りで良かったです。とにかく粘度が高いグリスを使うとよいというお話をされていて参考になるなーと思いました。
  • yo.heyさん: 自作FKB8579クローンの話題。
  • ぜろけーさん: 自作3Dキーキャップの話題。
  • ヒラマツさん: 持参されたキーボードの紹介
  • 大瀧さん: 娘さんがScrapboxを利用されている話題&制作されている機器で特許を取られている話題

クロージング

id:Pasta-Kさんのクロージング。なんと初出し情報として、Scrapboxの勉強会支援プログラムが発表されました。ビールも製作されるそう。

f:id:masawada:20190124213258j:plain

詳しくはこちら。

参加者のみなさまのキーボードたち

f:id:masawada:20190124190328j:plain f:id:masawada:20190124190100j:plain
f:id:masawada:20190124205212j:plain
f:id:masawada:20190124191944j:plain f:id:masawada:20190124190410j:plain

こちらにも掲載されていそうでした。

二次会

恵比須のハイボールバーで二次会をしました。着いてすぐにid:ymrlさんがキーボードとGPD Pocketを展開されて、NOTAの人向けHelixに必要なものを作られるという場面も。

後日談

イベントに参加したことでキーボードを作る気持ちが高まったため、一瞬だけ在庫が復活したLily58 Proと、AliExpressでGateron Clear、XDAのBlank Keycapセットを購入しました。はやく組み立てたい!

AWS IoT 1-ClickでSlackに通知を飛ばす

この記事は、 はてなエンジニア Advent Calendar 2018 10日目の記事です。
昨日は id:papix さんの『「手順書」のススメ』でした。


こんにちは、 id:masawada です。普段は、はてなブログの開発(フロントエンド・サーバサイド)に携わっています。今日は社内でAWS IoT 1-Clickを活用している話をします。

AWS IoT 1-Clickとは

AWS IoT 1-Clickとは、対応デバイスを利用してSMS送信やEメール送信、AWS Lambdaのキックを簡単に行うことができるサービスです。国内でもいくつかのデバイスを購入することができ、簡単な設定を行うことで利用できます。

現時点では以下の2種類のデバイスが入手・利用可能です。

f:id:masawada:20181210125258j:plain
上がSORACOM LTE-M Button powered by AWS、下がAWS IoT エンタープライズボタン

AWS IoT エンタープライズボタンは無線LANに接続するタイプ、SORACOM LTE-M Button powered by AWSはその名の通りセルラー通信(KDDIのLTE-Mネットワーク)で接続するタイプです。後者はボタンの代金の他に、規定の通信量がかかります(購入時は1年間の基本料と1500回分のクリック時の通信費を含む)。

どちらもスマートフォンのアプリを利用して設定することができます。

iOS用:

AWS IoT 1-Click

AWS IoT 1-Click

  • AMZN Mobile LLC
  • ビジネス
  • 無料

Android用:

おにぎり奪取ボタン

社内ではAWS IoT エンタープライズボタンを利用して「おにぎり奪取ボタン」なるものを制作し、活用しています。といっても機能としては簡単で、ボタンを押したらSlackにメッセージを投稿するだけのものです。

弊社には福利厚生としてランチ制度があり、このときに余ったごはんを総務の方がおにぎりにしてくださり小腹がすいたときに食べられるようになっています。この制度は京都オフィス・東京オフィスともに存在するものですが、東京オフィスでは最近増床したことにより別フロアで仕事をしている同僚がおにぎりの設置に気付けない・無くなったことにも気付けないといった深刻な問題が発生していました。そこで、おにぎりの設置時に総務の方にボタンを押していただくことで簡単にSlackにおにぎり関連イベントの通知を飛ばすことのできるボタンを制作しました。

f:id:masawada:20181210125506j:plain:w400
チームのデザイナ(id:mazcoさん)が取説を作ってくださった図

AWS IoT 1-Click におけるいくつかの概念

AWS IoT 1-Clickには、ボタンを効率的に管理するためにいくつかの概念が存在します。

  • プロジェクト
  • デバイステンプレート
  • プレイスメント
  • デバイス

ここでは「学校の教室の備品を追加購入するボタン群」を例に説明します。

  • プロジェクト: 備品を追加購入する仕組みそのものの定義。名前と説明を入力するだけ
  • デバイステンプレート: 各教室毎にどんなボタンを配置するのかの定義。プロジェクトに紐づく
    • 後述するプレイスメントを作成するときに、このテンプレートに沿ってボタンを配置することになる
    • 例: チョーク購入ボタン、黒板消し購入ボタン、模造紙購入ボタン、など
    • 各ボタンを押した時にどのLambdaをキックするのかもここで指定する
  • プレイスメント: 各教室の定義
    • デバイステンプレートの定義に沿って、各ボタンを教室に紐付ける
    • プレイスメントごとに3年B組などの属性を指定できる。実際はkeyとvalueで定義するので、 学年: 3, クラス: B のように指定することになる
      • キックするLambda関数では、後述するevent引数経由で指定した属性を取得することができる
  • デバイス: ボタン型デバイス
    • AWS IoT エンタープライズボタンやSORACOM LTE-M Button powered by AWSなどの物理デバイスと1対1で対応する概念

まずコンソールでプロジェクトを作成してデバイステンプレートを定義します。次に、プレイスメントを作成してデバイスを紐付けることで、ボタン押下時にどのようなイベントを発行するかを指定することができます。

今回のように1箇所におにぎり奪取ボタンを置くくらいの規模感だと大仰に見えますが、たとえば他の階や京都オフィスにも設置したいとか、おにぎりだけでなく温かい飲み物の入荷も通知したいので別のボタンを置きたいといった要求が発生した場合に便利です。

詳しくは上記のようなAWSのドキュメントを確認すると良いのですが、これらを読んだだけではなかなか理解しづらい部分もあると思うので、実際にプレイスメントまで作成してみることをオススメします。デバイスを持っていなくても、プレイスメントの作成までは行うことができます。

実装

キックするLambdaについて、自分は以下のように実装しました。実行環境はNode 8.xです。Lambdaの環境変数に以下の項目を埋めることで利用することができます。

  • SLACK_URL: incoming webhookのURL
  • CHANNEL: 投稿先のチャネル
  • USERNAME: botの名前
  • ICON_EMOJI: アイコンになる絵文字。:rice_ball: のような形式で指定する。
  • SINGLE_CLICK_MESSAGE: ボタンを単押しした場合に投稿するメッセージ
  • DOUBLE_CLICK_MESSAGE: ボタンを二度押しした場合に投稿するメッセージ
  • LONG_CLICK_MESSAGE: ボタンを長押しした場合に投稿するメッセージ

handlerの引数のeventには、以下のドキュメントの「AWS IoT 1-Click クリックイベント」に沿ったイベント情報がオブジェクトで渡ってきます。これをもとに、プレイスメントの情報やボタンの押下情報(単押しのなのか、二度押しなのか、長押しなのか)を判別してメッセージを出し分けることができます。

おにぎり奪取ボタンでは

  • 単押しでおにぎりのデプロイ
  • 二度押しでおにぎりの完売
  • 長押しで総務の方への感謝

といった具合にメッセージをアサインして利用しています。1箇所にしか存在しないため、プレイスメントの情報は特に利用していません。

f:id:masawada:20181210150254p:plain
実際に通知される投稿。完売の左右には:invisible_rice_ball:という透過画像絵文字が指定されています。

このボタンを設置することにより、本来の目的であったおにぎり関連イベントの地下へのブロードキャストの他にも、Slackチャンネル上でのコミュニケーションの増進にも寄与することができました。

さいごに

本稿はここまでとなります。ここまで読んでくださった皆様もAWS IoT 1-Clickを利用しておもしろサービスを作成してみてはいかがでしょうか。

実はこのあとCDKですべてをデプロイするまでをこの記事でやりきりたかったのですがAWS IoT 1-Click周辺のデプロイがうまくいかず時間切れ、何番煎じだよという記事になってしまいました。。。CDKでのデプロイについてはまた後日記事にできればと思います。

明日は id:cohalz さんの記事です。