カテゴリ: Go言語 更新日: 2026/03/15

Go言語のfmt.Errorf関数を使ったエラーメッセージ整形方法

Go言語のfmt.Errorf関数を使ったエラーメッセージ整形方法
Go言語のfmt.Errorf関数を使ったエラーメッセージ整形方法

先生と生徒の会話形式で理解しよう

生徒

「先生、Go言語でエラーを作るとき、もっと詳しいメッセージを作りたいんですがどうしたらいいですか?」

先生

「それならfmt.Errorfを使う方法があります。これを使うと、変数の値をメッセージに入れたり、メッセージの形を自由に整形できますよ。」

生徒

「へえ、変数の値ってどうやってメッセージに入れるんですか?教えてください!」

先生

「では、具体的な使い方を分かりやすく説明していきますね。」

1. fmt.Errorf関数とは?

1. fmt.Errorf関数とは?
1. fmt.Errorf関数とは?

fmt.Errorfは、Go言語で「自分だけのエラーメッセージ」を作るための関数です。エラーの原因や値を詳しく書けるので、あとで読み返したときに何が起きたか分かりやすくなります。

たとえば、数値や文字列などの変数を文章の中に埋め込むことができます。これはerrors.Newにはできない便利なポイントです。

もう少しイメージしやすいように、すごく簡単なサンプルを見てみましょう。


package main

import "fmt"

func main() {
    name := "太郎"
    err := fmt.Errorf("ユーザー名「%s」は登録に失敗しました", name)
    fmt.Println(err)
}

このように、%snameが入ることで、状況がはっきりと伝わるエラーメッセージを作れます。

「整形(せいけい)」というのは、ただ文字を並べるのではなく、読み手に伝わりやすい形に整えるという意味だと思っておくと分かりやすいですよ。

2. なぜfmt.Errorfを使うの?

2. なぜfmt.Errorfを使うの?
2. なぜfmt.Errorfを使うの?

プログラムのエラーは、ただ「失敗しました」と表示するだけだと、あとで原因を調べる人がとても困ります。どんな値が入っていて、何が問題だったのかが分かるエラーメッセージの方が、トラブルを素早く発見できます。

例えば、次のようにせっかく数値をチェックしていても、説明が足りないと状況が伝わりません。


package main

import "fmt"

func checkAge(age int) error {
    if age < 0 {
        return fmt.Errorf("年齢が不正です: %d", age)
    }
    return nil
}

func main() {
    err := checkAge(-2)
    fmt.Println(err)
}

このように%dに実際の値が入ることで、「なぜエラーになったのか」が読み手にしっかり伝わります。つまり、fmt.Errorfはただのエラーではなく、状況を説明できる「分かりやすいエラーメッセージ」を作るために使うのです。

メッセージが具体的になれば、プログラムを修正する人も迷いにくくなり、バグの発見や改善がスムーズになります。こうした理由から、fmt.Errorfはとても便利な仕組みだと覚えておくと良いですよ。

3. fmt.Errorfの基本的な使い方

3. fmt.Errorfの基本的な使い方
3. fmt.Errorfの基本的な使い方

使い方はfmt.Printfなどと同じ書式を使います。文字列の中に%v%dなどの書式指定子を置き、後から値を渡して埋め込みます。例を見てみましょう。


package main

import (
    "fmt"
)

func checkNumber(n int) error {
    if n < 0 {
        return fmt.Errorf("エラー: 入力された数値は%dです。正の数を入力してください", n)
    }
    return nil
}

func main() {
    err := checkNumber(-10)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("正常に処理されました")
    }
}

この例では、nの値を%dでメッセージに埋め込んでいます。fmt.Errorfはこの文字列を元にエラーを作ります。

4. 文字列の書式指定子とは?

4. 文字列の書式指定子とは?
4. 文字列の書式指定子とは?

書式指定子とは、文字列の中に特定の型の値を入れるための「穴」のようなものです。代表的なものを紹介します。

  • %d:整数を表す
  • %s:文字列を表す
  • %v:値を適切な形で表示(万能型)
  • %f:浮動小数点数(小数)を表す

これらを使うことで、好きな形でメッセージを作れます。

5. 複数の値をメッセージに埋め込む例

5. 複数の値をメッセージに埋め込む例
5. 複数の値をメッセージに埋め込む例

複数の値を埋め込むときは、書式指定子の数だけ値を書きます。例を見ましょう。


package main

import (
    "fmt"
)

func validateInput(name string, age int) error {
    if age < 0 {
        return fmt.Errorf("ユーザー%sの年齢が不正です: %d歳は正しくありません", name, age)
    }
    return nil
}

func main() {
    err := validateInput("太郎", -3)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("入力は正常です")
    }
}

ここでは%sで文字列のnameを、%dで整数のageをメッセージに埋め込んでいます。

6. エラーメッセージは具体的に書こう

6. エラーメッセージは具体的に書こう
6. エラーメッセージは具体的に書こう

エラーの原因や値がわかるメッセージにすることで、あとで問題の調査や修正がスムーズになります。fmt.Errorfを使うと簡単に具体的なメッセージを作成できるので、積極的に活用しましょう。

7. fmt.Errorfはエラーの内容を動的に作れる便利な関数

7. fmt.Errorfはエラーの内容を動的に作れる便利な関数
7. fmt.Errorfはエラーの内容を動的に作れる便利な関数

fmt.Errorfはエラーの内容を変数によって変えたいときや、複雑なメッセージを作るときに特に役立ちます。Go言語でエラーハンドリングをしっかり行うためには、エラーメッセージをわかりやすく整形するスキルも重要です。

8. Go言語でfmt.Errorfを使うメリットを整理しよう

8. Go言語でfmt.Errorfを使うメリットを整理しよう
8. Go言語でfmt.Errorfを使うメリットを整理しよう

fmt.Errorfを使うと、ただエラーを返すだけでなく「そのとき何が起きたのか」を具体的に伝えられるようになります。変数の値を埋め込んだり、読み手にわかりやすい文章に整えたりできるので、後でコードを読む人が状況を想像しやすくなるのが大きな利点です。


package main

import "fmt"

func loadFile(file string) error {
    return fmt.Errorf("ファイル「%s」の読み込みに失敗しました", file)
}

func main() {
    err := loadFile("data.txt")
    fmt.Println(err)
}

このように、どのファイルで問題が起きたのかが一目で分かります。特に複数の処理があるプログラムでは、原因の特定がとても早くなります。

「エラーが出たから終わり」ではなく、分かりやすいエラーメッセージを作ることで、プログラム全体の品質やメンテナンス性も向上します。Go言語を使うなら、ぜひfmt.Errorfを上手に活用してみてください。

まとめ

まとめ
まとめ

Go言語でエラーメッセージを整形する方法としてfmt.Errorfを使うテクニックは、実務でも非常に役立つ知識です。この記事では、単にエラーを発生させるだけでなく、どのようにしてその内容を「伝わるかたち」に整えるかを丁寧に紹介しました。fmt.Errorfを使えば、変数の値を埋め込みつつ、ユーザーにとっても開発者にとっても読みやすく、意味のあるエラーメッセージを作成できます。

特に、%d(整数)や%s(文字列)、%v(汎用)といった書式指定子を使いこなせるようになると、より柔軟な出力が可能になります。これにより、関数に渡された引数の内容やエラーの詳細を正確にログとして残せるので、デバッグやエラー解析のスピードも大幅に向上します。

例えば、数値が負の値だった場合に具体的なエラー内容を出力したり、複数の入力値を確認して異常があった箇所を詳しく報告することで、より堅牢なアプリケーション設計に近づけます。実際に業務の中でバグの原因を探るとき、fmt.Errorfによって明確なエラー情報が出力されていると、原因特定にかかる時間が大幅に短縮されます。

また、Go言語の標準パッケージであるfmtを活用している点も見逃せません。外部ライブラリに頼らずに、標準機能だけでここまでのことができるのはGo言語の魅力のひとつです。シンプルながらも、fmt.Errorfには実に多くの工夫が詰まっています。

最後に、実践的なコードを通して学んだように、メッセージの中で変数の値を埋め込むことで、ユーザーに優しいメッセージを提供でき、同時に開発者にとっても管理しやすいコードが実現します。ぜひ日頃の開発でも、fmt.Errorfを使って「伝わるエラー」を意識してみてください。

実践コードの振り返り


package main

import (
    "fmt"
)

func divide(a, b int) error {
    if b == 0 {
        return fmt.Errorf("エラー: 割り算の分母が0です。a=%d, b=%d", a, b)
    }
    result := a / b
    fmt.Println("計算結果:", result)
    return nil
}

func main() {
    err := divide(10, 0)
    if err != nil {
        fmt.Println(err)
    }
}

このようにfmt.Errorfを使えば、単なる「エラー発生」ではなく、何が原因だったのかを具体的に伝えることができます。

先生と生徒の振り返り会話

生徒

「先生、この記事でfmt.Errorfの使い方がすごくわかりました!ただエラーを出すだけじゃなくて、意味のあるメッセージにできるのが便利ですね。」

先生

「そうだね。特に、どの変数が原因でエラーになったのかをはっきり示せる点が大事なんだ。ログに残したり、ユーザーに伝える場面でもとても役立つよ。」

生徒

「エラーの場所や値が一目でわかるって、バグの原因調査にも良さそうですね!」

先生

「そのとおり。今日学んだ%d%sといった書式指定子も、慣れるとすぐに使いこなせるようになるよ。今後もいろいろなパターンで試してみるといいね。」

生徒

「はい!まずはエラーに意味を持たせるところから始めてみます!」

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Go言語でエラーメッセージをカスタマイズするにはどうしたらいいですか?

Go言語では、fmt.Errorf関数を使うことで、変数の値を含めたカスタマイズされたエラーメッセージを作成できます。

Goのfmt.Errorfとerrors.Newの違いは何ですか?

fmt.Errorfは書式指定子を使ってエラーメッセージを整形できるのに対し、errors.Newは単純な文字列しか設定できません。
関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

関連記事:
カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説