Main Content

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 の等価物に変換し、アプリのレイアウトを保持します。

A GUIDE app and an App Designer app to calculate mass. The layout and functionality of each app is the same. There are minor visual differences, such as the color of the buttons.

コールバック コードGUIDE のコールバック コードのコピーおよびユーザー定義関数を MLAPP ファイルに保持します。
チュートリアル移行したアプリに対する変更をステップ実行します。
移行レポート移行ツールで正常に完了したアクションをまとめます。アプリ固有の制限またはサポートされていない機能をリストし、推奨アクションがあれば併せて記載します。

コールバック コード

GUIDE スタイルのコールバック コードをアプリの App Designer の UI コンポーネントに対応させるために、移行ツールは convertToGUIDECallbackArguments という関数を使用します。この関数は、App Designer のコールバック引数を、コードに必要な GUIDE スタイルのコールバック引数に変換します。関数 convertToGUIDECallbackArguments は、移行された各コールバック関数の先頭に追加されます。この関数は App Designer のコールバック引数 app および event を取り、GUIDE スタイルのコールバック引数 hObjecteventdata および handles を返します。以下に例を示します。

Example of a call to the convertToGUIDECallbackArguments function inside an App Designer callback

GUIDE スタイルのコールバック引数はそれぞれ、次のように異なる目的で使用されます。

  • hObject は、コールバックの実行対象のオブジェクトのハンドルです。GUIDE アプリのコンポーネントが UIControl オブジェクトまたは ButtonGroup オブジェクトであった場合、hObjectUIControlPropertiesConverter オブジェクトまたは 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 コールバック関数を作成します。詳細については、uiradiobuttonButtonGroup を参照してください。
uistackApp Designer でのこの関数の呼び出しはサポートされていません。移行する前に、この機能がアプリにとって重要であるかどうかを判別します。App Designer での回避方法はありません。
findobjfindall および gcbo

findobjfindall または gcbo を使用してコンポーネントの参照およびプロパティの設定を行うと、エラーが発生する場合があります。UIControl オブジェクトは、同等の App Designer の UI コンポーネントに移行されます。これらの移行済みのコンポーネントのプロパティにアクセスして設定するには、UIControlPropertiesConverter オブジェクトに対して設定しなければなりません。または、関連付けられた App Designer のコンポーネント、プロパティおよび値を使用するようにコードを更新できます。

代わりに handles 構造体を使用してコンポーネントを参照するか、関連付けられた App Designer のコンポーネント、プロパティおよび値を使用するようにコードを更新します。
nargin および nargchk補助関数はアプリ メソッドに移行され、app を追加の入力引数として取ります。これにより、nargin または nargchk のロジックが誤ったものになる場合があります。チェック値を 1 だけインクリメントします。
OutputFcn(varargout) および Figure 出力

App Designer には相当する機能がありません。

移行された App Designer アプリをインスタンス化する場合、出力は Figure オブジェクトではなく、必ずアプリ オブジェクトになります。

関数 OutputFcn に、アプリに重要な初期化コードが含まれる場合、代わりに OpeningFcn の末尾にこれを追加します。

関数 OutputFcn が、アプリをインスタンス化するときに出力 (Figure オブジェクトなど) をワークスペースに割り当てるよう指定している場合は、アプリをインスタンス化する関数を作成する必要があります。以下に例を示します。

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 では、関数 figure を呼び出してアプリ ウィンドウを作成します。

GUIDE では、関数 axes を呼び出して、プロットを表示するための座標軸を作成します。

すべての MATLAB グラフィックス関数がサポートされています。ターゲットの座標軸を指定する必要はありません。

App Designer では、関数 uifigure を呼び出してアプリ ウィンドウを作成します。

App Designer では、関数 uiaxes を呼び出して、プロットを表示するための座標軸を作成します。

ほとんどの MATLAB グラフィックス関数がサポートされています。

App Designer でのグラフィックスの表示
コンポーネントの使用

GUIDE では、関数 uicontrol を使用してほとんどのコンポーネントを作成します。使用可能なコンポーネントは多くありません。

App Designer では、独自の専用関数を使ってそれぞれの UI コンポーネントを作成します。TreeGaugeTabGroupDatePicker など、より多くのコンポーネントが使用できます。

アプリ作成コンポーネント
UIControl オブジェクトおよびコールバックの更新
コンポーネントのプロパティへのアクセス

GUIDE では、setget を使用してコンポーネント プロパティにアクセスし、handles を使用してコンポーネントを指定します。

例:
name = get(handles.Fig,'Name')

App Designer では setget がサポートされていますが、コンポーネント プロパティへのアクセスにはドット表記の使用が推奨され、コンポーネントの指定には app を使用します。

例:
name = app.UIFigure.Name

App Designer のコールバック
アプリ コードの管理

コードは、ローカル関数を呼び出すことのできるメイン関数として定義されます。すべてのコードが編集可能です。

コードは MATLAB クラスとして定義されています。コールバック、補助関数およびカスタム プロパティのみが編集可能です。

App Designer コード ビューでのコードの管理
コールバックの作成

コールバックで必須の入力引数は、handleshObject、および eventdata です。

例:
myCallback(hObject,eventdata,handles)

コールバックで必須の入力引数は、app および event です。

例:
myCallback(app,event)

App Designer のコールバック
データの共有

コールバックと関数の間でデータの保存と共有を行うには、UserData プロパティ、handles 構造体、関数 guidata、関数 setappdata または関数 getappdata を使用します。

例:
handles.currSelection = selection;
guidata(hObject,handles);

コールバックと関数の間でデータの保管と共有を行うには、カスタム プロパティを使用して変数を作成します。

例:
app.currSelection = selection

App Designer アプリ内でのデータの共有

移行後のアプリのコールバック コードの更新

移行後のアプリは、GUIDE スタイルのオブジェクトとコード規則を使用します。App Designer のオブジェクトとコード規則を使用するように、移行後のアプリのコールバック コードを更新することをお勧めします。コールバック コードを更新すると、最新のアプリ作成機能がサポートされるようになり、またアプリの保守が容易になります。コードを更新するには、以下の手順に従います。

  1. App Designer の UI コンポーネントを使用する — コールバック関数で、代わりに app オブジェクトを使用するように handles 構造体への参照を更新します。handles 構造体は GUIDE アプリの UIControl オブジェクトを表すコンバーター オブジェクトへのアクセスを提供するのに対し、app オブジェクトは App Designer アプリの UI コンポーネントへのアクセスを提供します。

    たとえば、GUIDE スタイルのコールバックは、次のコードを使用してプッシュ ボタン スタイルの UIControl オブジェクトの背景色を設定します。

    handles.pushbutton1.BackgroundColor = 'red';

    このコードを更新して、ボタン UI コンポーネントの背景色を直接設定します。

    app.pushbutton1.BackgroundColor = 'red';

  2. UI コンポーネントのプロパティを更新する — コールバック コードが設定するプロパティを更新します。一般に、UIControl オブジェクトとそれぞれに相当する UI コンポーネント オブジェクトには同じプロパティが多数あります。ただし、プロパティ名またはプロパティで受け入れる値の型にはいくつかの違いがあります。UIControl と UI コンポーネント オブジェクトおよびプロパティの比較の詳細と、コードを更新して UI コンポーネントを使用する方法の詳細については、UIControl オブジェクトおよびコールバックの更新を参照してください。

  3. 使用されないコードを削除する — コールバック関数が hObjecteventdata、および handles の各引数を使用しなくなったら、これらの引数を作成する移行ツールによって追加されたコードの行を削除します。

    [hObject,eventdata,handles] = convertToGUIDECallbackArguments(app,event);

関数 errordlg または warndlg などを使用して、アプリによりダイアログ ボックスが作成される場合は、uialertuiconfirm など、アプリの作成用に特別に作成された最新のダイアログ ボックスを活用するために、コードを更新することもできます。詳細については、ダイアログ ボックスの更新を参照してください。

GUIDE アプリを MATLAB ファイルにエクスポート

GUIDE アプリをエクスポートすると、GUIDE の FIG ファイルおよびプログラム ファイルが単一の MATLAB プログラム ファイルで再作成されて、このアプリがプログラム アプリに変換されます。

このオプションは、次の計画がある場合に使用します。

  • アプリのレイアウトまたは動作に小さな変更を行う。

  • アプリの開発を対話的にではなくプログラムにより行う。

アプリをエクスポートするには、アプリを GUIDE で開き、[ファイル][MATLAB ファイルにエクスポート] を選択するか、MATLAB の [現在のフォルダー] ブラウザーで FIG ファイルを右クリックして [MATLAB ファイルにエクスポート] を選択します。すると、[GUIDE の移行オプション] ダイアログ ボックスが表示されます。正しい FIG ファイルが選択されていることを確認してから、[エクスポート] をクリックします。MATLAB はプログラム ファイルを作成し、ファイル名の末尾に _export を付加します。新しいファイルには、元のコールバック コードに加え、アプリの作成とレイアウトを処理する自動生成された関数が含まれます。このようにして追加された関数の例を以下に示します。

Generated function code to handle app creation.

参考

関連するトピック