アプリケーションコンパイラのエラーについて
古いコメントを表示
アプリケーションコンパイラを使用してアプリを作成しています.
使用しているプログラムは普通に実行するのには問題はないのですが,アプリを作成してインストールして開こうとするとインデックスが配列要素数(0)を超えていますとでで上手く実行できないのですが何が問題なのでしょうか.
9 件のコメント
madhan ravi
2020 年 7 月 15 日
Would you mind posting the code?
Kaede
2020 年 7 月 15 日
Kaede
2020 年 7 月 15 日
Kenta
2020 年 7 月 15 日
how about sharing the file you made in app designer? it involves the code which returns the error.
Kaede
2020 年 7 月 15 日
Kojiro Saito
2020 年 7 月 15 日
@Kaedeさん
「インデックスが配列要素数(0)を超えています」のエラーがコードのどこで起きているのかが特定できます。デバッグ用にログ出力を有効化してみてどこでエラーが起きているか教えていただけますか?
コンパイルする際に「ログファイルの作成」にチェックを入れてログファイル名を入力してからパッケージ化すれば、アプリを実行時にログファイルが出力されるようになります。

コンパイルしているMushraという関数は、入力引数にコンフィグファイル名が必要になっていたりしませんでしょうか?
たとえば
function Mushra(filename)
%
end
のように。
その場合、ファイル名のパスをアプリ実行時に与える必要があります。
実行時にコマンドでファイルパスを入力させたくない場合、入力引数のfilenameを外してuigetfileでエンドユーザーにコンフィグファイルのパスを選択させる方法、パス指定で直書きするなどの方法があります。
function Mushra
[file,path] = uigetfile('*.txt');
config = readtable(fullfile(path, file));
% TBD
end
とか
function Mushra
%#exclude example_config.txt
config = readtable('example_config.txt');
% TBD
end
とかですかね。%#excludeプラグマはR2020aから使えますが、配布先でファイルを変更したりする場合にアプリにファイルを含めなくするおまじないです。
Kaede
2020 年 7 月 16 日
Kaede
2020 年 7 月 16 日
Kojiro Saito
2020 年 7 月 16 日
@Kaedeさん
コメントありがとうございます。コードの一部をシェアしていただいて原因がわかりました。
vararginというのは可変入力なので、入力引数が0でも1以上でも実行できるようになっています。
ただ、コードの下記の部分で1つめの入力引数(varargin{1})がファイルパスが入力されるのが前提となっています。
config = varargin{1};
if ~exist(config, 'file')
errordlg('The configuration file you have requested does not exist.');
clear global;
return;
end
ですので、「ということなのですがこれは今実行しているような
Mushra('..\mashram1\example_config.txt')
コマンドが毎回アプリ実行時に必要ということでしょうか.」
の質問の回答としては、「必要です」となります。
「インデックスが配列要素数(0)を超えています」のエラーの原因が分かりましたので、後ほどコメント欄ではなく回答欄に解決策を書かせていただきます。
採用された回答
その他の回答 (1 件)
Kaede
2020 年 7 月 16 日
0 投票
6 件のコメント
Kaede
2020 年 7 月 16 日
Kaede
2020 年 7 月 16 日
Kojiro Saito
2020 年 7 月 16 日
コメントありがとうございます。新しい回答としてコメントが入ってしまっていますね。回答についての返信のときは、「この回答についてコメント」から書くと同じスレッドでコメントが入りますので、ご留意ください。
追加質問①for_redistribution_files_onlyを開くと上の画像のフォルダに入っているのと異なっているのですが大丈夫ですか.
については、ファイルの拡張子が表示されていないだけですので、大丈夫です。
Windowsのエクスプローラーから、「表示」タブを開き、「ファイル名拡張子」のチェックボックスにチェックを入れれば、.batや.exeなどの拡張子も表示されるようになります。
追加質問②エンドユーザーには何を配ればよいでしょうか.
については、for_redistributionフォルダーにある、アプリのインストーラー(MyAppInstaller_web.exeやMyAppInstaller_mcr.exeのようなファイル名)をエンドユーザーに渡して、エンドユーザー側でインストーラーを実行させれば良いです。
追加質問③もしエンドユーザーに配布するときにメールで送るためどうしても容量が大きくなってしまうのですが,やはり方法としては圧縮が一番良いでしょうか.
については、ものにもよりますが、WebからMATLAB Runtimeをダウンロードさせるタイプのインストーラー(MyAppInstaller_web.exe)でしたらファイルサイズは3~5MBぐらいで済みます。メールでも添付できるサイズかと。MATLAB Runtimeもインストーラーに含めるタイプのインストーラー(MyAppInstaller_mcr.exe)でしたら、数百MB~GBぐらいになってしまいます。この場合は、One DriveとかDropboxとかのファイル共有サービスを使ったほうが良いですね。
いずれにしても、インストーラーはバイナリファイルですので、圧縮してもそれほどファイルサイズは変わらないです。
もし、エンドユーザーの方にダウンロードやインストールをさせたくない場合、同じMATLAB Compilerを使ってWebアプリにするという方法もあります。
MATLAB本体のApp Designerというツールを使ってGUIアプリを作成し、それをMATLAB CompilerでWebアプリに変換し、サーバーアプリケーションとして動かします。エンドユーザーの方はWebブラウザでURLをクリックするだけでそのGUIアプリを使うことができます。
Kaede
2020 年 7 月 17 日
Kojiro Saito
2020 年 7 月 17 日
・App DesignerでGUIアプリを作成
「新規作成」→「アプリ」をクリックし、App Designerツールを起動します。

ドラッグ&ドロップでGUIレイアウトを配置し、コールバックでGUIを操作したときの制御を記述します。
・GUIアプリを作り終えたら、「共有」から「Webアプリ」をクリックしてWebアプリ(ファイル拡張子はctf)に変換します。

・開発用MATLAB Web App Serverをインストール
下記のドキュメントの手順に沿って、MATLAB Compilerのインストールフォルダーに含まれている開発用MATLAB Web App Serverのインストーラーを展開先のマシンに持っていき、開発用MATLAB Web App ServerとMATLAB Runtimeをインストールします。
・開発用MATLAB Web App Serverのセットアップ
下記のドキュメントの手順に沿って開発用MATLAB Web App Serverをサービスに登録し、起動します。
・Webアプリを開発用MATLAB Web App Serverにデプロイ
Webアプリ(.ctf)を展開先のマシンのappsフォルダーに置きます。
例: C:\ProgramData\MathWorks\webapps\R2020a\apps
・エンドユーザーからWebブラウザでアクセス
エンドユーザーのPCやタブレットで、Webブラウザを開き、URLを入力します。
例えば、展開先のサーバー名がserverというホスト名の場合、
http://server:9988
でWebアプリを開けます。
必要に応じてエンドユーザーからのホスト名解決やファイアウォールでのTCPポートの開放を行う必要があります。
Kaede
2020 年 7 月 22 日
カテゴリ
ヘルプ センター および File Exchange で MATLAB Compiler についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!






