Slide 1

Slide 1 text

紙のワークフローをDX化する際に行った 多階層データ処理の高速化について 株式会社カミナシ アプリケーションエンジニア         浦岡 祥平

Slide 2

Slide 2 text

サービス 現場改善プラットフォーム カミナシ 『カミナシ』は、現場のルーティンワークや事務作業を自動化 する現場管理アプリです。 手書き情報のデータから集計、報告など、これまで紙やエクセルで行ってい た作業をデジタル化し、 食品、小売、製造などのあらゆる現場のノンデスクワーカーの 働き方をスマートにしています。

Slide 3

Slide 3 text

1.製造現場のDXとは? 2.製造現場を変えるための、カミナシのアプローチ 3. 外的/内的の制約 4.開発エピソード  (帳票の記録部分で速度低下に対して、解決に至ったまでのストーリー ) まとめ 本日、話すこと

Slide 4

Slide 4 text

1.製造現場のDXとは

Slide 5

Slide 5 text

出典:経済産業省 「IT システム「2025 年の崖」の克服と DX の本格的な展開」 https://www.meti.go.jp/shingikai/mono_info_service/digital_transformation/pdf/20180907_03.pdf  そもそもDXって何?

Slide 6

Slide 6 text

✨ ✨ ✨  では、「製造現場のDX」って何をイメージしますか?

Slide 7

Slide 7 text

まだまだ紙が主役  製造現場のリアルはどうなってる?

Slide 8

Slide 8 text

 なぜ、自動化/高度化できない? ・設備、人材への投資が必要 ・特に少量/多品種での製造では、自動化が難しい etc

Slide 9

Slide 9 text

2.カミナシのアプローチ

Slide 10

Slide 10 text

◯×チェック表 紙のチェックリスト(ワークフロー) カミナシでデジタル化 ノーコードで現場管理アプリを作ることができる  業務フローをデジタル化する

Slide 11

Slide 11 text

条件分岐 繰り返し 多様なデータ型  ノーコードだけど、痒い所に手が届く

Slide 12

Slide 12 text

繰り返し1 繰り返し2 繰り返し3 親ノード 回答 YESの場合 Noの場合 木構造で表現  内部のデータは木構造で定義している

Slide 13

Slide 13 text

3.外的/内的の制約

Slide 14

Slide 14 text

カミナシのユーザーは、「ノンデスクワーカー」と呼ばれます 対デスクワーカー向けのサービスとは違う制約がある ・現場では、iPadだけ見ている訳ではない ・時には移動しながら記録(入力)する ライン①  製造現場における制約 ライン② ライン③ 少なくとも、紙に書いていた時の体験に負けてはいけない!!

Slide 15

Slide 15 text

サービスリリース後の 半年で、 DB定義変更(alter ~)を実施した回数 回 サービス開始後も頻繁なデータ構造の変更を行う必要があった →キャッシュ戦略は一旦、採用を見送り、  愚直にRDB一本で勝負した  スタートアップとしての制約

Slide 16

Slide 16 text

4.開発エピソード

Slide 17

Slide 17 text

(クライアント側) ②描画での性能低下 (サーバー側) ① RDBでの性能低下 RDB  ぶち当たった課題 サーバー側、クライアント側のそれぞれで性能低下の課題あり

Slide 18

Slide 18 text

 ①RDBでの性能低下 ・多階層かつロジカルな構造のデータをRDBで管理するために、関連テーブルが増大した ・関連テーブルが増大したことによって、アプリケーション⇄RDB間の通信回数が増えた ・アプリケーション⇄RDB間の通信速度がボトルネックのため、性能低下に直結した RDB 木構造JSON table ①階層構造(親子関係)を表現するためのテーブル ②データの型ごとにテーブル  (例えば、数値型と日付型はテーブル定義が異なる)   etc...

Slide 19

Slide 19 text

 ①RDBでの性能低下 ・多階層かつロジカルな構造のデータをRDBで管理するために、関連テーブルが増大した ・関連テーブルが増大したことによって、アプリケーション⇄RDB間の通信回数が増えた ・アプリケーション⇄RDB間の通信速度がボトルネックのため、性能低下に直結した gtx. Preload("Rel-A"). Preload("Rel-B"). Preload("Rel-C"). Find(s.ctx, &mainTable).Error; ORMを使ったコード select ~~~ select ~~~ select ~~~ 実クエリ ① ORMで使用して実装を行う場合、   ORM側で大量にクエリを発行してしまう ②再帰処理内でDBアクセス処理を書いてしまい、  大量にクエリ発行していた

Slide 20

Slide 20 text

・多階層かつロジカルな構造のデータをRDBで管理するために、関連テーブルが増大した ・関連テーブルが増大したことによって、アプリケーション⇄RDB間の通信回数が増えた ・アプリケーション⇄RDB間の通信速度がボトルネックのため、性能低下に直結した  ①RDBでの性能低下 golangでのループ 処理のスピード 大量のDBクエリの 処理スピード 個々は数十ミリ秒のクエリーでも積み重なると。。

Slide 21

Slide 21 text

 ①対応 「アプリケーション側での最適化」と「DB側で行えるチューニング」の両軸で対応した アプリケーション側 ①クエリ発行処理と再帰処理のようなアプリ側の処理を分離 ②ORMの使用 -> 生クエリ(テーブル結合を行うような)に変更した  →ボトルネックとなるDBクエリの発行回数を抑えることができた DB側 ③テーブル結合で使用される外部キーに対する index付与   →クリエ単体の性能を改善

Slide 22

Slide 22 text

 ①これからの課題 まだまだ小手先の対応しかできていない! →ユーザー増加、機能拡張に耐えうる抜本的な改善が必要 機能拡張に伴い増える関連テーブル サービスの成長に伴い増えるユーザー数 課題

Slide 23

Slide 23 text

 ②クライアント描画での性能低下 ・ロジカルなUIを実現するために、UIコンポーネントでの状態監視の範囲が大きくなる ・状態監視の範囲が大きくなることで、UIコンポーネントの再レンダリングの回数が増えた ・クライアントにとって、レンダリングコストがボトルネックのため、性能低下に直結した Reducer (状態) component1の回答 component1 component2 component2の回答 UI ・例えば、条件分岐を実現する上で、  component2はcomponent1の回答によって、再描画を行わないといけない    =>他コンポーネントの回答の状態を監視する必要がありました 👀 👀 はい いいえ 原因の記入

Slide 24

Slide 24 text

 ②クライアント描画での性能低下 ・ロジカルなUIを実現するために、UIコンポーネントでの状態監視の範囲が大きくなる ・状態監視の範囲が大きくなることで、UIコンポーネントの再レンダリングの回数が増えた ・クライアントにとって、レンダリングコストがボトルネックのため、性能低下に直結した component1 component2 component3 Reducer (状態) ・・・ component 100個 component 3個 component1 component2 component100 Reducer (状態) ・・・ 再描画 再描画

Slide 25

Slide 25 text

 ②クライアント描画での性能低下 ・ロジカルなUIを実現するために、UIコンポーネントでの状態監視の範囲が大きくなる ・状態監視の範囲が大きくなることで、UIコンポーネントの再レンダリングの回数が増えた ・クライアントにとって、レンダリングコストがボトルネックのため、性能低下に直結した JSでの内部処理 画面レンダリングの処理

Slide 26

Slide 26 text

 ②対策 ①不要なレンダリング箇所の特定 why-did-you-render ②memo化でのレンダリングの抑止 参考: https://kaminashi-developer.hatenablog.jp/entry/2020/11/25/093000 何が起因で再 Rendering が 起こったのかを確認 const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); コンポーネントが再レンダリングされるプロパティを必要最低限 にする

Slide 27

Slide 27 text

 ②これからの課題 ・開発スピード優先だったので、まだまだ壊れやすいアプリ  →テストの強化含め、安定したアプリを提供したい ・と同時に、ユーザーの熱狂度合いを高めたい 課題

Slide 28

Slide 28 text

まとめ

Slide 29

Slide 29 text

・製造業のDXでは人が主役 ・カミナシは、ノーコードで作成できる現場管理アプリにより、  現場のDXを加速させようとしている ・その実現にはサーバー、クライアントそれぞれで継続的な改善が必要  まとめ

Slide 30

Slide 30 text

EM/アプリエンジニア/SRE 積極採用中