# python: derive の使い方 URL: https://generaltranslation.com/ja/docs/python/tutorials/derive.mdx --- title: derive の使い方 description: 語の一致、再利用可能なコンテンツ、静的解析に derive を活用する方法 --- ## `derive` とは? [`derive`](/docs/python/api/derive) は、GT CLI の静的解析でコンテンツを識別できるようにするための恒等関数です。CLI がコードをスキャンすると、`derive(...)` の呼び出しを認識し、取り得るすべての戻り値を特定して、それぞれに個別の翻訳エントリを作成します。 これは、次のような場合に役立ちます。 * 言語間で**語の一致** (性・数・格) を保つ * 翻訳文字列内に関数呼び出しを含む**再利用可能なコンテンツ** * 文字列の一部が、取り得る結果の決まった集合を持つ**断片化された文** *** ## 語の一致を保つ 言語には、周囲の語に影響する文法規則 (性、複数、格) があります。`derive` がないと、1 つの翻訳エントリだけではこの一致に対応できません。 ```python # deriveなし — 翻訳エントリが1つのため、語形変化に対応不可 message = t(f"The {get_subject(gender)} is playing.") # "The boy is playing." と "The girl is playing." は同じ翻訳エントリを共有する ``` `derive` を使用すると、CLI は結果ごとに個別のエントリを作成します: ```python from gt_flask import derive, t def get_subject(gender: str) -> str: return "boy" if gender == "male" else "girl" message = t(f"The {derive(get_subject(gender))} is playing.") ``` これにより、2 つの翻訳エントリが生成されます。 * `"The boy is playing."` → `"El niño está jugando."` * `"The girl is playing."` → `"La niña está jugando."` スペイン語では、主語に応じて "El" と "La" を使い分けます。こうした文法的一致は自動的に処理されます。 *** ## 仕組み 1. **ビルド時**に、GT CLI が `derive` でラップされた式を解析します 2. 取り得るすべての戻り値を特定します (これらは静的に解析可能である必要があります) 3. 結果ごとに、重複のない個別の翻訳エントリを作成します 4. **runtime** では、`derive` は単なる恒等関数で、引数をそのまま返します *** ## 例 ### インライン式 `derive` 内にロジックを直接記述できます: ```python from gt_flask import derive, t message = t(f"The {derive('boy' if gender == 'male' else 'girl')} is playing.") ``` ### 関数呼び出し 戻り値があらかじめ決まっている関数呼び出しをラップします。 ```python from gt_flask import derive, t def get_status_label(status: str) -> str: if status == "complete": return "completed" elif status == "pending": return "pending" return "unknown" message = t(f"Task is {derive(get_status_label(status))}.") ``` ### 再利用可能なコンテンツ ```python from gt_flask import derive, t def get_subject() -> str: return "boy" translation1 = t(f"The {derive(get_subject())} is playing.") translation2 = t(f"The {derive(get_subject())} is having fun.") ``` ### `declare_var` を使う場合 静的な式の中で動的な内容が必要な場合は、`derive` を [`declare_var`](/docs/python/api/declare-var) と組み合わせて使います。 ```python from gt_flask import derive, declare_var, t def get_greeting(name: str | None) -> str: if name: return f"Hello, {declare_var(name, name='user')}" return "Hello, stranger" message = t(f"{derive(get_greeting(name))}! How are you?") ``` *** ## パフォーマンスに関する考慮事項 `derive` は翻訳エントリ数を増やします。N 通りの結果があり得る呼び出し 1 回ごとに、N 個のエントリが作成されます。同じ文字列内で複数の `derive` を使うと、エントリ数は指数関数的に増えます。使用は慎重に行ってください。