メインコンテンツ

カスタム設定の作成

MATLAB® でカスタム設定を作成することで、複数のセッションを通してプログラムにより自分のデータを保存し、それにアクセスできます。たとえば、設定を作成してシステムにある重要なフォルダーの場所を保存したり、あるファイルの実行回数を記録したりできます。

設定グループの追加と削除

設定は、グループに整理することができます。たとえば、matlab.editor 設定グループには、MATLAB エディターに関連する設定が含まれています。設定グループはツリー状に整理され、最上部にはルート ノードがあります。

Settings tree hierarchy. At the top of the tree is the root node with two child nodes, matlab and another node labeled with three dots. The matlab node has three child nodes: general, editor, and another node labeled with three dots.

グループの追加

新たな設定グループを追加するには、addGroup 関数を使用します。たとえば、ルート ノードの下に設定グループ mysettings を作成します。

s = settings;
addGroup(s,"mysettings");
s
s = 
  SettingsGroup with properties:
                   matlab: [1×1 SettingsGroup]
               mysettings: [1×1 SettingsGroup]
    mldrivetripwireaccess: [1×1 SettingsGroup]

非表示のグループ

非表示の設定グループは設定階層に表示されませんが、プログラムによってアクセスできます。非表示のグループを作成するには、名前と値の引数 Hiddentrue に指定します。たとえば、mysettings の下に設定グループ myhiddensettings を作成します。myhiddensettingsmysettings 内に表示されないことに注意してください。

addGroup(s.mysettings,"myhiddensettings",Hidden=true);
s.mysettings
ans = 
  SettingsGroup 'mysettings' with no properties.

グループの削除

設定グループを削除するには、関数 removeGroup を使用します。たとえば、myhiddensettings を削除します。

removeGroup(s.mysettings,"myhiddensettings");

設定の追加と削除

設定の追加

新たな設定を追加するには、関数 addSetting を使用します。たとえば、設定 MyWorkAddressmysettings 設定グループに追加します。

addSetting(s.mysettings,"MyWorkAddress");

設定値を現在のセッションで設定するには、一時的な値を指定します。設定値を複数のセッションにわたって設定するには、個人用の値を指定します。たとえば、MyWorkAddress に個人用の値を指定します。

s.mysettings.MyWorkAddress.PersonalValue = "3 Apple Hill Drive";

すると、プログラムにより設定値をコードで使用することができます。

fprintf("I work at %s.\n", s.mysettings.MyWorkAddress.ActiveValue)
I work at 3 Apple Hill Drive.

メモ

設定をルート設定グループに直接追加することはサポートされていません。

非表示の設定と読み取り専用の設定

非表示の設定は設定階層に表示されませんが、プログラムによってアクセスできます。非表示の設定を追加するには、名前と値の引数 Hiddentrue に指定します。たとえは、非表示の設定 MyHiddenWorkAddressmysettings 設定グループに追加して、その個人用の値を設定します。

addSetting(s.mysettings,"MyHiddenWorkAddress",Hidden=true, ...
    PersonalValue="1 Lakeside Campus Drive");

読み取り専用の設定を追加するには、名前と値の引数 ReadOnly を使用して、個人用の値を指定します。たとえば、読み取り専用の設定 MyBirthDatemysettings 設定グループに追加し、個人用の値を指定します。

mydate = datetime("6/1/1990",InputFormat="MM/dd/uuuu");
addSetting(s.mysettings,"MyBirthDate",ReadOnly=true,PersonalValue=mydate);

設定の削除

設定を削除するには、removeSetting 関数を使用します。たとえば、MyBirthDate 設定を削除します。

removeSetting(s.mysettings,"MyBirthDate");

関数を使用した設定の検証

設定またはグループに検証関数を指定することにより、設定値に特定の制約を課することができます。検証関数は、設定値候補を引数として受け入れ、その値が特定の要件を満たさない場合はエラーをスローします。

MATLAB では、設定の検証に使用できる検証関数をいくつか定義しています。

名前

意味

入力で呼び出される関数

matlab.settings.mustBeStringScalar(A)

A は string スカラーでなければならない。

isStringScalar

matlab.settings.mustBeLogicalScalar(A)

A は logical スカラーでなければならない。

islogical, isscalar

matlab.settings.mustBeNumericScalar(A)

A は数値スカラーでなければならない。

isnumeric, isscalar

matlab.settings.mustBeIntegerScalar(A)

A は整数スカラーでなければならない。

isinteger, isscalar

mustBePositive(A)

A > 0

gt, isreal, isnumeric, islogical

mustBeNonpositive(A)

A <= 0

ge, isreal, isnumeric, islogical

mustBeFinite(A)

A には、NaN 要素も Inf 要素もない。

isfinite

mustBeNonNan(A)

A には NaN 要素がない。

isnan

mustBeNonnegative(A)

A >= 0

ge, isreal, isnumeric, islogical

mustBeNegative(A)

A < 0

lt, isreal, isnumeric, islogical

mustBeNonzero(A)

A ~= 0

eq, isnumeric, islogical

mustBeNonempty(A)

A は空であってはならない。

isempty

mustBeNonsparse(A)

A にはスパース要素がない。

issparse

mustBeNumeric(A)

A は数値でなければならない。

isnumeric

mustBeNumericOrLogical(A)

A は数値または論理値でなければならない。

isnumeric, islogical

mustBeReal(A)

A には虚数部がない。

isreal

mustBeInteger(A)

A == floor(A)

isreal, isfinite, floor, isnumeric, islogical

設定を作成する際に検証関数を指定するには、名前と値の引数 ValidationFcn を使用して、関数ハンドルを指定します。たとえば、設定 MyLogicalSettingmysettings 設定グループに追加し、その値が logical スカラーでなければならないと指定します。

addSetting(s.mysettings,"MyLogicalSetting",ValidationFcn=@matlab.settings.mustBeLogicalScalar);

MyLogicalSetting の値を logical 値以外に設定するよう試みます。予想どおり、MATLAB はエラーをスローします。

s.mysettings.MyLogicalSetting.PersonalValue = 10;
Error setting 'MyLogicalSetting' in group 'mysettings': 
Value must be logical or convertible to logical.

設定グループ全体に検証関数を指定することもできます。指定した検証関数は、グループ内で独自の検証関数が指定されていないすべての設定の値を検証します。たとえば、設定グループ mylogicalsettings を作成し、検証関数 matlab.settings.mustBeLogicalScalar を指定します。

addGroup(s.mysettings,"mylogicalsettings",ValidationFcn=@matlab.settings.mustBeLogicalScalar);

設定 MyLogicalSettingmylogicalsettings グループ内に作成し、その値を logical 値以外に設定するよう試みます。予想どおり、MATLAB はエラーをスローします。

addSetting(s.mysettings.mylogicalsettings,"MyLogicalSetting");
s.mysettings.mylogicalsettings.MyLogicalSetting.PersonalValue = 10;
Error setting 'MyLogicalSetting' in group 'mysettings.mylogicalsettings': 
Value must be logical or convertible to logical.

カスタム検証関数の定義

MATLAB の検証関数でカバーされない特性について設定をチェックするために、独自の検証関数を作成できます。検証関数は、設定の値の検証を目的として設計された通常の MATLAB 関数です。それらは以下の条件を満たさなければなりません。

  • 設定値候補を入力引数として受け入れる。

  • 出力引数がない。

  • 検証に失敗した場合はエラーをスローする。

検証関数を MATLAB パスに配置して、利用できるようにします。

たとえば、設定の値が偶数かどうかを検証する関数を作成します。

function evenNumberValidationFcn(x) 
errorMsg = "Value must be an even number.";
iseven = isnumeric(x) && mod(x,2) == 0;
assert(iseven,errorMsg);
end

この検証関数を新しい設定に追加します。

addSetting(s.mysettings,"MyEvenNumberSetting",ValidationFcn=@evenNumberValidationFcn);

MyEvenNumberSetting の値を奇数に設定します。予想どおり、MATLAB はエラーをスローします。

s.mysettings.MyEvenNumberSetting.PersonalValue = 1;
Unable to validate settings data. Error using assert
Value must be an even number.
...

また、mustBeGreaterThanmustBeLessThanmustBeGreaterThanOrEqualmustBeLessThanOrEqualmustBeMember など、複数の入力を必要とする MATLAB 検証関数を利用したカスタム検証関数を作成することもできます。たとえば、次の関数は、設定の値が 4 つの色のいずれかであることを検証します。

function colorValidationFcn(val) 
mustBeMember(val,["Black" "Blue" "Yellow" "Green"]); 
end

設定または設定グループへの検証関数の追加の詳細については、addSetting および addGroup を参照してください。

参考

| | | | | |

トピック