LLMのルール
Lingo.dev CompilerをAIコーディングアシスタントと共に使用する
はじめに
Lingo.dev コンパイラーは他の翻訳ツールとは異なります。残念ながら、このことはCursorやClaude CodeのようなAIコーディングアシスタントが、その動作方法や機能について誤った認識を持ちやすいことを意味します。こうした誤認識を減らすため、このページではこれらのアシスタントの動作を適切に導くためのルールを提供します。
セットアップ手順
これらのルールを使用するための正確な手順はアシスタントによって異なります。このセクションでは、最も一般的なアシスタントに関する手順を提供します。
ヒント: 複数のアシスタントで同じルールを使用するには、Rulerやvibe-rulesのようなツールの使用を検討してください。
Amp
Ampを使用している場合は、ルールをAGENT.md
ファイルにコピーしてください。コンテキストウィンドウが煩雑になるのを避けるため、これらのルールは使用される予定のディレクトリにのみ定義し、多くのリクエストに無関係になる可能性のあるプロジェクトルートには定義しないでください。
詳細については、Amp Owner's Manual (ampcode.com)を参照してください。
Cursor
Cursorを使用している場合は、ルールを.cursor/rules/lingo.mdc
ファイルにコピーしてください。ルールが関連するファイルにのみ適用されるようにするには、以下のフロントマターを使用してください:
---
description: "Lingo.dev コンパイラーのローカリゼーションルール"
globs: "**/*.tsx, **/*.jsx"
alwaysApply: true
---
詳細については、Rules (docs.cursor.com)を参照してください。
Claude Code
Claude Codeを使用している場合は、ルールをCLAUDE.md
ファイルにコピーしてください。コンテキストウィンドウが煩雑になるのを避けるため、これらのルールは使用される予定のディレクトリにのみ定義し、多くのリクエストに無関係になる可能性のあるプロジェクトルートには定義しないでください。
詳細については、Manage Claude's memory (docs.anthropic.com)を参照してください。
opencode
opencodeを使用している場合は、ルールをAGENTS.md
ファイルにコピーするか、opencode.json
設定ファイルを通じてカスタムの場所を指定してください:
{
"$schema": "https://opencode.ai/config.json",
"instructions": ["./rules/lingo.md"]
}
詳細については、Rules (opencode.ai)を参照してください。
LLMルール
# ローカリゼーション
このプロジェクトはローカリゼーションにLingo.dev Compilerを使用しています。
Lingo.dev CompilerはReactベースのアプリケーション向けの最先端ローカリゼーションツールです。
## 警告!
- Lingo.dev Compilerは他のローカリゼーションツールとは異なります。
- Lingo.dev Compilerの動作について勝手に推測してはいけません。
- 推測すると、ユーザーのアプリが壊れる可能性があります。
## 動作原理
他の多くのローカリゼーションツールとは異なり、Lingo.dev Compilerは:
- アプリのソースコードの抽象構文木(AST)を走査します
- ローカライズ可能なコンテンツを決定論的に抽出します
- 大規模言語モデルを使用してコンテンツを自動的にローカライズします
## サポートされていない機能
他の多くのローカリゼーションツールとは異なり、Lingo.dev Compilerには以下のものがありません:
- `useTranslation`フック(または類似のもの)
- `FormattedMessage`コンポーネント(または類似のもの)
- `localizeText`メソッド(または類似のもの)
これらの機能はLingo.dev Compilerの目的、哲学、および動作と根本的に相反するものです。
他のツールとのこれらの基本的な違いを常に慎重に理解し考慮する必要があります。
## サポートされているファイル拡張子
これらのルールは`.jsx`および`.tsx`拡張子を持つファイルにのみ関連します。
これらの拡張子を持たないファイルはLingo.dev Compilerには見えないため、対象外となります。
## 自動生成ファイル
ビルド時に、Lingo.dev Compilerは以下のファイルを自動生成します:
- `meta.json`(抽出されたコンテンツを保存するため)
- `dictionary.js`(翻訳されたコンテンツを保存するため)
これらのファイルを編集してはいけません。デバッグ目的やユーザーに説明するために読むことはできますが、それだけです。
## 責任
あなたには以下の責任があります:
- ローカライズされるべきコンテンツがローカライズ可能な形式であることを確認する。
- ローカライズされるべきでないコンテンツがローカライズ不可能な形式であることを確認する。
- コンテンツがなぜローカライズされる(またはされない)のかをユーザーが理解できるよう支援する。
それだけです。
Lingo.dev Compilerが他のすべてを処理します。その妨げにならないでください。
## ローカライズ可能なコンテンツ
このセクションでは、Lingo.dev Compilerが抽出してローカライズするコンテンツの種類を一覧表示します。
このリストは網羅的です。ここに記載されていない種類のコンテンツは、ローカライズできないと想定してください。
### JSX要素
```tsx
import React from "react";
export function App() {
return <div>このテキストはローカライズされます。</div>;
}
```
### JSXフラグメント
#### 構文1
```tsx
import React from "react";
export function App() {
return <React.Fragment>このテキストはローカライズされます。</React.Fragment>;
}
```
#### 構文2
```tsx
import { Fragment } from "react";
export function App() {
return <Fragment>このテキストはローカライズされます。</Fragment>;
}
```
#### 構文3
```tsx
import React from "react";
export function App() {
return <>このテキストはローカライズされます。</>;
}
```
### 条件付き要素またはフラグメント
```tsx
import React, { Fragment, useState } from "react";
export function App() {
const [isVisible, setIsVisible] = useState(false);
return (
<>
{isVisible && <div>このテキストはローカライズされます。</div>}
{isVisible && (
<React.Fragment>このテキストはローカライズされます。</React.Fragment>
)}
{isVisible && <Fragment>このテキストはローカライズされます。</Fragment>}
{isVisible && <>このテキストはローカライズされます。</>}
</>
);
}
```
### `alt`属性値
```tsx
import React from "react";
export function App() {
return <img src="/logo.png" alt="このテキストはローカライズされます" />;
}
```
### `aria-label`属性値
```tsx
import React from "react";
export function App() {
return <button aria-label="このテキストはローカライズされます">×</button>;
}
```
### `label`属性値
```tsx
import React from "react";
export function App() {
return (
<select>
<option value="option1" label="このテキストはローカライズされます">
このテキストはローカライズされます
</option>
<option value="option2" label="このテキストはローカライズされます">
このテキストはローカライズされます
</option>
</select>
);
}
```
### `placeholder` 属性値
```tsx
import React from "react";
export function App() {
return <input placeholder="This text will be localized" />;
}
```
### `title` 属性値
```tsx
import React from "react";
export function App() {
return <button title="This text will be localized">Submit</button>;
}
```
## ローカライズ不可能なコンテンツ
このセクションでは、Lingo.dev Compilerが抽出またはローカライズしない種類のコンテンツを一覧表示します。
「ローカライズ可能なコンテンツ」リストとは異なり、このリストは網羅的ではありません。
### `data-` 属性
```tsx
import React from "react";
export function App() {
return <div data-testid="This text will not be localized">Content</div>;
}
```
### 文字列リテラル
```tsx
import React from "react";
const exampleText = "This text will not be localized.";
export function App() {
return <div>{exampleText}</div>;
}
```
### テンプレートリテラル
```tsx
import React from "react";
const exampleText = `This text will not be localized.`;
export function App() {
return <div>{exampleText}</div>;
}
```
### 条件付き文字列
```tsx
import { Fragment, useState } from "react";
export function App() {
const [isVisible, setIsVisible] = useState(false);
return <>{isVisible && "This text will not be localized."}</>;
}
```
## 制限事項
- コンテンツを自分でローカライズしないでください。
- ローカライズされたコンテンツをアプリに明示的に読み込まないでください。
- Reactフックを捏造しないでください(例:`useTranslation`)。
- Reactコンポーネントを捏造しないでください(例:`FormattedMessage`)。
- メソッドを捏造しないでください(例:`localizeText`)。