読者です 読者をやめる 読者になる 読者になる

年中アイス

いろいろつらつら

AWS API Gateway+LambdaでSlackにメッセージをPOSTする(前編)

Slackはincoming webhooksがあり、POSTするだけで、簡単にメッセージを送ることができます。

スクリプトで直接Incoming Webhook使ってもいいんですが、これ自体は別に認証も何もないので、誰かが知ってしまうと、好き放題投稿できます。そんな時に入れ替えたりする場合、いろんなスクリプトの設定に埋め込まれていて、方々に散っているのはちょっと辛いです。また、多言語環境の場合は、一定の処理を行う場合に各言語でライブラリ作るのもしんどいかなーということで、AWSAPI Gateway + Lambdaを使って汎用化してみます。*1

Slackのteam、AWSアカウントはあるものとして、以下を行っていきます。

  • Slack Incoming Webhookの作成
  • AWS Lambdaでincoming Webhookを使う
  • AWS API GatewayとLambdaを繋ぐ(後編で)

Slack Incoming Webhookの作成

Incoming Webhookは、channelを指定するので、今回は#generalを使います。必要に応じてchannelを作成してください。

次に、incoming webhook integration(新規作成ページへのリンク)を開きます。

channelに#generalを選択して作成します。 f:id:reiki4040:20170129234607p:plain

そうすると、settingsのページに行くので、Webhook URLをコピーしておきます。 f:id:reiki4040:20170129234617p:plain

また、下の方に行くと、名称とアイコンを設定できるので、用途に合わせて変更します。 f:id:reiki4040:20170129234624p:plain

以下のcurlで試すと、メッセージが表示されます。(URL部分は置き換えてください)

curl -X POST -H 'Content-type: application/json' \
--data '{"text":"This is a line of text.\nAnd this is another one."}' \
 https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX

レスポンスは、成功したらokだけです。以下のように表示されます。(画像は名称の反映が遅延しているのか、incoming webhookのままでした) f:id:reiki4040:20170129234629p:plain

AWS Lambdaでincoming Webhookを使う

次に、Lambda上に実装していきます。

AWS consoleからLambdaサービスを開き、Functionsから[create a Lambda function]を選んでスタートします。BluePrintには、pythonでのCloudWatch->APIGateway->Lambda->Slackはありますが、今回はnode.jsで行うので、Blank functionから作ります。 f:id:reiki4040:20170129234702p:plain

Triggerは、作らないまま進みます。 f:id:reiki4040:20170129234753p:plain

詳細が出てくるので、Nameにpost-slack-general(好きな名称で構いません)を入力して、RuntimeはデフォルトのNode.js 4.3にします。 f:id:reiki4040:20170129234739p:plain

Lambda function codeは[Edit in inline]で、以下を入れます。

console.log('Loading function');

const https = require('https');
const url = require('url');
const slack_url = process.env.SLACK_WEBHOOK_URL;
const slack_req_opts = url.parse(slack_url);
slack_req_opts.method = 'POST';
slack_req_opts.headers = {'Content-Type': 'application/json'};

exports.handler = function(event, context) {
  if (event.text) {
    var req = https.request(slack_req_opts, function (res) {
      if (res.statusCode === 200) {
        context.succeed('posted to slack');
      } else {
        context.fail('status code: ' + res.statusCode);
      }
    });

    req.on('error', function(e) {
      console.log('problem with request: ' + e.message);
      context.fail(e.message);
    });

    // ここで、メッセージの編集を必要に応じて行う。
    var message = event.text;

    req.write(JSON.stringify({text: message}));

    req.end();
  }
  });
};

このAWS LambdaでSlackのIncoming Webhookでメッセージを送る例は、 CloudWatchのAlertをAWS Lambda経由でSlackに飛ばすを参考にさせていただきました。

上記ページは、SNS用のpayload構造になっているので、その部分などを変更しています。{"text":"message"}というJSONが来て、そのtextのvalueをSlackに送るLambda(node.js)です。*2

また、Webhook URLは環境変数で入れるように変更しています。そのあとのEnvironment variablesで、SLACK_WEBHOOK_URLというkeyでWebhook URLを設定します。 f:id:reiki4040:20170129234730p:plain

Lambdaの実行のIAMRoleは、特に追加の権限は必要ないので、最低限Lambda実行に必要なIAMRoleを作ります。すでにある方は飛ばしてください。[Create a custom role]を選択して、IAMの画面に移動します。 f:id:reiki4040:20170129234653p:plain

デフォルトで表示されているものを[Allow]で許可すれば大丈夫です。 f:id:reiki4040:20170130000047p:plain

作成したIAMRoleが選択されます。 f:id:reiki4040:20170129234711p:plain

Advanced settingsのところは特に変更しません。最下部の[Next]で次のプレビューに進み、[Create function]で作成完了です。

Lambdaの実行確認

Lambdaは、テスト実行ができます。[Action] -> [configure test event]を選びます。 f:id:reiki4040:20170129234807p:plain

デフォルトで[Hello world]が選択されているので、その下のJSONを、以下に変更して、[Save and Test]で実行します。

{"text":"Message from AWS Lambda"}

f:id:reiki4040:20170129234817p:plain

成功したら、Slackにメッセージが表示されます。 f:id:reiki4040:20170129234800p:plain 出てこない場合は、AWS console画面下部に実行ログが出てくるので、それで確認しましょう。

次回、API Gatewayと繋いでいきます。

参考

*1:使ってみたいだけというのもある

*2:お好みで、他のkeyを追加して、送る前に組み立ててください。

iPhone7に変えました

こっちにも書きましたが、2016年末に、iPhone5sからiPhone7に変えました。決め手はやっぱりApplePayでのSuica(後述しますが、停滞中)で、副産物としてQuicPay(ポストペイ型の電子マネー)が便利という気づきがありました。

値段

AppleStoreOnline SIMフリー 128GBモデルで、消費税込みで約9万円でした。32GBだと72,800円+税で、以前の5s 16GBと同じ値段(当時)。ちなみにiPhoneSEは16GB 44,800円, 64GB 49,800円(いずれも税抜き)という価格で、最後まで迷いました。SEは格安SIMと合わせれば、相当コストパフォーマンスは高いです。

セットアップ

MVNOのSIMを継続して使用してます。初期セットアップ時、認証のためにSIMが必要になります。ないと進められないです。また、WiFiで経由でセットアップしてましたが、MVNOキャリアから、LTE接続用のプロファイルを入れないとモバイル回線は繋がらないので注意。プロファイル入れなくても4Gと表記されて、使えるかと思いきや繋がりませんでした。

良かった点

ApplePay(Suica, QuicPay)便利

ガラケーモバイルsuicaを使ってましたが、iPhoneの方は、使ってすぐに使途が通知されるのと残高が確認しやすくて良いです。加えて、ApplePayにクレジットカードを登録すると、iDかQuicPayが使えるようになるんですが、これらはポストペイ(後から支払い)型なので、事前にチャージする必要がないものです。近所のスーパーがQuicPayに対応していたので、Suica払いをやめて、QuicPayに変えました。週一はチャージしてて地味に面倒なので、無くなると案外楽です。

Live photoが子供には結構いい

子供の写真を撮るときに、LivePhotoにしておくと前後の動きが見れて、可愛さが倍増するケースがあって良いです。使うまでは、どうなんだろうなーと思ってましたが、いい感じ。ただiPhone以外からは再生できるのかな。

容量が大きくなって、写真と動画を気にしなくて良くなった。

iPhone7とは直接関係ないですが、子供の写真や動画を撮るようになってから、16GBでは全く足りなくて、よく「空き容量がありません」という通知で写真が撮れないという状態になってました。子供相手だとすぐ写真撮れないのは致命的だったので、そのストレスからも解放されました。

ちょっと気になる点

ややでかい

5sから変更で、大きさは気になります。手は小さくはないので持てるんですが、やっぱり少し大きい。ノーケースは、滑って落とすので、ややグリップの効く薄型ケースを付けてます。

カメラの出っ張り

5sはフラットだったんですが、6からずっとカメラレンズが出っ張っていて、ケースが必須。丈夫だとは思うんですが、そこから硬いところに置くと、パキッとかならないか心配。前述の滑りもあってケースでカバーしてます。

ApplePayのオンライン決済でVISAが使えない

Suica入れて、まずチャージができないというのでハマったのが、VISAカードは登録できるけど、オンライン決済で使えない点。店舗での決済はVISAも使える様子(まだ試せてないです)Suicaアプリから会員登録して、そっち経由であればVISAでもいけるようですが、私は後述の状態で、MasterCard or JCBを作ってそっちでやる予定。日本でApplePay始まってまだ四半期程度ですが、VISAが進みそうな話も特になく。

Suica移行未完(これ直接iPhone7の話ではない)

ApplePayに登録したカードが、オンライン決済に対応していたら、それを使ってチャージ可能なようです。VISAはダメなので、モバイルsuicaに登録して、そこにカードを登録しようとしましたが、「そのカードは登録できません」とだけ出て、理由がわからず。Webを探すと、本人名義と違ったらとかのエラーもある様子ですが、その文言は出ず。ガラケーモバイルsuicaに登録してあるカードだからダメとか裏ルールでもあるのかしら。

注意点として、機種変でiPhoneに移す場合は、Suicaアプリインストールして最初に移行手続きしないと、他のカード読み込んだり新規発行したら、移行先として使えなくなります。私は、とりあえず早く使いたい一心で、余ってたSuica物理カードを読み込んでしまったので、移行不可に。ガラケーモバイルsuicaは、とりあえずそのまま維持予定です。

感想

まだ1か月も使ってないですが、iPhoneSEに変えないとやってられん、という感じにはならず、変えてよかったと思ってます。3年程度5s使ってましたが、単純性能では特に困ってなかったので、7も次の革新か、廃れすぎるかまでは使う予定です。あとは店舗でApplePay(クレジットカード払い)を試したいところ。財布からだすの面倒で電子マネーに逃げてたので、対応店舗が増えて欲しいですね。電子マネー or ApplePayで、財布を不要にしたい。

2016年の生活

もう2017年入りましたが、2016年のこと。

子供

2016年、一番のトピックは、6月に初めての子供が生まれたことでした。そして8月からフル在宅勤務を開始して、現在も続けています。保育園次第でまた勤務体系は相談する予定になってます。

出産に立ち会いました。夜中に破水したと連絡があり、翌日飛行機で向かい、私が病院に着いてからトントン拍子で生まれました。嫁は多分17時間ぐらい、私は4時間ぐらい。初めて赤ちゃんを見た感想は、未確認生物が動いているという感じ。血は平気でしたが、確かにダメな人は倒れるかもねという景色。

2か月ぐらい赤ちゃんは嫁の実家にいたので、大変な時期は(その後も大変ですが)送られてくる写真とメッセージ、LINEのテレビ電話。テレビ電話は本当に重宝しました。いい時代になったもんです。

家に戻ってきてからは、まずは抱っこの仕方から、オムツの替え方までわからないことだらけ。両親学級も行ってましたが、知識と実践はだいぶ異なります。すぐ慣れますが、実際やってるのを観察するのが一番いいです。実践は動かない人形でやってもあんまり意味ないです。

ミルクは本当に2時間ほどで周期が来て泣きます。腹時計すごい。最初はミルク兼用だったんですが、途中から哺乳瓶を嫌がり、完全母乳になったので、お父さんは代替できず。その代わりに家事全般は私が完全に引き受け(もともとだけど)。夜は同じ部屋で寝てるので、寝不足は一緒に来ます。

とにかく親のことなど一切関係なく、本能のままに行動するので、子育てに疲れ果てて、一線を超えてしまう人の気持ちはよくわかりました。私ができないところは、嫁のお母さんのサポートに非常に助けられました。

時間は飛ぶように過ぎていき、手足を動かすようになり、首が据わり始め、寝返りをするようになり、笑顔を見せるようになり、物をつかむようになり、腕で体を持ち上げたり、半年で随分と成長しました。笑顔を見せるようになってくると精神的には随分と助かります。無表情で泣くだけだと本当に辛いです。

保育園

認可保育園はうちの地区も「保育園落ちた」の投稿と同じく、激戦区で全然足りてないと。子育て世代を呼び込んでるけど追いついてないというところ。正直、甘く見てました。20近く見学に行って、書類集めて申請しました。2月頃の発表までわかりませんが、例年で見ると無理だそうで、認可外になる可能性大です。最悪引っ越しする可能性あり。

自分の時間

子供が生まれてからは、仕事の区切りをよりつけるようになりました。逆に自分だけの時間は仕事を除いて激減していて、まとまった時間でのアウトプットがしづらい状態です。インプットは隙間時間で本を読んだりTwitterみたりとまだなんとかできましたが、アウトプットと考えてると途中で中断されてモヤモヤしやすかったです。うちの子、夜になかなか寝始めないので、抱っこしたり相手するのに持ってかれます。そして疲れて何もできない。

最近は、少しマシになってきたので、できるだけアウトプットに傾ける予定です。

2016年お金の使い道ランキング

2015年は、買って良かったもの書きましたが、2016年は、自分の時間を取り戻そうに感化され、価値のある出費TOP3に変えてみました。

2016年は子供が生まれたこともあり、そっち関係の出費の価値が高かったです。1位に関しては本当ケチらなくてよかったと心底思いました。

価値ある出費TOP3

1位 飛行機ビジネスクラス (13万)

子供の出産立会いで、嫁の実家に向かうために、初めて飛行機のビジネスクラスを使いました。破水していたので、時間が読めないこともあり、なるべく早い便を探してビジネスしかなかったので使うことに。エコノミーだと5万ぐらいだったので、+8万でした。しかし、結果出産に間に合い(エコノミーの便だと間に合わなかった!)、初めての子供の出産に立ち会えました。個人的にかなり価値にある出費でした。

2位 ベビーカー(7万)、抱っこ紐(2万)

子供が生まれて、ベビー用品のありがたみがよくわかりました。細かいものもそうですが、ベビーカーと抱っこ紐が当たり前ですが重宝しています。これがないと外に出られない。自由がなくなる。

3位 歯医者(保険効いてる分だと計1万ぐらい)

嫁が近所にいい歯医者を見つけてくれて、そこに通い始めました。もう少しで虫歯がやや深刻になるところだったのと、全体的にクリーニングして思った以上に綺麗になったので、良かったです。長期的な歯や健康面を考えてもいいことでした。

番外

iPhone7

iPhone5sから変更で、SIMフリー継続。12月後半なのでギリギリですが、ApplePayでsuicaが使えることでガラケーのモバイルスイカを終わらせられることもあり、順当ながら。あとは年始ですが、ApplePayに登録したクレジットカードでQuicPayが使えるようになって、ポストペイ型のチャージレスが思いの外便利なことに気づきました。買い物で日常的suica使ってたので、月に3,4回ぐらいチャージしてたんですが、地味に手間だったんだなーと。iPhoneSEと最後まで迷ってましたが、7にして正解でした。

今回初めて128GBにして、子供の写真とビデオ撮り放題。前まで16GBで十分だったんですが、動画撮りだすと足りない足りない。

自分の時間を取り戻そう

生産性に関して、平易に書かれています。忙しいし楽しくないし実入りも少ないと感じている人にはオススメ。自分の中で感覚でしかなかったものがちゃんと説明されていて、他の人に伝えたい時にこの本を渡せば済むのはありがたいです。読んですぐに実家の家族用に追加注文しました。このエントリ自体もそうですが、価値のあることにお金を使ったか?という投げかけはすごくいいと思いました。

デフォルト値の怖さ

何も設定せずに動かせることは便利ではある

様々なサーバアプリケーションや、ミドルウェアを使う場合に、設定がない場合のデフォルト値が用意されていることがあります。

広く配布して使われるアプリケーションは、様々な人達が使うこともあり、なるべく何もいじらずにとりあえず使い始める(試す)ことができるようにされていることが多いです。特にローカル環境やサーバ1台でとりあえず動くようになっている場合があり、これは開発者が自分のマシンで試すことを前提にしている場合があります。

これと似た様に、開発者がローカルや開発環境で動かしやすいように、設定がなければローカルや開発環境のデフォルト値を使うように実装してしまうことがあります。サンプルの設定ファイルではなく、設定がない場合に勝手に使う値として。これは開発者にとって便利な反面、事故を誘発する場合があるので、気をつける必要があります。

開発より大事な本番リリース

このデフォルト値で事故が起こるケースがあります。それは本番環境にリリースする時です。本来は本番環境向けの設定で、他のサーバに接続すべきところを、デフォルト動作があることによって、気づかずにローカルや開発環境の設定で動作してしまうケースです。

基本的に開発と本番ネットワークは分離されているべきなので、DBなどは問題ないかもしれませんが、特定の状態をローカルに持ってしまうといった動作が考えられ、冗長、分散構成を取っていると問題になる可能性があります。

例えば、以下のような、複数台で共有しなければならないものです。

  • セッション情報
  • 排他制御
  • 外部APIリクエストのリクエスト上限、並列数など

もちろん、設定の確認や動作の確認は行うべきですが、一見すると動作しているように見える場合もあるため、事故を誘発する危険性があることを理解しておく必要があります。設定ファイルを置いたつもりで、Pathや設定変数名が違い、デフォルト値で動作していたということも考えられます。きちんとチェックすべきだ!という話ではありますが、現実全てを行えない状況もままあります。

設定自体を間違えている場合はどうしようも無いですが、運用では様々な人が関わり、開発者自身が忘れてしまうことも当たり前です。そういった時に、少しでも事故の可能性を減らすようにしておくことは重要です。

動き続けることが重要か、きちんと動作することが重要か

個人的には、暗黙的なデフォルト値で動くよりは、無ければ落ちて動作させない。という方針をとっています。確実に気づくためです。また、アプリケーションのデプロイと設定の配置を別々に行うようにしています。アプリケーションと一緒にデフォルトの設定ファイルを置いて、後から本番設定に上書きするといった手順でも同じように事故を誘発します。

ちなみに、設定内容次第では、動き続けることが大事な場合もあるため、もしこういうことが起きたらどうあるべきかを考える必要があります。

2015年技術でやってきたこと

毎月やらないとと言っていた振り返りが結局また年をまたぐという状態です。前半何やってたか記憶がないぐらい衰えを感じるので、2016年は四半期ぐらいにはまとめようと思います。。。

キーワードだけあげるとこんな感じ

  • さらにgolang
  • プライベート開発
  • Aurora移行

golang本格化、WebAPI作成

2014年から、golangでWebAPIを作りだして、そこからサービス全体の各機能を順に実装していきました。また、他の人にもgolangを広めることも行っていきました。Webフロント側はPHPで作られているため、バッチやツール等でもPHPを使いがちだったところを、なるべくgolangに置き換えるように促しました。その甲斐あって、今では5人ぐらいgolang書けるようになっていて、今後もフロント以外はgolangでやっていきたいです。

省力化、ラッパーコマンド

ansibleを使ってデプロイの省力化を行っていますが、ansible-playbookコマンドが全部打つと長いこともあり、特定の環境によく使うものを短いコマンドとオプションで実行できるようにラッパーコマンドを作りました。 また、必ずplaybookを作ってそれを使って開発環境で開発を行うように促し、golang同様に使える人を増やしていきました。最初は少しハードルがありますが、開発中は何度もデプロイするのでplaybookに慣れると、自分でメリットを実感しやすく、覚えてもらえました。

AWSの設定周りは、roadworker, miam, piculetを使いコード化して、変更を記録できるようにしました。

冗長化、マイクロサービス化

2014年は冗長化周りを行っていましたが、2015年はマイクロサービス化も進め始めました。マイクロサービスに何を求めるかというと、部分的な置き換えです。一番最初は新卒と外注で作られたため、いろんなところに問題点が潜んでいます。それを一気に刷新するほど、お金も人も余裕がないため、一部分をマイクロサービス化して置き換えていくことで、全体を刷新しようとしています。データ構造も修正していくため、2016年以降もかかりそうです。

監視周りnagios(Icinga)

10月に、監視周りの構築(と検索エンジン全般)を任せていたエンジニアが辞めたので、そこから少し監視周りを見ることになりました。 監視の設定更新などは、ansible+ラッパーコマンドが用意されていたので非常にスムーズでした。Icingaはnagiosベースなので、チェックはコマンドの戻り値で判断されます。やってみると簡単に実装できるため、サーバ側の開発者には自分で作らせるようにしました。逆にIcingaの設定ファイル構成などはものすごくわかりづらいのでその点はどうにかしたいところです。

Amazon Aurora移行

RDS(MySQL)のDB容量不足の懸念が急に来ました。急激ではないですが、ありがたいことに利用者増によって、ほっとくと2016年1月にサービスが死ぬ可能性が出るぐらいに。当初、容量を増やしたRDS MySQLに移行するつもりでしたが、利用者数によっては1年ほどでまた同じ問題にぶつかる可能性がありました。さらに、PIOPSをつけると、使っていない容量の分まで利用料金が発生して、あまりよい出費ではありませんでした。

そんな検討の最中、注目していたAuroraが10月にTokyoリージョンに来ました。Auroraは容量をあらかじめ決める必要がなく、自動で拡張されます。さらに、PIOPSは不要かつ、Slaveがホットスタンバイになるので、MultiAZ待機側の料金も減らせます。加えて、接続数が増える、データが増えた場合のパフォーマンス低下も抑えられているということで、今後のスケールにも対処可能。まさに夢のような解決策が降ってきました。

そこから、移行に関してはどうしてもサービス停止が必要になるため、年末に計画停止(※)を挟むことにして、移行手順の確立や動作検証を進めていきました。無事年末に移行を終えて(今の所)問題なく稼働しています。 ※ビジネス系のサービスなので、年末はトラフィックが下がる

プライベート開発(rnssh, rnzoo, cstoreなど)

プライベートでも、自分のツール開発を再開し、rnsshとrnzooに機能追加や改善を行いました。11月に活発に開発を行いましたが、12月はAurora移行であまり手をつけられませんでした。2016年は、cstoreのようなよく使う部分をライブラリ化して、プライベートでも仕事でも使えるようにしていきたいと思っています。

2016年は

面白そうなことをやってくスタンスはあまり変わらないです。

マイクロサービス化を進めると同時に、プロダクション環境にDockerを投入していきたいと考えています。Docker自体は前からありますが、AWSでの環境が揃い始めたことや、ノウハウが十分に公開されてきているので、踏み切れるかなと思います。

ディープラーニング周りもやりたいんですが、正直よくわからないので、詳しい人と話せる機会を持っていきたい所です。画像認識周りはサービス内でやらざるを得ない状況になっているので、その辺りでやることにはなるかもしれません。

あとはブロックチェーン周りも応用がききそうなので、詳しく見ていこうと思ってます。

振り返りもそうですが、普段の調査検証もwebにアウトプットする癖を付けないと。

2015年に購入してよかったもの

去年に引き続いて何点か。今年はそんなにもの買ってないかなーというところ。来年引越しする時に色々買い換えるので、その時にまた便利にしたいところです。

ドラム式乾燥機能付き洗濯機

Amazon.co.jp: Panasonic ドラム式洗濯乾燥機 9kg 左開き クリスタルホワイト NA-VX3500L-W: 大型家電

多分一番有効に時間を使えるようになった買い物。15万ぐらいしましたが、全然ペイしてます。何がいいかというと、天気に関係なく、洗濯が完了すること。ヒートポンプ式で、3時間ぐらいで乾燥まで完了。

今までは、干すために晴れた休日を使ってましたが、それがいつでもよくなったので、休日が有効に使えます。梅雨や雨続きでも関係ありません。大体平日昼ぐらいにタイマーかけて、帰ってきたらたたむという流れで、時間がだいぶ浮きました。

今は新しいモデルが出てるようで買ったやつは、もう生産終了の様子。

iPad mini 4

iPad mini 4 - Apple(日本)

iPad mini初代からの買い替え。2,3が初代より厚く重い点がネックで渋ってましたが、やっと軽く薄くなり、TouchIDも付いたので買いでした。 さすがに初代と比べると全然スピードが違うので、家でちょっと調べたりニュース見るのには最適です。

NEC モバイルルータ

Amazon.co.jp: NECプラットフォームズ SIMロックフリー LTE モバイルルーター Aterm MR04LN ( デュアルSIM 対応 / microSIM ) PA-MR04LN: パソコン・周辺機器

タイ行きでSIMフリー購入しましたが、iPhoneの方だけで済んだので、単なるバージョンアップ。 仕事柄常にMacでリモート作業が必要なのもあり使ってます。単にちょっと使いたいだけの人は、iPhoneテザリングでいいと思います。(通信量制限は気をつけないといけません)

iPhoneは、OCNの最小プランで済ませているので、これは別のSIMを刺して使ってます。電池の持ちもあるので、私は分けたい派。まだデュアルSIMでは使ったことはないです。

買った後、amazonが値引きセールしていて、値段的にも2万前後ぐらいに下がってるようです。

ベッドマットレス

フランスベッドで高いのを買ってみて、寝心地がすごくいいです。人生1/3ぐらいは寝てるので、睡眠に投資するのはいいと思います。展示場で寝転がってみて、えいやで買いましたが、2,3日買う前に使えたらいいのになと思います。来年は掛け布団も少しいいやつにしてみようと思います。

取り寄せ海老 2kg

【楽天市場】ギフト【送料無料】どっデカ!生赤えび2kg〈天然有頭〉焼きでも刺身でも/新鮮船上凍結(約45尾〜55尾)2キロ/海老/えび/エビ/あかえび/赤えび/赤エビ/刺身/唐揚げ/bbq 海鮮/バーベキュー セット/200904/rdc/がってん:カニとマグロの『がってん寿司』

贈り物でもらって、自分でもリピートしてる海老。大体50匹ぐらい入っていて、サイズ的にも冷凍庫に入りやすいです。流水で解凍すれば生で食べられて、焼いても茹でても甘くて美味しい。取り寄せはカニが目立ちますが、この海老はコスパ良くておすすめです。

釣り道具各種

趣味的な物欲は全て釣り道具だった2015年。竿とリールが5セットぐらいとバスルアー、ソルトルアー、船タイラバと結構買いました。一応バスもサバもタイも釣って(釣れないのも含めて)楽しめたので満足してます。

技術本

暗号化入門など、色々買いました。やろうと思ったことが書籍化されて、それを参考にできるという流れに乗っているので助かります。最近は本当に数が多く触りだけのも増えましたが、ややニッチな感じの詳しい書籍も多く出ているので、気になったら買って会社に置いてます。

来年

引っ越すので、冷蔵庫を買い替えたり、ルンバを導入したりしようと画策中。食洗機は付けられるかどうかがまだ不明。どんどん機械や外部サービスに任せてやりたいことをやれるようにしていきたいところ。