AWS IoTボタンで自分の訃報をツイートする「死んダッシュボタン」を作ってみた

# 死んダッシュボタンとは
自分の身にもしものことが起こった（死んでしまった）とき、自分の訃報をできるだけ早く周囲に知らせたい！
そんなとき、ワンクリックで自分の訃報をTwitterに投稿してくれる便利なボタン！
それが **死んダッシュボタン** です。

# なぜこんなものを？
友人と話しているとき、自分が死んだときってどうやって周囲に伝わっていくのか？という話題になりました。
親族や親しい友人にはすぐに伝わるでしょうが、たまにしか合わない友人や知人には伝わるまでにタイムラグがあるはずです。
そんな人達と生前たまたま飲み会や遊ぶ予定が入っていた場合は、ドタキャンと思われかねない。
連絡も返さない嫌なヤツになってしまう。
そんな不安から作成を決意しました。

# 準備
まず、[AWS IoT ボタン](https://aws.amazon.com/jp/iotbutton/)が必要です。
クリック、ダブルクリック、長押しで色々なことができるデバイスです。
あとはAWSアカウントとTwitterアカウントを用意します。

# Twitter APIの登録
自動でツイートを行うには、Twitter APIに登録してAPIキーやアクセストークン等を取得する必要があります。
手順は様々な記事で紹介されているのでそちらに譲ります。

参考： [Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ](https://qiita.com/kngsym2018/items/2524d21455aac111cdee)

こんな感じで取得できます。
![キーとトークン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/e6f9e169-b99f-7162-51dd-a215a1e7b6e4.png)

# AWS Lambda関数の登録
AWSコンソールにログインし、Lambda関数を作成します。
「一から作成」を選んで、以下のように入力します。
今回はNode.jsのバージョン12.xで作成します。
![lambda_登録.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/3206042c-7ae5-b0bd-1695-9fee6243d7ea.png)

Node.jsのプロジェクトを作成します。

```bash

mkdir shin_dash
cd shin_dash
npm init -f
touch index.js
npm install twitter --save
```

index.jsの内容はこんな感じ。
`consumer_key` などには、Twitter API登録時に取得したものを設定してください。

```index.js
const twitter = require('twitter');

const twitterClient = new twitter({
  consumer_key: CONSUMER_KEY,
  consumer_secret: CONSUMER_SECRET,
  access_token_key: ACCESS_TOKEN_KEY,
  access_token_secret: ACCESS_TOKEN_SECRET
});

exports.handler = (event, context, callback) => {
  const tweet = 'ここにツイート内容';
  twitterClient.post('statuses/update', { status: tweet },
    function(error, tweet, response) {
      if(error) {
        callback(null, 'error!');
      }
      callback(null, 'done!');
  });
};
```

Lambdaのコンソールに戻り、コードエントリタイプで「ZIPファイルをアップロード」を選択します。
先程のindex.jsとnode_modulesをzipで圧縮し、アップロードして「保存」ボタンを押します。
![lambda_upload](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/9d84fca8-5a28-d496-6e67-8c48631c86ab.png)

次にテストイベントを作成し、実際にツイートできるか試してみましょう。
右上の「テスト」ボタンを押して、次のように設定して保存します。
![テストイベントを作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/7b7a2f4e-aaf4-4ff3-5580-074ab3b677d3.png)
保存後は右上の「テスト」ボタンを押して、実際にツイートされれば成功です！

# AWS IoT 1-Clickの設定
AWS IoT 1-Clickの画面を開きます。
まずはデバイスの登録を行いましょう。
[わかりやすく解説されている記事](https://qiita.com/hayao_k/items/d36d4b2579d0bbbe21a9)がありましたので。そちらを参考に。

デバイスの登録が完了すると、管理 -> デバイスのページから登録したデバイスを確認できます。
![device.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/304a4547-3f42-5960-b86c-e04938caf69a.png)


次に、オンボード -> プロジェクトの作成 から、プロジェクトを作成していきます。
<img width="429" alt="プロジェクト情報の指定" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/7d91b293-43bc-a82c-3018-41ef2a835a26.png">

プロジェクトのプレイスメントのテンプレートの定義はこんな感じです。
下の「プレイスメントの属性」は空欄にしました。
これでプロジェクトは作成完了です！
<img width="611" alt="プロジェクトのプレイスメントのテンプレートの定義" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/e7c21d5e-f021-e9a5-2e78-21562aaa7c89.png">

次に、「プレイスメントの作成」を行います。
<img width="934" alt="テンプレ作成.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/10af3b26-21e0-4e37-9702-d666e7f785c2.png">

プレイスメント名はとりあえずhomeとしました。
「このテンプレートのボタンデバイスを選択する」を押し、先程登録したデバイスを選択します。
<img width="386" alt="プレイスメントの作成" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/d66b7045-4390-d5de-3def-9c0f53cc33dd.png">

以上で設定完了です！
AWS IoT ボタン改め、死んダッシュボタンをクリックすると、自分の訃報がツイートされます！
（まだ生きているので、テスト投稿だということも追記してます）
![twitter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/279032/4695596c-73da-5847-bed5-673b609bca59.png)
今年の年末は実家に帰省するので、このボタンを実家に置いて行こうと思います。
これで心置きなく年末年始も飲み会の予定を入れられますね！