Contents
DeepL API の取得と料金プラン(2024 年版)
DeepL の翻訳機能を Salesforce と連携させるには、まず API キーの取得 と 利用料金の把握 が必要です。本セクションでは、公式ドキュメントに基づいた最新の取得手順と、2024 年 10 月時点で公開されているプランをまとめます。将来的な価格改定や新プランの追加は公式サイトをご確認ください。
API キー取得手順
DeepL の API は専用ページから申請できます。以下の流れでキーを発行してください。
-
DeepL API 専用ページへアクセス
https://www.deepl.com/docs-api/ (DeepL の公式 API ドキュメント)にアクセスし、右上の「Sign up」または「Log in」からアカウントを作成/ログインします。 -
プラン選択画面へ遷移
ログイン後、メニューの “API” → “Pricing & Plans” をクリックし、利用したいプラン(Free または Pro)を選びます。 -
支払い情報の入力(Pro のみ)
プロプランの場合はクレジットカードまたは請求書情報を登録し、月額料金を確定します。 -
API キーの表示・コピー
ダッシュボードに「Authentication key」が生成されるので、これを安全な場所(例:Salesforce の暗号化カスタム設定)に保存します。
ポイント:Free プランは月間 500,000 文字 が上限で商用利用は不可です。Pro プランでは文字数上限がプランごとに決まっており、商用利用も許可されています。
現行の料金プラン(2024 年 10 月時点)
以下は DeepL の公式サイトに掲載されている主要プランです(※価格は欧州連合内 VAT 含む EUR 表記)。実際の請求額は為替レートや地域別税率により変動する可能性があります。
| プラン | 月額費用 (EUR) | 含まれる文字数* | 超過時単価(€/1 M 文字) |
|---|---|---|---|
| Free | 無料 | 500,000 文字 | - |
| Pro Starter | €29 | 1,000,000 文字 | €19 |
| Pro Standard | €59 | 2,500,000 文字 | €16 |
| Pro Business | €119 | 5,000,000 文字 | €13 |
* 各プランの「含まれる文字数」は月間上限です。超過した分は表に示す単価で従量課金されます。
出典: DeepL 公式料金ページ【[^1]】。
プラン選択の目安
- Free:開発・テストや文字数が少ない非商用ユース向け。
- Pro Starter:月間 1 M 文字未満、商用利用を許可したい小規模プロジェクトに最適。
- Pro Standard / Business:大規模インポートやバッチ処理が頻繁に発生する場合は、文字数上限と単価のバランスから Standard 以上を推奨。
Salesforce 側の事前設定
Salesforce で DeepL API を呼び出すには、翻訳対象フィールドの用意と外部サイトへのアクセス許可が必要です。このセクションでは カスタム項目作成 と Remote Site Settings の登録、認証方式の選択手順を解説します。
カスタム項目の作成
まず翻訳前後のテキストを格納するフィールドを追加します。
- オブジェクトマネージャで対象オブジェクトを開く(例:Lead、Account)。
- 「項目と関係」→「新規カスタム項目」→ データ型は 長文テキスト(255 文字以上推奨) を選択。
- フィールド例:
Description_JP__c(日本語原文)・Description_EN__c(英訳結果)。
Remote Site Settings の登録
Apex から外部 API にアクセスする際は、対象ドメインをホワイトリストに登録します。
- 設定 → セキュリティ → Remote Site Settings を開く。
- 「新規リモートサイト」ボタンをクリックし、以下の情報で保存する。
| 項目 | 設定値 |
|---|---|
| 名前 | DeepL_API |
| URL | https://api.deepl.com |
| 説明 | DeepL 翻訳 API 呼び出し用 |
認証方式の比較
| 方法 | 手順概要 | メリット | デメリット |
|---|---|---|---|
| OAuth 2.0 | Connected App 作成 → クライアント ID/Secret 発行 → JWT Bearer Token または Web Server フローでトークン取得 | トークン有効期限が自動管理され、キー漏洩リスクが低減 | 初期設定がやや複雑 |
API キー(ヘッダー Authorization: DeepL-Auth-Key <key>) |
Apex 変数または暗号化カスタム設定に格納し、HTTP リクエスト時に付与 | 実装がシンプルでテストが容易 | キーローテーションや失効管理を手動で行う必要あり |
推奨:本番環境・商用利用では OAuth 2.0、PoC や社内限定環境では API キーでも問題ありません。
ノーコード連携① n8n で自動翻訳フロー構築
n8n は UI ベースでワークフローを組めるオープンソースのオートメーションツールです。Salesforce のレコード作成をトリガにし、DeepL 翻訳結果を同レコードへ書き戻すまでの流れを紹介します。
フロー全体像
- Salesforce Trigger(「New Record」)で対象オブジェクトの作成イベントを取得。
- Set ノードで翻訳対象テキストを抽出し、変数
sourceTextに格納。 - HTTP Request ノードで DeepL API (
https://api.deepl.com/v2/translate) に POST リクエスト。 - Salesforce Updateノードで翻訳結果をカスタム項目に保存。
主要ノード設定(簡易サンプル)
| ノード | 設定ポイント | 補足 |
|---|---|---|
| Salesforce Trigger | Object: Lead、イベント: Created、認証は事前に作成した「Credentials」から選択 |
n8n の Credentials で OAuth または API キーを登録 |
| Set (Extract Text) | sourceText = {{$json["Description"]}}(必要に応じて複数フィールド結合) |
テキスト前処理(trim、HTML除去)は同ノードの式で実装可 |
| HTTP Request(DeepL) | Method: POST URL: https://api.deepl.com/v2/translateBody (form-data):
|
返却は JSON。翻訳結果は {{ $json.translations[0].text }} に格納 |
| Salesforce Update | Object: Lead、ID: {{$json["Id"]}}、更新項目: Description_EN__c = {{ $node["HTTP Request"].json.translations[0].text }} |
更新失敗時は「Error Workflow」へ分岐させリトライロジックを追加 |
メリット:コード不要で保守が容易。
デメリット:ランタイム(Docker など)を自前で管理する必要があります。
ローコード連携② CData Arc コネクタ活用
CData Arc はクラウド上のデータパイプラインサービスです。DeepL と Salesforce のコネクタだけで翻訳フローを構築でき、運用負荷が低減します。
設定手順概要
- CData Arc にサインアップしワークスペースを作成(無料トライアル利用可)。
- DeepL コネクタの追加 → API キー入力 → 「Test Connection」で接続確認。
- Salesforce コネクタの追加 → OAuth クレデンシャル(Client ID/Secret)を登録。
- パイプライン作成:ソース=
salesforce.lead、変換ステップで DeepL 翻訳ノードを呼び出し、結果を同オブジェクトのカスタム項目へ書き戻す。
パイプライン定義(YAML 例)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
pipeline: source: salesforce.lead filter: CreatedDate = TODAY() transform: - map: sourceText: Description__c - call: connector: deepl.translate parameters: target_lang: EN formality: less destination: connector: salesforce.updateLead mapping: Description_EN__c: $.translations[0].text |
コストと運用ポイント
| 項目 | 内容 |
|---|---|
| CData Arc の SaaS 料金 | Standard プラン €49/月から(DeepL コネクタ自体は別料金なし)。API 使用量は DeepL の従量課金に従う。 |
| 保守性 | GUI でパイプライン管理・エラーログ取得が可能。文字数制限超過時の分割処理などは「Script」ステップで実装可。 |
| 適用シーン | 設定だけで完結させたい中小規模組織、もしくはデータ統合基盤として他サービスとの連携を同時に行う場合に最適。 |
比較:柔軟なロジックが必要なら n8n や Apex が向き、設定中心で速やかに導入したいなら CData Arc を選択してください。
自前実装③ Apex Callout と Flow の組み合わせ
大規模インポートや複雑な条件分岐が必要な場合は、Apex で DeepL API を直接呼び出し、Flow と連携させるアプローチが有効です。以下にベストプラクティスを示します。
Apex Callout 実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
public class DeepLService { private static final String ENDPOINT = 'https://api.deepl.com/v2/translate'; // API キーは暗号化カスタム設定から取得(例: DeepL_Config__c) private static final String AUTH_KEY = Crypto.decrypt( EncodingUtil.base64Decode(DeepL_Config__c.getInstance().EncryptedKey__c), 'AES128', Blob.valueOf('your_salt') ).toString(); @future(callout=true) public static void translateAsync(Id recordId, String sourceText, String targetLang) { HttpRequest req = new HttpRequest(); req.setEndpoint(ENDPOINT); req.setMethod('POST'); req.setHeader('Content-Type', 'application/x-www-form-urlencoded'); String body = 'auth_key=' + EncodingUtil.urlEncode(AUTH_KEY, 'UTF-8') + '&text=' + EncodingUtil.urlEncode(sourceText, 'UTF-8') + '&target_lang=' + targetLang; req.setBody(body); try { HttpResponse res = new Http().send(req); if (res.getStatusCode() == 200) { Map<String,Object> json = (Map<String,Object>)JSON.deserializeUntyped(res.getBody()); String translated = ((List<Object>)json.get('translations'))[0].get('text'); DeepLResultHandler.updateRecord(recordId, translated); } else { DeepLErrorLogger.log(recordId, res.getStatusCode(), res.getBody()); } } catch (Exception e) { DeepLErrorLogger.log(recordId, -1, e.getMessage()); } } } |
ポイント
- 暗号化保存:API キーはカスタム設定に暗号化して保持し、実行時に復号。
- 非同期処理:
@future(callout=true)によりレコード保存をブロックせず、大量インサートでもガバナ制限回避が可能。 - エラーログ:ステータスコードとレスポンス本文を
DeepLErrorLogger__c(カスタムオブジェクト)に記録し、定期的に管理者へ通知。
Flow との連携手順
- レコード作成フロー:「レコードが作成された」トリガで Apex アクション
DeepLService.translateAsyncを呼び出す。 - バッチ処理:大量データインポート時は
Database.Batchableクラスでレコード ID とテキストをまとめ、translateAsyncに渡す。 - 結果ハンドラ:
DeepLResultHandler.updateRecordは単一トランザクションで対象レコードの翻訳フィールド (Description_EN__c) を更新。
エラーハンドリング戦略
- 429(リミット超過) → 1 分待機後再試行、指数バックオフ最大 3 回。
- 5xx 系エラー → 最大 3 回リトライし、すべて失敗した場合は
DeepLErrorLogger__cに記録。
高度設定・運用管理
主な API オプション
| オプション | 説明 | 使用例 |
|---|---|---|
formality |
more, less, default のいずれかで文体を調整 |
ビジネスメールは more、カジュアル案内は less |
glossary_id |
用語集 ID を指定し、業界固有語の統一翻訳を実現 | 「SFA」→「Salesforce Automation」など |
split_sentences |
0(無分割)〜1(自動)で長文分割方法を制御 |
文字数上限超過時に手動で分割したい場合は 0 を指定 |
ログ・監査のベストプラクティス
- カスタムオブジェクト
DeepL_Translation_Log__cに以下を保存 - リクエスト ID、対象レコード ID、文字数、ステータス、エラーメッセージ、タイムスタンプ。
- IP 制限:DeepL 管理コンソールで使用サーバー IP をホワイトリスト化(※公式ヘルプ参照)。
- 暗号化・最小権限:API キーは暗号化カスタム設定、Remote Site Settings は
https://api.deepl.comのみ許可。
コスト見積もり例
| 想定翻訳量 | 月間文字数 | 推奨プラン | 月額費用 (EUR) | 備考 |
|---|---|---|---|---|
| 10,000 リード × 200 文字 = 2 M | 2,000,000 | Pro Standard (€59) + 超過 0.5 M × €16 ≈ €8 | バッチ処理でまとめ翻訳するとコスト削減可 | |
| 500 件商談 × 1,000 文字 = 0.5 M | 500,000 | Free (上限内) | 商用利用が必要な場合は Pro Starter に切替 |
最適化ヒント:同一テキストが頻出する場合は Glossary を活用し、再翻訳回数を削減できます。
まとめ
- API キー取得は DeepL の公式 API ドキュメントから行い、プラン選択時に文字数上限と商用利用可否を確認してください。
- Salesforce 側設定ではカスタム項目・Remote Site Settings を正しく構成し、認証方式はセキュリティ要件に合わせて選択します。
- 連携手段の比較
- ノーコード(n8n): UI だけで実装可能、ランタイム管理が必要。
- ローコード(CData Arc): 設定のみで完結、他システムとの統合も容易。
- 自前実装(Apex + Flow): 複雑ロジックや文字数分割処理に最適だが開発工数が必要。
- 高度設定(formality、glossary 等)は品質向上とコスト抑制に貢献します。
- 運用管理はログ・監査・IP 制限・暗号化を徹底し、エラーハンドリングとリトライ戦略で安定稼働を確保してください。
これらの手順を踏むことで、Salesforce のレコード作成やインポート時に自動的に多言語翻訳が実行され、グローバル展開に伴う業務負荷を大幅に削減できます。
[^1]: DeepL 公式料金ページ(2024 年 10 月閲覧) https://www.deepl.com/pro?cta=pricing
[^2]: DeepL API ドキュメント(2024 年 10 月閲覧) https://www.deepl.com/docs-api/