カテゴリ: Go言語 更新日: 2025/12/01

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を使うの?

プログラムのエラーメッセージは、問題の原因を正確に伝えることが大切です。例えば「数値が正しくありません」だけより、「入力された数値は-5です。正の数を入力してください」の方が分かりやすいですよね。

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. さいごに

8. さいごに
8. さいごに

今回紹介したfmt.Errorfは、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言語では、fmt.Errorf関数を使うことで、変数の値を含めたカスタマイズされたエラーメッセージを作成できます。
関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinの構文ルールまとめ!インデント・セミコロンなど初心者が最初に覚えるべきポイント
New2
Kotlin
Kotlinの関数ドキュメンテーションコメント(KDoc)の書き方を徹底解説!初心者でもわかる丁寧なガイド
New3
Kotlin
KotlinでHello Worldを表示するには?最初の1行を実行してみよう
New4
Go言語
Go言語の依存関係管理を始めよう!go modの基本設定と導入手順
人気記事
No.1
Java&Spring記事人気No1
Kotlin
KotlinのAPI通信でGETリクエストを送る方法!初心者向け徹底ガイド
No.2
Java&Spring記事人気No2
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.3
Java&Spring記事人気No3
Go言語
Go言語のテストでタイムアウト・並行処理を扱うポイント
No.4
Java&Spring記事人気No4
Swift
SwiftのURLSessionでのネットワークエラー対策!再試行とタイムアウトを初心者向けに解説
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.7
Java&Spring記事人気No7
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.8
Java&Spring記事人気No8
Swift
Swift JSONデコード失敗の原因と対処|DecodingError徹底解説