Main Content

状態依存の関数

デプロイする MATLAB® コードは多くの場合、"状態"、つまり特定のデータ値をプログラム内やプログラム変数内に維持します。

状態を維持する MATLAB 関数かどうかの判断

MATLAB プログラム内で状態が維持される例には、以下が含まれます。

  • MATLAB パスおよび Java® クラス パスの変更またはそれらへの依存

  • 本質的に永続的またはグローバルな MATLAB 状態へのアクセス。この例の一部には、次が含まれます。

    • 乱数シード

    • データを保持する Handle Graphics® ルート オブジェクト

    • MATLAB または MATLAB ツールボックスの設定および基本設定

  • グローバル変数と永続変数の作成。

  • MATLAB への MATLAB オブジェクト (MATLAB クラス) の読み込み。何らかの方法で MATLAB オブジェクトにアクセスすると、そのオブジェクトが MATLAB に読み込まれます。

  • 静的変数を含む MEX ファイル、Java メソッド、または C# メソッドの呼び出し。

防御的コーディングの実践

MATLAB 関数が状態を維持するだけでなく、関数の適切な実行が "それに依存する" 場合、追加の手順 (この節にリストされている) を実行して確実に状態を保持する必要があります。

アプリケーションをデプロイするときには、状態が維持される状況と、必要に応じて状態が維持されなかった場合の対策を検討します。状態が変更される可能性を "仮定" して、その状況に防御的に対応するようにコーディングします。

以下は "防御的コーディング" の実践例です。

デプロイ アプリケーションでのシステム生成値のリセット

たとえば、乱数シードを使用する場合は、デプロイ アプリケーション プログラム内でリセットして、元の MATLAB 関数の整合性を確保します。

グローバル変数または永続変数の値の検証

グローバル変数または永続変数を使用しなければならない場合は、必ずデプロイ アプリケーション内でそれらの値を検証し、必要に応じてリセットします。

データ キャッシュへの確実なアクセス

たとえば、以前の要求に対するキャッシュ済みの応答に関数が依存する場合は、デプロイされるシステムおよびアプリケーションが MATLAB 環境外にあるそのキャッシュに確実にアクセスできるようにします。

可能な場合はシンプルなデータ型を使用

シンプルなデータ型は通常、特定のアプリケーションおよび状態を保存する手段に縛られていません。使用するデータ型が単純で汎用的になるにつれて、状態を保持するための適切な手段の選択肢が広がります。

MATLAB コールバック関数の使用の回避

timer などの MATLAB コールバック関数の使用を回避してください。コールバック関数には、MATLAB Production Server™ ワーカーを中断してその現在の状態をオーバーライドする機能があり、マルチユーザー環境で予期しない結果が発生する可能性があります。

状態を保持する手法

状態を保持するための最適な方法は、保存する必要のあるデータ型に大きく依存します。

  • データベースは、ステートフル データを保持するための、最も汎用的でスケーラブルな手段を提供します。データベースは汎用リポジトリとして動作し、一般的にエンタープライズ開発環境のどのようなアプリケーションとも連携できます。データの構造またはレイアウトに関する要件または制限が課せられません。関連する別の手法として、Microsoft® Excel® などのアプリケーションでコンマ区切りファイルを使用します。

  • Java や C# など、サードパーティ プログラミング言語に固有のデータは、様々な手法を使用して保持することができます。状態を保持するためのベスト プラクティスについては、適切なサードパーティ ベンダーのオンライン ドキュメンテーションを参照してください。

注意

MATLAB のアプリケーションおよびワークスペースで状態を保持する際は MATLAB 関数 LOAD および SAVE がよく使用されます。状況によっては、これはうまくいくこともありますが、データベースなどの汎用リポジトリにデータを保存しない場合は、データを検証し、必要に応じてリセットすることを強く推奨します。