【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開発

Harmonic Society

この記事の内容、自社の業務でも活かせそうですか?

ローカルLLM・AI・クラウドなどの技術導入を、要件整理からPoC・社内展開まで代表エンジニアが伴走します。オンライン対応・全国OK。まずは30分の無料相談から。売り込みはしません。

共有:
無料メルマガ

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

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

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

関連記事

Related / 9 articles

  1. バックエンド・API

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

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

  2. バックエンド・API

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

    FastAPIの使い方を初心者向けに丁寧に解説。インストールから基本的なAPI作成、データバリデーションまで実例コード付きで紹介します。中小企業のシステム内製化にも最適なPythonフレームワークです。

  3. バックエンド・API

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

    GraphQLとREST APIの違いを初心者にもわかりやすく解説。それぞれの特徴、メリット・デメリット、選び方のポイントまで実例を交えてご紹介します。中小企業のシステム選定にお役立てください。

  4. バックエンド・API

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

    情報セキュリティポリシーの作り方を中小企業向けに解説。IT担当者がいなくても大丈夫。基本方針から実施手順まで、テンプレートを使った具体的な策定方法と形骸化させない運用のコツをわかりやすく紹介します。

  5. バックエンド・API

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

    Node.jsとBunの違いを初心者にもわかりやすく解説。性能・導入コスト・学習難易度を比較し、中小企業に最適な選択肢を提案します。Excel管理から脱却したい経営者・IT担当者必見の実践的ガイドです。

  6. バックエンド・API

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

    OAuth2.0認証の仕組みを初心者にもわかりやすく図解で解説します。認証と認可の違い、アクセストークンの役割、実際の動作フローまで、中小企業のIT担当者が知っておくべき基本をやさしく説明します。

  7. バックエンド・API

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

    REST API設計のベストプラクティスを初心者にもわかりやすく解説。URL設計、命名規則、エラーハンドリングなど、実務で使える具体例とともに紹介します。中小企業のシステム開発にも役立つ実践的なガイドです。

  8. バックエンド・API

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

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

  9. バックエンド・API

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

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

Harmonic Society

「読んで終わり」にせず、自社の業務で試してみませんか?

AI・ローカルLLM・クラウドの導入を、要件整理からPoC・社内展開まで代表エンジニアが伴走します。オンライン対応・全国OK・売り込みなし。

無料・30分・オンラインOK|1営業日以内に返信します