5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go初心者がJWT認証付きWeb APIを1日で作った話

Last updated at Posted at 2025-05-29

はじめに

こんにちは、みんみんです。
Goを使ってみたい。でも実務経験はゼロ。

それでも「JWT認証付きのWeb APIを1日で作れる」という話を聞いて、やってみることにしました。

今回は、Go初心者の私が認証機能付きWebアプリを1日で構築した体験談を共有します。

使用技術スタック

  • Go 1.23
  • HTML + JavaScript(Vanilla)
  • JWT(github.com/golang-jwt/jwt/v5)
  • bcrypt(golang.org/x/crypto)
  • golangci-lint(ローカル検証)

実装した機能

  • サインアップ(パスワードはbcryptでハッシュ化)
  • ログイン(JWTトークンを発行)
  • 認証付きプロフィールページ(ログインしないとアクセス不可)
  • 売上の登録/一覧表示(ログイン中のユーザーごとに分離)
  • 表形式での売上表示(合計金額の算出、日付順にソート)
  • ログアウト処理

ディレクトリ構成

├── go.mod                // Goモジュール定義
├── go.sum                // Goモジュール定義
├── main.go               // エントリーポイント
├── models/
│   └── user.go           // ユーザーモデル(Claims構造体など)
│   └── sale.go           // 売上モデル
├── handlers/
│   └── auth.go           // ログイン・サインアップ・プロフィール取得
│   └── sales.go          // 売上登録・取得
├── static/
│   └── login.html        // ログイン画面
│   └── signup.html       // サインアップ画面
│   └── profile.html      // 認証後プロフィール画面
│   └── sales.html        // 売上登録&表示画面

実際の画面イメージ

gif.gif

詰まったポイントと解決法

401 Unauthorized が出続ける

→ 原因は「Bearer 」のスペース忘れ or トークンの形式ミス。Authorization: Bearer xxx の形式を正しく保つ必要あり。

Error return value of (*encoding/json.Encoder).Encode is not checked (errcheck)がたくさん出る

→ 原因はエラーの可能性がある箇所をちゃんと見直さなかったこと。エラーの可能性があるならかならずエラー時の対応を書かないとgolangci-lintに引っかかる。

学び・感想

  • Goは文法がシンプルで読みやすく、API実装にも向いている
  • JWTの使い方が理解できた(トークン発行→保存→検証の流れ)
  • Webアプリの基本的な構造が把握できた
  • Linterのエラーが意外と強力で、ちゃんと直すとコードも綺麗になる
  • なにより「1日でここまでできる」という成功体験は大きい

次にやりたいこと

  • データの永続化(SQLiteやPostgreSQL)
  • テストコードの整備(特にハンドラ部分)
  • CIの安定化(golangci-lintの通過)
  • フロントをReactやVueなどに置き換えてSPA化

最後に

「Go興味あるけど何から始めればいいの?」という方には、JWT付きWeb APIの構築はとてもおすすめです。
短時間で達成感があり、Webの基本構造やセキュリティの勘所も学べると思います。

これからもGo言語学習を進めていきたいので、もしおすすめの学習法などございましたら、ぜひコメントいただけますと嬉しいです!

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?