カテゴリ: Go言語 更新日: 2026/01/06

Go言語の標準ライブラリerrorsパッケージの便利関数を解説!初心者でもわかるエラー処理入門

Go言語の標準ライブラリerrorsパッケージの便利関数を解説
Go言語の標準ライブラリerrorsパッケージの便利関数を解説

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

生徒

「先生、Go言語でエラーを扱うときにerrorsパッケージって聞くんですけど、どんな便利な関数があるんですか?」

先生

「いい質問ですね。Go言語の標準ライブラリにあるerrorsパッケージは、エラーを簡単に作ったり、調べたりできる便利な関数が揃っています。今回は初心者向けにわかりやすく解説しますよ。」

生徒

「お願いします!プログラミング未経験でも理解できるように教えてください!」

先生

「わかりました。それでは順番に見ていきましょう!」

1. errors.New関数とは?簡単にエラーを作る方法

1. errors.New関数とは?簡単にエラーを作る方法
1. errors.New関数とは?簡単にエラーを作る方法

errors.Newは、エラーメッセージを文字列として指定し、その内容を持つ新しいエラー値を作るための、とてもシンプルで使いやすい関数です。プログラミング初心者でもすぐに使える機能で、「何が問題だったのか」を分かりやすく伝えるために重宝します。

たとえばファイル処理やデータの読み込みなどで問題が起きた場合、開発者が「ここでエラーが発生した」と知らせるための“合図”が必要になります。errors.Newはその合図を作る基本的な方法で、Go言語のエラー処理の土台となるものです。

次のサンプルは、特定の処理が失敗したときに自作のエラーを返す簡単な例です。未経験の方でも動きをイメージしやすいよう、できるだけシンプルに書いています。


import "errors"

func openFile() error {
    // 何か問題が起きたと仮定して、エラーを作って返す
    return errors.New("ファイルが見つかりません")
}

このように、errors.New("メッセージ")と書くだけで、好きな内容のエラーを作れます。これによって、関数の呼び出し側は「何が原因で失敗したのか」を知ることができ、プログラムをより安全に制御しやすくなります。

たとえば実際に呼び出してみると、次のようにエラーメッセージが返ってきます。


func main() {
    if err := openFile(); err != nil {
        fmt.Println("エラー発生:", err)
    }
}

この出力によって、問題をすぐに把握できるようになるわけです。まずはこのerrors.Newを使いながら、エラー処理の仕組みになれていきましょう。

2. errors.Is関数とは?エラーの種類を調べる方法

2. errors.Is関数とは?エラーの種類を調べる方法
2. errors.Is関数とは?エラーの種類を調べる方法

errors.Isは、「今扱っているエラーが、特定のエラーと同じ種類かどうか」を調べるための関数です。プログラムを動かしていると、ファイルがなかったり、アクセス権がなかったりと、いろいろな理由でエラーが発生します。その中から「これはファイルが存在しないエラーだな」のように原因を見分けたいときに使います。

エラー処理をするときに、「とりあえず全部同じエラーとして表示する」よりも、「この場合はこう対処しよう」と分けられたほうが、ユーザーにとっても開発者にとっても分かりやすくなります。errors.Isは、そういったエラーの判定ロジックをシンプルに書ける便利な道具です。

例えば、ファイルを開こうとしたときに、そのファイルが存在しない場合だけ、メッセージを変えてあげたいケースを考えてみましょう。


import (
    "errors"
    "fmt"
    "os"
)

// ファイルを開こうとしてみる関数(失敗する前提の例)
func openConfig() error {
    _, err := os.Open("config.txt")
    return err
}

func checkError(err error) {
    // 「ファイルが存在しないエラーかどうか」を判定
    if errors.Is(err, os.ErrNotExist) {
        fmt.Println("設定ファイルが見つかりません。ファイル名や場所を確認してください。")
    } else {
        fmt.Println("その他のエラーです:", err)
    }
}

func main() {
    if err := openConfig(); err != nil {
        checkError(err)
    }
}

このサンプルでは、openConfig関数でファイルを開こうとして、その結果として返ってきたerrcheckError関数で確認しています。errors.Is(err, os.ErrNotExist)と書くことで、「このエラーは『ファイルが存在しない』という種類のエラーかどうか?」を質問しているイメージです。

もしファイルが存在しなければ、ユーザーに対して「設定ファイルが見つかりません」と具体的なメッセージを表示できますし、それ以外の原因であれば「その他のエラーです」としてまとめて扱うことができます。このように、errors.Isを使うと、Go言語のエラー処理を状況に応じて分かりやすく書き分けられるようになります。

3. errors.As関数とは?エラーの中身を詳しく取り出す方法

3. errors.As関数とは?エラーの中身を詳しく取り出す方法
3. errors.As関数とは?エラーの中身を詳しく取り出す方法

エラーは時々、特別な情報を持っていることがあります。errors.Asは、そのエラーを特定の型(種類)に変換して、中の情報を取り出すための関数です。

これは「このエラーは〇〇のエラーかな?」と調べて、中の詳細を扱いたいときに使います。


import (
    "errors"
    "fmt"
    "os"
)

func checkPathError(err error) {
    var pathErr *os.PathError
    if errors.As(err, &pathErr) {
        fmt.Println("パスに関するエラーです:", pathErr.Path)
    } else {
        fmt.Println("別のエラーです:", err)
    }
}

4. errors.Unwrap関数とは?エラーを包んだ元のエラーを取り出す方法

4. errors.Unwrap関数とは?エラーを包んだ元のエラーを取り出す方法
4. errors.Unwrap関数とは?エラーを包んだ元のエラーを取り出す方法

エラーは他のエラーを包み込む(ラップする)ことができます。errors.Unwrapは、その包まれた元のエラーを取り出す関数です。

例えば、関数の中でエラーをわかりやすく説明し直すとき、元のエラーを隠さずに持ち続けたいときに使います。


import (
    "errors"
    "fmt"
)

func example() {
    baseErr := errors.New("元のエラー")
    wrappedErr := fmt.Errorf("追加情報: %w", baseErr)

    fmt.Println("元のエラー:", errors.Unwrap(wrappedErr))
}

5. 便利なエラーハンドリングのポイント

5. 便利なエラーハンドリングのポイント
5. 便利なエラーハンドリングのポイント

Go言語のerrorsパッケージを使うと、エラーを簡単に作成したり、エラーの種類を判別したりできます。特に以下のポイントを覚えておきましょう。

  • errors.Newで簡単にエラーを作成できる
  • errors.Isで特定のエラーかどうか判定できる
  • errors.Asでエラーの中身を詳しく扱える
  • errors.Unwrapでラップされた元のエラーを取り出せる

これらを使いこなせば、Go言語のエラー処理がとても楽になりますよ。

まとめ

まとめ
まとめ

Go言語の標準ライブラリであるerrorsパッケージは、初心者がエラー処理を理解するうえでとても役立つ機能を数多く備えています。とくに、プログラムが正しく動作するためには「どんな問題が起きたのか」を知ることが重要であり、その基本となるのがエラーの管理と判定です。errors.Newでエラーの作成ができ、errors.Isで種類を判定し、errors.Asで詳細を取り出し、errors.Unwrapでラップされたエラーの本体を取得するという一連の流れは、Go言語でエラーハンドリングを行う場面で何度も登場します。これらを身につけることで、プログラムの信頼性が高まり、実際の開発現場でも安心してコードを書けるようになります。 また、日常的な開発の中では、複数のエラーを見分けたり、異なるパッケージから発生したエラーを一つずつ丁寧に扱うことが求められるため、errorsパッケージを深く理解しておくと複雑な処理でも整理しやすくなります。特にWeb開発やファイル操作、ネットワーク通信など、さまざまな場面で役立つため、今回学んだ内容は長く活かせる基礎知識となるでしょう。 さらに、Go言語ではエラーを例外として扱わず、戻り値として扱うという特徴があります。そのため、エラー処理の流れをきちんと組み立てる力は、Goの流儀を理解する大きな一歩になります。初学者であっても、今回のerrorsパッケージの便利関数を活用することで、より実践的で読みやすいエラーハンドリングが可能となり、アプリケーション全体の品質向上にもつながります。

サンプルプログラムを使った振り返り

以下のサンプルコードでは、errorsパッケージの主要な機能をまとめて使い、どのようにエラーを扱うかを一箇所に整理しています。同じようなクラス・タグ構成で示しているため、記事全体の流れとあわせて復習できます。


import (
    "errors"
    "fmt"
    "os"
)

func main() {
    baseErr := errors.New("基本的なエラーです")
    wrappedErr := fmt.Errorf("追加された情報です: %w", baseErr)

    if errors.Is(wrappedErr, baseErr) {
        fmt.Println("同じ種類のエラーを検出しました")
    }

    var pathErr *os.PathError
    if errors.As(wrappedErr, &pathErr) {
        fmt.Println("パスに関するエラーを確認しました")
    } else {
        fmt.Println("特定のパスエラーではありません")
    }

    fmt.Println("元のエラー:", errors.Unwrap(wrappedErr))
}

このように、errorsパッケージを組み合わせることでエラーの種類を見極めたり、詳細情報を取り出したり、元のエラーを把握したりできるため、エラーハンドリングがより実用的で明確になります。特に、複数の処理が連鎖するアプリケーションや、詳細なログを残したい場面では非常に有効です。

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

生徒

「errorsパッケージって、こんなに便利で奥が深いんですね。最初はエラー処理って難しいと感じていましたけど、今回の内容でだいぶ理解できました!」

先生

「そうですね。Go言語ではエラーを戻り値で扱うという特徴がある分、正しく扱えるかどうかが品質に直結します。今日学んだerrors.New、errors.Is、errors.As、errors.Unwrapは基本だけれど、とても強力ですよ。」

生徒

「特にerrors.Isは、どのエラーか判定するのに使えるので便利だと思いました。複雑な処理を作るときにも役立ちそうです!」

先生

「その通りです。errors.Asで詳細を取り出したり、errors.Unwrapで元のエラーを確認することで、原因究明もスムーズになります。開発が進むほど、こうした関数の重要性がわかってきますよ。」

生徒

「もっと実践的に使ってみたいです!今回のサンプルコードも参考になりました。」

先生

「ぜひどんどん使ってください。エラー処理を丁寧に書けるエンジニアはとても信頼されますからね。」

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

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

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

Go言語のerrorsパッケージとは何ですか?

Go言語のerrorsパッケージは、標準ライブラリに含まれており、エラーの作成や判定、詳細の抽出などができる便利な機能が揃ったパッケージです。
関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのforループの基本!範囲・配列・コレクションの繰り返し処理
New2
Go言語
Go言語のスライスでappend時のメモリの仕組みを理解しよう!初心者でもわかる基礎解説
New3
Go言語
Go言語のスコープとは?ローカル変数・グローバル変数の違いと使い分け
New4
Go言語
Go言語のhttp.ResponseWriterとhttp.Requestの仕組みを理解しよう
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.4
Java&Spring記事人気No4
Swift
Swiftで数値と文字列を相互変換!NumberFormatterで桁区切りや通貨表示をわかりやすく解説
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.7
Java&Spring記事人気No7
Kotlin
Kotlinで画面遷移を実装しよう!初心者でもわかるIntentの使い方完全ガイド
No.8
Java&Spring記事人気No8
Swift
SwiftPMでのバージョン指定と互換性の考え方を初心者向けに徹底解説