みなさんこんにちは。
Opening Lineの松本です。
先日の大阪出張とても楽しかったです。特に大阪環状線の大阪駅で発車音の「やっぱ好きやねん」を聞くことができて、「あぁ〜大阪だなぁ」と物思いにふけて特に楽しかったです。ご一緒してくださった皆様ありがとうございました。🙇♂️
さて今回ですが、symbolのトランザクションの勉強の一環でストレス測定アプリケーションを作成しました。
今回は福祉のお仕事をされている方からこういうのがあったらいいというアイデアを僕なりに形にしてみました。
要件
今回の要件としては「職員が日常の仕事においてどれだけストレスを抱えているか可視化したい」と設定しています。
仕様
さてというわけで、一応僕もOpening Lineの一員です、FirestoreやDynamoDBでできることをわざわざそのまますることもないです。(強がりですが、一応ブロックチェーンエンジニアですので、色々試してみたいんです)
というわけで、今回はブロックチェーンのトランザクションを使用してストレス測定をしたいなと思います。
想定するユーザーの要望
ここで登場するユーザーは2種類あります。
- 管理者(マネジメントを実施しないといけない人)
- 支援員(現場レベルで利用者の支援にあたる人)
管理者の目的
離職率を低減させるためにも「職員がどのタイミングでストレスを感じているのかを可視化することができれば対策ができるかもしれない」
支援員の目的
現場で負荷がかかっているタイミングで意思表示をすることで現場の大変な場所を管理者にわかってもらう(ただし誰が言ったか可能な限り匿名で実施したい)
さて、というわけで今回はトランザクションのタイムスタンプを使用してどの時間帯にトランザクションが集中しているのかを確認することによっていい感じにそれを可視化できないかな?という企画です。
図式
まぁこんな感じです。
技術選定
Ionic React
symbol-sdk
amplify(デプロイ用)
です。特に意味はありません。
ソースコード
こちらです。使い方などは聞いてもらえればいいかなと思います。
GitHub - kazumasamatsumoto/stress-check: stress-checkYou can't perform that action at this time. You signed in with another tab or window. You signed out in another tab or… github.com
amplifyが邪魔な方はディレクトリごと削除してください。一応CloudFront+S3の構成でしています(publishしたときにキャッシュを消すのを忘れずにね!)
.envも忘れずにね!
- トランザクション送信用のプライベートキー
- ノードのURL
- 受信用のアドレス
- 送信者のアドレス(これはトランザクション情報を取得するためさ)
非常に難しかったところ1
タイムスタンプをどうしようかなとほんとに困った。
上司のdaokaさん曰くタイムスタンプはブロックごとで取得しないといけない。どうしようかなぁと思っていたのですが、
あ、Deadlineがあるじゃないかとなったわけです。
Deadlineはデフォルト設定だと2時間となるのでそこから2時間引けば大体トランザクションが送信されたタイミングが取得できるわけです。
ここは大体でいいんですよ。(試作機なんで、おそらくそんな要望もないと思います。ただのストレス測定アプリでそんな必要かなというのが個人の感想です。)ひろゆきさんが出てこないことを祈ります。
なのでトランザクション一覧を取得してDeadLineだけを配列に格納してフィルタリングを実施した感じになります。
stress-check/Statistics.tsx at main · kazumasamatsumoto/stress-checkYou can't perform that action at this time. You signed in with another tab or window. You signed out in another tab or… github.com
難しかったところその2
SafariとChromeのDateの違い
これはマジで謎だった、NaNになるので取得できないバグが発生するし共通の記載方法もわからんし。と四苦八苦しましたがなんとかできたのかな?となっています。
stress-check/Statistics.tsx at main · kazumasamatsumoto/stress-checkThis file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below… github.com
ここもマジでわからんかった
stress-check/Statistics.tsx at main · kazumasamatsumoto/stress-checkYou can't perform that action at this time. You signed in with another tab or window. You signed out in another tab or… github.com
といったわけで、まぁ当初の目的は達成できたのかなと思います。
アプリケーションイメージ図
最後に
このアプリケーションですが、ブロックチェーンの秘密鍵って企業に渡すと大変なことになりそうなので、基本的に内製化してもらう形にしています。
さらに試作機はメインネットで動かしていますので、公開ができず、今、依頼があった福祉関係のお仕事をされている方にURLを共有しています。
後ですが、僕の活動をみて福祉のためにこういう活動をしていると思われる方がいるようで、基本的に僕も一人のシステムエンジニアです。基本的にユーザーのために存在しているので、特定の業界に肩入れすることもございません。
僕のスタンスはあくまでも「僕の作ったアプリを使ってくれるユーザーのために技術を提供する」ですので、そこのところの誤解だけは解いておこうと思います。
おしまい。