managing and sharing matlab code - mathworks · 2 2014年7月 ieee spectrumによる、...

31
1 © 2015 The MathWorks, Inc. MATLAB入門 ~開発向けプログラミング編~ MathWorks Japan アプリケーションエンジニアリング部 テクニカルコンピューティング 大開 孝文

Upload: others

Post on 24-Jul-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

1© 2015 The MathWorks, Inc.

MATLAB入門~開発向けプログラミング編~

MathWorks Japan

アプリケーションエンジニアリング部 テクニカルコンピューティング

大開 孝文

Page 2: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

2

2014年7月IEEE Spectrumによる、プログラミング言語の人気調査(12種類の項目での結果)

結果: MATLABがC, C++, Javaなどの従来からの汎用言語と並び、10位にランクイン

Data sources: Google, CareerBuilder, IEEE Xplore, Github, and more.

プログラミング言語としてのMATLAB

Page 3: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

3事例(HTML)

ソナーのマルチ・ビーム測深機から得られるデータを解析するソフトウェアの開発と配布

Challenge科学者は海洋学の生データ(テラバイト単位のサイズ)を処理して、分析することが可能

Solution MATLABを使って

ソナーのマルチ・ビーム測深機から得られるデータを信号処理、解析、可視化の高品質なソフトウェアを作成

Results アルゴリズム開発が促進

何十万ものコード行は、効率化、再利用

MATLABを使うことで、同等のコードをCで記述するコード量を75%削減(MATLAB 27万行)

“MATLABを使うことで、アルゴリズムの開発、

計算結果の可視化、何度もアルゴリズムを洗練

することができたので、

MATLABはソフトウェアを開発するための理想

的な環境であることがわかりました。."

Jean-Marie Augustin

Ifremer

Page 4: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

4

はじめに

チェックイン / チェックアウト

リビジョン管理

ソース管理(Git, Subversion)

MATLAB 開発者

GitHub

協調

エンドユーザー

MATLAB ファイル データ ドキュメント

.mltbx

連携

コードの品質 /パフォーマンス

コードアナライザー デバック プロファイラー

テスト ユニットテスト

レポート生成パブリッシュ機能

.exe

Page 5: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

5

アジェンダ

MATLABスクリプトと関数

コードの品質とパフォーマンス

プログラムのテスト

ソースコントロールによるMATLABプログラミングの管理

アプリケーション、カスタムツールボックスの共有化

Page 6: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

6

MATLAB スクリプト と 関数

ファイルの先頭に注目– スクリプト: X

– 関数 : function

可変入出力が可能– varargin / varargout

– nargin/narginchk : 入力数のチェック

– nargout/nargoutchk : 出力数のチェック

サブ関数の定義– スクリプト: X

– 関数 : ○

function varargout = varlist(varargin)narginchk(1, 2) % 引数の数チェックfprintf('Number of arguments: %d¥n',nargin)

for k = 1:nargin % 入力回数ループ処理val = (varargin{k}); % サイズを出力するS = whos('val'); % 変数情報の取得varargout{k} = S.class; % データ型の出力

end

Page 7: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

7

アジェンダ

MATLABスクリプトと関数

コードの品質とパフォーマンス

プログラムのテスト

ソースコントロールによるMATLABプログラミングの管理

アプリケーション、カスタムツールボックスの共有化

Page 8: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

8

MATLABのコード改善

コードの分析

デバック

入力、エラーのハンドリング

Page 9: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

9

MATLABコードのパフォーマンス測定

プロファイラ– コード内のボトルネック検出

– 相対実行時間の測定

tic/toc– コード、スクリプトの部分実行時間測定(tic~tocの間)

timeit– 関数の時間測定

– 何回も測定した時間の平均値

Video

Page 10: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

10

MATLAB コードアナライザー

コードの最適化とシンタックスエラーの回避

エディター内ので自動チェック– checkcode

フォルダー内の複数ファイルの自動実行とレポート生成

Video

Page 11: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

12

MATLAB コードのデバック

診断検出– エディター内でのグラフィカル設定

– コマンドラインでの設定

ブレイクポイントの設定

ファイル内でのステップ実行

変数のチェック

Video

Page 12: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

14

アジェンダ

MATLABスクリプトと関数

コードの品質とパフォーマンス

プログラムのテスト

ソースコントロールによるMATLABプログラミングの管理

アプリケーション、カスタムツールボックスの共有化

Page 13: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

15

なぜ、プログラミングのテストが必要か?

テストは 品質の向上、工数の削減に貢献– コードの動作チェック

– プログラミングの修正が早く着手できる

– レグレッションテスト

ユニットテストの流れ

スタート準備設定

setupOnce終了処理

teardownOnce終了

テスト 1

テスト N

:

Page 14: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

16

MATLABで効果的なコードテスト

MATLAB ユニットテストフレームワーク– スクリプトベース

– 関数ベース

– クラス(OOP)ベース

テストできる種類: テストのタイプ

テスト結果のレポート出力が可能(パブリッシュと併用)

Video

Page 15: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

17

アジェンダ

MATLABスクリプトと関数

コードの品質とパフォーマンス

プログラムのテスト

ソースコントロールによるMATLABプログラミングの管理

アプリケーション、カスタムツールボックスの共有化

Page 16: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

18

コラボレーション開発

MATLAB言語におけるコラボレーション開発の増加– 効率的にコードやアイデアを共有することによって、より速く、より多くの結果を実現

– コードを管理することの必要性

ソースコントロール環境を使うことで: – トラッキング、比較、コードを前のバージョンに戻す

– コードの共有化をするときに、コードのコピーを修正、変更をコミットする

– ハイライト表示、同時に複数の人がコード変更を行った時の解決

Page 17: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

19

ソースコントロール

MATLAB デスクトップから、コードの管理

ソースコントロールのツールの活用– GIT / Subversion とのインテグレーション

– 現在のフォルダとの連携

リビジョン間の変更の確認と競合を回避するための比較ツール

Video

Page 18: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

20

GitHub との連携事例

Page 19: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

21

アジェンダ

MATLABスクリプトと関数

コードの品質とパフォーマンス

プログラムのテスト

ソースコントロールによるMATLABプログラミングの管理

アプリケーション、カスタムツールボックスの共有化

Page 20: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

22

共有化

ドキュメント、レポートの自動生成

アプリケーション(exe)の配布

動的ライブラリ(dll)の配布

MATLAB アプリ と、カスタムToolboxのパッケージ化

MATLAB

MATLAB Compiler SDK

C/C++Excel

Add-inJava .NET

MATLAB Compiler

MATLAB

Production

Server

Standalone

Application

Video

Page 21: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

23

共通の疑問?

ユーザーにアプリ・の共有させる方法は?– インストール方法

– 使用方法

– アップデート情報

– アンインストール方法

MATLAB パスを管理する方法はどれが一番いいのか?

Page 22: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

24

ファイル共有サイト(File Exchange)にあるファイルを共有する方法

Page 23: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

25

アプリのパッケージ化

UI上のある自己完結型のアプリ

インストールファイルを一緒にアプリが提供– アプリギャラリーに登録できる簡単な配布環境とインストレーションファイル

– 自動的に依存性のファイルも含まれる

– アプリを使うための、依存しているツールボックスが表示

Video

Page 24: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

26

カスタムツールボックスのパッケージ化

単一のインストーラで、カスタムツールボックスの作成– プログラム, サンプルデータ, アプリ,ドキュメント、例題を含める

– 依存ファイルのチェックと自動的な追加

– 必要なツールボックスの表示

インストール時に、自動的にフォルダとファイルをパス上に配置

アイコンから詳細の表示

アンインストールすることもツールボックスのダイアログからの可能

Video

Page 25: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

27

まとめ

チェックイン / チェックアウト

リビジョン管理

ソース管理(Git, Subversion)

MATLAB開発者

GitHub

協調

エンドユーザー

MATLAB ファイル データ ドキュメント

.mltbx

連携

コードの品質 /パフォーマンス

コードアナライザー デバック プロファイラー

テスト ユニットテスト

レポート生成パブリッシュ機能

.exe

Page 26: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

28

大好評のMATLABの授業を、いつでも自分のPCから!

新しいトレーニング形態のお知らせ(2分だけCM)

• 必要な物は 「Webブラウザ」 だけ

• いつでも 「好きな時間に」 学習可能

• 「MATLAB基礎コース」 が日本語化

Page 27: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

29© 2015 The MathWorks, Inc.

Page 28: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

30

MATLAB開発者向けTip集

Page 29: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

31

チェックイン / チェックアウト

リビジョン管理

ソース管理(Git, Subversion)

MATLAB 開発者

GitHub

協調

エンドユーザー

MATLAB ファイル データ ドキュメント

.mltbx

連携

コードの品質 /パフォーマンス

コードアナライザー デバック プロファイラー

テスト ユニットテスト

レポート生成パブリッシュ機能

.exe

Page 30: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

32

ダイジェスト1

スクリプトと関数について– 関数: 先頭にfunction

可変入出力が可能

– varargin / varargout 入力・出力変数

– nargin/narginchk : 入力数のチェック

– nargout/nargoutchk : 出力数のチェック

不要な出力要素を抑えるときには、~

サブ関数の定義

– スクリプト: X

– 関数 : ○

コードの品質– コードアナライザー: 静的解析機能

[ホーム]タブ → コードの解析

MATLABエディタの右端の色を確認:緑がOK

– デバッカー

[エディター]タブを開く

エディターの行数の横の – をクリック:赤/黄色 の○

エラー直前で止める : dbstop if error

時間の計測– プロファイラ : プログラム全体の時間計測

[ホーム]タブ → 実行および時間の計測

– tic/toc :コマンド間の時間計測

– timeit: 単体関数の平均時間計測

Page 31: Managing and Sharing MATLAB Code - MathWorks · 2 2014年7月 IEEE Spectrumによる、 プログラミング言語の人気調査 (12種類の項目での結果) 結果: MATLABがC,

33

ダイジェスト2

共有化– ドキュメント、レポートの自動生成

[パブリッシュ]タブ → パブリッシュ

– MATLAB アプリ (2012b)

[アプリケーション]タブ → アプリケーションのパッケージ化

– カスタムToolboxのパッケージ化 (2014b)

[ホーム]タブ → アドオン → ツールボックスのパッケージ化

– アプリケーション(exe)の配布

MATLAB Compiler

[アプリケーション]タブ → アプリケーションコンパイラ

– ダイナミックライブラリ(dll)の配布

MATLAB Compiler SDK (R2015a ~ 変更)

[アプリケーション]タブ → アプリケーションコンパイラ

→ 新規作成 → ライブラリコンパイラプロジェクト

ソースコントロール対応 (R2015a -)

– Git

– Subversion(1.8)

テスト環境– ユニットテストフレームワークを提供(R2013a~)

スクリプト・関数・クラスファイルをサポート

テストケース作成

変数のタイプのチェック

結果の数値が指定の範囲内

警告が出ないかどうか

テスト実行:runtest