smeeでwebhookの中身を確認する

2026年6月30日

とあるサービスの webhook の中身を確認したいことがありました。webhook の中身を見るためには web サーバーを構築してログを見ればよいのですが、インターネット上に web サーバーを構築するのはそれなりに大変です。GitHub のドキュメントに smee を使った方法が紹介されている ので、その方法を試したときの記録です。

smee とは

webhook を自分の PC に転送するためのサービスです。https://github.com/probot/smee.io で詳しく説明されています。

smee で channel を作成

https://smee.io で channel を作成すると、URL が発行されます。Webhook の送信先に発行された URL を設定します。

簡易的な web サーバーを作成

smee から転送されてきた webhook の中身をみるために、手元の PC で簡易的な web サーバーを立ち上げます。今回は Go で書きました。

main.go

package main

import (
"fmt"
"io"
"log"
"net/http"
)

func main() {
http.HandleFunc("/webhook", func(w http.ResponseWriter, r *http.Request) {
body, _ := io.ReadAll(r.Body)

//fmt.Println("===== Headers =====")
//for k, v := range r.Header {
// fmt.Printf("%s: %v\n", k, v)
//}

//fmt.Println("===== Body =====")
fmt.Println(string(body))

w.WriteHeader(http.StatusOK)
})

log.Println("listening on :3000")
log.Fatal(http.ListenAndServe(":3000", nil))
}

Docker コンテナで smee-client と web サーバーを立ち上げます。

compose.yml

services:
  server:
    image: golang:1.26
    working_dir: /app
    volumes:
      - .:/app
    command: go run main.go
    ports:
      - "3000:3000"

  client:
    image: node:24
    command: sh -c "npm install -g smee-client && smee --url ${SMEE_URL} --target http://server:3000/webhook"
    environment:
      - SMEE_URL=${SMEE_URL}
    depends_on:
      - server


使い方。以下のように SMEE_URL を環境変数に設定して、docker compose up コマンドで立ち上げます。

SMEE_URL=https://smee.io/xxxx docker compose up

うまくいくと webhook の中身が出力されます。

出力内容をカスタマイズ

中身を見ながら、それをファイルにも出力したい場合。

SMEE_URL=https://smee.io/xxxx docker compose up 2>&1 | tee webhook.log

コンテナ名が邪魔な場合は、オプションで出力しないようにできます。

SMEE_URL=https://smee.io/xxxx docker compose logs -f --no-log-prefix server

リクエストヘッダも見たい場合は、さきほどの main.go のヘッダ出力のコメントアウトを外します。

fmt.Println("===== Headers =====")
for k, v := range r.Header {
	fmt.Printf("%s: %v\n", k, v)
}

注意点

https://github.com/probot/smee.io にも書かれていますが、本番環境では使わないようにしましょう。あくまで開発用途で。

smee の channel の URL は共有しないようにしましょう。URL が他の人に知られると、その人も webhook の内容を見ることができます。

-技術ブログ