ファイルへのエクスポートとファイルからのインポート – 開発日記(65)

2023/12/09

アイディアをレーンで整理するというコンセプトのソフトとして、当初は in Lane という仮の名前にしていた。

作りながら名前を色々考えた末「アイディアレーン」にしようと決めた。

実装を始めて間もなく9ヶ月。ついにFireBaseのプロジェクト名もin_laneからidea_laneに変えた。

その移行のためにソフト上のデータをバックアップするべく、(idea Laneの機能で)キャンバスをファイルにエクスポートした。

しかしそのエクスポートの途中でjson出力する際、謎不具合に遭遇して苦戦。json内の文字列に # が含まれるときだけ、ファイルの出力が途中で途切れてしまう。

始めはjsonEncode周りを調べていたが違った。

エラーが起きるのはファイル出力の下記部分だった。

final anchor = html.AnchorElement(href: “data:application/json;charset=utf-8,$jsonString”);

しかし原因箇所は分かっても私には何が悪いか分からず。どうしたものかと思ったが、同じ事で困り、かつ、解決策まで示している方が居た。とても助かりました……。

Flutter Web ファイル保存 エラー対応(Zenn)

2023/12/10

不具合の修正やリファクタなどを実施。

機能改善として、キャンバスをファイルからインポートするときまとめて複数指定出来るようにした。

ところが処理に時間がかかるうえ非同期処理が途中でちょっとおかしくなるので、そのあたりを修正すべくいろいろトライ。かといって同じロジックのまま非同期を単純にやめただけだととんでもなく処理に時間がかかってしまった。

まだまだ色々とやってみて初めて知る事が多く、時間を取られる。

2023/12/11

RealTimeDBへの書き込みのやり方を修正。

非同期で何度も書き込むとかなり遅いので、まとめられるものはまとめるようにした。

2023/12/12

引き続きRealTimeDBへの書き込みのやり方を修正。

キャンバスファイルのインポートは、非同期処理をしつつも終わるまで処理を待ちたい。その間他の操作をしてほしくないので、処理中は画面を切り替えることにした。

ものすごく地味だしキャンセルボタンも作ってないが……。

2023/12/13

キャンバスのインポート時にDB反映する処理について、これまで何日も試行錯誤してきた。

しかし結局、非同期updateの連続ではなくまとめて一度にデータを投げるようにした。

桁違いに速くなった。

最初からそうすれば良かったのだが、できれば既存処理とロジックを1本化したかったというのが背景にある。

つまり

  1. 普段は操作をするたびにRealtime DBに反映(都度、非同期処理)
  2. ファイルからのインポート時は一括でDB反映

のとき、2番で1番の処理を使いまわしたかったということ。とはいえ1番の処理を一度に大量に呼び出すと、遅い。処理が終わるまで待つとなると、かなり待たされてしまう。

結局上記2番は”必要なデータをまとめて同期処理で一括反映”にしたので、ある種1番とは別系統の処理になってしまった。

今後の機能の追加や変更時、2種類ともケアしないといけなくなってしまった。しかしここまで速度が違うとやむを得ないか。


※開発日記は当時の記録をもとに作成し、必要に応じて加筆・補足しています

この記事はアイディア整理ソフト「idea Lane」の開発記録です

どなたでも、ユーザ登録だけで無料ですぐに使えます
テキストベースの思考整理ツール「idea Lane」


コメント

タイトルとURLをコピーしました