Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

GUIDE の移行策

R2019b において、MathWorks® は将来のリリースで GUIDE を削除することを発表しました。GUIDE は、MATLAB® でアプリを作成するための独自のドラッグ アンド ドロップ環境です。GUIDE が削除された後も、既存の GUIDE アプリ (GUI) は引き続き MATLAB で動作します。また、アプリの動作を変更する必要がある場合は、アプリ プログラム ファイルの編集も引き続き可能です。

既存の GUIDE アプリの "レイアウト" の編集を続けつつ、将来の MATLAB リリースとの互換性を維持するには、次の表にリストされた推奨移行策のいずれかを使用しなければなりません。

アプリ開発でのニーズ移行策移行のやり方
場合によって行われる編集アプリを単一の MATLAB ファイルにエクスポートし、MATLAB 関数を使用してアプリのレイアウトとコードを管理します。GUIDE でアプリを開き、[ファイル][MATLAB ファイルにエクスポート] を選択します。
継続的な開発アプリを App Designer に移行します。mathworks.com にある MATLAB の GUIDE から App Designer への移行ツールを使用します。

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

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

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

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

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

アプリをエクスポートするには、アプリを GUIDE で開き、[ファイル][MATLAB ファイルにエクスポート] を選択します。MATLAB はプログラム ファイルを作成し、ファイル名の末尾に _export を付加します。新しいファイルには、元のコールバック コードに加え、アプリの作成とレイアウトを処理する自動生成された関数が含まれます。このようにして追加された関数の例を以下に示します。

App Designer への GUIDE アプリの移行

GUIDE アプリを App Designer に移行すると、アプリのレイアウトを引き続き対話的に開発できます。また、強化された UI コンポーネント セットおよび自動リフロー オプションなどの機能を活用して、アプリを画面サイズの変化に対応させることもできます。さらに、アプリを Web アプリとして作成したり、共有したりすることもできます MATLAB Compiler™ が必要)。

MATLAB 対応の GUIDE から App Designer への移行ツールは、変換プロセスを簡単にするために、R2018a で初めてリリースされました。これは、MATLAB デスクトップのアドオン エクスプローラー、または MATLAB Central™ の File Exchange から入手できます。

R2020a 以降、この移行ツールは大幅に改善され、App Designer でアプリを実行するために必要な時間と手動でのコード更新回数が劇的に削減されています。これらの機能拡張の詳細については、コールバック コードを参照してください。

このオプションは、大規模または継続的な機能開発を必要とする GUIDE アプリに使用します。

初めに使用する環境に応じて、アプリを移行する方法はいくつかあります。

  • [GUIDE のクイック スタート] ダイアログで、[既存の GUI を開く] タブをクリックします。次に、FIG ファイルを選択し、[App Designer に移行] をクリックします。GUIDE から App Designer への移行ツールがインストールされている場合は、このツールが開きます。まだインストールされていない場合は、まずこのツールをダウンロードしてインストールするように要求するダイアログ ボックスが表示されます。移行ツールで、正しい FIG ファイルが移行対象として選択されていることを確認してから、[移行] をクリックします。アプリが移行され、App Designer で自動的に開きます。

  • App Designer の [デザイナー] タブに移動します。[ファイル] セクションで、[開く][GUIDE から App Designer への移行ツールを開く] をクリックします。

移行ツールの機能

移行ツールは、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 スタイルのコールバック引数 hObjecteventdata および handles を返します。以下に例を示します。

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 が追加されます。他のアプリからのこれらのアプリに対する呼び出しを更新しなければなりません。各アプリを個別に移行します。呼び出し元のアプリで、呼び出し先のアプリの名前を新しいファイル名に更新します。
シングルトン アプリと Figure の出力App Designer アプリをシングルトンとして指定することはサポートされていません。回避方法として、アプリの移行後に App Designer で、シングルトンの動作を管理し uifigure へのハンドルを返す関数を作成します。
ラジオ ボタン、およびラジオ ボタンのコールバック

移行ツールは、ラジオ ボタン グループを親にもたないラジオ ボタン、または個別のラジオ ボタンのコールバック関数を移行しません。

App Designer でボタン グループを作成し、それにラジオ ボタンを追加します。ラジオ ボタンの選択の変更時に動作を実行するには、ボタン グループの SelectionChangedFcn コールバック関数を作成します。詳細については、uiradiobuttonButtonGroup のプロパティ を参照してください。
UIAxes オブジェクトでサポートされていないプロパティとプロット関数

移行ツールは Axes オブジェクトを UIAxes オブジェクトに変換します。ただし、一部のプロパティとプロット関数は UIAxes オブジェクトでサポートされていません。

詳細については、App Designer でのグラフィックスの表示を参照してください。

UIAxesAxes に置き換えます。たとえば、関数 OpeningFcn 内で次を行います。

  • guidata(hObject, handles) の呼び出しを見つけます。これが存在しない場合は作成してください。

  • convertToGUIDECallbackArguments の呼び出しより後、guidata の呼び出しより前で、適切な関数 axes を呼び出します。座標軸の Units プロパティを 'pixels' に設定し、その他のプロパティも設定します。

  • 座標軸を handles 構造体に追加します。

    以下に例を示します。

    % Create GUIDE-style callback args - Added by Migration Tool
    [hObject, eventdata, handles] = convertToGUIDECallbackArguments(app); %#ok<ASGLU>
    
    handles.Plot_AX = axes(app.MainFig,'Units','pixels','Position',[73 17 324 316]);
                         
    % Update handles structure
    guidata(hObject, handles);
  • アプリから UIAxes を削除します。

clfgcogetframeginputgtextmovie および 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)

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

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

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

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

function out = MyGUIDEApp(varargin)
    app = MyMigratedApp(varargin{:});
    out = app.UIFigure;            
end

GUIDE アプリで actxcontrol などの関数を使用して、サードパーティ コンポーネントが統合されている場合、代わりに使用できる代替機能の詳細については、このリリース ノートを参照してください。

新規機能の追加または 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 など、より多くのコンポーネントが使用できます。

アプリ作成コンポーネント
コンポーネントのプロパティへのアクセス

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,evendata,handles)

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

例:
myCallback(app,event)

App Designer でコールバックを記述する
データの共有

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

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

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

例:
app.currSelection = selection

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

関連するトピック