Main Content

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

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

プロジェクト オブジェクトの作成

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

mainProject = openProject("TimesTableApp");

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

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

files = mainProject.Files
files=1×13 object
  1x13 ProjectFile array with properties:

    Path
    Revision
    SourceControlStatus
    Labels

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

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

                   Path: "/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/utilities"
               Revision: "6763d1e850bf8b6d22105fa4c101aecdd8598749"
    SourceControlStatus: NotUnderSourceControl
                 Labels: [1x0 matlab.project.Label]

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

mainProject.Files(10).Revision
ans = 
"6763d1e850bf8b6d22105fa4c101aecdd8598749"

10 番目のファイルのラベルを調べます。

mainProject.Files(10).Labels
ans = 

  1x0 Label array with properties:

    File
    DataType
    Data
    Name
    CategoryName

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

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

                   Path: "/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/source/timestable.mlapp"
               Revision: "6763d1e850bf8b6d22105fa4c101aecdd8598749"
    SourceControlStatus: Unmodified
                 Labels: [1x1 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 で変更されたファイルをすべて取得します。このリストを、プロジェクト内の [ファイル]、[変更済み] ビューと比較します。新しいプロジェクト Times Table Game のファイルに加え、プロジェクト Times Table App で削除されたファイルと変更されたファイルを表示できます。

modifiedfiles = listModifiedFiles(mainProject)
modifiedfiles=1×37 object
  1x37 ProjectFile array with properties:

    Path
    Revision
    SourceControlStatus
    Labels

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

modifiedfiles(2)
ans = 
  ProjectFile with properties:

                   Path: "/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/refs/TimesTableGame/resources/project/EEtUlUb-dLAdf0KpMVivaUlztwA/cN1L_1T9--F1Egg1H3sMiAXbd0Md.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 object
  1x8 ProjectFile array with properties:

    Path
    Revision
    SourceControlStatus
    Labels

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

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

updateDependencies(mainProject)

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

g = mainProject.Dependencies
g = 
  digraph with properties:

    Edges: [5x1 table]
    Nodes: [9x1 table]

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

requiredFiles = bfsearch(g, which('source/timestable.mlapp'))
requiredFiles = 2x1 cell
    {'/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/source/timestable.mlapp'             }
    {'/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/refs/TimesTableGame/timesTableGame.m'}

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

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

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

top = g.Nodes.Name(indegree(g)==0 & outdegree(g)>0)
top = 4x1 cell
    {'/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/requirements/TimesTableRequirements.mlx'}
    {'/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/tests/tAnswerIsCorrect.m'               }
    {'/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/tests/tCurrentQuestion.m'               }
    {'/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/tests/tNewTimesTable.m'                 }

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

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

    Edges: [5x1 table]
    Nodes: [9x1 table]

impacted = bfsearch(transposed,which('source/timestable.mlapp'))
impacted = 2x1 cell
    {'/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/source/timestable.mlapp'                }
    {'/tmp/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/requirements/TimesTableRequirements.mlx'}

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

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 object
  1x4 Shortcut array with properties:

    Name
    Group
    File

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

shortcuts(2)
ans = 
  Shortcut with properties:

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

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

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

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

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

ファイルのラベル

char 型のラベルの新しいカテゴリを作成します。プロジェクト Times Table App では、新しい Engineers カテゴリが [ラベル] ペインに表示されます。

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

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

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

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

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

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

            Name: "Bob"
    CategoryName: "Engineers"

ラベルをプロジェクト ファイルに追加します。プロジェクト Times Table App でファイルを選択すると、"ラベル エディター" ペインにこのラベルが表示されます。

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/Bdoc23b_2453134_1221979/tp6c4f2f43/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/Bdoc23b_2453134_1221979/tp6c4f2f43/matlab-ex45698718/TimesTableApp/utilities/editTimesTable.m"
        DataType: "double"
            Data: 2
            Name: "Sam"
    CategoryName: "Assessors"

プロジェクトを閉じる

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

close(mainProject)

参考

関連するトピック