GUIDE の移行策
R2019b において、MathWorks® は将来のリリースで GUIDE を削除することを発表しました。GUIDE は、MATLAB® でアプリを作成するための独自のドラッグ アンド ドロップ環境です。GUIDE が削除された後も、既存の GUIDE アプリ (GUI) は引き続き MATLAB で動作します。また、アプリの動作を変更する必要がある場合は、アプリ プログラム ファイルの編集も引き続き可能です。
既存の GUIDE アプリの "レイアウト" の編集を続けつつ、将来の MATLAB リリースとの互換性を維持するには、次の表にリストされた推奨移行策のいずれかを使用しなければなりません。
アプリ開発でのニーズ | 移行策 | 移行のやり方 |
---|---|---|
継続的な開発 | アプリを App Designer に移行します。 | GUIDE でアプリを開き、[ファイル] 、 [App Designer に移行] を選択します。[GUIDE の移行オプション] ダイアログで [移行] をクリックします。 |
場合によって行われる編集 | アプリを単一の MATLAB ファイルにエクスポートし、MATLAB 関数を使用してアプリのレイアウトとコードを管理します。 | GUIDE でアプリを開き、[ファイル] 、 [MATLAB ファイルにエクスポート] を選択します。[GUIDE の移行オプション] ダイアログで [エクスポート] をクリックします。 |
App Designer への GUIDE アプリの移行
GUIDE アプリを App Designer に移行すると、アプリのレイアウトを引き続き対話的に開発できます。また、強化された UI コンポーネント セットおよび自動リフロー オプションなどの機能を活用して、アプリを画面サイズの変化に対応させることもできます。さらに、アプリを Web アプリとして作成したり、共有したりすることもできます MATLAB Compiler™ が必要)。
このオプションは、大規模または継続的な機能開発を必要とする GUIDE アプリに使用します。
GUIDE to App Designer Migration Tool for MATLAB は、変換プロセスを簡単にするために、R2018a で初めてリリースされました。これは、MATLAB デスクトップのアドオン エクスプローラー、または MATLAB Central™ の File Exchange から入手できます。
R2020a 以降、この移行ツールは大幅に改善され、App Designer でアプリを実行するために必要な時間と手動でのコード更新回数が劇的に削減されています。これらの機能拡張の詳細については、コールバック コードを参照してください。
初めに使用する環境に応じて、アプリを移行する方法はいくつかあります。
GUIDE でアプリを開き、[ファイル] 、 [App Designer に移行] を選択します。
GUIDE to App Designer Migration Tool がインストールされていない場合、[サポート パッケージのインストール] をクリックします。これにより、アドオン エクスプローラーが開き、移行ツールをインストールできます。ツールのインストールが完了したら、[GUIDE の移行オプション] ダイアログを再度開きます。
GUIDE to App Designer Migration Tool をインストールした後、適切な FIG ファイルを選択して [移行] をクリックします。アプリが移行され、App Designer で自動的に開きます。
App Designer で任意のアプリを開き、[デザイナー] タブに移動します。[ファイル] セクションで、[開く] 、 [GUIDE to App Designer Migration Tool を開く] をクリックします。
MATLAB コマンド ウィンドウで関数
appmigration.migrateGUIDEApp
を呼び出します。この関数を使用して複数の GUIDE アプリを一括して移行できます。
移行ツールの機能
移行ツールは、GUIDE の FIG ファイルを読み取り、等価の App Designer のコンポーネントとレイアウトを MLAPP ファイル内に自動生成することによって、アプリの変換に役立ちます。GUIDE のコールバック コードとその他のユーザー定義関数は、MLAPP ファイルにコピーされます。この半自動コード変換では移行レポートも作成され、必要とされる手動のコード更新に関するアクションが提案されます。このツールの機能の一部を以下の表に示します。
移行ツールの機能 | 説明 | |
---|---|---|
ファイル変換 | GUIDE の FIG ファイルと関連コードを読み取ってから、App Designer の MLAPP ファイルを生成します。App Designer ファイルの名前は guideFileName _App.mlapp の形式になります。 | |
コンポーネントとアプリ レイアウト | コンポーネントとプロパティ構成を App Designer の等価物に変換し、アプリのレイアウトを保持します。 | |
コールバック コード | GUIDE のコールバック コードのコピーおよびユーザー定義関数を MLAPP ファイルに保持します。 | |
チュートリアル | 移行したアプリに対する変更をステップ実行します。 | |
移行レポート | 移行ツールで正常に完了したアクションをまとめます。アプリ固有の制限またはサポートされていない機能をリストし、推奨アクションがあれば併せて記載します。 |
コールバック コード
GUIDE スタイルのコールバック コードをアプリの App Designer の UI コンポーネントに対応させるために、移行ツールは convertToGUIDECallbackArguments
という関数を使用します。この関数は、App Designer のコールバック引数を、コードに必要な GUIDE スタイルのコールバック引数に変換します。関数 convertToGUIDECallbackArguments
は、移行された各コールバック関数の先頭に追加されます。この関数は App Designer のコールバック引数 app
および event
を取り、GUIDE スタイルのコールバック引数 hObject
、eventdata
および handles
を返します。以下に例を示します。
GUIDE スタイルのコールバック引数はそれぞれ、次のように異なる目的で使用されます。
hObject
は、コールバックの実行対象のオブジェクトのハンドルです。GUIDE アプリのコンポーネントがUIControl
オブジェクトまたはButtonGroup
オブジェクトであった場合、hObject
はUIControlPropertiesConverter
オブジェクトまたはButtonGroupPropertiesConverter
オブジェクトへのハンドルです。これらのオブジェクトは、GUIDE スタイルのコードが App Designer のコールバック関数内で機能するように作成されています。通常、
eventdata
は空ですが、コールバック イベントに関する特定の情報を格納する構造体にすることもできます。handles
は、'Tag'
プロパティの値セットのある、UI Figure の移行済みの子コンポーネントを格納する構造体です。GUIDE アプリでUIControl
オブジェクトであった子コンポーネントは、移行後のアプリでUIControlPropertiesConverter
オブジェクトになります。同様に、子ButtonGroup
オブジェクトは、移行後のアプリでButtonGroupPropertiesConverter
オブジェクトになります。
UIControlPropertiesConverter
オブジェクトおよび ButtonGroupPropertiesConverter
オブジェクトは、GUIDE スタイルのコードと App Designer のコンポーネントおよびコールバックとの間でアダプターのように機能します。UIControlPropertiesConverter
オブジェクトは、GUIDE アプリで UIControl
オブジェクトであったコンポーネントごとに作成されます。これらのコンバーター オブジェクトは、移行したアプリ内で App Designer の UI コンポーネントに関連付けられます。コンバーター オブジェクトには、GUIDE アプリにあった元の UIControl
と同じプロパティおよび値がありますが、それらは関連付けられている App Designer の UI コンポーネントに適用されます。
同様に、GUIDE の ButtonGroup
オブジェクトについては、App Designer で ButtonGroupPropertiesConverter
オブジェクトが作成されます。このオブジェクトを使用すると、SelectedObject
プロパティを UIControlPropertiesConverter
オブジェクトに設定できます。これにより、ボタン グループの SelectionChangedFcn
コールバック ロジックが機能します。
特別な考慮事項
場合によっては、アプリの移行の前後に特別な手順が必要です。次の表に、特別な手順や手動でのコード更新が必要となる一般的なシナリオとコーディング パターンを示します。この表は、包括的なリストを意図していません。
GUIDE アプリの機能 | 説明 | 推奨アクション |
---|---|---|
マルチウィンドウ アプリ (データを共有する複数のアプリ) | マルチウィンドウ アプリでは、各アプリを個別に移行する必要があります。移行したアプリのファイル名には _App が追加されます。他のアプリからのこれらのアプリに対する呼び出しを更新しなければなりません。 | 各アプリを個別に移行します。呼び出し元のアプリで、呼び出し先のアプリの名前を新しいファイル名に更新します。 |
ラジオ ボタン、およびラジオ ボタンのコールバック | 移行ツールは、ラジオ ボタン グループを親にもたないラジオ ボタン、または個別のラジオ ボタンのコールバック関数を移行しません。 | App Designer でボタン グループを作成し、それにラジオ ボタンを追加します。ラジオ ボタンの選択の変更時に動作を実行するには、ボタン グループの SelectionChangedFcn コールバック関数を作成します。詳細については、uiradiobutton と ButtonGroup を参照してください。 |
uistack | App Designer でのこの関数の呼び出しはサポートされていません。 | 移行する前に、この機能がアプリにとって重要であるかどうかを判別します。App Designer での回避方法はありません。 |
findobj 、findall および gcbo |
| 代わりに handles 構造体を使用してコンポーネントを参照するか、関連付けられた App Designer のコンポーネント、プロパティおよび値を使用するようにコードを更新します。 |
nargin および nargchk | 補助関数はアプリ メソッドに移行され、app を追加の入力引数として取ります。これにより、nargin または nargchk のロジックが誤ったものになる場合があります。 | チェック値を 1 だけインクリメントします。 |
OutputFcn(varargout) および Figure 出力 | App Designer には相当する機能がありません。 移行された App Designer アプリをインスタンス化する場合、出力は | 関数 関数 function out = MyGUIDEApp(varargin) app = MyMigratedApp(varargin{:}); out = app.UIFigure; end |
GUIDE アプリで、actxcontrol
などの関数を使用してサードパーティ コンポーネントが統合されている場合は、Recommendations for MATLAB Apps Using Java and ActiveX を参照してください。
GUIDE と App Designer のコードの違い
App Designer と GUIDE では、コードの構造、コールバックの構文、そして UI コンポーネントへのアクセスとデータ共有のための手法に違いがあります。移行後のアプリに App Designer の新しい機能を追加する場合、または App Designer のコードのスタイルと規則を使用するようにアプリを更新する場合に、これらの違いを理解していると役立ちます。次の表は、これらの違いの一部をまとめています。
相違点 | GUIDE | App Designer | 詳細 |
---|---|---|---|
Figure とグラフィックスの使用 | GUIDE では、関数 GUIDE では、関数 すべての MATLAB グラフィックス関数がサポートされています。ターゲットの座標軸を指定する必要はありません。 | App Designer では、関数 App Designer では、関数 ほとんどの MATLAB グラフィックス関数がサポートされています。 | App Designer でのグラフィックスの表示 |
コンポーネントの使用 | GUIDE では、関数 | App Designer では、独自の専用関数を使ってそれぞれの UI コンポーネントを作成します。 | アプリ作成コンポーネント UIControl オブジェクトおよびコールバックの更新 |
コンポーネントのプロパティへのアクセス | GUIDE では、 例: | App Designer では 例: | App Designer のコールバック |
アプリ コードの管理 | コードは、ローカル関数を呼び出すことのできるメイン関数として定義されます。すべてのコードが編集可能です。 | コードは MATLAB クラスとして定義されています。コールバック、補助関数およびカスタム プロパティのみが編集可能です。 | App Designer コード ビューでのコードの管理 |
コールバックの作成 | コールバックで必須の入力引数は、 例: | コールバックで必須の入力引数は、 例: | App Designer のコールバック |
データの共有 | コールバックと関数の間でデータの保存と共有を行うには、 例: | コールバックと関数の間でデータの保管と共有を行うには、カスタム プロパティを使用して変数を作成します。 | App Designer アプリ内でのデータの共有 |
移行後のアプリのコールバック コードの更新
移行後のアプリは、GUIDE スタイルのオブジェクトとコード規則を使用します。App Designer のオブジェクトとコード規則を使用するように、移行後のアプリのコールバック コードを更新することをお勧めします。コールバック コードを更新すると、最新のアプリ作成機能がサポートされるようになり、またアプリの保守が容易になります。コードを更新するには、以下の手順に従います。
App Designer の UI コンポーネントを使用する — コールバック関数で、代わりに
app
オブジェクトを使用するようにhandles
構造体への参照を更新します。handles
構造体は GUIDE アプリのUIControl
オブジェクトを表すコンバーター オブジェクトへのアクセスを提供するのに対し、app
オブジェクトは App Designer アプリの UI コンポーネントへのアクセスを提供します。たとえば、GUIDE スタイルのコールバックは、次のコードを使用してプッシュ ボタン スタイルの
UIControl
オブジェクトの背景色を設定します。handles.pushbutton1.BackgroundColor = 'red';
このコードを更新して、ボタン UI コンポーネントの背景色を直接設定します。
app.pushbutton1.BackgroundColor = 'red';
UI コンポーネントのプロパティを更新する — コールバック コードが設定するプロパティを更新します。一般に、
UIControl
オブジェクトとそれぞれに相当する UI コンポーネント オブジェクトには同じプロパティが多数あります。ただし、プロパティ名またはプロパティで受け入れる値の型にはいくつかの違いがあります。UIControl
と UI コンポーネント オブジェクトおよびプロパティの比較の詳細と、コードを更新して UI コンポーネントを使用する方法の詳細については、UIControl オブジェクトおよびコールバックの更新を参照してください。使用されないコードを削除する — コールバック関数が
hObject
、eventdata
、およびhandles
の各引数を使用しなくなったら、これらの引数を作成する移行ツールによって追加されたコードの行を削除します。[hObject,eventdata,handles] = convertToGUIDECallbackArguments(app,event);
関数 errordlg
または warndlg
などを使用して、アプリによりダイアログ ボックスが作成される場合は、uialert
や uiconfirm
など、アプリの作成用に特別に作成された最新のダイアログ ボックスを活用するために、コードを更新することもできます。詳細については、ダイアログ ボックスの更新を参照してください。
GUIDE アプリを MATLAB ファイルにエクスポート
GUIDE アプリをエクスポートすると、GUIDE の FIG ファイルおよびプログラム ファイルが単一の MATLAB プログラム ファイルで再作成されて、このアプリがプログラム アプリに変換されます。
このオプションは、次の計画がある場合に使用します。
アプリのレイアウトまたは動作に小さな変更を行う。
アプリの開発を対話的にではなくプログラムにより行う。
アプリをエクスポートするには、アプリを GUIDE で開き、[ファイル] 、 [MATLAB ファイルにエクスポート] を選択するか、MATLAB の [現在のフォルダー] ブラウザーで FIG ファイルを右クリックして [MATLAB ファイルにエクスポート] を選択します。すると、[GUIDE の移行オプション] ダイアログ ボックスが表示されます。正しい FIG ファイルが選択されていることを確認してから、[エクスポート] をクリックします。MATLAB はプログラム ファイルを作成し、ファイル名の末尾に _export
を付加します。新しいファイルには、元のコールバック コードに加え、アプリの作成とレイアウトを処理する自動生成された関数が含まれます。このようにして追加された関数の例を以下に示します。