dataset
datasetは、PC内のファイルを相対パスの集合として管理し、workから遅延ロードするためのcontextです。
resourceがCSVやログなどの静的なリソースを扱うのに対して、datasetはルートパスと、そこからの相対パスの集合を管理します。ファイル本文は必要になったタイミングで読み込むため、大量ファイルを対象にする処理で使いやすいcontextです。
大量ファイルのリネーム、大量ログの解析、プロジェクト内のアンチ実装パターンの検出、対象ファイルの抽出などに使います。
| 項目 | 説明 |
|---|---|
variable_name | workから参照する変数名です。 |
root_path | ファイル群のルートパスです。 |
encoding | ファイルを開く際のエンコードです。utf8またはsjisを指定します。 |
scan_phase | ファイルをスキャンするタイミングです。 |
scan_phase
Section titled “scan_phase”scan_phaseは、ルート配下のファイルをどのタイミングでスキャンするかを決める設定です。
| 選択肢 | 説明 |
|---|---|
Runtime auto | プログラム実行時に自動でルート配下をスキャンします。フォルダの最新状態が毎回反映されます。 |
Direct choose | GUI上で事前にファイルを手動選択します。実行時の前処理を減らせます。 |
Runtime autoでは、workの実行前にルート配下のファイルを検索し、対象ファイルの相対パスを取得します。フィルター条件を指定している場合は、条件に一致したファイルだけが対象になります。
Direct chooseでは、datasetの詳細画面で対象ファイルを直接選択します。対象を決め打ちにするため、work実行時の前処理はなく、常に選択済みの相対パスが対象になります。
フィルター条件
Section titled “フィルター条件”スキャン対象をフィルタリングする条件を設定できます。
| 条件項目 | 説明 |
|---|---|
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階層目の.gitとentity*を除外し、2階層目はsrcだけを走査します。見つかったファイルのうち、*Impl.javaに一致するものを対象にし、*Abstract*を含むファイルは除外します。
Direct chooseの操作フロー
Section titled “Direct chooseの操作フロー”Direct chooseでは、GUI上で対象ファイルを選んで確定します。
- Scanボタンでルート配下を走査します。
スキャンが終わると、対象候補がツリー表示されます。ノードにはDIRまたはFILEが表示され、ノードの種類を示します。DIRの右側にある+ボタンを押すと、ディレクトリを展開して下位階層を表示できます。
- FILEをクリックすると個別ファイルを選択できます。
- DIRをクリックすると、そのディレクトリ配下の全ファイルを選択できます。
選択状態は、DIRまたはFILEの色で区別されます。
| 状態 | 表示 |
|---|---|
| 未選択 | 半透明 |
| ファイル選択 | FILEが濃いピンク |
| ディレクトリ配下をすべて選択 | DIRが濃い緑 |
| ディレクトリ配下を一部選択 | DIRが黄色 |
- Flatボタンで、選択中のファイルを一覧表示できます。
FlatとTreeはトグルになっており、いつでも表示を切り替えられます。
- 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が必要です。 |
scan_phaseの使い分け
Section titled “scan_phaseの使い分け”| ユースケース | 推奨 |
|---|---|
| フォルダにファイルを入れる都度、最新状態を反映したい | Runtime auto |
| 解析対象が固定で、実行速度を重視したい | Direct choose |
たとえば、フォルダ内に日々追加されるログファイルをすべて解析する場合は、Runtime autoを選ぶと、実行のたびに最新状態が反映されます。ログ以外のファイルが混ざる場合は、ファイル条件で事前に絞り込みます。
一方、プログラムプロジェクトのソース解析のように対象ファイルがほぼ固定である場合は、Direct chooseで先に対象を選んでおくと、毎回のスキャンを省略できます。