カテゴリ: Go言語 更新日: 2025/12/25

Go言語のテンプレート(html/template)でHTMLを生成する方法

Go言語のテンプレート(html/template)でHTMLを生成する方法
Go言語のテンプレート(html/template)でHTMLを生成する方法

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

生徒

「先生、GoでWebアプリを作るときにHTMLを動的に生成したいんですが、どうすればいいですか?」

先生

「その場合、Goのhtml/templateパッケージを使うと便利です。HTMLテンプレートを作り、Goのデータを埋め込むことができます。」

生徒

「テンプレートって、どんなイメージですか?」

先生

「テンプレートは雛形のようなもので、変わる部分にデータを埋め込むことで、同じHTMLの構造を使いまわすことができます。」

1. html/templateパッケージとは?

1. html/templateパッケージとは?
1. html/templateパッケージとは?

Goのhtml/templateは、HTMLファイルをテンプレートとして読み込み、動的に文字列や変数を埋め込むことができる標準ライブラリです。これを使うと、ログインユーザー名やリストの情報をHTMLに反映させることができます。

2. テンプレートの基本構文

2. テンプレートの基本構文
2. テンプレートの基本構文

テンプレートでは、変数を{{.変数名}}のように埋め込みます。{{.}}はデータ構造の中身を参照するための記号です。

例えば、{{.Name}}と書くと、Go側で渡した構造体のNameフィールドの値がHTMLに表示されます。

3. 簡単なテンプレートの例

3. 簡単なテンプレートの例
3. 簡単なテンプレートの例

package main

import (
    "html/template"
    "net/http"
)

type User struct {
    Name string
}

func handler(w http.ResponseWriter, r *http.Request) {
    tmpl := template.Must(template.ParseFiles("index.html"))
    user := User{Name: "Gopher"}
    tmpl.Execute(w, user)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

この例では、index.htmlというテンプレートファイルにUser構造体のデータを渡しています。

4. テンプレートファイルの内容例

4. テンプレートファイルの内容例
4. テンプレートファイルの内容例

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Goテンプレート例</title>
</head>
<body>
    <h1>こんにちは、{{.Name}}さん!</h1>
</body>
</html>

ブラウザで表示すると「こんにちは、Gopherさん!」と動的に表示されます。

5. 条件分岐とループの使用

5. 条件分岐とループの使用
5. 条件分岐とループの使用

テンプレート内では{{if 条件}}{{range 配列}}を使って条件分岐や繰り返し処理も可能です。


<ul>
{{range .Items}}
    <li>{{.}}</li>
{{end}}
</ul>

Go側でItemsに配列を渡すと、リストとしてHTMLに反映されます。

6. テンプレートでの安全性

6. テンプレートでの安全性
6. テンプレートでの安全性

html/templateは、XSS(クロスサイトスクリプティング)対策として自動で特殊文字をエスケープします。例えば<>をHTMLタグとして解釈せず、安全に表示できます。

7. 複数テンプレートの管理

7. 複数テンプレートの管理
7. 複数テンプレートの管理

複数のHTMLファイルを組み合わせてテンプレートを管理することも可能です。共通のヘッダーやフッターをtemplate.ParseFilesで読み込み、共通部分と個別ページを組み合わせて表示できます。

8. 実用的なWebアプリでの活用例

8. 実用的なWebアプリでの活用例
8. 実用的なWebアプリでの活用例

ユーザーのプロフィールページや商品一覧ページなど、動的なWebページを生成する際にテンプレートは非常に便利です。データベースから取得した情報をテンプレートに渡すだけで、HTMLを簡単に生成できます。

Go言語を基礎からスッキリ学びたい人や、 文法だけでなく「実用的な使い方」まで押さえたい人には、 定番の入門書がこちらです。

基礎からわかるGo言語をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

Go言語のテンプレート機能を振り返る

今回の記事では、Go言語でWebアプリケーションを開発する際に欠かせない、 html templateパッケージの基本から実践的な使い方までを丁寧に学びました。 Go言語のテンプレート機能を使うことで、HTMLを直接プログラムの中で組み立てるのではなく、 あらかじめ用意したHTMLファイルを雛形として利用し、 必要な部分だけを動的に差し替えることができます。 この仕組みにより、HTMLとGoの処理を分離でき、 コードの可読性や保守性を高めることが可能になります。

html templateでは、二重の波括弧を使って変数を埋め込み、 Go側から渡した構造体や配列の値をそのままHTMLに反映できます。 例えばユーザー名や商品名、一覧データなどを画面に表示する場合でも、 テンプレート構文を使えばシンプルに記述できます。 また、ifによる条件分岐やrangeによるループ処理も用意されているため、 表示内容を柔軟に切り替えられる点も大きな特徴です。

さらに、Go言語のhtml templateは安全性にも配慮されています。 通常の文字列をHTMLに埋め込む際には、自動的にエスケープ処理が行われるため、 クロスサイトスクリプティングのような脆弱性を防ぎやすくなっています。 これはWebアプリ開発において非常に重要なポイントであり、 初心者でも安心してHTML生成を行える理由のひとつです。

複数のテンプレートファイルを組み合わせて管理できる点も、 実務で役立つポイントです。 ヘッダーやフッター、ナビゲーションなどの共通部分を分割しておけば、 デザイン変更や修正が必要になった場合でも、 一箇所の修正で全体に反映させることができます。 Go言語でのWeb開発を効率よく進めるためには、 テンプレートの構成を意識した設計が重要になります。

テンプレート処理のサンプル再確認

ここでは、記事で学んだ内容を整理するため、 html templateを使った基本的な処理をまとめたサンプルを確認します。 データを構造体として定義し、それをテンプレートに渡してHTMLを生成する流れを理解することが大切です。


package main

import (
    "html/template"
    "net/http"
)

type PageData struct {
    Title string
    Message string
}

func handler(w http.ResponseWriter, r *http.Request) {
    tmpl := template.Must(template.ParseFiles("page.html"))
    data := PageData{
        Title: "テンプレート確認",
        Message: "Go言語のテンプレートはとても便利です",
    }
    tmpl.Execute(w, data)
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

このように、Go言語とhtml templateを組み合わせることで、 動的なHTML生成をシンプルなコードで実現できます。 Webアプリケーションだけでなく、 管理画面やツール画面など、さまざまな用途で活用できる知識です。

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

生徒

「Go言語でHTMLを生成する方法がよく分かりました。 テンプレートを使うと、画面表示と処理を分けられるのが便利ですね。」

先生

「その通りです。html templateを使うことで、 Webアプリの構造が整理され、読みやすいコードになります。」

生徒

「変数の埋め込みや、条件分岐、ループ処理もテンプレート内でできるので、 HTMLを動的に生成する仕組みが理解できました。」

先生

「基本を押さえれば、ユーザー一覧や商品一覧など、 実用的なWebページも簡単に作れます。 安全性が考慮されている点もGo言語の強みですね。」

生徒

「これからは、Go言語でWebアプリを作るときに、 テンプレートを活用して効率よく開発できそうです。」

先生

「ぜひ実際に手を動かしながら、 html templateの使い方を身につけていきましょう。」

関連セミナーのご案内

【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導

「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。

本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。

具体的な開発内容と環境

【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。

【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。

この60分で得られる3つの理解

1. 環境構築の完全な理解

「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。

2. Go言語の基本構造(変数・型)

データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。

3. 読みやすいコードの書き方

ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。

※本講座は、将来的にバックエンドエンジニアクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。

セミナー画像

初めてのGo言語を一緒に学びましょう!

カテゴリの一覧へ
新着記事
New1
Swift
Swiftのnilとは?Optionalとの関係や初期化について初心者向けにやさしく解説!
New2
Go言語
Go言語のinit関数の役割と使い方!プログラム起動時の初期化処理
New3
Go言語
Go言語のマップの順序保証がない理由と扱い方の工夫をやさしく解説!初心者でもわかる基本知識
New4
Kotlin
Kotlinのforループの基本!範囲・配列・コレクションの繰り返し処理
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Kotlinのsettings.gradleファイルを完全解説!初心者でもわかるプロジェクト設定の基本
No.2
Java&Spring記事人気No2
Go言語
Swiftの配列(Array)の使い方を完全ガイド!初心者でもわかるデータのまとめ方
No.3
Java&Spring記事人気No3
Go言語
Go言語のSQLインジェクション対策を完全解説!初心者でも安全なデータベース操作がわかる
No.4
Java&Spring記事人気No4
Swift
Swiftの高階関数map・filter・reduceを完全解説!初心者でもわかる配列操作の基本
No.5
Java&Spring記事人気No5
Go言語
Swiftの文字列操作を完全ガイド!初心者でもわかるStringの基本
No.6
Java&Spring記事人気No6
Go言語
Go言語のgo installコマンドの役割とインストール先の仕組みを徹底解説!
No.7
Java&Spring記事人気No7
Kotlin
KotlinのRoomで複雑なクエリを使いこなす!初心者でもわかる応用テクニック
No.8
Java&Spring記事人気No8
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方