Slide 1

Slide 1 text

Aspire, Sekiban, ResultBoxで作 るかんたん!?Webアプリ開発 【簡単に開発できるように頑張っています...】 #dotnetlab

Slide 2

Slide 2 text

⾃⼰紹介 高丘 知央 ( Tomohisa Takaoka ) 株式会社ジェイテックジャパンCTO イベントソーシング・CQRSフレームワーク Sekiban メンテナ 米国カリフォルニア州ロングビーチ在住(ロスの近く) ● X : @tomohisa ● Github : @tomohisa ● Linkedin : tomohisatakaoka 自作キーボード、3Dプリント自作トラックボール製作 London Tech Talk ポッドキャストとブッククラブ出演 6月後半から7月中頃にかけて福岡に帰省 #dotnetlab 🆗

Slide 3

Slide 3 text

株式会社ジェイテックジャパンの紹介 ● 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 ● New York 所在 J-Tech Creations, Inc. の 東京拠点。 ● B2C / B2B アプリケーションを 開発‧運⽤するソフトウェア開発企業。 ● .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。 🆗 #dotnetlab

Slide 4

Slide 4 text

Overview 「Aspire, Sekiban, ResultBoxで作るかん たん!?Webアプリ開発」 1. それぞれの技術の紹介とメリット 2. 開発のデモとコードの説明 3. 『かんたん』の要素とは 🆗 #dotnetlab

Slide 5

Slide 5 text

「Aspire, Sekiban, ResultBoxで作る かんたん!?Webアプリ開発」 1.それぞれの技術の紹介とメリット

Slide 6

Slide 6 text

.NET Aspire ● 開発とデプロイを簡単に⾏うための技術の組み合わせ。 ● 2024年 Microsoft BuildでGA ⼀般リリース ● 引き続き、機能追加が⾏われている ● 開発 ○ DockerにDBや、キャッシュやストレージなどのアカウントを簡単に定義して起動できる ○ 接続⽂字列をサービス間で共有する機能がある ○ メトリクスなどを取る仕組みがデフォルトで⽤意される ○ フロント側とバックエンドを⼀緒に起動してくれる ○ フロント側のデフォルトはBlazorだが、npmなどのjs/tsアプリも含めることができる 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  それぞれの技術の紹介とメリット

Slide 7

Slide 7 text

.NET Aspire ● 開発とデプロイを簡単に⾏うための技術の組み合わせ。 ● デプロイ ○ Azureにデプロイ可能な機能がオフィシャルに開発されている ○ AWS / Kubernetes その他クラウドにもデプロイできるように https://learn.microsoft.com/ja-jp/training/modules/introduction-dotnet-asp ire/2-what .NET Aspire とはの Learn のページには⽇本語訳がありました。 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  それぞれの技術の紹介とメリット

Slide 8

Slide 8 text

.NET Aspire 個⼈的なユースケースとこれからの課題 ● 開発時にデータベース、Blobストレージ、バックエンド、フロントエンド を⼀括で起動できるのがよい。 ● Azure Functionは公式コンポーネントになっていないが、開発は可能 https://zenn.dev/jtechjapan_pub/articles/d51d86c3105634 Aspireプロ ジェクトとAzure Functions プロジェクトを並⾏開発する ● Macでも問題なく開発できている。ARMだが、SQL Serverコンテナはエ ミュレータで動く。Cosmos DB Emulator コンテナはARMで動かない ● PostgresがArmネイティブで動き、PgAdminも追加できるのでおすすめ ● デプロイは現時点では使っていないが、複雑なデプロイ(プルリクごとに サーバーを⽴てるなど)が必要な場合はIaCの⽤途として便利そう 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  それぞれの技術の紹介とメリット

Slide 9

Slide 9 text

Sekiban ● ジェイテックジャパンが開発、運⽤しているイベントソーシング‧CQRSフ レームワーク ● .NET ラボ1⽉のセッションを参照 https://www.youtube.com/live/xJ02XMZ6dgs ● C#、.Net 8、Azure Cosmos DB、AWS Dynamo DB、PostgreSQLに対応 ● 難しいイベントソーシングをC#で簡単に実装できる 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  それぞれの技術の紹介とメリット

Slide 10

Slide 10 text

イベントソーシングとは? ● アプリケーション開発における デザインパターンの⼀つ。 ● データの取り扱いと保存の⽅法に関する 考え⽅。 ● データの状態(ステート)ではなく、 状態遷移(イベント)の履歴を保存する。 ● イベントの履歴から 現在のデータの状態を再現する。 ● 対⽴概念はステートソーシングと呼ぶ。

Slide 11

Slide 11 text

ResultBox ● ジェイテックジャパンが先⽉以降開発しているC#⽤のRailway Oriented Programming ヘ ルパーライブラリ https://github.com/J-Tech-Japan/ResultBoxes ● Result型は、関数型⾔語などの多くの⾔語では標準的に使⽤されているもので、エラーが 発⽣した時に、C#の通常の⼿法のように、Exception(例外)を throw してそれを呼び出 し元で catch する⽅法ではなく、関数の戻りの値とエラー情報を同時にResult型を使って 返す⼿法です。エラー、もしくは戻り値のどちらかがあるため、呼び出し元ではエラーの 有無で成功を判断することができます。 ● Railway Oriented Programming はF#を使⽤した開発⼿法についてのブログや本を書いて いる、Scott Wlaschin ⽒がブログやyoutubeにも残っている登壇でも発表している、複数 のResult型関数を連結してエラー処理を統⼀する⼿法です。 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  それぞれの技術の紹介とメリット

Slide 12

Slide 12 text

ResultBox エラーが起きた時にエラーの”路線”に移動するため、nullチェックなどのコード を正常系で書く必要がなくなり、コードがシンプルになる 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  それぞれの技術の紹介とメリット

Slide 13

Slide 13 text

🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  それぞれの技術の紹介とメリット

Slide 14

Slide 14 text

「Aspire, Sekiban, ResultBoxで作る かんたん!?Webアプリ開発」 開発のデモとコードの説明

Slide 15

Slide 15 text

Aspire (開発環境) + Sekiban (イベントソーシング‧CQRS) + ResultBox (関数型記法 + プログラミングスタイル) = 全て⼀緒に使うとアプリケーション開発が簡単で便利になるはず! でも、弊社内もふくめ、⼀気通貫ではまだ使っていない。 オープンソースで作ってしまおう! 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  開発のデモとコードの説明

Slide 16

Slide 16 text

https://github.com/J-Tech-Creations/OpenAttendanceManagement シンプルな勤怠管理技術を実装 ユーザー管理はPostgres + Entitity Framework .Net Identity Core 業務データはSekiban → Postgres + Azure Blob Storage バックエンド1: 管理者向けテナント管理サイト フロントエンド1:Blazor Interactive Server バックエンド2: 管理者向けテナント管理サイト フロントエンド2:Blazor Interactive Server 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  開発のデモとコードの説明

Slide 17

Slide 17 text

今⽇に向けて勤怠管理をいろいろ作る予定だったのですが、、、 ● ResultBoxで関数型でかけるようにSekibanを改修しよう ○ クエリ、コマンドがシンプルにかけそう https://zenn.dev/jtechjapan_pub/articles/b9e1f6628f3cf3 【Railway Oriented Programming によってよりシンプルになるCQRSとその書き ⽅】 ● 使ってみたらResultBoxにこれが欲しい ● builder.Services.AddIdentityApiEndpoints() を使ってみよう ● Blazorでやはり書きたい ○ 初めてしっかり使ってみたらなにもかも分からなくて苦戦。。。。 ○ Copilot + ChatGPTに頼りつつなんとか開発を進めました。 とりあえず、ログインと画⾯にリスト、登録、名称変更をつくりました 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  開発のデモとコードの説明

Slide 18

Slide 18 text

とりあえずできているコードとその書き⽅を紹介して、開発をどのようにやって いるかを紹介します デモ+ライブコーディング 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  開発のデモとコードの説明

Slide 19

Slide 19 text

「Aspire, Sekiban, ResultBoxで作る かんたん!?Webアプリ開発」 3.『かんたん』の要素とは

Slide 20

Slide 20 text

そもそも、ソフトウェア開発における、『かんたん』とはなんだろうか? ● 難しい設定を簡単に書ける → Aspire、Sekiban ● 簡単にたくさんのコンポーネンツを開発できる→Aspire ● 難しい業務知識を短いコードで表現できる→Sekiban、ResultBox ● データの構造の解析が容易である→Sekiban(イベントソーシング) ● 関数型で記述できることによりわかる⼈には簡単になる? ● イミュータブルなデータにより、データ書き換えの仕組みが簡単になる などなど 簡単に開発 (Simple) != 簡単な開発(Easy) 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  『かんたん』の要素とは

Slide 21

Slide 21 text

Simpleに開発するためには、開発者の技術向上が不可⽋ ● C#の最新の機能を積極的に使⽤する ● イベントソーシングは難しいけど、理解するととても便利 ● 関数型プログラミングは難しいがパワフル ○ (C#はもう少し関数型を充実させて欲しい) ● クラウドネイティブアプリケーションは難しいが、これからの開発には不可 ⽋ スキルのあるエンジニアにとってのSimpleを⽬指す + 学習のためのコンテンツを準備 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  『かんたん』の要素とは

Slide 22

Slide 22 text

学習のためのコンテンツ ● Github内のドキュメント ● Githubの中でのテスト ● 良質の書籍 ○ 関数型ドメインモデリング ● サンプルプログラム ○ OpenAttendanceManagement ○ 各Githubプロジェクト ● Zennなどでの発信 ○ 英語ブログも ● 登壇やソーシャル ○ 英語での登壇も 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  『かんたん』の要素とは

Slide 23

Slide 23 text

まとめ

Slide 24

Slide 24 text

まとめ ● OpenAttendanceManagementは引き続き開発を 続けていき、⼀通りの勤怠管理ができるWebサイ トのサンプルとして作っていきます。 ● イベントソーシングは、Sekibanを使わなくても 現在のRDBによる開発の多くの問題を解決し、ド メイン駆動開発の実践をできるので、ツールボッ クスの⼀つとしておすすめです。 ● 関数型プログラミングは、やれば⾯⽩いので皆に おすすめですが、新⼈がわからないプログラムに なりそうだが、周りの⼈にもどんどん使ってもら う⽅向で宣伝していきます 🆗 #dotnetlab

Slide 25

Slide 25 text

質問、感想などありましたらXなどで連絡ください @tomohisa Dotnet Aspire はこちら https://github.com/dotnet/aspire Sekibanはこちら https://github.com/J-Tech-Japan/Sekiban ResultBoxはこちら https://github.com/J-Tech-Japan/ResultBoxes J-Tech Japan Tech Blog https://zenn.dev/p/jtechjapan_pub おわり 🆗 #dotnetlab