【MATLAB】何が起こっているか分からないが致命的っぽいエラーの処置方法

# 何かがおかしい・・そんな時には

- 意味の分からないエラーが・・
- プロット表示がなんか変 or 表示されない・・
- 根本原因はどうでもいいから何とかしてくれ。もう再インストールしてやる！

エラー文もよくわからんし、どう考えても自分の書いた部分が原因じゃないだろう・・。
MATLAB 使っていると、~~たまに？~~ こんなことありますよね。

そんな時、怒りに任せて再インストールをしちゃう前に気軽に試せる２つの関数とその背景を紹介します。

1. パス初期化：[restoredefaultpath](https://jp.mathworks.com/help/matlab/ref/restoredefaultpath.html?s_eid=PSM_29435) 
2. 設定ファイル初期化：[prefdir](https://jp.mathworks.com/help/matlab/ref/prefdir.html?s_eid=PSM_29435)


```matlab:
restoredefaultpath % パスの初期化
savepath % 初期化されたパス設定を保存
prefdir % で表示されるフォルダの削除（バックアップは適宜）
```
これだけ！

特に「設定ファイル」は再インストールだけでは初期化されない場合があるので、
再インストールが無駄に終わることもあり要注意です。

参考：[MATLAB 環境を初期化するにはどうすればよいですか？](https://jp.mathworks.com/matlabcentral/answers/376415-matlab?s_eid=PSM_29435)

もちろんこの２つですべての問題が解決するわけではないのですが、
どうしようもないときに試せるもの、という感じでどうぞ。
それぞれ紹介していきます。

# パス初期化：restoredefaultpath

```matlab:
restoredefaultpath % パスの初期化
savepath % 初期化されたパス設定を保存
```

なにが原因かはさておき、MATLAB インストール直後にパスの設定が問題を引き起こすケースはよく聞きます。あとはうっかりパスをいじってしまったときなどですね。
そんな時は「えい！」っと `restoredefaultpath` でパス設定を初期化して、問題が解決されるかを確認しましょう。解決したようであれば `savepath` で初期化したパス設定を保存します。

`restoredefaultpath` の実行だけだと、パス初期化は一時的なものなので、MATLAB を再起動すると元の状態に戻りますので、気軽に試してくれて大丈夫。

## パス初期化で解決する問題ってどんなもの？

いろいろですが、とりあえず自分で書いたコードが原因じゃなさそうな雰囲気は共通しています。
以下にエラー例を MATLAB Answers から引用します。

- **関数 'workspace​func'(タイプ'​struct'の入力​引数)が未定義です**
    - 例：[MATLAB 起動時に、「関数 'workspace​func'(タイプ'​struct'の入力​引数)が未定義です」​のエラーが発生するの​はなぜですか？](https://jp.mathworks.com/matlabcentral/answers/307357-matlab-workspacefunc-struct?s_eid=PSM_29435)
- **警告: matlabrc で設定を初期化できませんでした。**
    - 例：[MATLAB起動時のエラーについて](https://jp.mathworks.com/matlabcentral/answers/477825-matlab?s_eid=PSM_29435)
- **readonly Error: Unexpected MATLAB expression. workspacefunc 287**
    - 例：[ワークスペースのファ​イルを開くときに"r​eadonly"の警​告が出てくるのですが​、原因がわかりません​。](https://jp.mathworks.com/matlabcentral/answers/431932-readonly?s_eid=PSM_29435)
- **double から struct に変換できません。**
    - 例：[patternnet関数で「double から struct に変換できません。」​のエラーが出るのはな​ぜですか？](https://jp.mathworks.com/matlabcentral/answers/318257-patternnet-double-struct?s_eid=PSM_29435)
- **'matlab.internal.getSettingsRoot' が未定義**
    - 例：[クラスタープロファイルマネージャー起動時に 'matlab.in​ternal.get​SettingsRo​ot' が未定義というエラーとなるのはなぜですか？](https://jp.mathworks.com/matlabcentral/answers/251460-matlab-internal-getsettingsroot?s_eid=PSM_29435)

いろいろですね。
他にもこんな問題がパスの初期化で解決したよ！というものがあればコメントください。


# 設定ファイル初期化：prefdir

MATLABの再インストールでさえも解決できない？
そんな恐ろしい現象の背景にあるのがこちら `prefdir` です。

```
>> prefdir
ans =
    'C:\Users\eigs\AppData\Roaming\MathWorks\MATLAB\R2019a'
```

と大体こんなところに MATLAB のバージョン別に保存されているのが、各種設定ファイル。
コマンド履歴やショートカット・レイアウト・言語設定などが保存されています。

うっかり設定しちゃったことが原因でおかしくなった、ただ何かは覚えていない。いや、俺は何もしていない（大体やってます・・）、そんな状態のときには、このフォルダをごそっと消してしまって、MATLAB を再起動すればOKです。再起動すると設定ファイルが再生成されます。

慎重な方はフォルダ名を変更（例： R2019a_bk）してバックアップを取っておいてもいいですね。あとで R2019a に戻せば元通り。

**アンインストールで削除されてなかった場合は、インストールし直した MATLAB が再びこのフォルダを参照するため、元の問題が再現されてしまいます。**怖いですね。

もちろん、他の PC で同じ設定を再現したい、そんな時にはこのフォルダの中身をコピーすればOKですね。

参考：[How do I save my editor preferences when I copy MATLAB to a new machine?](https://jp.mathworks.com/matlabcentral/answers/97176-how-do-i-save-my-editor-preferences-when-i-copy-matlab-to-a-new-machine?s_eid=PSM_29435)


## 設定ファイルの初期化で解決する問題ってどんなもの？

こちらも多岐にわたります。パッと思い出せるものだと 

- Live Editor 上にプロットが表示されなくなる
- アプリが起動しない
- 起動に時間が掛かり、かつ、Javaエラーが発生

などなど。
もはやユーザーがいじれる設定なんて関係なさそう・・というところがミソですね。



# まとめ

何かがおかしい・・そんな時にまず試す価値がある２つのコマンドを紹介しました。
直接の原因は有耶無耶になりますが、わけのわからないエラーにイライラする前に是非。

```matlab:
restoredefaultpath % パスの初期化
savepath % 初期化されたパス設定を保存
prefdir % で表示されるフォルダの削除（バックアップは適宜）
```