【Go言語入門】Web開発の始め方を実例で解説|初心者でも作れるAPI開発

kento_morota 17分で読めます
社内のAI・IT活用、技術がわかる相手に無料相談。 相談 →
目次

既存のSaaSでは自社の業務にフィットしない、かといって外注開発は高額で小回りが利かない――そんな中小企業にとって、シンプルで高速なGo言語はWeb開発の有力な選択肢です。同じくパフォーマンスに優れた言語としてRustも注目されています。

この記事では、Go言語でのWeb開発の始め方を、環境構築からAPI開発の実践まで初心者にもわかりやすく解説します。

Go言語でWeb開発を始める前に知っておきたいこと

「自社の業務に合ったシステムが欲しいが、既存のSaaSでは機能が合わない」「外注すると高額で、小さな修正も都度費用がかかる」——こうした課題を抱える中小企業のIT担当者にとって、Go言語は有力な選択肢です。

Go言語(Golang)は、シンプルで学びやすく、高速に動作するため、小規模なチームでも「ちょうどいい」Webシステムを構築できます。完璧なエンジニアになる必要はありません。必要な機能だけを理解し、小さく始めることで、属人化を防ぎ、業務効率化を実現できます。

Go言語がWeb開発で選ばれる理由

Go言語は、Googleが開発したプログラミング言語で、Web開発の現場で急速に採用が広がっています。その理由は主に3つです。

1. 圧倒的な処理速度
コンパイル型言語のため、PHPやPythonといったスクリプト言語と比較すると、数倍から数十倍の速度で処理できます。顧客管理システムや予約システムなど、データ処理が多い業務システムでも快適に動作します。

2. シンプルで読みやすい文法
文法が非常にシンプルで、覚えることが少ないのが特徴です。誰が書いても似たコードになるため、属人化を防ぎ、後任者への引き継ぎがスムーズになります。

3. 並行処理が得意
複数の処理を同時に実行する並行処理が言語レベルでサポートされています。複数ユーザーからの同時アクセスや、メール送信などのバックグラウンド処理を効率的に実装でき、小規模なサーバーでも多くのリクエストを捌けます。API設計の基本はREST API設計のベストプラクティスを参考にしてください。

他の言語との比較

Web開発でよく使われる言語と比較すると、Go言語の立ち位置が明確になります。

  • PHP:WordPressなどで広く使われますが、言語仕様が複雑で書き方が統一されにくい傾向があります。Goは文法がシンプルで、チーム開発や引き継ぎに有利です。

  • Python:機械学習やデータ分析では強力ですが、Web開発における実行速度ではGoに劣ります。リアルタイム性が求められる業務システムではGoが適しています。

  • Node.js:高速ですが、非同期処理の概念が初心者には難しく感じられることがあります。Goは並行処理の記述がシンプルで、直感的に理解しやすい設計です。

Go言語が適している開発ケース

Go言語は、特に以下のようなケースで威力を発揮します。

Excel管理から脱却したい業務システム
顧客情報や案件情報をExcelで管理していると、複数人での同時編集や検索性に課題が出ます。GoでシンプルなWeb管理システムを構築すれば、ブラウザからアクセスでき、データの一元管理が可能になります。

既存SaaSでは機能が合わない場合
多機能なSaaSは便利ですが、自社の業務フローに完全に合わないことも多く、月額費用も積み重なります。必要な機能だけを持った「ちょうどいい」システムをGoで作れば、長期的なコスト削減につながります。

スマホアプリのバックエンドAPI
スマホアプリを開発する際、データを管理するバックエンドシステムが必要です。GoはAPIの構築が得意で、高速なレスポンスを提供できます。

社内ツールの内製化
予約管理、タスク管理、見積・請求システムなど、社内の小さな業務を効率化するツールは、大規模な開発は不要です。Goなら短期間で実装でき、運用コストも抑えられます。


Go言語の開発環境を準備しよう

プログラミングを始める第一歩は、開発環境の構築です。Go言語は環境構築が非常にシンプルで、初心者でも迷いにくい設計になっています。

Goのインストール方法

Windowsの場合
公式サイト(https://go.dev/dl/)から「Microsoft Windows」用のインストーラー(.msiファイル)をダウンロードし、実行します。インストール先はデフォルト(C:\Program Files\Go)のままで問題ありません。

Macの場合
Homebrewを使う方法が最も簡単です。ターミナルで以下を実行します。

brew install go

Linuxの場合(Ubuntu/Debian系)

wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

インストール後、バージョン確認をします。

go version

バージョン情報が表示されれば、インストール成功です。

VS Codeのセットアップ

Go言語の開発には、Visual Studio Code(VS Code)が最もおすすめです。無料で、拡張機能が豊富、動作も軽快です。

  1. 公式サイト(https://code.visualstudio.com/)からダウンロードしてインストール
  2. VS Codeの拡張機能から「Go(Go Team at Google提供)」をインストール

この拡張機能により、コード補完、エラー検出、自動フォーマット、デバッグ機能が使えるようになります。

Hello Worldを動かしてみる

実際にプログラムを動かしてみましょう。

1. プロジェクトフォルダの作成

mkdir hello-go
cd hello-go
go mod init hello-go

2. main.goファイルの作成

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

3. プログラムの実行

go run main.go

「Hello, World!」と表示されれば成功です。

よく使うGoコマンド

コマンド 用途
go run ファイルを実行
go build 実行ファイルを生成
go mod init モジュール初期化
go mod tidy 不要な依存を削除
go get パッケージをインストール
go fmt コードを整形

Go言語の基本文法

Web開発で実際に使う部分に絞って学ぶことで、効率的にスキルアップできます。

変数とデータ型

Go言語では、変数を宣言する方法が複数あります。

// 短縮記法(関数内で最もよく使う)
name := "山田太郎"
age := 30

// 定数の宣言
const CompanyName = "Harmonic Society"

よく使うデータ型

  • string:文字列
  • int:整数
  • float64:小数
  • bool:真偽値
  • []string:文字列の配列

関数の書き方

関数は、処理をまとめて再利用可能にする仕組みです。

func greet(name string) string {
    return "こんにちは、" + name + "さん"
}

複数の戻り値を返す

Go言語の特徴的な機能として、複数の値を返せます。エラー処理でよく使われます。

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("ゼロで割ることはできません")
    }
    return a / b, nil
}

構造体とJSON変換

構造体は、複数のデータをまとめて扱うための仕組みです。

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

func main() {
    user := User{ID: 1, Name: "山田太郎", Email: "yamada@example.com"}

    // 構造体 → JSON
    jsonData, _ := json.Marshal(user)
    fmt.Println(string(jsonData))
}

エラーハンドリング

Go言語では、エラーを戻り値として返す方式を採用しています。

result, err := someFunction()
if err != nil {
    fmt.Println("エラーが発生しました:", err)
    return
}
fmt.Println("結果:", result)

このパターンは、Go言語のコードで何度も登場します。エラーの見落としを防げる安全な設計です。


標準パッケージでWebサーバーを作る

Go言語の標準ライブラリnet/httpを使えば、フレームワークなしでもWebサーバーを構築できます。

最もシンプルなWebサーバー

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, Web Server!")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("サーバー起動: http://localhost:8080")
    http.ListenAndServe(":8080", nil)
}

ブラウザでhttp://localhost:8080にアクセスすると、「Hello, Web Server!」と表示されます。

ルーティングの設定

複数のページを持つWebサイトを作るには、URLごとに処理を分けます。

func main() {
    http.HandleFunc("/", homeHandler)
    http.HandleFunc("/about", aboutHandler)
    http.HandleFunc("/contact", contactHandler)

    http.ListenAndServe(":8080", nil)
}

JSONを返すAPI

Web APIでは、JSON形式でデータをやり取りします。

type Response struct {
    Message string `json:"message"`
    Status  int    `json:"status"`
}

func apiHandler(w http.ResponseWriter, r *http.Request) {
    response := Response{
        Message: "API接続成功",
        Status:  200,
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(response)
}

Ginフレームワークで実践的なAPI開発

実務では、フレームワークを使うことで開発効率が大幅に向上します。Ginは、Go言語で最も人気のあるWebフレームワークです。

Ginのインストール

go get -u github.com/gin-gonic/gin

基本的な使い方

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()

    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "Hello, Gin!",
        })
    })

    r.Run(":8080")
}

RESTful APIの実装

CRUD操作(作成・読取・更新・削除)を実装します。

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

var users = []User{
    {ID: 1, Name: "山田太郎", Email: "yamada@example.com"},
}

func main() {
    r := gin.Default()

    // 一覧取得
    r.GET("/users", func(c *gin.Context) {
        c.JSON(200, users)
    })

    // 詳細取得
    r.GET("/users/:id", func(c *gin.Context) {
        id := c.Param("id")
        c.JSON(200, gin.H{"id": id})
    })

    // 新規作成
    r.POST("/users", func(c *gin.Context) {
        var newUser User
        if err := c.BindJSON(&newUser); err != nil {
            c.JSON(400, gin.H{"error": err.Error()})
            return
        }
        users = append(users, newUser)
        c.JSON(201, newUser)
    })

    r.Run(":8080")
}

データベースと連携する

実際の業務データを扱うには、データベースとの連携が必要です。

データベースの選び方

  • SQLite:ファイルベースで簡単。小規模システムに最適
  • MySQL:広く使われている。中規模システムに適している
  • PostgreSQL:高機能で信頼性が高い。本格的なシステムに推奨

GORMを使ったデータベース操作

GORMは、Go言語で最も人気のあるORMライブラリです。

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

基本的な使い方

package main

import (
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

type User struct {
    ID    uint   `json:"id" gorm:"primaryKey"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

func main() {
    // データベース接続
    db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})

    // テーブル作成
    db.AutoMigrate(&User{})

    // データ作成
    user := User{Name: "山田太郎", Email: "yamada@example.com"}
    db.Create(&user)

    // データ取得
    var users []User
    db.Find(&users)
}

GinとGORMを組み合わせたAPI

func main() {
    db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    db.AutoMigrate(&User{})

    r := gin.Default()

    // 一覧取得
    r.GET("/users", func(c *gin.Context) {
        var users []User
        db.Find(&users)
        c.JSON(200, users)
    })

    // 新規作成
    r.POST("/users", func(c *gin.Context) {
        var user User
        if err := c.BindJSON(&user); err != nil {
            c.JSON(400, gin.H{"error": err.Error()})
            return
        }
        db.Create(&user)
        c.JSON(201, user)
    })

    r.Run(":8080")
}

これで、データベースと連携した実用的なAPIが完成しました。


実務で使うための次のステップ

認証とセキュリティ

実務では、ユーザー認証やセキュリティ対策が必要です。

  • JWT(JSON Web Token):APIの認証によく使われます
  • HTTPS化:本番環境では必須です
  • 入力値の検証:SQLインジェクションなどの攻撃を防ぎます

テストコードの書き方

Go言語は、テスト機能が標準で用意されています。

// user_test.go
func TestGetUser(t *testing.T) {
    user := getUser(1)
    if user.Name != "山田太郎" {
        t.Error("ユーザー名が一致しません")
    }
}
go test ./...

デプロイの選択肢

  • VPS(さくらのVPS、ConoHa VPS):自由度が高い
  • クラウド(AWS、GCP):スケーラビリティに優れる
  • PaaS(Heroku、Render):簡単にデプロイできる

まとめ

この記事では、Go言語を使ったWeb開発の始め方を、環境構築から実践的なAPI開発まで解説しました。

Go言語は、シンプルで高速、そして学びやすい言語です。中小企業が「ちょうどいい」システムを内製化するには最適な選択肢といえます。

完璧を目指す必要はありません。小さく始めて、業務に合わせて育てていくことで、外注に頼らず、自社に最適化されたシステムを構築できます。

まずは簡単なAPIから作り始め、徐々に機能を追加していきましょう。Go言語なら、あなたの「作りたい」を実現できます。

#Go言語#入門#Web開発
ManageAI 先行モニター企業 募集中|先着5社・2026年11月末まで

生成AIの利用費、「誰が・何のために・いくら」まで見えていますか?

株式会社カイダンと共同開発したAI利用ガバナンスSaaS「ManageAI」は、OpenAI・Azure OpenAI・Claude・AWS Bedrock・Google Vertex AIの費用と利用状況を、部署・利用者・プロジェクト別に可視化します。導入は読み取り専用キーの登録だけ。初期費用0円・月額5万円(税別)で先行モニター企業を募集しています。

ニュースリリースを読む
共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

※ プライバシーポリシーに基づき管理します

関連記事

Related / 9 articles

  1. バックエンド・API

    Denoの使い方と特徴を初心者向けに解説|Node.jsとの違いと実践方法

    Denoの特徴や使い方を初心者にもわかりやすく解説します。TypeScript標準サポート、セキュリティ機能、オールインワン開発環境などの特徴から、実際のインストール方法、基本的な使い方まで実践的に紹介。中小企業のIT担当者が安心して導入で

  2. バックエンド・API

    【FastAPI入門】使い方を実例で解説!初心者でも安心のAPI開発ガイド

    FastAPIの使い方を初心者向けに実例コード付きで解説します。環境構築と仮想環境の作成、Hello Worldと自動生成ドキュメントの確認、GET・POSTリクエストの実装、Pydanticによるバリデーション、データベース連携やCORS設定、テストの書き方まで紹介します。

  3. バックエンド・API

    GraphQLとREST APIの違いとは?中小企業が知っておきたい選び方のポイント

    GraphQLとREST APIの違いを初心者向けに解説します。データ取得の方法やOver-fetching、型定義、エラーハンドリングの違い、それぞれのメリットと向いている場面・注意点、システム規模やチームのスキルから考える選定ポイント、併用の選択肢まで紹介します。

  4. バックエンド・API

    【初心者向け】情報セキュリティポリシーの作り方|中小企業でも実践できる7ステップ

    情報セキュリティポリシーの作り方を中小企業向けに解説します。必要な理由と3つの階層構造、情報資産の洗い出しなど策定前の準備、基本方針から対策基準・実施手順・周知教育・見直しまでの7ステップ、パスワード管理やテレワーク対策の具体例、形骸化させないコツを紹介します。

  5. バックエンド・API

    Node.jsとBunを徹底比較|中小企業のシステム選定ガイド2025

    Node.jsとBunの違いを中小企業のシステム選定の視点で解説。性能のベンチマークと業務での体感差、人材確保と学習環境、npm互換性やフレームワーク対応、5年間の総コスト試算、自社に合う選び方のチェックリストと段階的導入まで紹介します。

  6. バックエンド・API

    【図解】OAuth2.0認証の仕組みを初心者向けにわかりやすく解説

    OAuth2.0認証の仕組みを初心者にもわかりやすく図解で解説します。認証と認可の違い、4つの登場人物、認可リクエストからリソースアクセスまでの4ステップ、認可コードフローなどの選び方、アクセストークンとリフレッシュトークン、セキュリティ対策を紹介します。

  7. バックエンド・API

    REST API設計のベストプラクティス完全ガイド|初心者でも実践できる基本と応用

    REST API設計のベストプラクティスを初心者にもわかりやすく解説。リソース指向のURL設計と命名規則、HTTPメソッドの使い分けと冪等性、ステータスコードとエラーレスポンス、ページネーションやフィルタリング、認証とバージョニングまで具体例とともに紹介します。

  8. バックエンド・API

    【Rust入門】なぜ学ぶべき?中小企業のIT担当者が知っておきたい基礎知識

    Rustを学ぶ理由を初心者向けに解説。中小企業のIT担当者が知っておきたいRustの特徴、メリット、学習の始め方まで実践的にご紹介します。難しいと言われるRustですが、正しく理解すれば業務システムの安全性向上にも役立ちます。

  9. バックエンド・API

    Supabase Edge Functionsの使い方完全ガイド|初心者でも実践できる導入手順

    Supabase Edge Functionsの基本から実践的な使い方まで、初心者にもわかりやすく解説します。環境構築からデプロイ、認証連携、エラー対処まで、中小企業のIT担当者が実務で使えるノウハウを網羅。Excel管理から脱却したい方に

ManageAI

先行モニター企業 募集中

生成AIのコストを「部署別」に、請求書より先に。

先着5社限定・2026年11月末まで。初期費用0円・月額5万円(税別)で、正式版と同等の機能に加え、開発者と伴走者による導入支援を追加費用なしで提供します。プロンプト原文は一切取得しません。

株式会社カイダン × Harmonic Society株式会社の共同事業|読み取り専用キーの登録だけで導入できます