4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

不要になったUserDefaultsキーの管理方法

Posted at

UserDefaultsについて

「ある画面を表示したかどうか」などの情報をアプリに保存する場合、UserDefaultsを利用する機会が多いと思います。
UserDefaultsを利用して値を保存することに目を向けがちですが、アプリ開発では機能追加だけでなく、利用しなくなった機能を削除することももちろんあります。
その際に機能を削除する際に不要となるUserDefaultsのキーを適切に扱わなければ、同一のキーを利用して意図しない動作につながってしまうケースがあります

この記事では既存の不要となったキーの管理方法についてまとめ、新しい管理方法についてまとめたものとなります。

既存の管理方法

1. キーごと削除する

不要となったキーを削除するパターンです。もし別の機能開発で全く同じキー名が利用されるケースがあった場合、未然に防ぐことができなくなるためあまりおすすめはできません。

2. prefix / suffix

利用していないキー名にprefixやsuffixを加えることで管理するパターンです。
利用されていないキーが明示的にはなりますが、キー名が増えてくると行数が増え見通しが悪くなります。
また、Active Compilation Conditionsを利用して、Releaseビルドでは含めないなどを設定しないとdeprecatedなキーが成果物に含まれてしまいます。

static let isHoge = "isHoge"

// deprecated keys
static let deprecated_isFoo = "isFoo"
.
.
.

3. コメント化

使用されなくなったキーをコメントで管理するパターンです。
筆者はこのパターン方法で管理したことはないですが、コメントで管理することで視認性が落ちるのが気になります。

static let isHoge = "isHoge"

// deprecated keys
// static let isFoo = "isFoo"
.
.
.

他にもこんな風に管理しているなどがあれば教えていただけるとありがたいです:bow:

どのような管理方法が理想か

上記のような管理方法を洗い出し、以下の用件が満たせていれば理想だと考えました。

  1. どのキーが使用されなくなったかがわかる状態
  2. 使用されいているキーと不要なキーの管理が分離されている
  3. 既に利用していないキー名を再度利用しようとした場合、ビルド時にエラー検知

新しい管理方法

ドットファイルとスクリプトで管理するパターンを考えてみました。

  • 使用しなくなったキー名を.unused_userdefaults_keyで管理
  • buildPhaseでスクリプトを実行し、使用していないキーを利用する場合エラーを出力

1. ドットファイルを用意

使用しなくなったキー名をまとめた.unused_userdefaults_keyを用意します

.unused_userdefaults_key
is_hoge
is_foo

2. スクリプトファイルを用意

キーをまとめたswiftファイルを引数として、.unused_userdefaults_keyと一致するものが含まれていればエラーを出力するスクリプトを用意します

unused_userdefaults_key.sh
#!/bin/sh
file_path=$1
index_array=`cat -n ${file_path}| nl -nln | grep -f .unused_userdefaults_key | cut -d " " -f1`

if (( ${#index_array[@]} )); then
  for i in ${index_array[@]}
  do
    echo "${file_path}:${i}:0: error: It's a key name that's already in use."
  done	
  exit 1
fi

3. Build Phasesに組み込み

unused_userdefaults_key.shをBuildPhasesで実行するようにします
Screen Shot 2020-08-09 at 16.27.46.png

動作GIF

SwiftyUserDefaultsを利用した場合の動作GIFです。
demo.gif

GitHubにもプロジェクトを公開しているので、興味がある人は確認してみてください。
GitHub: https://github.com/funzin/UnusedUserDefaultsKeyExmaple

まとめ

不要となったUserDefaultsキーの管理方法についてまとめてみました。
削除したキーが復活して事故を防ぐには有効だと思いますので、ぜひ参考にしてもらえるとうれしいです。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?