本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「Azureお父さん必見!赤ちゃんのうんち記録アプリで子育てをDX!?」を再編集したものです。
子供が産まれて妻子の入院期間中、体温や授乳回数やおしっこ・うんちの時間を記録する紙があって、そこに毎日記録していました。
退院後もそのフォーマットをExcelで真似て紙に印刷して使っていて、子供の不調が無いか確認していました。
子供が1歳になった今も一応、記録内容を減らした紙を運用してはいるものの、ほとんど問題ないのであまり書いていないです。
ただその中で、絶対書いておきたいのが、うんちの記録です!
便秘だと不機嫌になったり場合によっては病院に行かないといけなくなります。
うちの子は最近は割と快便ですが、最初の頃は便秘でとても心配しました。
また、うんちがあまり出ていない状態でお風呂に入ると… ね。。
ということで、うんちの回数を記録するアプリを書いてみましたのでご紹介です。
インフラもアプリも、ベースとなる考え方は以前ブログでご紹介した下記のコードです。
https://github.com/hirokimatsueda/azure-managed-id-sample
アプリの概要
アプリはASP.NET Core Blazorでの記述です。
カレンダーの中の「+」ボタンを押すと、当日の枠に💩マークがつきます。
データはCosmos DBに保管されます。
アプリコード
Visual Studio 2022で作成しました。
GitHubで見られるようにしています。
https://github.com/hirokimatsueda/baby-info-recording-system
APIはリクエストされた期間のうんちデータを探します。ポイントはGetItemLinqQueryableを利用する程度です。
var iterator = container.GetItemLinqQueryable() .Where(p => p.UserId == userId[0]) .Where(p => startDate <= p.Date && p.Date < endDate) .ToFeedIterator();
EF Coreの調子でWhereした後ToListしたくなるところですが、非同期処理で完結するにはToFeedIteratorを経由して取りに行く必要があります。
うんちの増減はUpsertItemAsyncを利用して上書き保存しています。
await container.UpsertItemAsync(poop, partitionKey);
フロントの実装は大目に見てください。。
作りが微妙ですが… 赤ちゃんIDを変更すると別々のデータを管理できるので、双子や兄弟のデータも扱えます。
インフラの概要
インフラとしてはAzure の Static Web Appsでの動作を想定し、情報をCosmosDBに保存するので、比較的安価に運用できるものになっています。
インフラ構築
APIはStatic Web Appsのデフォルトの機能で動かすとManaged IDが使えないため、Static Web Appsとは別で構築したFunctionsをStatic Web Appsにリンクする形を取るのがポイントです。
下記に要点をご紹介します。
Cosmos DBとFunctionsの作成
下記のTerraformで作成することで、FunctionsからManaged IDでCosmos DBのデータの更新ができる状態に整えます
https://github.com/hirokimatsueda/azure-managed-id-sample/tree/main/infrastructure/terraform
Static Web Appsの作成
Functionsのリンクをするので、Standardで作成します。
作成時にビルドの詳細で下記を指定します。
ビルドのプリセット:Blazor
アプリの場所 :Client
API の場所 :(空欄)
出力先 :wwwroot
作成後、Azureポータルの「API」から、作成したFunctionsをリンクしてください。
他の人に見えないように、全般設定でパスワード保護を実施すると良いです。
まとめ
これで子育て環境のDXが完了ですね!
…とは現実的には、このレベルだとたぶん紙で運用した方が楽です。
機能追加すれば入院中の記録用紙と同じレベルで記録ができるようになると思うので、誰か作ってみて欲しいですね。
松枝 宏樹/FIXER
愛知県在住、リモートワーク気味なエンジニア。
得意分野はC#、ASP.NET、terraform、AKSなど。