エンタープライズWebアプリケーションフレームワーク
Java (Spring Boot) や、TypeScript (NestJS) といった、明確な思想が存在するフレームワークを使っていると思うのが以下のことです:
- ある実装をどこに書けばいいのかが機械的に決まる。データベースアクセスならリポジトリ層、ビジネスロジックはサービス層など。
- インタフェースを適切に駆使すればレイヤーごとに人を割り当てて並列開発もできる。人海戦術が取りやすい。
- 綺麗にまとまったドキュメントがどこかにある。TERASOLUNA ガイドライン は今でもお世話になることがある。
また、AIにソースコード生成をお願いするという観点からすれば、ユーザーも多く、そしてある思想に則ったソースコードが多いので、ちゃんとパターンに従ったコードが生成されるというメリットがあるように思います。
一方で、このフレームワークが辛く感じる時も多くあります。
- コントローラ層からサービス層、サービス層からリポジトリ層へのデータの受け渡しのためにつくる大量に作るPOJO (Plain Old Java Object)
- リポジトリ・サービスに対応する Interface
- DI用の記述。コンストラクタインジェクションなりセッターインジェクションなり
- いまいちスマートじゃないバリデーション記述
- バックエンドで書いたような型定義がフロントエンド側にもはえる。
大体、ビジネスロジックとは関係のないのり付けが多すぎることから来る辛さな気がします。
少なくとも自分で開発する上ではこの辺りの面倒さは減らしたいなと思って、テンプレートを作ってみようとしている次第です。
自分用Web開発用テンプレート『セメント』
テンプレート -> 基盤 -> セメント って連想ゲームしてつけた名前です。
以下を組み合わせています。たくさんのファイルを作らなくても堅安全性が保てること・自分向けなのでDIとかInterfaceとかそんな大袈裟なものを用意する必要がないことなどを目指しています。
ライブラリ等 | タイプ | 説明 |
---|---|---|
Bun | ランタイム・ツールキット | install とか build とか諸々が早い |
ElysiaJS | バックエンドフレームワーク | Bun をネイティブにしているフレームワークで、結構シンプルそうだった。 |
SvelteKit | フルスタックフレームワーク | Vue/React よりもフロントエンド側が簡単な記述になりそう。ElysiaJSとの型情報共有ができる。(Eden) |
Drizzle | ORM | ElysiaJS の 型システムといい感じに組み合わせられる。(typebox, Eden) |
BetterAuth | 認証 | ElysiaJS と SvelteKit と Drizzle の組み合わせで使えたので |
TailwindCSS | CSS フレームワーク | 流行っているので。CSS書くの苦手だけどあまりに流行りすぎてAIでいい感じに生成できる。 |
このブログ自体を記事のPushとともに本番配信するため、Woodpecker CI 用のインスタンスを立てたので、このテンプレートにも同様にCI/CD用の定義を追加予定です。
今後について
実際に開発してみないことには使い勝手もわからないので、このテンプレートをもとに適当にWebアプリケーションを作っていければなと思っています。 完成したらまた反省記事でも書こうと思います。
以上!