0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Golang】Go と Ollama で自動翻訳 API を作る

Last updated at Posted at 2025-10-15

Google や DeepL などの翻訳 API を叩くのもいいのですが、すぐに無料枠を使い切ったり、有料ライセンスにしても、意図せず叩きすぎてビックリする課金で逆にビンタを喰らうのが怖いのです。

そこで、M4 Mac mini (16GB) で Ollama は動くし、llama3.2 程度であれば普通にサクサク動くので、ローカルで翻訳 API を Go(以下 golang)で構築できないかなと思いました。

Ollama とは、恐れずに一言で説明すると「GGUF フォーマット1の LLM をローカルで実行できるアプリ」です。Docker と同じく golang で書かれています。

この記事では macOS を前提としていますが、Ollama のアプリ自体は Windows 版や Linux 版もあるのでダウンロード以外は、大きな違いはないと思います。

動作環境(macOS)
$ sw_vers
ProductName:		macOS
ProductVersion:		26.0.1
BuildVersion:		25A362

$ ollama --version
ollama version is 0.12.5

$ go version
go version go1.25.2 darwin/arm64

$ go list -m all | grep github.com/ollama/ollama
github.com/ollama/ollama v0.12.5

TL; DR (今北産業)

翻訳 API というか、以下をするだけのサンプルです。

  1. Ollama 本体の golang ソースコードに同梱されている API クライアント・パッケージを利用する
  2. ローカルに立ち上げた Ollama サーバーへ翻訳のリクエストをする
  3. レスポンスは JSON で出力させ、パースした翻訳結果を出力する
Ollama の Go モジュールをインストール
$ go get github.com/ollama/ollama
info
// Ollama API クライアントのパッケージ
import "github.com/ollama/ollama/api"
ソースコード
package main

import (
	"context"
	"encoding/json"
	"fmt"
	"log"
	"strings"

	"github.com/ollama/ollama/api"
)

// Translation はモデルからのレスポンスの JSON 用構造体です.
type Translation struct {
	English string `json:"english"`
}

func main() {
    // 利用可能モデル一覧: https://ollama.com/search
    const modelName = "llama3.2"

    japaneseText := "私は昨日、友達と映画を見に行きました。"

	client, err := api.ClientFromEnvironment()
	if err != nil {
		log.Fatalf("failed to create Ollama client: %v", err)
	}

	// JSON 出力を強制する翻訳指示のプロンプト
	prompt := fmt.Sprintf(`
Translate the following Japanese sentence to English.

Output ONLY valid JSON in the format:
{"english": "<translation here>"}

Japanese: %s
`, japaneseText)

	req := &api.GenerateRequest{
		Model:  modelName, 
		Prompt: prompt,
	}

	var sb strings.Builder

	err = client.Generate(context.Background(), req, func(resp api.GenerateResponse) error {
		sb.WriteString(resp.Response)
		return nil
	})
	if err != nil {
		log.Fatalf("generation failed: %v", err)
	}

	// 受信した JSON のパースと出力
	var result Translation
	output := strings.TrimSpace(sb.String())

	if err := json.Unmarshal([]byte(output), &result); err != nil {
		log.Fatalf("failed to parse JSON: %v\nRaw output:\n%s", err, output)
	}

	fmt.Println("Returned Raw Output:\n\n", output)
	fmt.Println("🇯🇵 Original Sentence  :", japaneseText)
	fmt.Println("🗣️ English Translation:", result.English)
}
Ollama アプリのインストール(macOS の場合で、未インストールの場合)
$ # Apple Silicon の場合 Metal 対応版が入り Mac の GPU が利用できる
$ # Intel Mac の場合は CPU で動作する
$ brew install ollama

$ # Windows/Linux --> https://ollama.com/download
Ollama サーバーの起動
$ # 別ターミナルで実行すること
$ ollama serve
学習モデルのダウンロード
$ ollama pull llama3.2
pulling manifest 
pulling dde5aa3fc5ff: 100% ▕████████████████████████████████████████████████████████▏ 2.0 GB                         
pulling 966de95ca8a6: 100% ▕████████████████████████████████████████████████████████▏ 1.4 KB                         
pulling fcc5a6bec9da: 100% ▕████████████████████████████████████████████████████████▏ 7.7 KB                         
pulling a70ff7e570d9: 100% ▕████████████████████████████████████████████████████████▏ 6.0 KB                         
pulling 56bb8bd477a5: 100% ▕████████████████████████████████████████████████████████▏   96 B                         
pulling 34bb5ab01051: 100% ▕████████████████████████████████████████████████████████▏  561 B                         
verifying sha256 digest 
writing manifest 
success
サンプル・コードの実行
$ go run main.go
Returned Raw Output:
 {"english": "I went to see a movie with friends yesterday."}

🇯🇵 Original Sentence  : 私は昨日、友達と映画を見に行きました。
🗣️ English Translation: I went to see a movie with friends yesterday.
  1. GGUF とは、Meta 社(旧 Facebook 社)の学習モデル LLaMA をベースとした、オープンな学習モデル Llama に「推論の実行に必要な情報」を埋め込んだバイナリ・フォーマットです。

    Georgi Gerganov 氏が、オリジナルの LLaMA 向けに GGML (Georgi Gerganov Machine Learning) として発案し、LLaMA の派生学習モデル(Llama 系の学習モデル)でも使えるように互換を持たせた後継のフォーマットが GGUF です。

    学習モデルの拡張子は .gguf で、Ollama の公式からダウンロードできるモデル以外にも、Hugging Face に公開されている GGUF の野良モデルもダウンロードして手動で設置すると利用できます。

    このバイナリ・データを、同氏が開発した軽量推論プログラム「llama.cpp」に読み込むだけで推論を実行できます。llama.cpp は C/C++ で書かれており、FFI としても機能するため他のプログラム言語からも利用できます。Ollama も cgo としてバックエンドに llama.cpp を使っています。

    llama.cpp の特筆すべき点は、NVIDIA の GPU がなくても実行できることです。

    Apple Silicon の Metal(M 系 Mac の GPU ライブラリ)、AMD の GPU や Linux の Vulkan にも対応しており、いずれの GPU 機能が使えない場合は CPU でマルチスレッド動作すると言う、非 Windows/NVIDIA ユーザーの救世主です。

    ここまで読んで「すげー」と感じた方は、ぜひ llama.cpp のリポジトリに「いいね」しに行ってあげてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?