Hectane は、Go 言語で実装された最小限の SMTP メール送信サービスです。外部依存を極力抑え、設定駆動型の動作を前提として設計されています。以下に、インストールから初期構成までの実践的な手順を示します。
ディレクトリ構成の概要
ソースコードの階層は明確に責務を分離しており、保守性と拡張性を重視しています:
hectane/
├── cmd/
│ └── mailer/ # CLI 実行バイナリのエントリポイント(名前は 'hectane' ではなく 'mailer' に変更可能)
├── conf/ # 環境別 TOML 設定ファイル群
│ ├── dev.toml # 開発用:ローカル SMTP(例: MailHog)向け
│ ├── prod.toml # 本番用:TLS 対応 SMTP サーバー接続設定
├── core/ # メール送信コアロジック(トランスポート、キュー制御、エラーハンドリング)
├── util/ # 汎用ユーティリティ(TOML 解析、構造体バインド、時刻フォーマット)
├── app.go # アプリケーションライフサイクル管理(初期化・シャットダウンフック含む)
├── runner.go # CLI コマンド実行器(cobra をベースにカスタマイズ)
├── go.sum
└── go.mod
起動フローの理解
実行時のエントリは cmd/mailer/main.go であり、以下のステップで処理が進行します:
- コマンドライン引数(
--config,--mode)をパース conf.Load()を呼び出して指定された TOML ファイルを構造体にマッピングcore.NewTransport()で SMTP 接続プールを初期化- HTTP API(オプション)または CLI モードで即時送信を開始
TOML 設定ファイルの実装例
以下は conf/prod.toml の実際のバリデーション済みサンプルです。セキュリティ上、パスワードは環境変数経由での注入が推奨されます:
[smtp]
server = "smtp.gmail.com"
port = 587
username = "${SMTP_USER}"
password = "${SMTP_PASS}"
timeout = "30s"
[queue]
workers = 8
buffer_size = 128
backoff_base = "2s"
[log]
level = "warn"
output = "stderr"
timestamp = true
[http]
enabled = true
address = ":9001"
read_timeout = "10s"
write_timeout = "15s"
環境変数展開は util/tomlenv パッケージによりサポートされており、Docker や systemd 環境でも安全に利用可能です。