2022年を振り返る
2022/12/31 By: @sukechannnn
2022年にやったことを振り返って、2023年やりたいことを書く。基本的に現職アルダグラムでのことです。
社内開発環境の整備
いまの会社に転職してから1年ちょっと。入社してからずっと、開発環境やテスト環境の整備をやってきた。ざっと思いつく限りやったことを列挙するとこんな感じ。
- ローカルの Docker の10倍高速化
- Firebase をローカルエミュレーターで開発できるように整備
- 社内 npm パッケージを GitHub Packages で管理するよう変更
- MagicPod を使った E2Eテスト環境の構築、整備(Webは70%が自動化!)
- Storybook の整備
- TypeScript の型修正、CIで npm run type 有効化
- フロントエンド/アプリ/Firebase のJest整備、CIで npm run test 有効化
- Visual Regression Testing の整備(ほぼ全てのページを網羅できた)
- ESLint の import/order の全コードへの適用
- Rubocop の全グリーン化、CIでの有効化
- Bugsnag の導入
今年の開発のメインは多言語対応だったけど、その傍らでかなり色々できたと思う。
前職の環境がかなり恵まれていたので、それを今の会社に持ち込んだ感じだけど、開発メンバーの協力もあってかなり整備できた。
来年はデプロイフローをめちゃくちゃ改善する予定なのだけど、テストやLintがしっかりしてるのが前提条件になってくるので、今年一年でそれを整備できたのはよかった。来年は自動テストをもっとしっかり書いて、手動テストへの依存をさらに減らしていきたい。
しかしアプリはなかなかE2Eで機能を担保するのが難しいとも感じている。Webと比べて利用される環境(場所、ネットワーク、端末など)が様々だし、実機を使ってのE2Eが難易度高くてまだできていないので、機能がちゃんと動くことを「担保できてる」感が薄い。逆に Web はかなり自動化できそうなので、QAメンバーの力をなるべくアプリに使ってもらえるようにするのが良さそうと感じている。
多言語対応とタイムゾーンの更新
海外展開するぞ!ということで、今年1年かけて多言語開発の基盤の整備と、タイムゾーンのJST→UTC の更新を行った。
我ながら最初の設計が良い感じにハマったので、できあがった基盤は非常に良い感じに回ってる。英語版、タイ語版、スペイン語版と立て続けにリリースできて、リリース後もデザイン崩れをチェックしながら翻訳を追加し続けられているのがその証。
けど、できあがるまではとても大変だった。
初期の設計のラフ図。大枠は今もこんな感じ。
特にタイムゾーンの変更は、MySQL の datetime を使ってるために created_at, updated_at を全て更新する必要があったので、全てのテーブルの全てのレコードを更新する必要があって、DBぶっ壊したらどうしようとかメンテナンス時間内に終わるのかとかのプレッシャーもすごかった。実際、リリース1回目は時間内に終わらなくて深夜リリースやり直しになったし、リリース成功した直後にDBちょっと壊れて徹夜明けでバグ&DB修正しなきゃいけなくて今思い出しても厳しい戦いだった。
でも、リリース直後からCEOや海外事業責任者がめちゃくちゃ売ってくれて、今もすごく伸びてるのですごい。めっちゃ大変だったけど、とても報われている感があって、やらせてもらってよかったと感じている。
あとこのプロジェクトは、自分が任せてもらった領域が広くてとても色々な経験ができた。多言語化の設計/開発だけでなく、開発メンバーの採用やチームビルディング、翻訳者探しと翻訳のやり取り、英語版リリース後は事業責任者と一緒に商談にも出て追加機能開発の優先順位付け(PdM業務)、その他雑務全般と、海外でプロダクトを使えるようにするために必要なことはなんでもやった。初めてやることもたくさんあって(英語での商談とか)、とても学びになることが多かった。おかげで、だいぶ怖いものがなくなったので、来年も新しいことに挑戦していきたい。
バグ修正/パフォーマンス改善
詳細は書かないけど、バグ修正も色々やった。自分がいなかったら解決までけっこう時間かかっただろうというバグを改修できたのは、会社の役に立てた感じがしてよかった。
あとパフォーマンス改善。前職はバッチ処理や複雑なワークフローがあるジョブの開発がメインだったので、フロントの絡むパフォーマンス改善というのはあまりやってこなかったのだけど、その部分でけっこうクリティカルなパフォーマンス改善ができたのは良かった。ありがたいことに大手のお客様の契約が続々と決まってて、そうすると利用するデータも桁違いなので、パフォーマンスは今後より重要になってくると思う。プロダクトが伸びてるからこそ経験できることなので、今後もしっかりやっていきたい。
それにしても、パフォーマンスの観点では GraphQL は難しい。GraphQLは割と黎明期から触ってるけど、仕組み上簡単にN+1が発生するし、その解消のためのバッチングがむずい。権限の問題が絡むとコード自体がけっこう複雑になるので、読み解くのもむずい。
特に一覧系はむずいので、そこだけRESTにするのもアリだなぁと最近感じてる。もちろん、基本的にはめっちゃ便利で大好きな技術なのでなるべく使っていきたいのだけど。Apolloともようやく仲良くなれてきたところだし。
エンジニア採用
今年はスカウトもカジュアル面談も面接もたくさんしたし、最高なエンジニアもたくさん採用できた。苦戦してると感じることもあるけど、振り返ってみると今のフェーズからしたらかなり良かったんじゃないかな。優秀なエンジニアとカジュアル面談した後に志望度が高まって面接に進んでくれるとすごく嬉しくて、面談に出てよかったなぁと毎回思う。会う前は未だに緊張するのだけど(笑)。
入ってくれた人はみんなすごくマッチしてて、今のところ違和感を感じる人は1人もいない。スタートアップは誰をバスに乗せるかが何よりも重要だと思ってるので、これはすごく良いこと。来年も継続したい。
来年やりたいこと
来年はより技術的にレベルアップしたい。今年はフロントエンドをたくさんやったので、来年はインフラとバックエンドをもっと頑張りたい。特にインフラは勉強しないといけないことだらけなので、仕事では適切な構成管理ができるように学びつつ、プライベートでは低レイヤーな部分を深ぼっていきたい。
あと Go でバックエンド開発したい。これは最近まわりの人にずっと言ってて、機会があれば本当にやりたい。
バックエンドは今までずっと Ruby on Rails で開発してきた。Ruby は便利なのだけど、エレガントな書き方をするためには様々なメソッドを覚えていないといけなくて、暗記が苦手な僕は未だに書き方を毎回調べてる。それがだんだん面倒になってきてて、もう書き方は1つで良いから設計に集中したい!という気持ちが高まっていたところで Go を触ってからそのシンプルさの虜になってしまった。
Go を書いたり調べたりする中で、Go そのものの設計がすごいと感じることも多く、また若干低レイヤーな部分を生っぽく扱いやすいようにできてるので、プログラマーとしてとても勉強になる。もちろん Rails を書いてきた経験も活かせそうで、特にテストまわりは RSpec 良く出来てるなぁと感じることが多いので持ち込みたい。
あと、ゼロからアーキテクチャを考えて実装したい。最近は MVC + CQRS が良いんじゃないかなと思ってる。DDDやオニオンアーキテクチャはむずすぎるので、レイヤーを減らしつつ、副作用を生むコマンドと情報を取得するクエリを分けて責務を分割する。これで大概のWebサービスはいける気がしてるのだが…どっかで試したい。プライベートで何か作るかも。
来年も飛躍の年になるよう、がんばるぞい。