2024年にやったことと来年やりたいこと
2024年ももうおわってしまう...!ということで、自分のために、趣味開発方面で何をしていたかを書いておきます。 (お仕事でもプログラミングをしていますが、主にVue.jsでウェブフロントエンドアプリケーションやライブラリをつくっていました)
今年やったこと
Rustでコードを書き始めた
WebAssemblyに触れておきたいという気持ちがずっとあったのですが、何からはじめようかな...となっていました。 そこで、RustとWebAssemblyによるゲーム開発を読んでみたのですが、まずはRustの基本を理解しなければならないだろうと思い立ったのでした。 数年ぶりのコンバイル型言語だ...!(以前にマイコンプログラミングのためにC/C++を書いていた)。
以下のようにやっていきました。
- The Rust Programming Language 日本語版 を一通り読む
- コンセプトから理解するRust を一通り読む
- GitHub Copilot Chatに質問しまくりながら実際にアプリケーションを作ってみる
はじめに参考資料をひととおり読んだあと、アプリケーションを作ることで手を動かしながら学んでいきました。 今年の趣味開発の大部分はこの過程で作り出していきました。
特に、開発でつまずいた際にはCopilot Chatに質問しながら理解を深めていきました。 習得が難しい言語であると聞いていましたが、Copilot Chatに(何度もしつこく)聞く過程で自分自身の理解を言語化することが学習には良かったです。 もちろん必ずしもCopilot Chatから正解が得られるわけではないので、先読みしておいた参考資料を反復しながら進めていきました。
(仕事では全く利用しない言語ということもあって、相談相手がいなくて困っていたので、昨今のAI技術に助けられてほんとうによかったです)
未だにライフタイムについてコンパイラに怒られているし、特に非同期処理まわりについては理解が浅い状態ではあるのですが、引き続きやっていきたいです。
Chiritoriをリリースした
不要なソースコード削除ツール Chiritori をリリースしました。 私の身の周りのコードベースにおいて、「いつか不要になるソースコードをうまく管理したい」という気持ちがあったので開発しました。
はじめは「期間限定のコンテンツを消すツール」としてリリース したのですが、より汎用的に「予め不要になる箇所を宣言しておき後から削除するためのツール」として再定義してリリースしなおしました。 ソースコードに「あとで消す」というコメントを書くぐらいなら、それをマシンリーダブルにして機械に削除してもらえばいいじゃん、というアイデアです。
ようやく自分自身でも使いはじめているので、今後も継続的に開発していきたいです。
イベントソーシングやCQRSをためしたり挫折したり
仕事での経験からイベントを意識したモデリングについての関心が個人的に高まり、DDDの文脈で耳にすることがあるイベントソーシングやCQRSをやってみたくなり、趣味開発でメモアプリを作っていました。 Lambda + DynamoDBでCQRSする構成を試していたのですが、開発していくにつれ、以下のような 混乱が生まれました。
- イベントの順序が前後したらどうなるの? (CreateのまえにリソースのUpdateが来たときは?)
- 競合しないようなアーキテクチャを採用する(並列処理を一切しない)か、ロックを取る必要がある(という理解)
- 集約が条件をチェックするときはイベントを見るのか、リードモデルを見ればいいのか (たとえば集約の存在チェックをしたいときなど)
- イベントをリプレイしたものを見るが、リプレイに時間がかかる場合はスナップショットをとっておく(という理解)
- スナップショットはどのくらいの頻度で取るといいのか...?
- アーキテクチャによりそう。サーバレスアーキテクチャなら読み書きの金銭的コストも指標にできそう...?
- などなど...。
ひとつずつ考えていくと理解できそうなものの、State Sourcingと違い複雑な印象は否めませんでした。 加えて、趣味開発で利用するプログラミング言語を慣れないRustに縛っていたことも相まって(サーバサイドRustをやってみたかったのでした...)、「なんとなくイベントをDynamoDBに書き込んでリプレイできた」くらいのところで力尽きてほったらかしにしてしまいました。
つい最近 CQRS + ESカンファレンス が開催されたので聴講したのですが、そこで様々な事例やコードを見る機会にめぐまれたので、これらを参考にさせていただき、ぜひぜひぜひ再びチャレンジしていきたいです。
- 2年間の実運用を経て振り返るイベントソーシングの実際 で挙げられていた SuperSimpleEventSourcing
- アクターシステムに頼らずEvent Sourcingする方法について で挙げられていた event-store-adapter-js
- 「いろんな機能をCQRS+ESで作ってみたので皆で所感を見てみよう 」でデモがあった cqrs-sample-codes
また、「ドメインイベントで描く未来: CQRS/ESが変えるシステムとDXの可能性」で述べられていた、アクターモデルとイベントソーシングとの相性がとてもよい(アクターをドメインモデル、メッセージをイベント、アクターのスナップショット機能をイベントのスナップショットととらえることができる)という話に興味を持ちました。 趣味開発でいいかんじにできる方法を探したいところです。Proto.ActorとGoをやらねば...。
来年やりたいこと
来年はこんなことをやりたい...!
- CQRSとイ ベントソーシングで何かアプリケーションを作って公開する
- 挫折したメモアプリを完成させたい
- (ドメイン駆動設計の戦略的設計をもうちょっとマスターしたい)
- アクターモデルに入門したい
- Rustをもうちょっとマスターしたい
- 何をもってマスターしたと言えるのか
- 何か業務に関係ありそうな資格を取得して自信をつけたい(自信がなさすぎて損をしている)
- (できれば)広く利用されるアプリケーションをつくりたい
- これはずっと思っているし目指しているのですが、これまでぴこぴよくらいしか成功していないのでむずかしい...!
ではでは。来年もがんばるぞ〜
クリックすると匿名でいいねできます。
(@piyoppi/counter-tools を使っています )