bio_img_japan-community

MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

プレーンテキスト化された MATLAB アプリが R2026b に登場: Diff が読める

※この投稿は 2026 年 9 月 28 日に MATLAB Graphics and App Building へ 投稿されたものの抄訳です。
—
Portrait of Daniel Cuccia Guest Writer: Daniel Cuccia
Danny は App Building Infrastructure チームのソフトウェアエンジニアです。2018 年に App Designer チームで MathWorks でのキャリアをスタートしました。アプリのコード生成アーキテクチャのような機能に取り組む中で、MATLAB の内部システムがどう連携しているかへの理解が深まり、現在はインフラストラクチャチームで MATLAB におけるアプリのアーキテクチャそのものの仕組みに携わっています。 オーディオ工学、シミュレーションプログラミング、ゲーム開発まで幅広く学んできましたが、自分が作るものを支える土台として、常にソフトウェアアーキテクチャに強く惹かれてきました。 MathWorks の外では、数えきれないほどの楽器を演奏し、スノーボードを楽しみ、家族と一緒にいつも新しい趣味を見つけています。

 


長年、App Designer アプリに対する私の密かな不満の一つは .mlapp というファイルでした。しかも、そう感じていたのは私だけではないはずです。そこにはレイアウト、コールバック、ヘルパーメソッド、アプリ全体が、単一の classdef としてひとつのバイナリファイルの中に全部詰め込まれていました。原理的には整っているし、ちょっとした簡単なアプリならそれで十分です。でも実際には、ほとんど強制されるように、私たちは何もかもをその 1 ファイルに押し込むことになり、その .mlapp ファイルはどんどん大きくなっていきました。そして「ボタンのコールバックがどこにあるかちょっと探そう」が、何千行もある classdef を探検するような作業に変わってしまったのです。
でも、本当に困ったのは大きさそのものではありませんでした。問題は 2 人が同じアプリを触ろうとしたときに起きることでした。あるいは半年後に自分のプロジェクトを開き直して、何を変えたのか確認したくなったときです。ソース管理が返してくる答えは「アプリのどこかが違います」。いや本当に助かります。
そこで少し前、私は地味ではあるけれど明確な問題を解決しようとしました。MATLAB アプリを本当に共同作業できるものにすることです。

実際に私が欲しかったもの: 読める diff

これが私の控えめな夢の全体像です。プルリクエストを開いて、こういうものを見たかったのです。
「binary file changed」ではなく。アプリ全体の再レンダリングでもなく。ただ「誰かがエミッター速度を 2 倍にした」。それならレビューし承認できます。場合によっては blame もできます、愛を込めて。
そこにたどり着くには、アプリがプレーンテキストとして存在している必要があります。人間が読んで理解でき、バージョン管理ツールが左右に並べて比較できるテキストです。それこそが新しいプレーンテキストのアプリ形式が与えてくれるものです。Save As からファイル形式を変更するか、App Designer の設定で既定値を変更すれば、アプリは App Designer が管理する 2 つのファイルになり、Git や Subversion、あるいはあなたの使っている任意のバージョン管理に気持ちよく収まります。
  • あなたのアプリの classdef と実装が入った .m ファイル:コード、ロジック、コールバックがここに入ります。
  • レイアウトと設定を保持する .xml ファイル:コンポーネントがどこにあり、どう設定されているかの情報が入ります。

何がどこに入るのか

小さなデモアプリ、ParticleGenerator を例にしましょう。.m ファイルは期待どおりのものです。読みやすいアプリコードがあり、それ以外はあまり入っていません。
そこに ない ものに注目してください。figure を配線するための儀式的なコード、各コンポーネントを手作業で配置すること、あるいはアプリをアプリたらしめるための雑多な管理処理です。私はそのアプリが 何をするか という、自分の担当部分を書けばよく、残りはフレームワークに任せられます。
レイアウト情報は .xml ファイルにあります。
こうして役割分担ができ、それは私が実際にアプリをどう捉えているかにきれいに対応します。ボタンが何をするか変えたいときは .m を開いて ResetButtonPushed を探します。そのボタンの位置や slider の 範囲を変えたいときは .xml を開いて、名前でコンポーネントを探します。振る舞いと レイアウト は、ひとかたまりの M コードの中で絡み合わなくなります。実行する前から、.xml を読むだけで、そのアプリが何でできているのかをコンポーネント単位で正確に把握できます。

ついに共同作業できる

これこそが私がこの仕組み全体を作った理由なので、少し丁寧に話させてください。
アプリが名前付きコンポーネントを持つ 2 つのテキストファイルになることで、ソース管理はようやく扱える対象を手に入れます。たとえば今週、私とチームメイトの両方が ParticleGenerator を触っているとします。 私は各フレームで particle を 進める tick ループの性能改善に取り組み、フレームごとのコストを削ろうとしています。一方で相手は新しい調整項目として重力スライダーを追加し、私がハードコードした値のままではなく、粒子への引力を調整できるようにしています。
レイアウト部分の変更はそのまま入ります。新しいスライダーは .xml の中で独立した名前付きブロックになっていて、私の作業にはほとんど触れずに既存のコントロールの隣へ収まります。別のファイル、別の場所なので、会話すら要りません。
実際に衝突するのは tick の中の 1 行だけです。gravity*dt が毎フレーム無駄に再計算されていることに気づき、定数にまとめました。相手はその同じ gravity = -55 の行を、新しいスライダーから値を読む形に置き換えました。2 人で 1 行を触れば、Git にはどちらを採るか決められません。
.mlapp では、これがつらいケースでした。ソース管理だけでは何もできず、マージできないバイナリの塊があるだけでした。MATLAB の Comparison Tool なら少なくとも 2 つの版を見比べられましたが、解決方法は左か右かの二者択一で、自分のアプリを取るか相手のものを取るかで、両方は取れませんでした。私の最適化 と 相手のスライダーを一度に両立させる方法はなかったのです。
今ではこれは普通のコードマージで、両方のアイデアが一緒にあるべきなのは明らかです。私は事前計算したステップを残し、相手は調整可能な値を残し、その 2 つはただ……組み合わさるのです。
両方を読み、両方の意図を理解し、ほかの MATLAB ソースと同じように 1 行ずつ突き合わせて調整しました。誰かの午後が丸ごと上書きされることはありませんでした。
変更が小さいときは、一目で把握できます。この記事の冒頭にあるこのスライダー調整がまさにそれで、<Value> が 1 から 2 に変わった、それだけがレビューで語るべき全てです。半年後でも、git blame はバイナリの塊に肩をすくめる代わりに、正確な行と正確なコミットを指し示してくれます。それが、問い直せる履歴と、ただ信じるしかない履歴の違いです。

データ形式を選ぶ

経験豊富なエンジニアが集まる部屋の前に立って、新しいファイル形式は XML を使いますと発表したことはありますか。 私はあります。穏やかには済みませんでした。MATLAB のエンジニアや科学者は M コードを日常そのものとしているので、アプリの一部を別の場所に、しかも山括弧付きで置くと提案すれば、もっともな疑問がいくつも出てきます。すでに .m がアプリのコードなのなら、なぜレイアウトもそこに置かないのか、というわけです。
これが私の出した答えであり、今でもそう答えています。レイアウトは本当の意味でコードではありません。それは記述です。ここにコンポーネントがあり、こう設定され、ここに配置されている、という情報です。.m はアプリが何をするかを表します。.xml はアプリが何であるかを表します。役割が違う 2 つのものは、別々の 2 ファイルに分かれているほうがうまくいくと分かったのです。
すると前のほうにいた誰かが、私がひそかに待っていた質問をしてくれました。レイアウトが MATLAB 上で実行される必要がないなら、アプリの起動は速くなるのか。 速くなります。その .xml には静的な記述が入っているため、MATLAB が裏でまだ立ち上がっている最中でも、アプリの見た目は描画され、反応よく感じられるのです。
だから、全部をさらに M コードにするわけではありません。そして山括弧はどうかって。私はそれらが tagging して付いてくるのも嫌ではありませんでした。

試してみてください

「binary file changed」という行を目を細めて見つめながら、もっとましなものがあればと思ったことがあるなら、これはあなたのためのものです。MATLAB アプリを Notepad++ で開いて、ちょっとした typo を直したいと思ったことがあるなら、その願いにも応えられます。疑問があるなら、ここでは書き切れなかった答えが documentation にあります。App Designer のアプリを開き、新しいプレーンテキスト形式で保存し、小さな変更を加えてみてください。コンポーネントを動かす、コールバックを少しいじる、ラベル名を変える、そして diff を見ます。その「お、これ本当に読めるぞ」という小さな瞬間こそが、すべての目的です。
App Designer の新しいプレーンテキスト形式は R2026b で利用できます。誇れる diff を作ってください。そして……誇れないものは blame してください……愛を込めて。

 

|
  • print

评论

要发表评论,请点击 此处 登录到您的 MathWorks 帐户或创建一个新帐户。