2022年10月〜12月の個人目標


2022 年は3ヶ月ごとに大雑把な目標を立てて学びを計画し、終わった後に反省する方式を取っています。適当に興味を持ったことを飽きるまでやる方式だった例年と比較し、この行動が良かったのか悪かったのかは年始に振り返ることにして、2022 年最後の 3 ヶ月で何をしようかということを考えたのでまとめておくことにしました。

12 月はそこそこ長くお休み頂きそうなのでプライベートな時間はいつもより確保できる想定です。

大枠:アプリケーションを作る

使ってみたいプログラム言語が複数あり開発プロセス的にも挑戦したことがあるので、大枠としてはアプリケーションを 1 つ作って公開することを目標とします。機能的にはどこにでもあるどこかのチュートリアルなぞったような Todo アプリくらいのものを想定しています。

使う言語

  • dart (flutter)
  • clojure
  • golang

プロセス

  • 週に 1 回以上リリースする
  • release note 書けるようなものを 2 週間に 1 つくらいは出す

目標にした背景

どうしてこれらをしたいのかという理由

dart (flutter)

Web のフロントエンドで一番好きなライブラリは React です。しかし、何をするにも React で良いのかと言われると考えてしまうことがあります。

例えば、React はとっても自由なので、複数人で開発する場合にその自由さが開発に混乱を招くこともあるという印象を持っています。JavaScript のフロントエンド開発時に付きまとった環境設定の高過ぎる自由度の問題(これ問題というかは議論かもですが)は Nextjs や remix といったフレームワークの出現で解消されているように感じるものの、一方で React の state にまつわる部分、Component のルール、UI、テスト、使う補助ライブラリ、アーキテクチャなどを踏まえてコードの一貫性を保つのにはコーディングのルール整備も欠かせないと考えています。

自由度の高さは一定のトレードオフを含むといいますか、開発リソースに少しでもゆとりがあるなら設計が非常に楽しくてプロダクトも良い方向に向かう要因になりうると思う一方で、開発リソースが限られまず走らないとという状況であったり、育成が必要なメンバーが多い状態においては、足元のルール整備は追いつかず、UI がえらいことになったり、コードベースがえらいことになったりする可能性を強めるのではと感じます。

また、開発がそういう状況ではデザイナーも同様に余裕なく、 UI よりは UX に時間使いたいということも多いのではという思い込みも併せて

  • 自分達でルール整備しなくてもある程度強制力がありそう
  • 開発体験が他のフロントエンドライブラリと比較して悪くなさそう
  • Material Design の質の高い Component が簡単に利用できそう
  • デザイナーがモック作る上で UI パーツ揃っていそう(Material Design 関連はリソースが多そう)
  • 型があり null safety な言語が採用されている

という観点で、走り出し flutter 最強説あるか!?と思ったので使ってみようと思いました。dart は TypeScript と比較すると将来性が不明瞭ではあるものの、Angular Dart で使った感じだとクラスベースで扱いやすく、テストも書きやすくて良い感じという感想を持っています。TypeScript は Lint や config で自由度が出てくるので、その辺り考える必要がないだろう dart は結構良い選択肢だと感じます。

実際に触ってみてどういう感想を持つのかが楽しみです

clojure

関数型言語に触れ合ってこなかったのでライトに学んでみようという気持ちがありました。関数型言語の中でも clojure にしたのは、今仕事で触っているプロダクトの一部で使われているためです。上手くなったら仕事にも活かせてお得!BFF で使おうと思っています。

golang

2022 年前半は仕事も趣味も Rust を中心に API 書いてきたので別言語をそろそろ触りたいというのと、良さそうな本(実用 Go 言語、初めての Go 言語)を積んでいる状態なので、積んだ本の消化と併せて golang を触りたい気持ちです。

プロセス

開発中にローカルや別ブランチにコードを溜め込まず、テストが通ったコードはすぐにプロダクションコードにマージする。かつプロダクトは技術的にリリースが可能な状態を保ち続けるということを方法を考えながらやってみたいと考えています。

イメージ図

誰もみなくて良いんだけどやっぱ作ったもの公開はしたいよね!という思想のもと、費用が抑えられて、開発体験が良さそうな構成を検討した結果、以下のような構成で進むつもりです。やりにくいところがあれば都度修正。

やることたくさんなので認証までは辿り着けないかなと考えていて、たどり着けるまでは CloudFlare の zero trust を使ってアクセスを制限すれば良いかなと思っています。API Gateway は認証入れるタイミングで作成かなというところ。

便利過ぎてやばい CloudFlare のおかげで Web のフロントを簡単に公開でき、便利過ぎてやばい CloudRun のおかげで API のコンテナを雑に公開できるので、今の Web 開発は個人の遊びですらオーバースペックに遊べせてもらえるなあという印象です。パイプラインも github actions が良いマシン使わせてくれるのでストレスがない。DB は流石に?と思っていたら supabase という便利なサービスがあり、なんというか恐るべきです。

最後の 3 ヶ月頑張るぞ!

へこたれずに走り切りたい。