Go言語でCookieを操作する方法とサンプル例を初心者向けに解説
生徒
「先生、Go言語でWebアプリを作るときに、ユーザーの情報をブラウザに保存したいんですがどうすればいいですか?」
先生
「その場合はCookieを使うと便利です。Cookieはブラウザに小さな情報を保存する仕組みです。」
生徒
「具体的にはどのように設定したり読み込んだりするんですか?」
先生
「それでは、基本的な使い方とサンプルコードを見ていきましょう!」
1. Cookieとは?
Cookieとは、Webブラウザに一時的または一定期間保存される小さなデータのことです。 主にWebサイトとユーザーをひも付ける目的で使われ、ログイン状態の保持、表示設定の記憶、 前回アクセス時の情報の保存など、身近なWebサービスの多くで利用されています。 サーバーがCookieを発行し、ブラウザがそれを保存することで、次回以降のアクセス時に同じ情報をサーバーへ送信できます。
例えば、ログイン後にページを移動してもログアウトされないのは、 ブラウザがCookieを持っていて「このユーザーはログイン済みです」とサーバーに伝えているからです。 Cookieがなければ、ページを移動するたびに毎回ログイン処理が必要になってしまいます。 このように、CookieはWebアプリに「状態」を持たせるための基本的な仕組みと言えます。
プログラミング未経験の方は、「Cookieはブラウザに保存されるメモ帳」のようなものと考えると分かりやすいでしょう。 ただし保存できる情報量は多くなく、誰でも中身を確認できるため、 パスワードなどの重要な情報を直接入れるものではありません。
package main
import (
"fmt"
"net/http"
)
// Cookieの存在を確認する簡単な例
func handler(w http.ResponseWriter, r *http.Request) {
_, err := r.Cookie("sample")
if err != nil {
fmt.Fprintln(w, "Cookieはまだ保存されていません")
return
}
fmt.Fprintln(w, "Cookieが保存されています")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
この簡単な例では、「sample」という名前のCookieがブラウザに存在するかどうかを確認しています。 まだCookieがなければ「保存されていません」と表示され、存在すれば「保存されています」と表示されます。 Cookieとは何かを理解する第一歩として、 「ブラウザが情報を持っているかどうかを確認する仕組み」と覚えておくと、 後のCookie操作の理解がスムーズになります。
2. Go言語でCookieを設定する方法
Go言語でCookieを設定するときは、http.Cookie構造体でCookieの内容を作り、
http.SetCookie関数でレスポンスに付けてブラウザへ送ります。
ブラウザは受け取ったCookieを保存し、次回以降のアクセスで自動的にサーバーへ送信します。
そのため「ユーザー名を覚える」「ログイン中かどうかを判定する」など、Webアプリの状態管理に役立ちます。
初心者の方は、まず「サーバーがCookieを渡す → ブラウザが保存する」という流れを押さえると理解しやすいです。
Cookieには名前と値が必ず必要で、さらにPathやMaxAgeを指定すると動きが分かりやすくなります。
Pathは「どのURLでCookieを送るか」の範囲、MaxAgeは「何秒後に期限切れにするか」を表します。
例えば短い時間だけ有効なCookieにしておけば、ブラウザに情報が残り続けるのを防げます。
cookie := &http.Cookie{
Name: "username",
Value: "gopher",
Path: "/",
MaxAge: 3600, // 1時間で有効期限切れ
}
http.SetCookie(w, cookie)
この例では、「username」というCookie名で値を「gopher」に設定しています。
ここで指定したMaxAgeが3600なので、1時間を過ぎるとブラウザ側で期限切れになります。
まずはこの形を覚えておくと、Cookie設定の基本が身につきます。
package main
import (
"fmt"
"net/http"
)
// Cookieを設定してメッセージを返す最小サンプル
func setHandler(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "username",
Value: "gopher",
Path: "/",
MaxAge: 60, // まずは短く1分で試す
}
http.SetCookie(w, cookie)
fmt.Fprintln(w, "Cookieを設定しました")
}
func main() {
http.HandleFunc("/set", setHandler)
http.ListenAndServe(":8080", nil)
}
このミニサンプルは、/setにアクセスするとCookieを設定するだけのシンプルな例です。
ブラウザでアクセスしてから開発者ツールを確認すると、Cookieが保存されているのが見えます。
まずは「設定できたか」を目で確認してみると、Cookieの仕組みがぐっと身近になります。
3. Cookieを読み取る方法
Cookieを読み取るときは、リクエスト側(r)からr.Cookie("名前")を呼び出します。
これは「ブラウザが送ってきたCookieの中から、指定した名前のCookieを探して取り出す」操作です。
もしまだCookieが保存されていない、または有効期限が切れている場合はエラーになります。
初心者の方は、まず「見つかるとき」と「見つからないとき」がある点を理解しておくと安心です。
取得できたCookieは、cookie.Valueで中身(値)を取り出せます。
たとえば「username」というCookieにユーザー名を入れておけば、ページを開いたときに名前を表示したり、
あいさつ文を変えたりといった動きが簡単に作れます。
逆に、取得できなかった場合は無理に処理を進めず、メッセージを出して終了するのが安全です。
cookie, err := r.Cookie("username")
if err != nil {
fmt.Fprintln(w, "Cookieが見つかりません")
return
}
fmt.Fprintf(w, "Cookieの値は: %s", cookie.Value)
上のコードは、Cookieが見つかったときだけ値を表示する基本形です。 まずはこの形を覚えておくと、Cookie読み取りの処理で迷いにくくなります。 さらに分かりやすくするために、読み取り専用の最小サンプルも見てみましょう。
package main
import (
"fmt"
"net/http"
)
// Cookieを読むだけのシンプルな例
func readHandler(w http.ResponseWriter, r *http.Request) {
cookie, err := r.Cookie("username")
if err != nil {
fmt.Fprintln(w, "Cookieが見つかりません")
return
}
fmt.Fprintf(w, "ようこそ、%sさん", cookie.Value)
}
func main() {
http.HandleFunc("/read", readHandler)
http.ListenAndServe(":8080", nil)
}
この例では、/readにアクセスすると「username」のCookieを読み取り、見つかった場合だけ歓迎メッセージを表示します。
もしCookieがない状態なら「Cookieが見つかりません」と表示されます。
Cookie読み取りは「取得して確認する」流れが基本なので、エラー処理をセットで書く習慣を付けると、Webアプリの動きが安定します。
4. Cookieを削除する方法
Cookieを削除するには、同じ名前でMaxAgeを負の値にして再設定します。これによりブラウザはCookieを破棄します。
cookie := &http.Cookie{
Name: "username",
Value: "",
Path: "/",
MaxAge: -1,
}
http.SetCookie(w, cookie)
削除したいCookieの名前を指定し、値は空、MaxAgeを-1にすることでブラウザから消去されます。
5. 実際にCookieを操作するサンプルWebアプリ
package main
import (
"fmt"
"net/http"
)
func setCookieHandler(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "username",
Value: "gopher",
Path: "/",
MaxAge: 3600,
}
http.SetCookie(w, cookie)
fmt.Fprintln(w, "Cookieを設定しました!")
}
func readCookieHandler(w http.ResponseWriter, r *http.Request) {
cookie, err := r.Cookie("username")
if err != nil {
fmt.Fprintln(w, "Cookieが見つかりません")
return
}
fmt.Fprintf(w, "Cookieの値は: %s", cookie.Value)
}
func deleteCookieHandler(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "username",
Value: "",
Path: "/",
MaxAge: -1,
}
http.SetCookie(w, cookie)
fmt.Fprintln(w, "Cookieを削除しました")
}
func main() {
http.HandleFunc("/set", setCookieHandler)
http.HandleFunc("/read", readCookieHandler)
http.HandleFunc("/delete", deleteCookieHandler)
http.ListenAndServe(":8080", nil)
}
このアプリでは、/setでCookieを設定し、/readで読み込み、/deleteで削除できます。ブラウザでアクセスして動作を確認することが可能です。
6. Cookieを使う際の注意点
- Cookieにはサイズ制限があるため大量データの保存には向かない
- セキュリティ上、パスワードなど機密情報はCookieに直接保存しない
- 必ず
Pathや有効期限を適切に設定する - ユーザーのブラウザがCookieを無効にしている場合は使えないことがある
これらを理解して安全にCookieを使うことで、ユーザー体験を向上させることができます。
まとめ
Go言語におけるCookie操作の全体像を振り返る
ここまで、Go言語を使ってWebアプリケーションでCookieを操作する方法について、基礎から実践的な使い方まで順を追って解説してきました。 Cookieは、ブラウザに小さな情報を保存し、サーバーとクライアントの間で状態を共有するための重要な仕組みです。 ログイン状態の維持、ユーザー設定の保存、簡単な識別情報の管理など、Webアプリ開発では欠かせない存在と言えます。
Go言語では、net/httpパッケージを利用することで、Cookieの設定・取得・削除をとてもシンプルに実装できます。
http.Cookie構造体に必要な情報をまとめ、http.SetCookieでレスポンスに追加するだけで、
ブラウザ側にCookieを保存できます。
また、リクエストからCookieを読み取る場合も、r.Cookieを使えば簡単に値を取得できるため、
初心者でも扱いやすい設計になっています。
Cookieの操作で特に大切なのは、「どの情報を」「どのくらいの期間」「どの範囲で」保存するかを意識することです。
MaxAgeを設定することで有効期限を制御でき、Pathを指定することでCookieが送信される範囲を限定できます。
これらを適切に設定しないと、意図しないページでもCookieが送信されたり、不要に長く情報が残ってしまう可能性があります。
サンプルコードで整理するCookie操作の流れ
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
cookie := &http.Cookie{
Name: "sample",
Value: "hello",
Path: "/",
MaxAge: 300,
}
http.SetCookie(w, cookie)
fmt.Fprintln(w, "Cookieを設定しました")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
このシンプルな例では、アクセスしたユーザーに対してCookieを1つ設定しています。 Webアプリでは、このような基本操作を組み合わせることで、ユーザーごとの状態管理が可能になります。 初心者の方は、まず「設定する」「読み取る」「削除する」という一連の流れを理解することが大切です。 そこから少しずつ、ログイン処理やユーザーごとの画面表示といった応用に広げていくと、自然に実力が身についていきます。
一方で、Cookieは万能ではありません。 保存できるサイズには制限があり、機密情報をそのまま保存するのは非常に危険です。 パスワードや個人情報を直接Cookieに入れるのではなく、識別用のトークンなどを保存し、 実際の情報はサーバー側で管理する設計が一般的です。 こうした基本的な考え方を押さえておくことで、より安全で信頼性の高いWebアプリを作れるようになります。
生徒
「Cookieって難しそうだと思っていましたが、Go言語だと意外とシンプルに扱えるんですね」
先生
「そうですね。基本の仕組みさえ分かれば、設定も取得もそれほど複雑ではありません」
生徒
「MaxAgeやPathをきちんと設定しないと、思わぬ動きになるというのも勉強になりました」
先生
「実務では、そのあたりの設定がとても重要になります。 どこで使われるCookieなのかを意識して設計すると、トラブルを減らせますよ」
生徒
「ログイン機能やユーザー管理にも使えそうなので、実際にアプリを作って試してみたいです」
先生
「それが一番の近道ですね。 今回学んだCookie操作の基礎は、Go言語でWeb開発をする上で何度も使う知識になります」
Go言語でのCookie操作は、Webアプリ開発の基礎を支える重要なテーマです。 正しい使い方と注意点を理解した上で活用すれば、ユーザー体験を向上させる便利な機能として役立ちます。 ぜひ今回の内容を振り返りながら、実際のアプリ開発に活かしてみてください。
【超入門】ゼロから始めるGo言語プログラミング:最速で「動くアプリ」を作るマンツーマン指導
「プログラミングの仕組み」が根本からわかる。Go言語でバックエンド開発の第一歩を。
本講座を受講することで、単なる文法の暗記ではなく、「プログラムがコンピュータの中でどう動いているか」という本質的な理解につながります。シンプルながら強力なGo言語(Golang)を通じて、現代のバックエンドエンジニアに求められる基礎体力を最短距離で身につけます。
具体的な開発内容と環境
【つくるもの】
ターミナル(黒い画面)上で動作する「対話型計算プログラム」や、データを整理して表示する「ミニ・ツール」をゼロから作成します。自分の書いたコードが形になる感動を体験してください。
【開発環境】
プロの現場でシェアNo.1のVisual Studio Code (VS Code)を使用します。インストールから日本語化、Go言語用の拡張機能設定まで、現場基準の環境を一緒に構築します。
この60分で得られる3つの理解
「なぜ動くのか」という設定の仕組みを理解し、今後の独学で詰まらない土台を作ります。
データの種類やメモリの概念など、他言語にも通じるプログラミングの本質を学びます。
ただ動くだけでなく、誰が見ても分かりやすい「綺麗なコード」を書くための考え方を伝授します。
※本講座は、将来的にバックエンドエンジニアやクラウドインフラに興味がある未経験者のためのエントリー講座です。マンツーマン形式により、あなたの理解度に合わせて進行します。
初めてのGo言語を一緒に学びましょう!