## 概要
`AppUtils.ahk`では設定ファイルを読み込む関数が存在する。
```autohotkey
;【概要】設定ファイルから値を取得します
;【引数】section: 設定ファイルのセクション名
; key: 設定ファイルのキー名
;【戻値】設定値
;【備考】設定値はSettings.iniの設定値によって取得元を変更します
getSettingsValue(section, key) {
IniRead setting, %A_ScriptDir%\Settings.ini, FILE, name
IniRead value, %A_ScriptDir%\settings\%setting%.ini, %section%, %key%
return value
}
```
この関数は非常に呼び出される回数が多いため、FileIOに無駄な負荷をかける。実際には[[OS]]が2度目以降はメモリやストレージなどの内側にキャッシュしていると思うので実害には至らないかもしれない... が実装として望ましくはない。
一度アクセスされた場合はインメモリに格納して取り出せるようにする。
## 方針
グローバル変数 `settingsCache` を定義する。
```autohotkey
global settingsCache := {}
;【概要】設定ファイルから値を取得します
; 一度取得した値はキャッシュされます (キャッシュクリアしたい場合はreloadが必要)
;【引数】section: 設定ファイルのセクション名
; key: 設定ファイルのキー名
;【戻値】設定値
;【備考】設定値はSettings.iniの設定値によって取得元を変更します
getSettingsValue(section, key) {
global settingsCache
cacheKey := section . "|" . key
if settingsCache.HasKey(cacheKey) {
return settingsCache[cacheKey]
}
IniRead setting, %A_ScriptDir%\Settings.ini, FILE, name
IniRead value, %A_ScriptDir%\settings\%setting%.ini, %section%, %key%
settingsCache[cacheKey] := value
return value
}
```