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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Tomohisa Takaoka Tomohisa Takaoka
June 22, 2024
470

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

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

Avatar for Tomohisa Takaoka

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アプリ開発」  『かんたん』の要素とは