セルフホスト翻訳比較:LibreTranslate vs Argos Translate vs OPUS-MT で機械翻訳を実現する
オープンソースラボ編集部 ・ 2026年6月14日
セルフホスト翻訳比較:LibreTranslate vs Argos Translate vs OPUS-MT で機械翻訳を実現する
Google翻訳・DeepL APIへの依存から脱却し、機密文書・社内コンテンツをクラウドに送信せず自社サーバーで機械翻訳するOSSセルフホスト翻訳ツールが普及しています。LibreTranslate(REST API・最も使いやすい)・Argos Translate(オフライン・軽量)・OPUS-MT(Helsinki-NLP・研究水準)の3つが2026年のOSS機械翻訳主要選択肢です。
セルフホスト翻訳ツールを使う理由
- プライバシー: 医療・法律・契約書等の機密文書をGoogle/DeepLのサーバーに送信しない
- コスト削減: DeepL API($7.49/月・500K文字)→セルフホストでVPS費用のみ
- オフライン運用: インターネット接続なしで工場・船舶・セキュア環境での翻訳
- カスタマイズ: 専門用語(医療・法律・技術)に特化した翻訳モデルのファインチューニング
主要ツールの概要
LibreTranslate
2020年公開、Python製のOSSです。GitHubスター10k+。REST APIを提供するセルフホスト機械翻訳サーバーで、Argos Translateエンジンをバックエンドに使いHTTP APIで翻訳を提供します。DeepL/Google Translate APIの代替として、既存アプリのAPIエンドポイントをLibreTranslateに切り替えるだけで移行できます。
# docker-compose.yml: LibreTranslate
version: "3.8"
services:
libretranslate:
image: libretranslate/libretranslate:latest
restart: unless-stopped
ports:
- "5000:5000"
environment:
LT_API_KEYS: "true" # APIキー認証を有効化
LT_API_KEYS_DB_PATH: /app/db/api_keys.db
LT_LOAD_ONLY: ja,en,zh,ko,fr,de # 必要言語のみ読み込み(起動高速化)
LT_THREADS: 4 # 翻訳スレッド数(CPUコア数に応じて)
LT_CHAR_LIMIT: 5000 # リクエスト文字数上限
LT_REQ_LIMIT: 100 # レート制限(100リクエスト/日)
LT_BATCH_LIMIT: 10 # バッチ翻訳の最大テキスト数
LT_SUGGESTIONS: "true" # 翻訳提案を有効化
volumes:
- lt_data:/app/db
- lt_models:/home/libretranslate/.local/share/argos-translate
volumes:
lt_data:
lt_models:
# Python: LibreTranslate API で翻訳を自動化
import requests
import json
LT_URL = 'http://localhost:5000'
LT_API_KEY = 'your-api-key'
def translate(text: str, source: str = 'auto', target: str = 'ja') -> str:
'''LibreTranslate APIで翻訳'''
resp = requests.post(f'{LT_URL}/translate', json={
'q': text,
'source': source,
'target': target,
'api_key': LT_API_KEY,
})
resp.raise_for_status()
return resp.json()['translatedText']
def detect_language(text: str) -> str:
'''言語自動検出'''
resp = requests.post(f'{LT_URL}/detect', json={'q': text, 'api_key': LT_API_KEY})
detections = resp.json()
return max(detections, key=lambda d: d['confidence'])['language']
def batch_translate(texts: list[str], target: str = 'ja') -> list[str]:
'''複数テキストを一括翻訳'''
resp = requests.post(f'{LT_URL}/translate', json={
'q': texts,
'source': 'auto',
'target': target,
'api_key': LT_API_KEY,
})
return [r['translatedText'] for r in resp.json()['translatedText']]
def translate_html(html_content: str, target: str = 'ja') -> str:
'''HTML形式のテキストを翻訳(タグを保持)'''
resp = requests.post(f'{LT_URL}/translate', json={
'q': html_content,
'source': 'auto',
'target': target,
'format': 'html',
'api_key': LT_API_KEY,
})
return resp.json()['translatedText']
def get_supported_languages() -> list[dict]:
'''サポート言語一覧取得'''
resp = requests.get(f'{LT_URL}/languages')
return resp.json()
# 使用例
en_text = 'Open source software enables organizations to collaborate and innovate freely.'
ja_text = translate(en_text, target='ja')
print(f'翻訳結果: {ja_text}')
# バッチ翻訳(例: 商品説明の多言語化)
products = ['Wireless keyboard', 'USB-C hub', 'Ergonomic mouse']
ja_products = batch_translate(products, target='ja')
print('商品名翻訳:', list(zip(products, ja_products)))
# Webスクレイプコンテンツの翻訳+言語検出
lang = detect_language('Bonjour, comment allez-vous?')
print(f'検出言語: {lang}') # fr
# Next.js APIルートからLibreTranslateを呼び出す例
nextjs_route = '''
// app/api/translate/route.ts
import { NextRequest, NextResponse } from 'next/server'
export async function POST(req: NextRequest) {
const { text, target = 'ja' } = await req.json()
const resp = await fetch('http://libretranslate:5000/translate', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ q: text, source: 'auto', target, api_key: process.env.LT_API_KEY }),
})
const { translatedText } = await resp.json()
return NextResponse.json({ translatedText })
}
'''
Argos Translate
2020年公開、Python製のOSSです。GitHubスター4k+。完全オフラインで動作する軽量機械翻訳ライブラリで、モデルパッケージ(.argosmodel)をインストールしてインターネット接続なしで翻訳できます。GUIアプリとPython APIの両方を提供し、LibreTranslateのバックエンドエンジンとしても使われています。
# Python: Argos Translate でオフライン翻訳
import argostranslate.package
import argostranslate.translate
def setup_offline_translation(from_code: str = 'en', to_code: str = 'ja'):
'''翻訳パッケージをインストール(初回のみ・インターネット必要)'''
# 利用可能なパッケージ一覧を取得
argostranslate.package.update_package_index()
available_packages = argostranslate.package.get_available_packages()
# en→jaのパッケージを検索してインストール
package = next(
filter(lambda p: p.from_code == from_code and p.to_code == to_code, available_packages),
None,
)
if package:
download_path = package.download()
argostranslate.package.install_from_path(download_path)
print(f'インストール完了: {from_code}→{to_code}')
def offline_translate(text: str, from_code: str = 'en', to_code: str = 'ja') -> str:
'''オフラインでテキストを翻訳'''
return argostranslate.translate.translate(text, from_code, to_code)
# 使用例(完全オフライン)
setup_offline_translation('en', 'ja') # 初回のみ
result = offline_translate('Hello, this is an offline translation test.', 'en', 'ja')
print(result)
# FastAPIで翻訳APIサーバーを構築
fastapi_server = '''
from fastapi import FastAPI
from pydantic import BaseModel
import argostranslate.translate
app = FastAPI()
class TranslateRequest(BaseModel):
text: str
from_code: str = "en"
to_code: str = "ja"
@app.post("/translate")
def translate(req: TranslateRequest):
result = argostranslate.translate.translate(req.text, req.from_code, req.to_code)
return {"translated": result}
'''
OPUS-MT
Helsinki-NLP(ヘルシンキ大学)が開発したOSSマルチリンガル翻訳モデル群です(Hugging Face公開)。研究・学術水準の翻訳品質でOPUS(Open Parallel Corpus)で学習したMarianMT アーキテクチャを使います。HuggingFaceのTransformers経由でPythonから呼び出せます。
# Python: OPUS-MT(HuggingFace Transformers)で高品質翻訳
from transformers import MarianMTModel, MarianTokenizer
import torch
class OPUSTranslator:
def __init__(self, model_name: str = 'Helsinki-NLP/opus-mt-en-jap'):
self.tokenizer = MarianTokenizer.from_pretrained(model_name)
self.model = MarianMTModel.from_pretrained(model_name)
self.device = 'cuda' if torch.cuda.is_available() else 'cpu'
self.model.to(self.device)
def translate(self, texts: list[str], max_length: int = 512) -> list[str]:
inputs = self.tokenizer(texts, return_tensors='pt', padding=True,
truncation=True, max_length=max_length).to(self.device)
with torch.no_grad():
translated = self.model.generate(**inputs, max_length=max_length)
return [self.tokenizer.decode(t, skip_special_tokens=True) for t in translated]
# 使用例
translator = OPUSTranslator('Helsinki-NLP/opus-mt-en-jap')
results = translator.translate(['Open source software is essential for modern development.'])
print(results[0])
機能比較表
| 比較項目 | LibreTranslate | Argos Translate | OPUS-MT |
|---|---|---|---|
| REST API | ✅ | ❌(Python直接) | ❌(Transformers) |
| 完全オフライン | ✅ | ✅ | ✅ |
| 翻訳品質 | 中 | 中 | ✅ 学術水準 |
| GPU対応 | △ | △ | ✅(CUDA) |
| セットアップ容易さ | ✅(Docker) | ✅(pip) | 中 |
セルフホスト翻訳はLLM Toolsカテゴリ/categories/llm-toolsのLlamaIndex・LangChainと組み合わせて「非日本語ドキュメントを翻訳→チャンク化→日本語RAG検索」という多言語RAGパイプラインを構築するユースケースが増えています。DevOpsカテゴリ/categories/devopsのKubernetesでLibreTranslateをサービスとしてデプロイして複数アプリが共有する翻訳マイクロサービス構成が採用されています。
FAQ
Q. LibreTranslateとDeepL APIの翻訳品質の差はどれくらいですか?
A. DeepLが全体的に高品質ですが、LibreTranslateは用途次第で十分実用的です。比較結果(英日翻訳・BLEU scoreベース): DeepL > Google翻訳 > LibreTranslate/OPUS-MT > Argos Translate の順が一般的傾向。LibreTranslateが有用なケース: ①大量の社内文書・技術マニュアルの一括翻訳(コスト最優先)②機密文書でクラウドAPIに送信不可③プリプロセスとして原文の言語検出のみ使用④翻訳後に人間が見直す想定のドラフト翻訳。OPUS-MTが強いケース: 科学論文・医療文書等の専門ドメインでは適切なモデルをHugging Faceから選択→DeepLに近い品質を出せる場合あり。実測例: 一般的なビジネス文書でDeepLと比べてLibreTranslateは誤訳5〜15%増が目安。
Q. LibreTranslateのAPIキー認証を設定してセキュリティを高めるには?
A. LT_API_KEYS=true設定後にCLIまたはAPIでキーを発行して各クライアントに配布します。設定: ①docker-compose.ymlのLT_API_KEYS: "true"を有効化②コンテナ内でキーを発行: docker exec -it libretranslate lt-manage-keys generate③APIキーを使ったリクエスト: {"q": "Hello", "source": "en", "target": "ja", "api_key": "your-key"}。キー別レート制限: LT_API_KEYS: trueの場合、APIキーなしのリクエストをブロックまたはレート制限→LT_REQ_LIMITでデフォルト制限、APIキーごとに異なる制限設定が可能(lt-manage-keys set-rate-limit)。用途別キー発行: アプリAに月100万文字・アプリBに月10万文字等の制限を個別設定。
Q. Argos TranslateでNext.jsアプリに組み込む場合の推奨構成は?
A. Argos TranslateをPythonマイクロサービス(FastAPI)でラップして、Next.jsからREST APIで呼び出す構成が推奨です。構成: ①Pythonマイクロサービス: FastAPI + argostranslate→POST /translateエンドポイント→Dockerイメージ化②Next.js: fetch('http://translate-service:8000/translate', {...})でAPI呼び出し③Docker Compose: translate-serviceとnextjsを同一ネットワークに配置→外部公開不要。オフラインモデル管理: モデル(.argosmodelファイル)をDockerイメージに含めるか、起動時にargostranslate.packageでダウンロード→本番環境では事前にビルドしてモデルを含むイメージを使用。
Q. OPUS-MTで医療・法律ドメインの翻訳品質を向上させるには?
A. ドメイン固有の対訳データセットでMarianMTモデルをファインチューニングします。手順: ①HuggingFace Hubから適切なOPUS-MTモデルを選択(Helsinki-NLP/opus-mt-en-jap等)②専門対訳データセットを収集(医療: MedLine・EMEA・ECDC等・法律: JRC-Acquis・MultiUNなど)③MarianMTModelをTrainerでファインチューニング(from transformers import Seq2SeqTrainingArguments, Seq2SeqTrainer)④評価: sacrebleu・CHRFスコアで翻訳品質を測定⑤デプロイ: ファインチューニング済みモデルをHugging Face Hubまたはローカルに保存→推論APIとして公開。効果: 一般翻訳モデル vs ファインチューニング済みモデルで専門ドメインのBLEUスコアが10〜20ポイント改善するケースあり。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| REST API・マイクロサービス・チーム共有 | LibreTranslate |
| 完全オフライン・軽量・エアギャップ環境 | Argos Translate |
| 高品質・ドメイン特化・GPU推論・研究 | OPUS-MT |