# General Translation Integrations: 使用箇所の検出
URL: https://generaltranslation.com/ja/docs/integrations/paraglide/reference/usage-detection.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: 原文ファイルの選択方法、インポート文の解決方法、Paraglide JS メッセージの使用箇所の検出方法について説明します。使用箇所の検出に関するリファレンスです。

[`paraglide-context`](/docs/integrations/paraglide/reference/paraglide-context) や [`collectContext`](/docs/integrations/paraglide/reference/collect-context) は、実行時にアプリのソースコードを読み取るだけで、バンドラーを実行することはありません。Node.js 20 以降の環境で、Paraglide JS 1、2、3 に対応しています。

## 仕組み [#how-it-works]

| ステップ                              | 決定する内容                             |
| --------------------------------- | ---------------------------------- |
| [ファイル](#files)                    | 解析対象とする原文ファイル。                    |
| [インポート文](#imports)                | 最終的に Paraglide JS ファイルを参照するインポート文。 |
| [出力ディレクトリ](#outdirs)              | Paraglide JS の出力先となるディレクトリ。        |
| [inlang プロジェクト](#inlang-projects) | メタデータファイルを生成する対象のメッセージファイル。        |
| [使用箇所](#usages)                   | 各メッセージが使用されている箇所。                  |

## ファイル [#files]

解析対象となるのは、[`include`](/docs/integrations/paraglide/reference/collect-context#include) に該当するファイルから、[`exclude`](/docs/integrations/paraglide/reference/collect-context#exclude)、`node_modules`、ビルドやフレームワークの出力、`.gitignore` で無視されるファイルを除いたものです。プロジェクト外のファイルも、`include` に指定されていれば解析されます (例：`../shared`) 。

解析できないファイルは、警告を出したうえでスキップされます。JavaScript、TypeScript、JSX 以外の形式については、[サポートされているファイル形式](/docs/integrations/paraglide/reference/file-formats)を参照してください。

## インポート文 [#imports]

インポート文は、そのテキストだけでマッチングされることはありません。各インポート文は解決されたうえで再エクスポート (ESM および CommonJS) をたどり、最終的に Paraglide JS のファイルに行き着いた場合にのみカウントされます。

インポート文は、アプリのバンドラーと同じ方法で解決されますが、バンドラー自体は実行されません。エイリアスは次の順序で取得されます。

1. [`alias`](/docs/integrations/paraglide/reference/collect-context#alias) オプション。
2. 最初に見つかった `vite.config.*`、`webpack.config.*`、または `rspack.config.*`。Vite の設定はプロジェクト自身の Vite で解決されるため、プラグインによるエイリアス (SvelteKit の `$lib`) やルートパス (`/src/a.js`) も機能します。webpack または rspack の設定はインポートして読み込まれるため、設定ファイルが TypeScript の場合は、TypeScript を実行できるバージョンの Node.js が必要です。この場合、`name$` 形式およびワイルドカード (`"@/*"`) のエイリアスが機能します。
3. `tsconfig.json` の `paths` と `package.json` の `imports`。

バンドラーの設定を読み込めなかった場合、解決できなかったインポート文は未宣言のエイリアスである可能性があるため、警告に一覧表示されます ([インポート文の解決](/docs/integrations/paraglide/guides/resolving-imports)を参照) 。

### 自動インポート

インポートせずに使用されている名前は、unplugin-auto-import、unplugin-vue-components、Nuxt の `.d.ts` ファイルから読み取られます。それ以外の名前は [`autoImports`](/docs/integrations/paraglide/reference/collect-context#auto-imports) で宣言してください。

## 出力ディレクトリ [#outdirs]

Paraglide JS の出力ディレクトリは自動的に検出されるため、1 つのアプリ内に複数の Paraglide JS プロジェクトがあっても、特別なセットアップは不要です。ディスク上のファイルか仮想モジュールかを問わず、インストール済みの Paraglide JS が生成する内容と完全に一致するディレクトリが、出力ディレクトリとして認識されます。Paraglide JS 1 の場合は、構造が同じであれば認識されます。

出力ディレクトリのように見えてもこのチェックを通過しないディレクトリは、警告が出たうえでスキップされます。それでも使用したい場合は、[`outdirs`](/docs/integrations/paraglide/reference/collect-context#outdirs) に指定してください。出力ディレクトリが 1 つも見つからない場合は、使用箇所を記録できないことを示す警告が表示されます。

## inlang プロジェクト [#inlang-projects]

各出力ディレクトリは 1 つの inlang プロジェクトに対応し、そのプロジェクトのベースロケールのメッセージファイルにメタデータが付与されます。プロジェクトは次の優先順位で決定されます。

1. 出力ディレクトリの `README.md` に、コンパイル元として記載されているプロジェクト。
2. [`root`](/docs/integrations/paraglide/reference/collect-context#root) からモノレポのルートまでの間に `*.inlang` ディレクトリが 1 つだけある場合は、そのディレクトリ。
3. 該当するディレクトリが複数ある場合は、出力ディレクトリのメッセージを最も多く定義しているもの。

[`inlangProjects`](/docs/integrations/paraglide/reference/collect-context#inlang-projects) を指定すると、この探索は行われず、指定した値が使われます。プロジェクトが見つからない出力ディレクトリについては警告が表示され、そのメッセージのメタデータファイルは生成されません。

## 使用箇所 [#usages]

値は typescript-eslint のスコープ解析により、次のような経路で追跡されます。

* エイリアス (`const t = m`) 、分割代入、再代入
* オブジェクトのスプレッド
* 関数の引数とパラメータのデフォルト値
* コンポーネントの props (モジュールをまたぐ場合やテンプレートから渡される場合を含む) 
* 計算されたキー (`m["a"]`、`m[c ? "a" : "b"]`) 

メッセージは、次のいずれかに該当する箇所で使用されているとみなされます。

| 使用方法              | 例                 |
| ----------------- | ----------------- |
| 呼び出し              | `m.tos()`         |
| いずれかのメソッドを介した呼び出し | `m.tos.parts()`   |
| 呼び出しを伴わない参照       | `message={m.tos}` |

生成されたカタログに存在しないメッセージが使用されている場合、その箇所は警告として一覧表示されます。

デフォルトでは、`messages.js`、`messages/` 内のモジュール、`runtime.js`、`server.js`、`registry.js`、および Paraglide のフレームワークアダプターパッケージが Paraglide JS のファイルとして扱われます ([Targets](/docs/integrations/paraglide/reference/extension-api#targets) を参照) 。

## 制限事項 [#limits]

* **エイリアス:** バンドラーの設定から取得できるのはエイリアスと Vite のルートのみで、プラグインの仮想モジュールは対象外です。Next.js、Nuxt、Astro の設定は読み取られないため、これらのエイリアスは `tsconfig.json` から取得されます。
* **その他の対象:** ランタイム関数やアダプターコンポーネントの使用箇所は解析されますが、書き込みは行われません。書き込み先となるキーを持つのはメッセージだけです。
* **値の追跡:** 戻り値、Reactコンテキスト、`provide`/`inject`、配列、後から代入されるオブジェクトの時点で追跡は止まります。無条件に再代入された後の読み取りでは、新しい値のみが参照されます。ループはモデル化されません。
* **props:** props は Svelte、Vue、Astro のコンポーネント内まで追跡されますが、`app.component()` で登録されたコンポーネントや、`<svelte:component this={X}>` でレンダリングされたコンポーネントは追跡されません。
* **計算されたキー:** 候補が 16 個を超えるキーは `*` として扱われ、どのメッセージにも一致しません。
* **CommonJS:** モジュールのトップレベル以外にあるエクスポートは追跡されません。
* **壊れた Astro ファイル:** 閉じられていない `{` があると、それ以降の要素の残りは失われます。`@astrojs/compiler` のみを使用している場合(Astro 6 以前)は、その行の残りが失われます。

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
