コンテンツにスキップ

dataset

datasetは、PC内のファイルを相対パスの集合として管理し、workから遅延ロードするためのcontextです。

resourceがCSVやログなどの静的なリソースを扱うのに対して、datasetはルートパスと、そこからの相対パスの集合を管理します。ファイル本文は必要になったタイミングで読み込むため、大量ファイルを対象にする処理で使いやすいcontextです。

大量ファイルのリネーム、大量ログの解析、プロジェクト内のアンチ実装パターンの検出、対象ファイルの抽出などに使います。

dataset追加時

項目説明
variable_nameworkから参照する変数名です。
root_pathファイル群のルートパスです。
encodingファイルを開く際のエンコードです。utf8またはsjisを指定します。
scan_phaseファイルをスキャンするタイミングです。

scan_phaseは、ルート配下のファイルをどのタイミングでスキャンするかを決める設定です。

選択肢説明
Runtime autoプログラム実行時に自動でルート配下をスキャンします。フォルダの最新状態が毎回反映されます。
Direct chooseGUI上で事前にファイルを手動選択します。実行時の前処理を減らせます。

Runtime autoでは、workの実行前にルート配下のファイルを検索し、対象ファイルの相対パスを取得します。フィルター条件を指定している場合は、条件に一致したファイルだけが対象になります。

Direct chooseでは、datasetの詳細画面で対象ファイルを直接選択します。対象を決め打ちにするため、work実行時の前処理はなく、常に選択済みの相対パスが対象になります。

スキャン対象をフィルタリングする条件を設定できます。

抽出対象パネル

条件項目説明
limit_depthスキャンする最大階層数です。未指定も可能です。
directory_filter_conditionsディレクトリの抽出条件です。階層指定とワイルドカードに対応します。
file_filter_conditionsファイルの抽出条件です。全階層を対象にワイルドカードで指定します。

ディレクトリ条件追加時 ファイル条件追加時

フィルター条件では、包含/除外の切り替え、階層指定、ワイルドカード指定を組み合わせられます。

directory_filter_conditionsは、条件を適用する階層数を指定できます。+includeは条件に一致したディレクトリを対象に含め、-excludeは一致したディレクトリ配下を走査しません。右端の入力欄には、ワイルドカードを含む条件文字列を指定できます。

file_filter_conditionsは、全階層のファイル名に対して条件を適用します。こちらも+include / -excludeとワイルドカード指定を組み合わせられます。

ディレクトリ条件
1階層目: .gitを除外
1階層目: entity*を除外
2階層目: srcのみ対象
ファイル条件
*Impl.javaを対象
*Abstract*を除外

この例では、1階層目の.gitentity*を除外し、2階層目はsrcだけを走査します。見つかったファイルのうち、*Impl.javaに一致するものを対象にし、*Abstract*を含むファイルは除外します。

Direct chooseでは、GUI上で対象ファイルを選んで確定します。

  1. Scanボタンでルート配下を走査します。

Scanボタン表示 スキャン実行時 ファイル選択(ツリー表示)

スキャンが終わると、対象候補がツリー表示されます。ノードにはDIRまたはFILEが表示され、ノードの種類を示します。DIRの右側にある+ボタンを押すと、ディレクトリを展開して下位階層を表示できます。

  1. FILEをクリックすると個別ファイルを選択できます。
  2. DIRをクリックすると、そのディレクトリ配下の全ファイルを選択できます。

ファイル選択(フォルダを展開) ファイル選択(選択状態の色分け)

選択状態は、DIRまたはFILEの色で区別されます。

状態表示
未選択半透明
ファイル選択FILEが濃いピンク
ディレクトリ配下をすべて選択DIRが濃い緑
ディレクトリ配下を一部選択DIRが黄色
  1. Flatボタンで、選択中のファイルを一覧表示できます。

ファイル選択(フラット表示)

FlatTreeはトグルになっており、いつでも表示を切り替えられます。

  1. Transferボタンで選択したファイルを確定します。

Transfer押下後(リストアップ)

datasetは、work内では$dataset.variableNameとして参照します。各要素は、ルートからの相対パスと、必要に応じて本文を読み込むための関数を持ちます。

for (const file of $dataset.workspace) {
file.fileName;
file.absolutePath;
file.relativePath;
const content = await file.content();
$println(`${file.relativePath}: ${content.length}`);
}
プロパティ説明
fileName相対パスのファイル名のみを取得します。
absolutePathルートパスから見たフルパスを取得します。
relativePathルートからの相対パスを取得します。
content()ファイルの中身を非同期で読み込みます。呼び出しにはawaitが必要です。
ユースケース推奨
フォルダにファイルを入れる都度、最新状態を反映したいRuntime auto
解析対象が固定で、実行速度を重視したいDirect choose

たとえば、フォルダ内に日々追加されるログファイルをすべて解析する場合は、Runtime autoを選ぶと、実行のたびに最新状態が反映されます。ログ以外のファイルが混ざる場合は、ファイル条件で事前に絞り込みます。

一方、プログラムプロジェクトのソース解析のように対象ファイルがほぼ固定である場合は、Direct chooseで先に対象を選んでおくと、毎回のスキャンを省略できます。