カテゴリ: 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言語で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の使い方を身につけていきましょう。」

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のオブジェクト指向の特徴を完全ガイド!初心者でも理解できる他言語との違い
New2
Go言語
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
New3
Kotlin
Kotlinのクラス設計に役立つベストプラクティスまとめ|初心者でもわかるクラス設計の考え方
New4
Kotlin
Kotlinでアーキテクチャ設計の基本!MVC・MVP・MVVMの違いを解説
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Kotlin
Kotlinのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.6
Java&Spring記事人気No6
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.7
Java&Spring記事人気No7
Go言語
Go言語のWebアプリにおけるセキュリティベストプラクティス集
No.8
Java&Spring記事人気No8
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!