1
1

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言語とDockerで『Hello, World!』を実装し、ローカル環境で動かしてみた

Last updated at Posted at 2025-01-12

はじめに

Googleが開発したプログラミング言語「Go」を学ぶために、Dockerを活用して「Hello, World!」を実行する手順を記録として記事にまとめました。

「Hello, World!」の出力やDockerファイルの作成といった基本的な操作をマスターしたいと考え、この機会に学びを整理し、備忘録として記録しています。

今回の記事では、Go言語については main.go ファイルの中でのみ触れていますが、この内容がどなたかの技術学習の支えになれば幸いです。

書こうと思ったきっかけ

以前からGo言語に興味があり、学んでみたいと思っていました。しかし、他の技術習得を優先していたため、なかなか手をつけられないでいました...。

しかし、時間的に余裕ができたこの機会に、次はGo言語をキャッチアップしようと決めました。

普段はクラウド領域を専門としており、Lambda関数でのPythonや、TerraformのHashiCorp Configuration Language (HCL)、CloudFormationでのYAMLやJSONなどを中心に扱っています。

一方で、技術領域は広ければ広いほど応用が効くと考えています。そのため、興味を持った技術は、『実践的なハンズオンと記事のアウトプット』を組み合わせ、効率よく習得することを心がけています。

また、前回の記事では、Linux、Mac、Windowsそれぞれの環境でのGo言語のインストールと設定についてガイドをまとめました。詳細はこちらをご覧ください。

Go言語とDockerの知識整理

※未来の自分への備忘録として、Go言語とDockerについて改めて知識を整理します。

Go言語について

Go言語(Golang)は、Googleが開発したオープンソースのプログラミング言語です。

特徴

  • 軽量性と高速性
    コンパイルが速く、実行時のパフォーマンスも高い。
  • 並行処理の強力なサポート
    GoroutinesとChannelで効率的な並行処理を実現。
  • 標準ライブラリが充実
    ネットワーク、ファイル操作、JSON処理など、便利な機能を提供。

主な用途

  • サーバーサイドアプリケーション
  • クラウドツール(例: Docker、Kubernetes)
  • ネットワークプログラミング


Dockerについて

Dockerは、コンテナ技術を利用してアプリケーションの開発・デプロイを効率化するプラットフォームです。

特徴

  • 軽量な仮想環境
    コンテナを使用してアプリケーションと依存関係をパッケージ化。
  • 高い移植性
    異なる環境(開発、テスト、本番)間で一貫した動作を保証。
  • 迅速なデプロイ
    環境の準備やリリースが短時間で可能。

主な用途

  • 開発環境の構築
  • マイクロサービスの実現
  • CI/CD(継続的インテグレーション・継続的デリバリー)環境の構築

実際に「Hello, World!」やってみた

Dockerを使ってGoプログラムをセットアップし、実行する手順をご紹介します。

以下は簡単なGoアプリケーションをDockerで動かす方法です。

ディレクトリ構造

以下のようなディレクトリ構造を用意します。

my-go-app/
├── main.go
├── Dockerfile
├── docker-compose.yml

1. main.go ファイルの内容

以下のコードを main.go に保存します。

package main

import (
	"fmt"
	"net/http"
)

// リクエストを処理するハンドラ関数
func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "Hello, World!")
}

func main() {
	// ハンドラ関数をルートパスに登録
	http.HandleFunc("/", handler)

	// サーバーをポート8080で起動
	fmt.Println("Server is running on port 8080...")
	http.ListenAndServe(":8080", nil)
}

2. Dockerfile の内容

以下の内容を Dockerfile に保存します。

# Goの公式イメージを使用
FROM golang:1.20

# 作業ディレクトリを設定
WORKDIR /app

# Goアプリケーションのソースコードをコピー
COPY . .

# Goモジュールを初期化し、依存関係を解決
RUN go mod init my-go-app && go mod tidy

# アプリケーションをビルド
RUN go build -o main .

# コンテナが起動時に実行するコマンド
CMD ["./main"]

# ポート8080を開放
EXPOSE 8080

3. docker-compose.yml の内容

以下の内容を docker-compose.yml に保存します。

version: "3.8"

services:
  app:
    build:
      context: .
    ports:
      - "8080:8080"
    container_name: go_app

4. セットアップと起動

以下の手順でDockerコンテナを構築して実行します。ターミナルで my-go-app ディレクトリに移動します。

cd my-go-app

Dockerイメージをビルドします。

docker compose build

コンテナを起動します。

docker compose up

コンテナを停止したい場合は、以下のコマンドを実行します。

docker compose down

ブラウザでアクセスしてみた

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

Screenshot 2025-01-12 at 19.27.44.png

また、ターミナル上では以下のように、go_app | Server is running on port 8080... と出力され、正常に起動していることが確認できます。

Screenshot 2025-01-12 at 20.23.50.png

これで、docker compose コマンドを使用したGoアプリケーションのセットアップと実行が完了しました!

まとめ

ここまでお読みいただきありがとうございました。今回は、Docker上でGoアプリケーションを動かす基本的な技術検証を行い、想定通り「Hello, World!」を表示させることができました。

少し触った印象として、Pythonよりもかなり速い速度でコンテナが立ち上がったように感じました。

この速度は、Goの特徴である「軽量性」と「高速性」によるものではないかと個人的に思います(間違っていたら、ごめんなさい)。

次回は、自宅環境にあるMySQLデータベースと接続する技術検証を試してみたいと考えています。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?