Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aspire, Sekiban, ResultBoxで作るかんたんWebアプリ開発

Tomohisa Takaoka
June 22, 2024
310

Aspire, Sekiban, ResultBoxで作るかんたんWebアプリ開発

2024年5月のMicrosoft Buildで正式リリースとなった、.NET Aspireは開発とリリースを効率化する機能がたくさん含まれています。イベントソーシング・CQRSフレームワークのSekibanとRailway Oriented ProgrammingのResultBoxと組み合わせたオープンソースのサンプルプログラムを紹介し、開発とデプロイのかんたんさを説明します。

Tomohisa Takaoka

June 22, 2024
Tweet

More Decks by Tomohisa Takaoka

Transcript

  1. ⾃⼰紹介 高丘 知央 ( Tomohisa Takaoka ) 株式会社ジェイテックジャパンCTO イベントソーシング・CQRSフレームワーク Sekiban

    メンテナ 米国カリフォルニア州ロングビーチ在住(ロスの近く) • X : @tomohisa • Github : @tomohisa • Linkedin : tomohisatakaoka 自作キーボード、3Dプリント自作トラックボール製作 London Tech Talk ポッドキャストとブッククラブ出演 6月後半から7月中頃にかけて福岡に帰省 #dotnetlab 🆗
  2. 株式会社ジェイテックジャパンの紹介 • 創業50年を超えた総合IT企業、株式会社 ジャパンテクニカルソフトウェア (JTS) のグループ企業。 • New York 所在

    J-Tech Creations, Inc. の 東京拠点。 • B2C / B2B アプリケーションを 開発‧運⽤するソフトウェア開発企業。 • .NET‧Azure 等 Microsoft の 技術スタックを主に使⽤。 🆗 #dotnetlab
  3. .NET Aspire • 開発とデプロイを簡単に⾏うための技術の組み合わせ。 • 2024年 Microsoft BuildでGA ⼀般リリース •

    引き続き、機能追加が⾏われている • 開発 ◦ DockerにDBや、キャッシュやストレージなどのアカウントを簡単に定義して起動できる ◦ 接続⽂字列をサービス間で共有する機能がある ◦ メトリクスなどを取る仕組みがデフォルトで⽤意される ◦ フロント側とバックエンドを⼀緒に起動してくれる ◦ フロント側のデフォルトはBlazorだが、npmなどのjs/tsアプリも含めることができる 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  それぞれの技術の紹介とメリット
  4. .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アプリ開発」  それぞれの技術の紹介とメリット
  5. .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アプリ開発」  それぞれの技術の紹介とメリット
  6. 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アプリ開発」  それぞれの技術の紹介とメリット
  7. 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アプリ開発」  それぞれの技術の紹介とメリット
  8. Aspire (開発環境) + Sekiban (イベントソーシング‧CQRS) + ResultBox (関数型記法 + プログラミングスタイル)

    = 全て⼀緒に使うとアプリケーション開発が簡単で便利になるはず! でも、弊社内もふくめ、⼀気通貫ではまだ使っていない。 オープンソースで作ってしまおう! 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  開発のデモとコードの説明
  9. 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アプリ開発」  開発のデモとコードの説明
  10. 今⽇に向けて勤怠管理をいろいろ作る予定だったのですが、、、 • ResultBoxで関数型でかけるようにSekibanを改修しよう ◦ クエリ、コマンドがシンプルにかけそう https://zenn.dev/jtechjapan_pub/articles/b9e1f6628f3cf3 【Railway Oriented Programming によってよりシンプルになるCQRSとその書き

    ⽅】 • 使ってみたらResultBoxにこれが欲しい • builder.Services.AddIdentityApiEndpoints<IdentityUser>() を使ってみよう • Blazorでやはり書きたい ◦ 初めてしっかり使ってみたらなにもかも分からなくて苦戦。。。。 ◦ Copilot + ChatGPTに頼りつつなんとか開発を進めました。 とりあえず、ログインと画⾯にリスト、登録、名称変更をつくりました 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  開発のデモとコードの説明
  11. そもそも、ソフトウェア開発における、『かんたん』とはなんだろうか? • 難しい設定を簡単に書ける → Aspire、Sekiban • 簡単にたくさんのコンポーネンツを開発できる→Aspire • 難しい業務知識を短いコードで表現できる→Sekiban、ResultBox •

    データの構造の解析が容易である→Sekiban(イベントソーシング) • 関数型で記述できることによりわかる⼈には簡単になる? • イミュータブルなデータにより、データ書き換えの仕組みが簡単になる などなど 簡単に開発 (Simple) != 簡単な開発(Easy) 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  『かんたん』の要素とは
  12. Simpleに開発するためには、開発者の技術向上が不可⽋ • C#の最新の機能を積極的に使⽤する • イベントソーシングは難しいけど、理解するととても便利 • 関数型プログラミングは難しいがパワフル ◦ (C#はもう少し関数型を充実させて欲しい) •

    クラウドネイティブアプリケーションは難しいが、これからの開発には不可 ⽋ スキルのあるエンジニアにとってのSimpleを⽬指す + 学習のためのコンテンツを準備 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  『かんたん』の要素とは
  13. 学習のためのコンテンツ • Github内のドキュメント • Githubの中でのテスト • 良質の書籍 ◦ 関数型ドメインモデリング •

    サンプルプログラム ◦ OpenAttendanceManagement ◦ 各Githubプロジェクト • Zennなどでの発信 ◦ 英語ブログも • 登壇やソーシャル ◦ 英語での登壇も 🆗 #dotnetlab 「Aspire, Sekiban, ResultBoxで作るかんたん!?Webアプリ開発」  『かんたん』の要素とは