2020年こそは丁寧な暮らしを実現したい

明けましておめでとうございます。

年末に「彼女欲しい〜〜〜!」とばかりツイートしていたらバイト先で後輩に「須田さん、最近彼女欲しいツイート多くてキツいっす」と言われその場で自害しため、年を越せなかった須田です。みなさんいかがお過ごしでしょうか。

さて、僕は丁寧な暮らしに憧れがあります。常に整った机の上、探しものの無い暮らし。いつでもキッチンは小綺麗で、友人の急な来襲にも一切動じない暮らし。そんな暮らしはなんと素敵なことでしょう。

ところで、僕の現状はこんな感じです。

ダメだ。おしまいだ。 ツイートの端々から足の踏み場もない部屋が想像できてしまう。

僕のツイートをよく見ている人なら、料理のどアップ写真がたびたびアップロードされることにお気づきのはずでしょう。

料理画像がなぜ毎回どアップなのか分かりますか?そう、 部屋が壊滅的に汚いため、引きで撮ると映り込みのせいでとてもツイートできないから です。この写真も、よく見るとステンレスのコップが2つとガラスのグラスが1つ写り込んでいますね。1人で食べてるのになぜコップが3つも写っているかというと、そういうことです。あれは何日前のなんだろう。我ながら汚ない。

これでは女の子に急に 「須田くん、今日、お部屋行ってもいいかな……?」 と言われても断らざるを得ない……ッ!

僕にそんなことを言ってくる女の子はこの先90年は現れなさそうなので心配する必要は全く無いのですが、現実問題、もう少し暮らし向きはなんとかしたい。気づけば年は変わって2020年。2020年こそは丁寧な暮らしを実現させてやる……!2020年の夏はきれいな部屋で彼女と一緒にオリンピックを観戦するんだ!!!

計画

僕のことを多少知る人はご存知の通り、僕という人間は承認欲求マシマシ人間かつTwitter駆動人間という、どこに出しても恥ずかしいタイプの人間です。そのことを逆手に取り、2020 年丁寧な暮らし計画では、Twitterで承認欲求をやんわり刺激することで暮らしを矯正する作戦にしたいと思います。

具体的には、毎日自分の「暮らしの丁寧度」を自動でツイートするようにしましょう。1日のうちにこれだけはやりたいな〜と思う項目を洗い出し、100点満点で点数を付けておきます。その内の達成できた項目の合計が「暮らしの丁寧度」です。

丁寧項目は1ヶ月に1回見直す予定ですが、とりあえず初月たる1月はこんな感じにしてみました。

  • 22時以降はTwitterに投稿しない : 30点
  • 平日は毎日NHKのニュース英語をやる : 20点
  • 1日30分以上は紙の文字を読む時間を確保する : 20点
  • 平日は毎日掃除機をかける: 10点
  • 8時に起床する : 10点
  • 25時には就寝する : 10点

なかなか継続が難しそうな項目もありますが、「22時以降はTwitterに投稿しない」とかは超楽勝ですね。そんな、いくらTwitter駆動人間と言ったって寝る前の2, 3時間Twitterを我慢するくらい余裕中の余裕です。

ちなみに 平日は毎日NHKのニュース英語をやる は英語教師の母に教わった学習法です。今年はTOEICも受けなきゃいけないし、英語やらなきゃな、という気持ちです。

完成

2日間程度コーディングしまして、1月4日の深夜から稼働を開始しました。目標に「25時までに寝る」というものがあることを踏まえて、深夜3時に集計&ツイートということになっています。

初日の成果は60点。さて、その内容を見てみると……?

「22時以降はTwitterに投稿しない」とかは超楽勝ですね。そんな、いくらTwitter 駆動人間と言ったって寝る前の2, 3時間Twitterを我慢するくらい余裕中の余裕です。

余裕中の余裕でした。

ちなみに、設定した丁寧項目は1月2日から試してみているのですが、なかなかバランスも程よく、我ながら良い設定だったと思っています。

これから障害が起きない限りは毎晩3時に丁寧度がツイートされる予定ですので、見かけたらそっといいねでも押してください。ツイート見てるんだぞアピールをされればされるほど僕の暮らしが丁寧になるはずです。

まとめ

  • 2020年は丁寧に暮らすぞ
  • コーディング書き初めもできたぞ
  • 22時以降にツイートしないのは疼く右手を抑えるのが大変すぎるぞ
  • いいねしろ

末筆ではありますが、僕に関わってくださっているみなさん、本年もよろしくお願いいたします。

蛇足

しょうもないことしかやっていないので敢えて書きませんでしたが、一応どうやって作ったか書いておきます。本当に大したことをやっていないのでアレですが。

構成

以下のような構成になっています。

フロント側

丁寧度を計算するためには「今日は何ができたのか」を登録することが必要です。寝る前にまとめて登録するのでも良いかと思ったのですが、せっかくなので達成したらその都度登録したいです。

webアプリにしてブラウザから登録するのでも良いかなと思ったのですが、ブラウザをいちいち立ち上げて登録するのは面倒臭がって3日坊主になりそうだとも思ったのでFlutterを使ってモバイルアプリ化しました。PWA(普通のアプリと同じように開けるスゲェwebアプリ)という作戦もありましたが、Flutterを選んだのははまぁ気分です。

見ての通り、チェックマークをポチポチすることで達成/非達成を登録できます。押した瞬間にFirestoreに保存されるので、ギリギリでの達成も大丈夫です。

ところで、今回GitHub ActionsとFirebase App Distributionsを連携させて(無駄に)CI/CD化しました。GitHubのmasterブランチに新規コミットがPushされた瞬間テストとビルドとデプロイが走り、問題なければFirebase App Distributionsでビルド済みのアプリが配信される仕組みです。

GitHub Actionsは初めて使ってみましたが、個人開発でもモリモリ使えるほど気軽でびっくりしました。FlutterやFirebase App Distributionsのようなある程度名のあるサービスならば、既存のActionsをつなぎ合わせるだけで動作してくれます。素晴らしい。

Firebase App Distributionsも初体験ですが、そもそも個人開発では全くメリットを感じないサービスなのでなんとも言えません。ただ、Firebase中心のモバイルアプリならば、他のテスト配信サービスを使わなくてもFirebase単体で全然行けるんじゃないかと思いました。

サーバ側

こちらはフロント側にも増して何もやっていません。

超良くあるであろう構成で、Firestoreにデータを保存、Google Cloud PubSubで定時実行をトリガーしてメインの処理はFunctionsにやらせるという流れです。

今回はOGP画像は動的に生成するのではなく、事前に全部生成しておいて使いまわしています。点数は0点から100点までの整数値ですから、101枚画像を生成して全部サーバに投げておけばOKですね。画像の生成にはPython/Pillowを使いました。

OGP画像はTwitterに投稿したときに目を引きやすいように(クソ迷惑)、背景色をキツめにしてみました。丁寧度に応じて背景色が変化します。

特に黄色、めちゃめちゃ目が痛いですね。出さないようにしていきたいものです。

今後

一応、少し手を加えて(固定値になっているところをゴニョっとして)やれば僕以外も使えるようにはなっているので、使ってみて超絶効果があればサービス化するかもしれません。超絶効果は無いであろう上に大した成果物でもないのでサービス化しないと思います。

ところで、ここまでの開発はCI/CDやFunctions、PubSubを含めてすべて無料枠で実装できました。ここから5000ユーザ弱くらいまでなら無料枠の中でギリギリ対応できそうな気がします。せっかくだし普段使っていないAWSやAzureを使ってみようかとも思ったのですが、やはり個人開発では価格面からもFirebaseを使うのが最適解な気がしました。

最後に

2019年は何かと理由を付けてダラダラする日々が多かったように思います。2020年は大学も4年生となり研究室生活も始まることもあり、今まで以上に学びのある年にできればなと思っています。

これが新年だけのボヤキに終わらぬよう、せいぜい頑張る所存でございます。

2020年も、何卒よろしくお願いいたします。