![見出し画像](https://assets.st-note.com/production/uploads/images/52647999/rectangle_large_type_2_e4d9c01da25844d50b79ad4490d6a68b.jpg?width=1200)
CSVエディタ開発日記: 複数選択したセルの値を削除できない?
こんにちは、アプリ開発をしている安藤ひつじです。今日は僕が開発しているMacアプリ『CLYR CSVEditor』についての開発日記です。
CLYR CSVEditorとは
macOS向けに開発しているCSVファイルを編集するためのアプリケーションです。以下はApp Storeに載せている紹介文の一部です。
美しさと機能性を有するCSVエディタ。
CLYR CSVEditorはCSVファイルを編集するために作られたアプリケーションです。
ボタンによる行・列の追加、削除といった直感的でわかりやすいUI、行数や列数の表示はもちろん、セルのテキストや値の文字数、桁数の表示といった、ちょっと便利なアプリデザイン。
CLYR CSVEditorは、シンプルかつ機能的で誰でも使いやすいCSVエディタを目指しています。
CSVファイルを編集できるアプリの代表格としてはExcelが挙げられますが、Excelのちょっとお節介な機能のせいでCSVデータが壊れてしまったという経験はありませんか? 例えば、09012345678といった値が9012345678と表示されてしまい、その状態で保存するとゼロ落ちと呼ばれる先頭の0が消失した状態で保存されてしまいます。別の例では、大きい数値データだとE+12のような指数表記で表示され、このまま保存してしまうとCSVデータが壊れてしまうといったことがあります。
確かにExcelは高機能なスーパーアプリだと思います。僕もすごくお世話になっています。ただ、それとは別にCSVの扱いに特化したアプリがあればもっと便利になると思い、このアプリを開発しています。僕が日々エンジニアとして色々な案件を担当させていただく中でCSVデータを扱うシーンはけっこう多いので、同じ悩みを抱えている人はきっといるはず。このアプリでその人たちの作業効率が上がってくれれば嬉しいですね。
バグの発見
さて、前置きが長くなりましたが、ここからが今回の本題です。アプリをさわっているときに気付いてしまったのです。
「あれ、セルを複数選択して削除できないぞ」
「なんで気付かなかった…。いつの間にかデグレしていたのか…?」
今回発覚したバグは、セルを複数選択して値を一括削除したとき、表示が更新されないというものです。(再現するアプリバージョンは1.0.2で最新版では修正済です😃)
このバグは表示が更新されないだけで、データ上はちゃんと削除されています。そのため、データと表示が一致していないという余計に紛らわしい状態になっていました。
CLYR CSVEditorはVIPERアーキテクチャを採用しています。deleteキーの入力を受け付けると、presenterのdeleteValuesメソッドに削除するセルを渡し、DeleteValuesUsecaseの実装によってCSVデータを更新します。バグの原因は、データ更新後のViewの更新メソッドに問題がありました。Usecaseのテストコードはけっこう書いてあり、ロジックに不備がないことを念入りに確認しているのですが、UIのテストは実際にさわって確認することしかできていません。その機能を作ったときは念入りに確認するのですが、新しい機能を足すたびに毎回確認しているわけではないので、UI上でデグレが起きたことに気付きにくい状態になっています。
Deleteロジックに問題がないことが分かったので、バグの修正自体は簡単でした。無事、Viewが更新されるようになり、ver.1.1.0として修正版をリリースすることができました。
まとめ
開発しているCLYR CSVEditorアプリで、セルを複数選択して値を一括削除したとき、Viewが更新されないバグがありました。新しい機能を実装した際にデグレしてしまった可能性が高く、UIのテストが甘かったため、バグに気付くことができずにいました。デグレを防止するためにもUIテストの自動化は必要ですね。XCUITestを使うときがきました。
アプリの宣伝
CLYR CSVEditorはApp Storeでリリース中です。興味がある方はインストールしてみてください。アプリ起動時に表示されるサブスクリプション購入画面で購入ボタンをクリックしていただくと、最初の2週間は無料でトライアルいただけます。トライアル期間終了後に自動的に課金されますので、もし使ってみて気に入らなければ、トライアル期間中にキャンセルしていただいて構いません。でも、長く使っていただけると嬉しいです!
この記事が気に入ったらサポートをしてみませんか?