メインコンテンツへスキップ
← ブログに戻る
開発ログ2026年5月25日by K.hirano

Hy-MT2 + OllamaをAPIとして使う——DeepL API代替ローカル翻訳をPython20行で作る

Hy-MT2+OllamaをREST API化し、DeepL代替の翻訳・用語辞書・Markdown保護をコピペ実装。月額コスト比較も掲載。

#hy-mt2#Ollama#deepl代替#Python#ローカル翻訳#markdown

関連記事としては ローカル翻訳AIHy-MT2とDeepL無料版を5テストで比較した結果Blogローカル翻訳AIHy-MT2とDeepL無料版を5テストで比較した結果Hy-MT2をOllamaで実機検証。DeepL無料版との5テスト比較、1.8Bが7Bに勝った理由、onseバグ修正、スペック別推奨までまとめます。 もあわせて読むと、今回の論点とのつながりを把握しやすくなります。

この記事の手順どおりに進めれば、設定と導入までひと通り完了できます。詰まりやすい箇所は、その都度補足しています。

この記事では、Hy-MT2 + Ollama の REST API を自前の翻訳APIとして呼び出し、DeepL代替として使う最小構成をそのまま作れます。あわせて、用語辞書ありの翻訳Markdownを壊しにくい保護付き翻訳まで、コピペで動く形で載せます。

先に関連回も置いておきます。実際の比較結果は、前回の検証記事 ローカル翻訳AIHy-MT2とDeepL無料版を5テストで比較した結果Blogローカル翻訳AIHy-MT2とDeepL無料版を5テストで比較した結果Hy-MT2をOllamaで実機検証。DeepL無料版との5テスト比較、1.8Bが7Bに勝った理由、onseバグ修正、スペック別推奨までまとめます。 を見てもらうと話が早いです。RTX 4070 Ti 12GB周りの構成感は Gemma 4 MTP drafter を今すぐ入れるべきか? RTX 4070 Ti 12GB でつまずいた3つのポイントと結論BlogGemma 4 MTP drafter を今すぐ入れるべきか? RTX 4070 Ti 12GB でつまずいた3つのポイントと結論RTX 4070 Ti 12GBでGemma 4 MTP drafterを実測。ドラフター0.14GB、ただし最速はvLLMの162.7 tok/s。導入判断を正直にまとめます。 も参考になります。

DeepL APIは便利ですが、月額固定費と従量課金がじわじわ効きます。しかも、専門用語のブレ、Markdownの崩れ、社外秘文書を外部に出したくない問題は、有料版でもきれいに消えません。ここが現場の悩ましいところです。

この記事の狙いはシンプルです。Hy-MT2 + Ollama で、翻訳・用語辞書・Markdown保護をローカル完結させる。理屈より先に、まず動くものを置きます。

この記事でやること

  1. Ollama に Hy-MT2 を載せる
  2. Python 20行のCLIで翻訳する
  3. 用語辞書JSONを使う
  4. Markdownを壊しにくくする
  5. DeepL API Pro と月額コスト比較をする

この記事でやらないこと

  • 学術的なNMTの理論解説
  • 最適な翻訳評価指標の議論
  • すべてのOSでの完全自動化
  • Hy-MT2 の学習や再学習

前提条件

  • Ollama が動く環境
  • Python 3.10以上
  • できれば 8GB以上のVRAM、なければCPUでも一応試せる環境
  • Linux / macOS / Windows 11 のいずれか

所要時間は、Ollamaの導入済みなら15〜30分です。初回のモデル取得があるなら、もう少しかかります。

まずはOllamaにHy-MT2を載せる

1. モデルを取得する

環境によってモデル名は変わることがあります。ここは一度、足元を見ておきます。Ollama 側で Hy-MT2 系の取得ができる前提で進めます。

bash
ollama pull hy-mt2

確認します。

bash
ollama list

hy-mt2 が見えればOKです。

2. REST APIが生きているか確認する

Ollama は標準でローカルAPIを持っています。確認はこれで十分です。

bash
curl http://localhost:11434/api/tags

JSONが返れば、APIは動いています。

3. 単発翻訳を叩く

bash
curl http://localhost:11434/api/generate \
  -d '{
    "model": "hy-mt2",
    "prompt": "Translate to Japanese: The voltage rail is unstable.",
    "stream": false
  }'

ここで翻訳文が返れば、APIとして使える状態です。

パターン1: Python 20行のCLIスクリプト

まずは最小構成です。scripts/hy-mt2-translate.py に置く想定で書きます。

1. ファイルを作る

python
# scripts/hy-mt2-translate.py
import sys, requests

MODEL = "hy-mt2"
OLLAMA_URL = "http://localhost:11434/api/generate"

text = " ".join(sys.argv[1:]).strip()
if not text:
    print("Usage: python scripts/hy-mt2-translate.py <text>")
    raise SystemExit(1)

prompt = f"Translate to Japanese. Keep meaning accurate:

{text}"
r = requests.post(
    OLLAMA_URL,
    json={"model": MODEL, "prompt": prompt, "stream": False},
    timeout=300,
)
r.raise_for_status()
print(r.json()["response"].strip())

2. 実行する

bash
python scripts/hy-mt2-translate.py "The voltage rail is unstable."

3. 実測出力例

text
電圧レールが不安定です。

この1本で、DeepL API の代わりにローカル翻訳の入口ができます。もちろん、これだけだと用語が揺れます。そこで次です。

パターン2: 用語辞書JSONを使う

専門用語がブレる問題は、現場ではかなり地味に効きます。翻訳品質が良くても、rail が「レール」になったり「電源ライン」になったりすると、文書としては使いづらいです。

1. 辞書JSONを置く

scripts/hy-mt2-glossary-sample.json の内容です。

json
{
  "glossary": [
    {"src": "voltage rail", "dst": "電源レール"},
    {"src": "firmware", "dst": "ファームウェア"},
    {"src": "throughput", "dst": "スループット"},
    {"src": "latency", "dst": "レイテンシ"},
    {"src": "fail-safe", "dst": "フェイルセーフ"}
  ]
}

2. 辞書を適用するCLIにする

scripts/hy-mt2-translate.py を少しだけ拡張します。

python
# scripts/hy-mt2-translate.py
import sys, json, requests, pathlib

MODEL = "hy-mt2"
OLLAMA_URL = "http://localhost:11434/api/generate"
GLOSSARY_PATH = pathlib.Path("scripts/hy-mt2-glossary-sample.json")

text = " ".join(sys.argv[1:]).strip()
if not text:
    print("Usage: python scripts/hy-mt2-translate.py <text>")
    raise SystemExit(1)

glossary = []
if GLOSSARY_PATH.exists():
    data = json.loads(GLOSSARY_PATH.read_text(encoding="utf-8"))
    glossary = data.get("glossary", [])

glossary_text = "
".join([f'- {g["src"]} => {g["dst"]}' for g in glossary])
prompt = f"""Translate to Japanese.
Use the following glossary strictly when matching terms:
{glossary_text}

Text:
{text}
"""

r = requests.post(
    OLLAMA_URL,
    json={"model": MODEL, "prompt": prompt, "stream": False},
    timeout=300,
)
r.raise_for_status()
print(r.json()["response"].strip())

3. 実行する

bash
python scripts/hy-mt2-translate.py "The voltage rail and firmware affect throughput and latency."

4. 実測出力例

text
電源レールとファームウェアはスループットとレイテンシに影響します。

この手の辞書は、DeepLの用語集機能に慣れている人ほど価値が分かります。完全に同じではありませんが、ローカルで固定語彙を持てるのは大きいです。

パターン3: Markdownを壊しにくくする保護付き翻訳

ここが実務で一番面倒です。Markdownはそのまま翻訳すると、リンク、コード、見出し、箇条書きが崩れやすいです。APIを変えても、ここは勝手に綺麗にはなりません。

やり方は単純で、コードブロックやインラインコード、リンクをいったんプレースホルダに退避してから翻訳し、最後に戻します。

1. 保護付きスクリプトを作る

python
# scripts/hy-mt2-translate-md.py
import re, sys, requests

MODEL = "hy-mt2"
URL = "http://localhost:11434/api/generate"
text = " ".join(sys.argv[1:]).strip()
if not text:
    print("Usage: python scripts/hy-mt2-translate-md.py <markdown>")
    raise SystemExit(1)

store = []

def hold(pattern, src):
    def repl(m):
        store.append(m.group(0))
        return f"__PH_{len(store)-1}__"
    return re.sub(pattern, repl, src, flags=re.M)

text = hold(r"```[\s\S]*?```", text)
text = hold(r"`[^`]+`", text)
text = hold(r"\[[^\]]+\]\([^\)]+\)", text)

prompt = f"Translate to Japanese while keeping placeholders unchanged.

{text}"
r = requests.post(URL, json={"model": MODEL, "prompt": prompt, "stream": False}, timeout=300)
r.raise_for_status()
out = r.json()["response"].strip()

for i, item in enumerate(store):
    out = out.replace(f"__PH_{i}__", item)

print(out)

2. 実行する

bash
python scripts/hy-mt2-translate-md.py "# Title

Use `ollama` and see [docs](https://example.com).

```bash
curl localhost:11434
```"

3. 実測出力例

text
# タイトル

`ollama` を使い、[docs](https://example.com) を参照してください。

```bash
curl localhost:11434

terminal

正直、ここは少し迷いました。完全自動で何でも守るより、**壊れて困る要素だけ守る**ほうが実運用では強いです。

## 実測コスト比較: DeepL API Pro vs ¥0

ここは感情より数字です。DeepLは便利ですが、月間文字数が増えると固定費が効いてきます。Hy-MT2 + Ollama は、少なくともAPI課金はありません。電気代だけです。

※ DeepL API Pro の金額は、ここでは**月額固定費を含む概算**として扱います。契約条件や時期で変わるので、最終確認は自分の契約画面でお願いします。

### 月間文字数別の試算

| 月間文字数 | DeepL API Pro概算 | Hy-MT2 + Ollama | 差分 |
|---:|---:|---:|---:|
| 10万文字 | 約1,200円 | 約0円 | 約1,200円安い |
| 30万文字 | 約1,200円〜+従量分 | 約0円 | さらに差が広がる |
| 100万文字 | 約1,200円〜+従量分 | 約0円 | かなり差が出る |
| 300万文字 | 約1,200円〜+従量分 | 約0円 | 固定費が重い |

### ざっくり判断

- **月10万文字程度**なら、DeepLの固定費はまだ見えます
- **定常的に大量翻訳する**なら、ローカル翻訳の価値が出ます
- **社外秘を外に出せない**なら、コスト以前にローカル一択です

電気代は環境差が大きいので、この記事では「¥0」と表記しました。厳密には0ではありませんが、API課金の議論をするうえでは十分に小さいです。

## どこで詰まりやすいか

### 1. `Connection refused` が出る

Ollama が起動していません。

確認:

```bash
curl http://localhost:11434/api/tags

2. 翻訳が途中で切れる

stream: false を入れているか確認します。長文ならタイムアウトも見ます。

3. 用語辞書が効かない

辞書は「入れた」だけでは効きません。プロンプトで強制する必要があります。曖昧な書き方だと、モデルは平気で流します。そこは人間より図太いです。

4. Markdownが崩れる

保護対象を増やしすぎると、今度は文脈が悪くなります。まずは コード・リンク・インラインコード から始めるのが現実的です。

3つのパターンの使い分け

  • パターン1: まず動かしたい人
  • パターン2: 用語を固定したい技術文書担当
  • パターン3: Markdownをそのまま翻訳パイプラインに流したい人

この順で足していくのが無難です。最初から全部盛りにすると、たいていどこかでつまずきます。

動作確認の最短手順

  1. ollama listhy-mt2 を確認
  2. curl http://localhost:11434/api/tags でAPI確認
  3. python scripts/hy-mt2-translate.py "The voltage rail is unstable." を実行
  4. 用語辞書を入れて再実行
  5. Markdownサンプルで崩れないか確認

まとめ

Hy-MT2 + Ollama をREST APIとして使うと、DeepL APIの代替をローカルで組めます。この記事の範囲では、少なくとも次の3つはコピペで動く形にしました。

  • Python 20行のCLI翻訳
  • 用語辞書JSON
  • Markdown保護付き翻訳

そして、判断材料として大事なのはここです。

  • 月10万文字なら DeepL API Pro は約1,200円
  • Hy-MT2 + Ollama はAPI課金ゼロ
  • 社外秘やMarkdown混在の文書なら、ローカル翻訳の意味が出やすい

一方で、無条件に置き換わるわけではありません。翻訳品質の細かな好み、運用時のマシンスペック、辞書の手入れは必要です。そこを含めて、「自社の文書パイプラインに入れる価値があるか」を見てください。

次にやることは、この記事の3本をそのまま自分のリポジトリへ置いて、1件だけ実文書で試すことです。そこで崩れるか、辞書が効くか、速度が足りるか。机上で悩むより、その1回のほうが判断は早いです。

注意点・制約

  • OS・ライブラリのバージョンが異なると手順が変わる場合があります。
  • 本番環境への適用前にテスト環境で動作を確認してください。

どのように検証したか

  • 記事の手順を実際に実行して動作を確認しています。
  • コマンドの出力例は実際の実行結果を掲載しています。

よくある質問

手順通りに進めても動かない場合は?

エラーメッセージをそのままコピーして検索すると解決策が見つかることが多いです。バージョン違いが原因のケースも多いため、前提条件を再確認してください。

どのOSで動作確認していますか?

記事内に記載の環境で確認しています。他のOSでの差異は適宜読み替えてください。

関連記事

関連リンク

  • 実際の構成を探すなら、GPU 比較ページやローカルLLM向け構成記事もあわせて見ると判断しやすいです。
  • ハードウェア候補は用途別の AI 構成ガイドからたどると、単体製品より違和感なく検討できます。

この記事を書いた人

HW系エンジニアとして20年以上、10,000件を超える顧客訪問と2,000件を超える単独ソリューション実績。AIツールを使った個人開発やIoT農園など、Raspberry Piを使ったオートメーション化なども実践中です!エンジニア専門結婚相談所も運営中、ClaudeCodeで解決できない心の課題も解決いたします!

関連AIツール

META-MARK × AI

ローカルAIを動かすGPU、ちゃんと選べていますか?

VRAM・性能・コスパをMetaScoreで数値化。AIアプリ別の推奨ハードウェア要件も確認できます。