ローカルSMTPを使って問い合わせ完了メールを送る方法|新人エンジニア研修向けにSpring BootとJavaMailSenderを解説

こんにちは。ゆうせいです。

今回は、Spring BootのJavaMailSenderとローカルSMTPを使って、問い合わせ完了メールを送る方法を新人エンジニア研修向けに解説します。

問い合わせフォームを作ると、よく次のような機能が必要になります。

お問い合わせを受け付けました。
担当者より順次ご連絡いたします。

このようなメールを、問い合わせ送信後に自動で送る機能です。

ただし、新人研修でいきなり本物のGmailや会社メールへ送信するのは少し危険です。

宛先を間違えて外部へ送ってしまうかもしれませんし、SMTP認証や送信制限で詰まる可能性もあります。

そこでおすすめなのが、ローカルSMTPです。

ローカルSMTPとは、自分のPC上で動く「練習用のメールサーバー」です。

実際の外部メールアドレスへは送らず、ローカルのWeb画面で送信されたメール内容を確認できます。

今回のサンプルでは、Mailpitというメールテストツールを使います。Mailpitは、開発者向けのSMTPテストツールで、SMTPサーバーとしてメールを受け取り、Web UIでメール内容を確認できるツールです。公式サイトでも、無料・オープンソースのSMTP testing toolであり、Web UIやREST APIを備えていると説明されています。

今回のゴール

今回作る流れは、次のとおりです。

問い合わせフォームを表示する
        ↓
名前、メールアドレス、問い合わせ内容を入力する
        ↓
送信ボタンを押す
        ↓
Spring BootがPOSTで受け取る
        ↓
JavaMailSenderでメールを作る
        ↓
MailpitのローカルSMTPへ送る
        ↓
MailpitのWeb画面でメール内容を確認する

重要なのは、実際のGmailや会社メールには送らない点です。

Mailpitがメールを受け止めてくれるため、研修中に誤送信しにくくなります。

たとえるなら、Mailpitは「本物の郵便局」ではなく「郵便の練習場」です。

手紙の宛名、件名、本文は確認できますが、本当に相手の家へ配達されるわけではありません。

ローカルSMTPとは何か

SMTPは、Simple Mail Transfer Protocolの略です。

メールを送るための通信の仕組みです。

Spring Bootからメールを送るときは、次のような流れになります。

Spring Bootアプリ
        ↓
JavaMailSender
        ↓
SMTPサーバー
        ↓
メール受信側

本番環境なら、SMTPサーバーはGmail、会社メール、SendGrid、Amazon SESなどになります。

研修環境では、MailpitのようなローカルSMTPを使います。

種類説明研修での使いやすさ
本物のSMTP実際のメールアドレスへ送信する認証や誤送信に注意が必要
ローカルSMTP自分のPC内でメールを受け取る安全に練習しやすい

新人エンジニアは、まず「JavaMailSenderはメールを作ってSMTPへ渡す係」と覚えてください。

JavaMailSenderだけでメールが世界中へ届くわけではありません。

メール配送にはSMTPサーバーが必要です。

Mailpitを使う理由

Mailpitを使う理由は、研修で安全にメール送信の練習ができるからです。

メリット説明
外部へ誤送信しにくいメールはMailpit内に保存される
認証設定が簡単学習用ならユーザー名やパスワードなしで使える
ブラウザで確認できる件名、宛先、本文をWeb UIで見られる
研修室で使いやすいWindows 11でも使いやすい

Mailpitの公式インストールページでは、Mailpitは単一バイナリとして動作し、Windows、Linux、Mac向けの静的バイナリをリリースページから取得できると説明されています。また、デフォルトではWeb UIが8025番ポート、SMTPが1025番ポートで待ち受けると説明されています。

つまり、Spring Bootからはlocalhost:1025へメールを送り、ブラウザではlocalhost:8025でメールを確認するイメージです。

Spring Boot

localhost:1025

Mailpit

http://localhost:8025 で確認

研修環境の前提

今回の前提は、次のようにします。

項目内容
OSWindows 11
JavaJDK 17以上を想定
フレームワークSpring Boot
メール送信JavaMailSender
ローカルSMTPMailpit
テンプレートThymeleaf

Spring Boot側では、spring-boot-starter-mailを使います。

Spring Boot公式ドキュメントでは、Spring FrameworkがJavaMailSenderを使ったメール送信の抽象化を提供し、Spring Bootがその自動構成とスターターモジュールを提供すると説明されています。

全体構成

今回作るクラスとHTMLは、次の構成にします。

src/main/java
    com.example.demo
        controller
            ContactController.java
        service
            ContactMailService.java

src/main/resources
    templates
        contact
            form.html
            complete.html
    application.properties




役割は次のとおりです。

ファイル役割
form.html問い合わせ入力画面
complete.html問い合わせ完了画面
ContactController画面表示とフォーム送信を受け取る
ContactMailServiceJavaMailSenderでメールを送る
application.propertiesMailpitへ接続するSMTP設定を書く

pom.xmlに依存関係を追加する

まず、メール送信用の依存関係を追加します。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>



<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>



<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
Thymeleafを使う場合は、Thymeleafの依存関係も必要です。
Webアプリとして動かすため、spring-boot-starter-webも必要です。
メール送信機能では、spring-boot-starter-mailがJavaMailSenderを使うための入口になります。

application.propertiesにMailpit用設定を書く

次に、Spring BootからMailpitへ接続するための設定を書きます。

spring.mail.host=localhost
spring.mail.port=1025
spring.mail.username=
spring.mail.password=
spring.mail.properties.mail.smtp.auth=false
spring.mail.properties.mail.smtp.starttls.enable=false

spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000




この設定の意味を整理します。

設定意味
spring.mail.host=localhost自分のPC上のSMTPへ接続する
spring.mail.port=1025MailpitのSMTPポートへ送る
mail.smtp.auth=falseSMTP認証を使わない
mail.smtp.starttls.enable=falseSTARTTLSを使わない
connectiontimeout接続待ち時間の上限
timeout応答待ち時間の上限
writetimeout書き込み待ち時間の上限

Spring Boot公式ドキュメントでも、spring.mail.hostと関連ライブラリが利用可能な場合にJavaMailSenderが自動構成され、spring.mail名前空間の設定で送信者をカスタマイズできると説明されています。また、メールサーバーが応答しない場合にスレッドがブロックされるのを避けるため、SMTPタイムアウト値を設定する例も示されています。

研修では、SMTPサーバーが起動していない状態で送信すると、接続エラーになります。

タイムアウトを設定しておくと、長時間待ち続ける状態を避けやすくなります。

問い合わせフォームを作る

次に、問い合わせフォームを作ります。

ファイルの場所です。

src/main/resources/templates/contact/form.html

form.htmlです。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>お問い合わせ</title>
</head>
<body>

<h1>お問い合わせ</h1>

<p>以下の内容を入力して送信してください。</p>

<form th:action="@{/contact}" method="post">

    <div>
        <label for="name">お名前</label>
        <input type="text" id="name" name="name">
    </div>

    <div>
        <label for="email">メールアドレス</label>
        <input type="email" id="email" name="email">
    </div>

    <div>
        <label for="message">お問い合わせ内容</label>
        <textarea id="message" name="message" rows="8" cols="50"></textarea>
    </div>

    <button type="submit">送信</button>

</form>

</body>
</html>




フォーム送信では、inputやtextareaのname属性が重要です。

HTMLのname属性Controllerの受け取り
name="name"@RequestParam String name
name="email"@RequestParam String email
name="message"@RequestParam String message

idはJavaScriptやlabelとの対応で使うことが多いです。

nameはサーバーへ送るための名前です。

新人エンジニアは、フォーム送信ではname属性を見る!と覚えてください。

Controllerを作る

次に、問い合わせ画面の表示と送信を受け取るControllerを作ります。

package com.example.demo.controller;

import com.example.demo.service.ContactMailService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class ContactController {

    private final ContactMailService contactMailService;

    public ContactController(ContactMailService contactMailService) {
        this.contactMailService = contactMailService;
    }

    @GetMapping("/contact")
    public String showContactForm() {
        return "contact/form";
    }

    @PostMapping("/contact")
    public String sendContact(
            @RequestParam String name,
            @RequestParam String email,
            @RequestParam String message,
            RedirectAttributes redirectAttributes) {

        contactMailService.sendCompleteMail(name, email, message);

        redirectAttributes.addFlashAttribute(
                "completeMessage",
                "お問い合わせを受け付けました。Mailpitでメール内容を確認してください。"
        );

        return "redirect:/contact/complete";
    }

    @GetMapping("/contact/complete")
    public String complete() {
        return "contact/complete";
    }
}




このControllerでは、GET /contactで入力画面を表示し、POST /contactで問い合わせ内容を受け取ります。

送信後は、redirect:/contact/completeへ移動しています。

これはPRGパターンです。

PRGパターンとは、Post Redirect Getの略で、フォーム送信後の再読み込みによる二重送信を防ぎやすくする設計です。

POST /contact
        ↓
redirect:/contact/complete
        ↓
GET /contact/complete

問い合わせ送信は、同じ内容が何度も送られると困ります。

そのため、POST後は直接完了画面を返さず、redirectするのが基本です。

メール送信用Serviceを作る

次に、JavaMailSenderを使うServiceを作ります。

package com.example.demo.service;

import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class ContactMailService {

    private final JavaMailSender javaMailSender;

    public ContactMailService(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    public void sendCompleteMail(String name, String email, String message) {

        SimpleMailMessage mailMessage = new SimpleMailMessage();

        mailMessage.setTo(email);
        mailMessage.setFrom("no-reply@example.com");
        mailMessage.setSubject("お問い合わせを受け付けました");

        String body =
                name + " 様\n\n"
              + "お問い合わせありがとうございます。\n"
              + "以下の内容でお問い合わせを受け付けました。\n\n"
              + "お問い合わせ内容\n"
              + "------------------------------\n"
              + message + "\n"
              + "------------------------------\n\n"
              + "担当者より順次ご連絡いたします。\n\n"
              + "このメールは研修用アプリから自動送信されています。";

        mailMessage.setText(body);

        javaMailSender.send(mailMessage);
    }
}




SimpleMailMessageは、シンプルなテキストメールを作るためのクラスです。

今回のように、件名と本文だけの問い合わせ完了メールなら、SimpleMailMessageで十分です。

メソッド意味
setTo宛先
setFrom差出人
setSubject件名
setText本文
sendメール送信

手紙でたとえるなら、setToは宛名、setFromは差出人、setSubjectは封筒に書く件名、setTextは手紙の本文です。

javaMailSender.sendは、ポストに投函する処理です。

ただし今回のポストは本物の外部メールサーバーではなく、Mailpitです。

完了画面を作る

問い合わせ完了画面を作ります。

ファイルの場所です。

src/main/resources/templates/contact/complete.html

complete.htmlです。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>お問い合わせ完了</title>
</head>
<body>

<h1>お問い合わせ完了</h1>

<p th:if="${completeMessage}" th:text="${completeMessage}"></p>

<p>研修環境では、実際の外部メールには送信していません。</p>
<p>MailpitのWeb画面で、送信されたメール内容を確認してください。</p>

<p>
    <a th:href="@{/contact}">お問い合わせ画面へ戻る</a>
</p>

</body>
</html>




RedirectAttributesで渡したcompleteMessageを表示しています。

redirectAttributes.addFlashAttribute(
        "completeMessage",
        "お問い合わせを受け付けました。Mailpitでメール内容を確認してください。"
);

addFlashAttributeは、redirect先で一度だけ使える値を渡すために使います。

完了メッセージのような一時的な情報に向いています。

Mailpitでメールを確認する流れ

研修では、次の順番で動作確認します。

1. Mailpitを起動する
2. Spring Bootを起動する
3. ブラウザで /contact を開く
4. 名前、メールアドレス、問い合わせ内容を入力する
5. 送信ボタンを押す
6. /contact/complete に移動する
7. MailpitのWeb UIを開く
8. 送信されたメールを確認する

Mailpitのデフォルトでは、SMTPは1025番、Web UIは8025番で動きます。

ブラウザで次のように開きます。

http://localhost:8025

Mailpitの画面に、問い合わせ完了メールが表示されていれば成功です。

確認するポイントは次のとおりです。

確認項目見る内容
宛先フォームに入力したメールアドレスになっているか
差出人no-reply@example.comになっているか
件名お問い合わせを受け付けました
本文名前と問い合わせ内容が入っているか
文字化け日本語が正しく表示されているか

Mailpitが起動していないとどうなるか

Mailpitが起動していない状態で問い合わせフォームを送信すると、Spring Bootはlocalhost:1025へ接続しようとして失敗します。

よくあるエラーは、Connection refusedです。

Connection refused: connect

意味は、「localhost:1025に接続しようとしたが、そこにSMTPサーバーがいません」ということです。

郵便局へ手紙を持っていったら、郵便局が閉まっていたような状態です。

この場合は、次を確認してください。

確認すること内容
Mailpitが起動しているかターミナルやコマンドプロンプトで起動状態を見る
ポート番号が合っているかSpring Bootは1025へ送っているか
Web UIが開けるかlocalhost:8025をブラウザで開けるか
application.propertiesが反映されているかspring.mail.hostとportを確認する

例外処理を少し追加する

研修用でも、メール送信失敗時の処理を入れておくと理解が深まります。

たとえば、メール送信に失敗した場合にRuntimeExceptionへ変換します。

package com.example.demo.service;

import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class ContactMailService {

    private final JavaMailSender javaMailSender;

    public ContactMailService(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }

    public void sendCompleteMail(String name, String email, String message) {

        try {
            SimpleMailMessage mailMessage = new SimpleMailMessage();

            mailMessage.setTo(email);
            mailMessage.setFrom("no-reply@example.com");
            mailMessage.setSubject("お問い合わせを受け付けました");

            String body =
                    name + " 様\n\n"
                  + "お問い合わせありがとうございます。\n"
                  + "以下の内容でお問い合わせを受け付けました。\n\n"
                  + "お問い合わせ内容\n"
                  + "------------------------------\n"
                  + message + "\n"
                  + "------------------------------\n\n"
                  + "担当者より順次ご連絡いたします。\n\n"
                  + "このメールは研修用アプリから自動送信されています。";

            mailMessage.setText(body);

            javaMailSender.send(mailMessage);

        } catch (MailException e) {
            throw new RuntimeException("問い合わせ完了メールの送信に失敗しました。", e);
        }
    }
}




MailExceptionは、Springのメール送信処理で発生する例外です。

新人エンジニアは、メール送信は失敗する可能性がある処理だと覚えてください。

SMTPサーバーが落ちている、ポートが違う、ネットワークがつながらない、認証に失敗するなど、さまざまな理由で失敗します。

Controller側で失敗メッセージを表示する簡単な例

研修用にわかりやすくするなら、Controllerでtry-catchしてエラー画面へ戻すこともできます。

@PostMapping("/contact")
public String sendContact(
        @RequestParam String name,
        @RequestParam String email,
        @RequestParam String message,
        RedirectAttributes redirectAttributes) {

    try {
        contactMailService.sendCompleteMail(name, email, message);

        redirectAttributes.addFlashAttribute(
                "completeMessage",
                "お問い合わせを受け付けました。Mailpitでメール内容を確認してください。"
        );

        return "redirect:/contact/complete";

    } catch (RuntimeException e) {
        redirectAttributes.addFlashAttribute(
                "errorMessage",
                "メール送信に失敗しました。Mailpitが起動しているか確認してください。"
        );

        return "redirect:/contact";
    }
}




ただし、実務では@ControllerAdviceで例外処理を共通化することも多いです。

研修初期では、まずtry-catchで流れを見て、その後で@ControllerAdviceに進むと理解しやすいです。

問い合わせフォームにエラーメッセージを表示する

form.htmlにエラーメッセージ表示を追加します。

<p th:if="${errorMessage}" th:text="${errorMessage}"></p>

全体の一部としては、次のように置けます。

<h1>お問い合わせ</h1>

<p th:if="${errorMessage}" th:text="${errorMessage}"></p>

<p>以下の内容を入力して送信してください。</p>

Mailpitを起動し忘れて送信すると、問い合わせ画面に戻り、エラーメッセージが表示されます。

このように失敗時の動きも研修で確認しておくと、トラブル調査の練習になります。

入力チェックも本来は必要

今回のサンプルは、メール送信の仕組みを理解するためにシンプルにしています。

ただし、実際の問い合わせフォームでは入力チェックが必要です。

項目チェック例
名前空欄禁止、文字数制限
メールアドレス空欄禁止、メール形式
問い合わせ内容空欄禁止、文字数制限

新人研修では、最初にJavaMailSenderとMailpitでメール送信を確認し、その後に@ValidとBindingResultで入力チェックを追加するとよいです。

いきなり全部入れると、どこでエラーが起きているのかわかりにくくなります。

まず小さく動かせ!

そのあと安全性を高める、という順番が大切です。

問い合わせ内容をDBに保存するか

実務の問い合わせ機能では、メールを送るだけでなく、問い合わせ内容をDBにも保存することが多いです。

問い合わせ内容をDBに保存する
        ↓
問い合わせ完了メールを送る
        ↓
完了画面へredirectする

なぜDB保存が必要なのでしょうか。

メール送信だけに頼ると、SMTP障害や送信失敗が起きたときに問い合わせ内容が残らない可能性があるからです。

方法メリット注意点
メール送信だけ実装が簡単失敗時に問い合わせ内容が残らない可能性がある
DB保存 + メール送信問い合わせ内容を管理しやすい実装が少し増える

研修の第一段階ではメール送信だけで十分です。

次の段階では、contactsテーブルを作り、問い合わせ内容をDBに保存してからメール送信する設計に挑戦しましょう。

HTMLメールにしたい場合

今回のサンプルはテキストメールです。

HTMLメールを送りたい場合は、SimpleMailMessageではなくMimeMessageHelperを使います。

ただし、新人研修の最初はテキストメールで十分です。

メール形式使うクラス向いている場面
テキストメールSimpleMailMessage研修、通知、シンプルな自動返信
HTMLメールMimeMessageHelper装飾付きメール、リンクボタン、レイアウト付きメール

メール送信の基礎を理解するまでは、まずSimpleMailMessageで進めるとよいです。

ローカルSMTP研修でよくあるトラブル

症状原因候補確認ポイント
Connection refusedMailpitが起動していないlocalhost:8025を開けるか確認する
メールがMailpitに出ないポート設定が違うspring.mail.port=1025か確認する
フォーム送信で値が空name属性がないinputやtextareaのnameを確認する
404になるURLが違うth:actionと@PostMappingを確認する
500になるJava側で例外が発生Spring BootのConsoleログを見る
文字化けする文字コード設定やメール形式の問題UTF-8、MimeMessageHelperを検討する

メール送信のトラブルは、コードだけが原因とは限りません。

Mailpitの起動、ポート番号、application.properties、フォームのname属性、ControllerのURL、Spring Bootのログを順番に確認してください。

DevToolsでフォーム送信を確認する

問い合わせフォームが正しく送信されているかは、ブラウザのDevToolsでも確認できます。

1. ブラウザでDevToolsを開く
2. Networkタブを開く
3. 問い合わせフォームを送信する
4. /contact のPOST通信をクリックする
5. PayloadまたはForm Dataを見る

Form Dataに次のような値が出ていれば、HTMLからSpring Bootへ値が送られています。

name: 山田太郎
email: yamada@example.com
message: 商品について質問があります。

Form Dataに値が出ていない場合は、HTMLのname属性を確認してください。

メールが届かない原因を調べるときも、まず「フォーム値が送られているか」を確認しましょう。

新人エンジニアが理解すべき役割分担

部品役割
HTMLフォーム問い合わせ内容を入力してPOST送信する
Controller送信された値を受け取り、Serviceを呼ぶ
Serviceメール本文を作り、JavaMailSenderで送信する
JavaMailSenderSMTPサーバーへメール送信を依頼する
MailpitローカルSMTPとしてメールを受け取り、Web UIで見せる
application.propertiesSMTP接続先を設定する

この役割分担を意識すると、メール送信機能のコードが読みやすくなります。

Controllerにメール本文作成を全部書くのではなく、ContactMailServiceに分けるのがポイントです。

Controllerは受付係。

Serviceはメール作成係。

Mailpitは練習用の郵便局。

このように役割で覚えると理解しやすいです。

研修でのおすすめ演習

研修では、次の順番で演習するとよいです。

順番演習内容学べること
1Mailpitを起動するローカルSMTPの役割
2Spring Bootから固定メールを送るJavaMailSenderの基本
3問い合わせフォームの値をメール本文に入れる@RequestParamとメール本文作成
4PRGパターンで完了画面へ遷移する二重送信対策
5Mailpitを停止してエラーを確認する例外処理とトラブル調査
6入力チェックを追加する@ValidとBindingResult
7問い合わせ内容をDB保存するDAO、Service、トランザクション設計

特に、Mailpitをわざと停止してエラーを見る演習はおすすめです。

正常に動くコードだけでなく、壊れたときに何が起きるかを知ることが、実務力につながります。

まとめ

ローカルSMTPを使うと、Spring BootのJavaMailSenderによる問い合わせ完了メールを安全に練習できます。

Mailpitを使えば、実際の外部メールへ送らずに、送信されたメールの宛先、件名、本文をブラウザで確認できます。

ポイント内容
ローカルSMTP自分のPC上で動く練習用のSMTPサーバー
Mailpitメールを受け取りWeb UIで確認できるテストツール
JavaMailSenderSpring BootからSMTPへメール送信を依頼する仕組み
SimpleMailMessageシンプルなテキストメールを作るクラス
spring.mail.hostSMTPサーバーの接続先
spring.mail.portSMTPサーバーのポート番号
PRGパターン問い合わせ送信後の二重送信を防ぎやすくする

一言でまとめるなら、ローカルSMTPを使う問い合わせ完了メールは「本物の外部メールに送らず、研修用の郵便局で安全にメール送信を練習する仕組み」です。

新人エンジニアは、まず次の流れを覚えてください。

Mailpitを起動する
        ↓
Spring Bootのspring.mail.hostをlocalhostにする
        ↓
spring.mail.portを1025にする
        ↓
問い合わせフォームをPOSTする
        ↓
JavaMailSenderでメールを送る
        ↓
MailpitのWeb UIで確認する

今後の学習では、JavaMailSender、SimpleMailMessage、MimeMessageHelper、SMTP、Mailpit、application.properties、PRGパターン、@ValidとBindingResult、@ControllerAdvice、DB保存との組み合わせを順番に学ぶとよいです。まずはMailpitで外部に誤送信しない安全な環境を作り、問い合わせ完了メールの宛先、件名、本文が正しく作られているかを確認してみましょう!

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。