SmartF開発における現状の課題と、今後の計画~BlazorServerを採用した理由~
ネクスタの畠山です。
前回に引き続き、SmartF開発をWinFormsからBlazorへ移行する話となります。
WinFormsからウェブ化を目指すにあたりBlazorを採用したのですが、Blazorには大きく
Blazor Server
Blazor WebAssembly
の2つの手段があります。
それぞれのメリット/デメリットは Kazuki Otaさんのこちらの記事を見ていただくのが一番話が早いと思います。
(私も勉強させていただきました。この場を借りてお礼申し上げます)
勉強させていただいた情報を以てSmartF開発に一番合うであろう方法を自分なりに検討しまして、大きく以下3つの理由でBlazorServerを選びました。
理由① 生産管理システムの「大量データ」という要件特性
前回記事でも触れたのですが、工場現場のインターネット速度はエンジニア開発現場の回線速度より遅いことが多いと感じています。
また、生産管理システムの要件として「大量データ」という特性があるように感じています。
そのため、開発環境やお客様へのデモにおける動作ではサクサク動いても、いざお客様が使ってみよう、となった時に「なんか遅い」という場面が度々あります。
回線速度は工場の立地の都合などもあり弊社ではコントロールできないので、性能への影響が少ないに越したことはありません。
ならいっそのこと、サーバサイドレンダリングにして公開網でのデータ送受信は最小限にしようと考えました。なぜこれで影響が小さくなるのかの理由が下記②となります。
理由② APIデータ量肥大化への対策
SmartFのリリースから今まで機能追加をし続けてきたことにより、SmartF用に設計した各APIのインタフェースに載せるデータ量が肥大化しています。
生産管理システムをSaaSで実現するにあたり「たられば」に備えるために汎用的なデータ設計を採る場合があります。結果、インタフェースに載せるデータ量が増えてしまい、現時点でも、エンジニアチームと振り返りする中でも「こんなにデータサイズが増えると思っていなかった」と話が挙がります。
今後も機能追加していく過程で必要なデータが増えていき「機能設計しつつ性能設計もする」難易度は更に上がっていくと見込んでいます。
エンジニアと雑談をする中で「テーブルを再設計するべき」や「モデル界面で綺麗な設計に変換するべき」との意見も出ますが
今のフェーズで行うべきか
品質に舵切りすることがプロダクト成長にベストなのか
舵切りしたとて品質を維持できる保証はあるのか
そもそも本当にやるべきことなのか
等々を検討して、今回はサーバサイドレンダリングにして「そもそもAPIを公開網で利用しない」ことでAPI設計時に性能に及ぼす影響を小さくすることで対策できるのではと考えました。
理由③ 自動スケーリングしないデメリットが少ない
上記2つの理由はBlazorServerをメリットで選んだ話で、そうなると次に「BlazorServerにするデメリットはどうなんだい」という話になります。
BlazorServerを使う上で一番のデメリットはスケーリングだと考えています。
対して、SmartFはBtoBなのでユーザ数やリクエスト数による性能予測がしやすく、スケーリングに難がある点がデメリットとして強くないと考えています。
実際に負荷をモニタリングしてみても、負荷が上がる時間帯がおおよそ決まっていて、性能上限値も、機能リリースした日を除けば同じくらいの数字になる傾向が見て取れます。
「モダンな開発したいよねー」とプロトタイプ開発では「ECS + Fargate を IaCで」等もしてみたのですが、あまり旨みを感じなくて、むしろ「FargateでSignalRてどうなの」などの不安が頭をよぎったり、Fargateを使うコストも相まって「ALB + EC2でスケーリングは手動でいいや」と現時点では結論付けました。「そもそもBlazor開発ならAWSより Azure App Service の方が適切では」とも考えていて、そういう意味でもECS + FargateみたいなAWSにロックインする構成は控えたい、という思惑もあります。
今後の展望
これは現時点での話で、特に理由②はHTML以外のAPI連携やCSV連携では性能懸念リスクが残ります。
ですが、顕在化したときに対策が打てるリスクなら保有した上で、それよりもコスパがいい施策や機能の実現や推進していくことがベンチャーのスピード感を担保するためには尚更大事だと感じています。
以上、BlazorServerを選んだ話でした。
執筆者プロフィール
株式会社ネクスタ CTO室 室長
畠山圭佑
ネクスタのエンジニアです。 SmartFという生産管理SaaSを作っています。