メインコンテンツ

プロジェクトのプログラムによる作成と編集

この例では、コマンド ラインを使用して、ファイルを操作するプロジェクト タスクを自動化する方法を説明します。この例では、参照プロジェクトを既存のプロジェクト ファイルから作成し、プロジェクト パスを設定し、プロジェクト ショートカットを定義する方法について説明します。また、変更されたファイル、依存関係、およびラベルを操作する方法も示します。

プロジェクトを開く

サンプル プロジェクト Times Table App は Git™ ソース管理下にあります。プロジェクト オブジェクトを作成するには、currentProject または openProject を使用します。

mainProject = openProject("TimesTableApp");

プロジェクトの起動の問題を確認するには、listStartupIssues関数を使用します。

startupIssues = listStartupIssues(mainProject)
startupIssues = 

  1×0 Issue array with properties:

    ID
    Details
    ProblemFiles
    ProjectRoot
    Exception

プロジェクトのファイルの確認

プロジェクト内のファイルを調べます。

files = mainProject.Files
files=1×13 ProjectFile array with properties:
    Path
    Revision
    SourceControlStatus
    Labels

このリストにあるファイルにアクセスするためのインデックスを使用します。たとえば、ファイル番号 9 を取得するとします。各ファイルには、ファイルのパスおよびファイルに付けられたラベルを示すプロパティがあります。

mainProject.Files(9)
ans = 
  ProjectFile with properties:

                   Path: "/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/tests/tNewTimesTable.m"
               Revision: "cfcd026e497945e43cfabb7b7acae44456c581e2"
    SourceControlStatus: Unknown
                 Labels: [1×1 matlab.project.Label]

ファイル番号 9 について、Git の最新バージョンを取得します。

mainProject.Files(9).Revision
ans = 
"cfcd026e497945e43cfabb7b7acae44456c581e2"

ファイル番号 9 のラベルを調べます。

mainProject.Files(9).Labels
ans = 
  Label with properties:

            File: "/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/tests/tNewTimesTable.m"
        DataType: "none"
            Data: []
            Name: "Test"
    CategoryName: "Classification"

名前を指定して、特定のファイルを取得します。

myfile = findFiles(mainProject,"source/timestable.mlapp",OutputFormat="ProjectFile")
myfile = 
  ProjectFile with properties:

                   Path: "/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/source/timestable.mlapp"
               Revision: "cfcd026e497945e43cfabb7b7acae44456c581e2"
    SourceControlStatus: Unmodified
                 Labels: [1×1 matlab.project.Label]

新規プロジェクトの作成

プロジェクト Times Table Game を作成します。このプロジェクトは、Times Table App におけるゲーム ロジックを保存します。プロジェクト Times Table Game は、プロジェクト参照を通じてプロジェクト Times Table App で使用されます。

プロジェクトを作成し、プロジェクト名を設定します。

timesTableGameFolder = fullfile(mainProject.RootFolder,"refs","TimesTableGame");
timesTableGame = matlab.project.createProject(timesTableGameFolder);
timesTableGame.Name = "Times Table Game";

ゲーム ロジック Times Table App をメインのプロジェクト フォルダーから新しいプロジェクト フォルダーに移動し、プロジェクト Times Table Game に追加します。次に、ファイルをプロジェクト Times Table App から削除します。

movefile("../../source/timesTableGame.m");
addFile(timesTableGame,"timesTableGame.m");

reload(mainProject);
removeFile(mainProject,"source/timesTableGame.m");

プロジェクト Times Table Game のルート フォルダーをプロジェクト Times Table Game のパスに追加します。これによって、プロジェクト Times Table App またはプロジェクト Times Table App を参照するプロジェクトが読み込まれると、timesTableGame.m ファイルが使用可能になります。

reload(timesTableGame);
addPath(timesTableGame,timesTableGame.RootFolder);

プロジェクト参照の追加

新しいプロジェクト Times Table Game をプロジェクト参照としてプロジェクト Times Table App に追加します。これにより、プロジェクト Time Table App では、プロジェクト Times Table Game 内のファイルを表示、編集、および実行できるようになります。

reload(mainProject);
addReference(mainProject,timesTableGame);

変更されたファイルの取得

プロジェクト Times Table App で変更されたファイルをすべて取得します。このリストを [ソース管理] パネルの [変更済みファイル] セクションと比較します。[ソース管理] アイコンがサイドバーにない場合は、[パネルをさらに開く] Open more panels icon ボタンをクリックして追加します。

新しいプロジェクト Times Table Game のファイルに加え、プロジェクト Times Table App で削除されたファイルと変更されたファイルを表示できます。

modifiedfiles = listModifiedFiles(mainProject)
modifiedfiles=1×3 ProjectFile array with properties:
    Path
    Revision
    SourceControlStatus
    Labels

リストの 2 番目の変更済みファイルを取得します。SourceControlStatus プロパティが Added であるか確認します。関数 listModifiedFiles は、追加、変更、競合、削除などが行われたすべてのファイルを返します。

modifiedfiles(2)
ans = 
  ProjectFile with properties:

                   Path: "/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/resources/project/LUgSFhI3RPozNzNcutxrczVe6f0/wiUUGFF1ZwLLpv-eW40QMm3iBrcd.xml"
               Revision: ""
    SourceControlStatus: Added

個々のファイルをクエリする前に、ソース管理のステータスを更新します。listModifiedFiles を呼び出す前にこの作業を行う必要はありません。

refreshSourceControl(mainProject)

Unmodified になっているすべてのプロジェクト ファイルを取得します。関数 ismember を使用して、プロジェクト Times Table App で変更されていないファイルを示す logical 配列を取得します。この配列を使用して変更されていないファイルのリストを取得します。

unmodifiedStatus = ismember([mainProject.Files.SourceControlStatus],matlab.sourcecontrol.Status.Unmodified);
mainProject.Files(unmodifiedStatus)
ans=1×8 ProjectFile array with properties:
    Path
    Revision
    SourceControlStatus
    Labels

ファイルの依存関係の取得

依存関係の分析を実行して、プロジェクト ファイル間の既知の依関係を更新します。

updateDependencies(mainProject)

プロジェクト Times Table App の依存関係のリストを取得します。Dependencies プロパティには、MATLAB digraph オブジェクトとして保存されている、プロジェクト ファイル間の依存関係のグラフが含まれます。

g = mainProject.Dependencies
g = 
  digraph with properties:

    Edges: [2×1 table]
    Nodes: [8×1 table]

timestable.mlapp ファイルに必要なファイルを取得します。

requiredFiles = bfsearch(g, which("source/timestable.mlapp"))
requiredFiles = 1×1 cell array
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/source/timestable.mlapp'}

グラフ内のすべてのタイプの最上位ファイルを取得します。関数 indegree は、他のファイルと依存関係にないすべてのファイルを検索します。

top = g.Nodes.Name(indegree(g)==0)
top = 7×1 cell
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/requirements/TimesTableRequirements.mlx'}
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/tests/tAnswerIsCorrect.m'               }
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/tests/tCurrentQuestion.m'               }
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/tests/tNewTimesTable.m'                 }
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/editTimesTable.m'             }
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/openRequirementsDocument.m'   }
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/runTheseTests.m'              }

依存関係のある最上位ファイルを取得します。関数 indegree は、他のファイルと依存関係にないすべてのファイルを検索し、関数 outdegree は依存関係があるすべてのファイルを検索します。

top = g.Nodes.Name(indegree(g)==0 & outdegree(g)>0)
top = 2×1 cell
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/requirements/TimesTableRequirements.mlx'}
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/editTimesTable.m'             }

転置されたグラフを作成し、影響を受けた (または "上流の") ファイルを見つけます。関数 flipedge を使用して、グラフ内のエッジの方向を反転します。

transposed = flipedge(g)
transposed = 
  digraph with properties:

    Edges: [2×1 table]
    Nodes: [8×1 table]

impacted = bfsearch(transposed,which("source/timestable.mlapp"))
impacted = 3×1 cell
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/source/timestable.mlapp'                }
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/requirements/TimesTableRequirements.mlx'}
    {'/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/editTimesTable.m'             }

依存関係や孤立したファイルの数など、プロジェクト ファイルに関する情報を取得します。

averageNumDependencies = mean(outdegree(g));
numberOfOrphans = sum(indegree(g)+outdegree(g)==0);

依存関係グラフの並べ替え順序を変更して、プロジェクトの変更を最下位から順番に表示します。

ordered = g.Nodes.Name(flip(toposort(g)));

ショートカットのクエリ

ショートカットを使用して、頻繁に実行するタスクや頻繁にアクセスするファイルを保存したり、起動タスクと終了タスクを自動化できます。

プロジェクト Times Table App のショートカットを取得します。

shortcuts = mainProject.Shortcuts
shortcuts=1×4 Shortcut array with properties:
    Name
    Group
    File

リスト内のショートカットを調べます。

shortcuts(2)
ans = 
  Shortcut with properties:

     Name: "Edit Times Table App"
    Group: "Launch Points"
     File: "/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/editTimesTable.m"

ショートカットのファイル パスを取得します。

shortcuts(3).File
ans = 
"/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/openRequirementsDocument.m"

ショートカット リスト内のすべてのファイルを調べます。

{shortcuts.File}'
ans=4×1 cell array
    {["/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/source/timestable.mlapp"             ]}
    {["/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/editTimesTable.m"          ]}
    {["/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/openRequirementsDocument.m"]}
    {["/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/runTheseTests.m"           ]}

ファイルのラベル

char 型のラベルの新しいカテゴリを作成します。

Times Table App プロジェクト内のすべてのラベルとラベル カテゴリを表示するには、プロジェクト ツールストリップで [設定] をクリックします。[ラベル] セクションには、組み込みラベルと新しい Engineers カテゴリが表示されます。

createCategory(mainProject,"Engineers","char")
ans = 
  Category with properties:

        SingleValued: 0
            DataType: "char"
                Name: "Engineers"
    LabelDefinitions: [1×0 matlab.project.LabelDefinition]

新しいカテゴリに新しいラベルを定義します。

category = findCategory(mainProject,"Engineers");
createLabel(category,"Bob");

新しいラベルのラベルの定義オブジェクトを取得します。

ld = findLabel(category,"Bob")
ld = 
  LabelDefinition with properties:

            Name: "Bob"
    CategoryName: "Engineers"

ラベルをプロジェクト ファイルに追加します。ラベルは [プロジェクト] パネルの [ラベル] 列に表示されます。

myfile = findFile(mainProject,"source/timestable.mlapp");
addLabel(myfile,"Engineers","Bob");

特定のラベルを取得し、テキスト データをそのラベルに付加します。

label = findLabel(myfile,"Engineers","Bob");
label.Data = "Email: Bob.Smith@company.com"
label = 
  Label with properties:

            File: "/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/source/timestable.mlapp"
        DataType: "char"
            Data: 'Email: Bob.Smith@company.com'
            Name: "Bob"
    CategoryName: "Engineers"

ラベル データを取得し、変数に保存します。

mydata = label.Data
mydata = 
'Email: Bob.Smith@company.com'

double データ型の新しいラベル カテゴリを作成します。このデータ型は通常、MATLAB で数値データに使用されます。

createCategory(mainProject,"Assessors","double");
category = findCategory(mainProject,"Assessors");
createLabel(category,"Sam");

指定したファイルに新しいラベルを付加し、データ値 2 をそのラベルに割り当てます。

myfile = mainProject.Files(10);
addLabel(myfile,"Assessors","Sam",2)
ans = 
  Label with properties:

            File: "/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/editTimesTable.m"
        DataType: "double"
            Data: 2
            Name: "Sam"
    CategoryName: "Assessors"

ラベル Sam をもつすべてのファイルを検索します。

SamFiles= findFiles(mainProject,label="Sam")
SamFiles = 
"/tmp/Bdoc25a_2974004_1222812/tpf2409a74/matlab-ex45698718/TimesTableApp/utilities/editTimesTable.m"

プロジェクトを閉じる

プロジェクトを閉じて、シャットダウン スクリプトを実行し、未保存のファイルがないか確認します。

close(mainProject)

プロジェクトのシャットダウンの問題を確認するには、listShutdownIssues関数を使用します。

shutdownIssues = listShutdownIssues(mainProject)
shutdownIssues = 

  1×0 Issue array with properties:

    ID
    Details
    ProblemFiles
    ProjectRoot
    Exception

参考

トピック