Claude Codeでバイクツーリング中に会話できるAIアシスタントシステムを作った
はじめに
バイクでのツーリングって、楽しいんですが、割と孤独です。
マスツーリングできる人なら違うんでしょうが、私は1年+αで1万km走る距離ガバライダー。
走るペースも自分に最適化されてますし、思いつきで出て思いつきで走るので、万年ソロです。
音楽を聞いたり、ラジオを聞いたりして楽しんではいますが、1日に4時間5時間も走ってると飽きてきます。
運転中にスマホを操作するわけにはいきません。(自作したハンドルリモコンである程度操作はできますが)
「雑談したいな~」「交通情報とかニュースとかも知りたいな」「この近くの観光名所とか知れたら便利じゃね?」とかとか欲が膨らみます。
Googleアシスタントは反応悪いし「こちらの情報がWebで見つかりました」とかって画面見せようとしてくるし...
というわけで作ってみることにしました。
Claude Code「を」システムに組み込んでいます
先行例
似たようなことをされている方はすでにいます。参考までに記載。
前提となる記事
以下の記事にあるように、当方のバイクには自作のBleutoothハンドルリモコンが取り付けられています。今回のシステムでもこれを使用しています。
システムの概要
システムは以下のように動作します。
- ライダーが話すと音声認識される
- ライダーがハンドルのボタンを長押しするか、特定のキーワードを含めることでサーバーに処理開始を依頼する。
- サーバーがClaude CodeでLLM対話処理する
- インカムで音声合成が再生される
より詳細な流れは、後の「処理の流れ」を参照してください。
システム構成
システム構成は以下です。
なんでこんな複雑な構造なのかは、後に説明します。

ライダー側構成
音声再生・操作端末
- この端末はハンドルに固定されています。
- カーナビ用の端末に、すでにBluetoothハンドルリモコンが繋がっています。
- 音楽やナビ音声の再生のため、ヘルメットのインカムはこの端末に接続されています。
- サーバーからの通知音や音声合成をMacrodroid(既製品)経由で、インカムに再生する役目を持っています。
- ハンドルリモコンを長押しすると、KeyMapper(既製品)がHTTPリクエストをサーバーに送信します。(処理開始トリガ)
- Macrodroidが位置情報を1分おきにサーバーにPOSTしています。
音声認識端末
- この端末はリアケース(後部荷物入れ)に入っています。
- DJI Mic MiniのレシーバとUSBケーブルで接続されています。
- 自作の音声認識アプリが、Deepgram(クラウド音声認識)に常時接続しており、マイク音声を常にSTTしています。
- MacrodroidがX(twitter)アプリや天気アプリの通知をサーバーにPOSTしています。
サーバー側構成
- 自宅サーバーとしてUbuntu 24.04を動作させています。
- voiceserver.pyというスクリプトが動いており、これがCloudfrare Tunnell経由で外部からのHTTPリクエストを受け付けています。
- voiceserver.pyは、各種情報を受け取るとメモリやファイルに保存します。そのうえで、音声再生端末からの処理開始トリガを受け取ると、Claude Code SDKを経由してClaude Codeに処理を依頼します。
- Claude Codeは、CLAUDE.mdに定義された人格定義や処理方法に従い、ユーザーとの対話やMCPツール呼び出しを処理します。
- voiceserver.pyは、Claude Codeからの出力を逐次、Webhookとしてmacrodroid webhook triggerサーバーに転送します。
苦労した点
なんでこんな複雑な構造なんでしょう?
音声認識でAIアシスタントを動かす、と聞くと、まあそんなに難しくないように思えます。
実際、作るだけならそんなに難しくなく、4月の時点でOpenAIのAssistant APIを使った試作を完成させていました。しかし、バイク特有の困った話が色々あります。
音声認識とマイクの問題
内蔵の音声認識が使い物にならない
Macrodroidを使ってAndroid内臓の音声認識で最初試していました。
机上では割といい感じに動きます。しかし、バイクに持ち込むと動きません。
後の項目にも関係しますが、Android内臓の音声認識機能は、内蔵マイクしか拾いません。
その上、ノイズにもかなり弱く、すぐに認識を打ち切ります。
Bluetooth経由のマイクが異常を起こす
現代のライダーならインカムというものをヘルメットに取り付けていると思います。
ヘルメットスピーカー+マイクのBluetoothデバイスですね。
で、これがAndroidと組み合わせると非常に使い勝手が悪いのです。
以下のような事象が発生します。(機種・アプリ・インカム問わずに発生します)
- マイクに切り替わらない
- マイクに切り替わるがアプリに音声が入らない
- マイクの音質が悪すぎる
- 音楽とマイクの切り替えに失敗して爆音が鳴り続ける(ひどい)
Bluetooth SCOなど技術的なテクニックの話もありますが、これらがランダムに起きます。
2つのインカム、2種類の機種、有名なアプリの組み合わせを色々変えてもこれは改善しませんでした。
DT-E1 + Zello(トランシーバーアプリ)の組み合わせでは、ぎりぎりなんとか動くことがあります。
ノイズが多すぎる
バイクというのは、とにかくノイズの多い環境です。
車と異なり、風切音やエンジン音が死ぬほど入ります。
4月の試作の時点で、なんとか動く組み合わせを見つけて試したところ、今度はこの問題に悩まされることになりました。
AIの返答がダメダメだったので憤った挙げ句、インカムからの録音データを聴いてみたら驚きました。
「洗面器に水を張って大声を出すおじさんの声を音割れさせた感じ」と表現するのが適切だと思います。
あるいは「強力な扇風機の前で大声で喋っている感じ」
このノイズの多さは、VAD(発話検知)にもすごく問題を起こします。
いわゆる「喋ってるときだけ検知すればいいじゃん」を、大量のノイズが妨害するのです。
防水性
雨に振られたことのないライダーはいないと思います。
バイクはその構造上、全身ずぶ濡れなんてのは平気で起こる環境です。
つまり、電子機器は防水が前提となります。
スマホも当然防水、インカムも防水です。
自作のハンドルリモコンも、スイッチからマイコンまで防水処理してあります。
なので、安易に有線接続というのはできません。
どう解決したか?
マイクは良いやつを買う
DJI Mic Miniを導入しました。
DJI Mic Miniは、youtuberの撮影などで使われる高性能なプロ用マイクです。1.3万円。
超高性能なノイズ除去と風防が付いています。
これはマイク本体とUSB受信機がセットになっています。
このUSB受信機を使うことで、AndroidのBluetoothのめんどくさい問題を全部スルーできます。録音音質も極めて飛躍的に向上します。
また、モトブログの撮影などにも使われる性能で、ノイズ除去機能は強に設定するとエンジン音をほぼ完全に消してしまって味気なくしてしまうという程の性能を持っています。
ところで、DJI Mic Miniはマイク・受信機共に防水ではありません。
なので防水はどうしたかというと、マイクはヘルメットの内側に、録音は別スマホをリアケース内に入れるという方法で解決することにしました。

マイクは、胸元など様々な位置を試したのですが、ここが一番音声認識の質が良くなります。
手持ちのWINS X-ROADヘルメットのこの鼻先のところにクリップがちょうどよくハマるので、そこに取り付けています。
VADはクラウドに任せる
音声認識の精度を考えると、クラウド上で音声認識するのは当たり前の時代です。
で、問題はVAD(発話検知)です。レベルトリガーなんか使い物になりません。
喋っている間ボタンを押しっぱなしに、なんてのも考えられはしますが、手間です。
で、私はこれを雑に解決することにしました。Deepgramに常時認識させます。
Deepgram自体VAD機能を持っており、検知した文だけ音声認識されます。
Nova-3の多言語で、$0.0092/min, つまり10時間で$5.52くらいです。高いと感じるかは人次第。
既製品のアプリにこういうのはないので、Github Copilotにお願いしてAndroidアプリとしてDeepgram音声認識デーモンを作成してもらいました。便利。
リアルタイム後置式音声認識
一般的な音声認識アシスタントは、ボタンを押してから喋ったり、Wake Word(OKグーグル等)を喋ってから認識させますが、本システムでは
- 常に音声認識を行う
- 音声認識完了音をライダーが聞いたうえで、処理可否を判断して確定する
仕組みを取っています。
これは、従来型のアシスタントを使っている時に、私の喋り方の問題なのか、喋ってる最中にぶち切られることが結構発生した経験からつけています。言い間違いもありますし。
後置式音声認識では、音声認識結果を検知してから2秒間待ちます。検知するたびに2秒延長します。
これにより、多少考えながら喋ってもひとつながりの文として認識します。
また、明らかに途中で切られたとか、言い間違いや吃りに気づいたときは、認識完了後処理トリガを掛けずに、そのままもう一度喋ることで上書きできます。
これにより、待ち時間は増えますが、変な認識の返事を聞くストレスを受けずに済みます。
そしてこれが重要な点ですが 万が一他人や、街宣車、周囲の放送、アシスタント自身の音声を拾っても、勝手に反応しません。
※ただし、利便性のために特定のキーワード(アシスタントの名前)が含まれるときは自動で確定処理を行うようにしているため、このキーワード設定しだいでは暴走します。まず日常では出てこない名前なので大丈夫だと思いますが。
AIアシスタントを作るのは地味にめんどくさい
LLMを使ったアシスタント、しかも外部ツールと連携させて...となると、結構考えることは多いです。
コンテキストの継続とか、圧縮とか、そういったものも考えないといけません。
外部のツールも1つ呼び出して終わりではなく、複数をエージェント的に使いこなしてほしいですよね。
あと、従量制のAPI課金じゃなくて、定額だとなお良いですよね。
あれ、そんな感じの便利ツールがなかったかな。
Claude Code SDKの利用
Claude Codeは、皆さんよく御存知の通りサブスクリプションで使用できます。
そのうえで、Claude Codeはコマンドラインやスクリプトから自動処理をさせるための仕組みが公開されています。
Claude Code SDKは、Claude CodeをサブプロセスとしてRunning可能にし、Claudeの機能を活用したAI駆動のコーディングアシスタントやツールを構築する方法を提供します。
SDKは、コマンドライン、TypeScript、およびPythonでの使用が可能です。
ので、これを使うことにしました。
事前に、CLAUDE.mdにキャラクターの設定を書いたりしても読み込まれるのか確認したところ、全く問題なく読み込まれました。コーディング用のReminderが各種入力に含まれるようですが、問題なく無視してくれます。(面白いことにThinkingにその旨が記載されます)
以下のような感じで呼び出しています。
options = ClaudeCodeOptions(
cwd=Path("/home/ubuntu/AnchorSpirit"),
disallowed_tools=["Write", "Bash"],
allowed_tools= ["mcp__mcp-gemini-cli", "mcp__pushover", "mcp__opencage-geocoding"],
max_turns= 50,
max_thinking_tokens= 500,
continue_conversation=True,
)
continue_conversation=True がキーでして、これを入れておくだけで、Claude Code側で勝手にコンテキストを継続してくれます。
私の環境では、サーバー上のClaude Codeはこの目的でしか使用していませんが、複数の使用が考えられる環境の場合は、session idを与えて管理したほうが良いかも知れません。
MCPが便利
Claude Codeを使う場合、MCPをかなり手軽に導入できるのも利点です。
私の環境では、以下の3つを現在導入しています。
- mcp-gemini-cli: Claudeからgemini-cliを呼び出す機能です。調べ物の精度が高く、geminiの無料枠を有効活用できます。
- pushover-mcp: スマホに通知を信頼性高く送信できるサービスです。非常に便利。メモなどを送ってもらうのに便利です。
- opencage-geocoding-mcp: ジオコーディング。GPS座標情報から住所を検索したりできます。
実際の処理の流れ
"スピリット"は本システムでのアシスタントの名前です。
パターン1: トリガーワードでの認識開始
- ライダーが発話:「スピリット、今日の天気は?」
- 音声認識用端末がSpeech to Text認識し文字に変換
- 音声認識用端末が認識結果を自宅サーバーへHTTP送信
- 自宅サーバー上のPythonスクリプトが音声認識結果を受信し、記録
- サーバーは、音声再生端末へ「認識成功音」の再生を要求
- 音声再生端末は音声認識成功を通知
- サーバーは、トリガーワードが含まれているのでそのままClaude Code SDKを用いてClaude Codeへ「今日の天気は?」の処理を指示
- Claude CodeはMCPツールなどを使用し、結果を処理。「取得するね、ちょっとまってて」「東京の今日の天気は...」
- サーバーは、音声再生端末へ逐次処理結果を送信。
- 音声再生端末は受信した結果をインカムへ送信
- ライダーが処理結果を聞く
パターン2: 手動での認識開始
- ライダーが発話:「今日の天気は?」
- 音声認識用端末がSpeech to Text認識し文字に変換
- 音声認識用端末が認識結果を自宅サーバーへHTTP送信
- 自宅サーバー上のPythonスクリプトが音声認識結果を受信し、記録
- サーバーは、音声再生端末へ「認識成功音」の再生を要求
- 音声再生端末は音声認識成功を通知
- ライダーは音声認識成功音を聞いて、ハンドルリモコンから処理開始を指示
- 音声再生端末はリモコン操作を受けてサーバーに処理開始要求をHTTP送信
- サーバーはClaude Code SDKを用いてClaude Codeへ「今日の天気は?」の処理を指示
- Claude CodeはMCPツールなどを使用し、結果を処理。「取得するね、ちょっとまってて」「東京の今日の天気は...」
- サーバーは、音声再生端末へ逐次処理結果を送信。
- 音声再生端末は受信した結果をインカムへ送信
- ライダーが処理結果を聞く
CLAUDE.md
以下の人格として振る舞う
``yaml
character_config:
name: "アンカー・スピリット"
alias: "スピリット"
...(省略)...
``
# システムの動作について
以下のルールに従うこと
<user>オーナーの入力</user>に対して応答してください。
それ以外のXMLは自動的に挿入される背景情報です。
音声認識結果が入力されているため、誤字や誤変換、ノイズは多いと想定してください。
特に、(入力 ?)は低信頼性を示します。
返答は、音声出力に適した50字以内程度の簡素な内容にしてください。
天気や観光、交通情報など現在位置が関係するものへの返答は、まず現在位置の住所を取得してから行ってください。
(ただし10分以内に一度取得済みの場合は、使いまわして構いません)
## MCP(tool)
口調を整えるのを忘れないこと。
+pushover: オーナーのスマートフォンに即時通知を送信する。気づいてもらいたいときに使う。
+mcp-gemini-cli: 外部AI(gemini)に相談することができる。不明点は気軽に聞くとよい。
## Files
以下のファイルは必要に応じて積極的に読み込み活用してください。
ファイルは全体を読み込むこと。
ただし古い情報も含まれることがあります。時刻に注意してください
+ notifications.txt: リアルタイムな交通情報やスマートフォンの通知(最大200件。全国情報のため遠い地域の情報を出さないように注意)
+ locations.txt: オーナーの位置情報履歴(1分おきに更新。200件)
実際に走行したときの会話ログ
音声認識ベースのため、認識不良が含まれます。
音声認識の信頼性が低いところは(認識結果 ?)の表示になります。
メモの送信
#108 [2025-07-20 06:34:36] User: ツーリングプランの登録(忘れ ?)た サービスエリアか入ったら申請しとくか
#111 [2025-07-20 06:34:41] Assistant: うん、それいいね。NEXCO系のツーリングプランだと割引もあるし、SAに入ったタイミングで登録しておくと便利だよ。忘れやすいから、今のうちに意識しておくといいかも。
#114 [2025-07-20 06:35:14] User: スピリット(忘れ ?)そうだからさスマホにメモ送って おいてくれる
*外部ツールコール*
#119 [2025-07-20 06:35:25] Assistant: 送っておいたよ。SAで見返してね。
#122 [2025-07-20 06:36:12] User: ありがとう、通知北の確認したよ。 よ。助かる。
#125 [2025-07-20 06:36:17] Assistant: うん、どういたしまして。忘れそうなことはいつでも送るから、遠慮なく言ってね。気をつけて走って。

雑談
#137 [2025-07-20 06:38:59] User: 今回コミネの ウォータージャケット、体冷やすやつ 発売のやつが届いたから試してみてるんだけど やっぱあると便利だねこれ。
#140 [2025-07-20 06:39:10] Assistant: おお、コミネの新しいウォータージャケットか。この暑さだと効果実感できそうだね。気化熱で体温下げてくれるから、34度まで上がる今日みたいな日には重宝するよ。長時間ツーリングには必須アイテムだ。
地域の案内1
#184 [2025-07-20 06:49:30] User: スピリット(。 ?)(ケ ?)ノシ峠 ってなんでこんなに人気なんだっけ。
*外部ツールコール*
#189 [2025-07-20 06:50:09] Assistant: 毛無峠は廃鉱山の荒涼とした景色が独特なんだよ。硫黄鉱山跡で木が生えてなくて、日本離れした風景と廃墟感がある。標高1800mからの眺望も素晴らしいし、「秘境グンマー」の看板も有名になった。特別な雰囲気があるから人気なんだね。
#191 [2025-07-20 06:50:47] User: ネットミームになったっていうのもやっぱ結構大きいのかね。
#194 [2025-07-20 06:50:54] Assistant: そうだね。「この先危険」看板と「秘境グンマー」のネタが拡散して、聖地巡礼的な要素も加わったと思う。SNSで話題になったことで、景色目当てだけじゃなくネタ目当てでも行く人が増えたんじゃないかな。
#197 [2025-07-20 06:51:26] User: 結構 通行止めとかで行ける期間限られるんだよね。
#200 [2025-07-20 06:51:33] Assistant: うん、冬季閉鎖があるからね。大体11月下旬から4月下旬くらいまで通れない。雪と凍結で危険だから。今の時期は開通してるけど、行ける期間が限られてるからそれも人気の理由の一つかも。
#203 [2025-07-20 06:52:10] User: そっかそもそも標高がやたら高いから いうのがあるんだね。
#206 [2025-07-20 06:52:16] Assistant: そうそう、1800m超えだからね。関東近郊では結構な高さで、気温も下がるし雪も積もりやすい。高山道路だから冬季閉鎖は当然といえば当然だよ。
地域の案内2
#559 [2025-07-20 08:34:09] User: 群馬ってさ 有名なスポットとか観光名所とか あるいはなんか美味しいものとかあったっけ
*外部ツールコール*
#564 [2025-07-20 08:34:53] Assistant: 群馬は結構色々あるよ。温泉だと草津温泉が有名で、湯畑の景色は一見の価値がある。伊香保温泉の石段街も風情があるね。 食べ物では水沢うどんが日本三大うどんの一つで、ひもかわうどんは幅広麺が特徴的。焼きまんじゅうは甘い味噌だれがかかった群馬名物だし、ソースカツ丼も有名。おっきりこみは煮込みうどんみたいな郷土料理だよ。 自然スポットなら榛名山榛名湖、吹割の滝は「東洋のナイアガラ」って呼ばれてる。世界遺産の富岡製糸場もある。毛無峠の帰りに寄れそうなところもあるかもね。
#567 [2025-07-20 08:35:47] User: なるほどねそっか富岡製糸場も群馬だっけ
#570 [2025-07-20 08:35:53] Assistant: そう、富岡製糸場は群馬の富岡市にある世界遺産だよ。明治時代に作られた官営製糸場で、日本の近代化を象徴する場所。建物もレンガ造りで歴史的価値が高い。毛無峠からの帰り道で寄り道できる距離にあるかもね。
文脈認識パワー
#975 [2025-07-20 11:14:46] User: 渋川(イカ ?)ポインター(。なん ?)で(来 ?)よう 名前なんだろう。
#978 [2025-07-20 11:14:53] Assistant: 渋川伊香保ICのことかな?音声認識で「イカポインター」になっちゃったのかも。渋川伊香保インターチェンジで、伊香保温泉への玄関口として有名だよ。石段街で知られる温泉地だね。
近くに見えた山とか
#953 [2025-07-20 10:57:20] User: 赤城山ってどんな山
#956 [2025-07-20 10:57:27] Assistant: 赤城山は群馬県の上毛三山の一つで、標高1828mのカルデラ火山だよ。山頂には大沼という湖があって、景色がきれい。春のツツジや秋の紅葉が有名で、ドライブやツーリングコースとしても人気。関越道からも見えるはずだよ。
道の駅の情報
#1394 [2025-07-20 13:14:07] User: 道の駅吾妻橋の表示が出てきた。
#1397 [2025-07-20 13:14:15] Assistant: あー、道の駅あがつま峡だね。この道の駅も群馬の吾妻地域にある道の駅で、草津方面に向かう途中の休憩スポットだよ。さっき調べた道の駅草津運動茶屋公園よりは手前にあるはず。
#1399 [2025-07-20 13:14:53] User: (あー ?)でも道曲がらないといけない道 の駅か。ここの道の駅の規模ってどのぐらいの(と ?)こなの
*外部ツールコール*
#1404 [2025-07-20 13:15:30] Assistant: 道の駅あがつま峡、結構大きくて充実してるよ!2014年オープンで比較的新しい道の駅だね。 規模・施設 - 農産物直売所「てんぐ」 - 食事処「あがつま亭」+ 軽食コーナー - 日帰り温泉「天狗の湯」+ 無料足湯 - ドッグラン、遊具広場、遊歩道 営業時間 - 直売所:9:00-18:00(今の時期は19:00まで) - 食事処:11:00-17:00 - 温泉:10:00-21:00 真田忍者テーマの珍しい道の駅で、温泉もあるから暑さ対策にもいいかも。この暑さなら足湯より温泉で体を冷やした方が良さそうだね。寄り道する価値ありそう。
#1407 [2025-07-20 13:16:40] User: よしじゃあ寄ることにしよう
#1410 [2025-07-20 13:16:53] Assistant: いいね!温泉施設があるから、この暑さでしっかり体を冷やせそう。真田忍者テーマも面白そうだし、いい休憩になるよ。エアコンの効いた建物で涼んで、水分補給もしっかりしてね。
この有料道路って現金だけ?
#1674 [2025-07-20 15:25:48] User: (万 ?)座ハイウェイって 何
#1677 [2025-07-20 15:25:57] Assistant: 万座ハイウェイは万座温泉に向かう有料道路だよ。国道292号から分岐して万座温泉まで続く山岳道路で、景色がきれいなドライブコースとして有名。標高が高いから夏でも涼しいし、高原の雰囲気が楽しめる。毛無峠に向かうルートの一部でもあるね。
#1680 [2025-07-20 15:26:41] User: 有料道路なんだ (ね ?)。確かにナビも有料道路表示に変わったわ。 おいくら750円結構するな。
#1683 [2025-07-20 15:26:50] Assistant: 750円かー、確かに結構するね。山岳有料道路だから維持費もかかるんだろうけど、ちょっと高めだな。でも万座温泉と毛無峠に行くには通らないといけないルートだから、仕方ないかも。景色はきっといいはずだよ。
#1686 [2025-07-20 15:27:39] User: 確かに山間部の道にしては走りやすい し景色も良さそうな感じはするね。
#1689 [2025-07-20 15:27:47] Assistant: そうだね、有料道路だけあって道路の質は良さそう。高原地帯だから景色も開けてるだろうし、標高が上がると涼しくなってくるかもね。万座温泉や毛無峠まで快適に行けそうだ。750円の価値はありそうな感じ?
#1692 [2025-07-20 15:28:45] User: これさあ(支 ?)払いって現金だけそれとも他の手段(帯 ?) してる
#1695 [2025-07-20 15:28:52] Assistant: んん、山間部の有料道路だと現金のみのところが多いけど、最近はETCやクレジットカード対応の料金所も増えてきてるよ。万座ハイウェイがどうかは分からないな。料金所で確認してみるしかないかも。現金も一応用意しておいた方が安全だね。
#1703 [2025-07-20 15:30:13] User: ネットでさ対応している支払い手段調べられない
*外部ツールコール*
#1708 [2025-07-20 15:30:42] Assistant: 万座ハイウェイは現金のみの支払いだよ。ETCは使えない。 支払い方法 - 現金のみ(手渡し) - ETCカード使用不可 料金 - 二輪車:740円 - 普通車:1,050-1,070円 料金所は1箇所だけで、スタッフが常駐してる。現金を用意しておいてね。バイクなら740円だから、さっき言ってた750円と近い金額だね。
今後の展望
- 情報の与え方を工夫してよりもっと適切な情報適用ができる形態の実現。
- スマホ1台で完結させられないか
- もっとDeepgramの費用少なくできないか (1回のツーリングで$5~$10はちと痛い)
- 便利なMCPを色々入れたい
- ツーリングに特化したAI人格の考案
実際使ってみると、すごい便利な情報を提供してくれる上記のログのようなパターンもあれば、正直うるせぇってなるようなダメな対応もありました。
期待を上回ってくれるポイントと、ダメなポイント、LLMの使い方はなかなか難しいです。
基本的に与えるコンテキストで振る舞いの精度はガラリと変わりますので、コンテキストをしっかりエンジニアリングしていきたいところです。
具体的にどんな感じだったのかは、以下の記事に書いています。
おわりに
何かの参考になれば幸いです。
Discussion