PROJECT NOTE

「LINEに書くだけ」は変えずに、大学ヨット部の運営を自動化した話

広島大学ヨット部 OB / Claude Code と3日間で作った運営支援アプリの記録

所属していた大学ヨット部では、経費精算や欠席確認にかなりの時間がかかり、そのせいで部活そのものに集中できない状況がありました。 部員には、事務作業ではなく部活にもっと脳の容量を使ってほしい。そんな願いを込めて、部の「欠席管理・買い出し・経理」を、部員の今のやり方を一切変えずに自動化するアプリを作りました。 この記事では、なぜ作ったのか、何を大切にしたのか、そして AI(Claude Code)にどんなプロンプトを渡し、どう対話しながら仕様を決めていったのかをまとめます。

デモは架空のデータで動いています(名簿にはサッカー日本代表の選手名をお借りしています)。

1. 背景 ― 部の運営は「LINEと手計算」でできていた

ヨット部の活動は、海辺のマリーナでの合宿形式の練習(艇庫に泊まり、自炊する)、大学でのミーティング・トレーニング、そして遠征・イベントの3種類です。

運営の連絡はすべて LINE で回っていました。

結果として起きていたのが、請求のタイミングがずれて、年に一度いきなり大きな額を請求される、お金が必要なときに手元に資金がないという問題でした。合宿費は「1食単位」で割る決まりがあり、誰がどの食事を休んだかを LINE から拾って数えるだけでも、マネージャーには大きな負担です。

欠席の確認、レシートの整理、1人ずつの請求額の計算。どれも部を回すために欠かせない仕事ですが、担当になった部員は練習の前後や夜の時間をこうした作業に取られ、本来いちばん考えたいはずのヨットのことに頭を使えなくなっていました。この「事務に追われて部活に集中できない環境」を変えたい、というのが出発点です。

2. 大切にした3つのこと

部活のためのアプリは、作ること以上に使われ続けることが難しいものです。部員は毎年入れ替わり、管理者も毎年交代する現役学生(プログラミング未経験)です。そこで、次の3つを最後まで崩さないようにしました。

① 今の仕組みは変えない

ありがちな失敗は、「便利なフォームを作ったので、今日からここに入力してください」と運用を変えてしまうことです。新しい操作を求めた瞬間に使われなくなります。

このアプリは部の今のやり方を自動化・補助するためのもので、運用ルールを変えるものではありません。

― 最初に渡したプロンプトより

部員がすることは何も変えない(LINEに書く・アルバムに上げるだけ)ことを最重要の方針にし、技術的にどうしても無理な部分が出たときは「勝手に運用を変えず、運用の変更が一番小さい代替案を複数出して選ばせる」ようにAIに頼みました。

② 運営に課金を必要としない

毎月お金がかかる仕組みは、部費から払い続けなければならず、誰かが契約や支払いを管理し続ける必要があります。それ自体が新しい「事務」になってしまいます。

そこで、サーバーを持たずに Google と LINE の無料の範囲だけで動かし、AIの利用料もかからない形にしました。欠席の読み取りは、最初はAIに任せる設計でしたが、課金をなくすために部の言い回しに合わせたルールで読む形に作り直しました。レシートの読み取りも、Google ドライブの無料の文字認識と、読み取った文字から必要な情報を抜き出すルールでまかなっています。

③ 自分がいなくても続く(引き継ぎまでが「完成」)

作った本人が管理者として関わり続けないと動かないアプリは、本人が離れたときに止まります。私がずっと面倒を見なくても、代替わりのたびに引き継がれて末永く使われることを目指しました。

3. 最初に渡したプロンプト

いきなり「アプリを作って」と頼むのではなく、部の運営ルールを細かく書き出した要件書をプロンプトとして渡しました。ポイントは次の4つです。

  1. 方針を最初に固定する(今の仕組みは変えない、変えるなら代替案を出して選ばせる)
  2. 未定の部分を明示する(金額などは【後で伝える】、決まっていない部分は【要確認】と書き、最初に質問させる)
  3. 推測で仕様を決めさせない(迷ったら質問、設計は図や表で提案してOKをもらってから実装)
  4. 小さく区切って進める(5つのフェーズに分け、各フェーズで動作確認の手順を示させる)
プロンプト全文(要約せずに載せています)

Claude Code 用プロンプト:広島大学ヨット部 運営支援アプリ

使い方:「---」から下をすべてコピーして Claude Code に貼り付けてください。金額など未定の部分は【後で伝える】、まだ決まっていない部分は【要確認】にしてあります。Claude Code が作業の最初に質問してくるので、その場で答えれば大丈夫です。

依頼

広島大学ヨット部の「欠席管理・スケジュール・買い出し・経理」の手間をまとめて減らすアプリを、私と一緒に設計・実装してください。

最重要の方針:今の仕組みは変えない

このアプリは部の今のやり方を自動化・補助するためのもので、運用ルールを変えるものではありません。次の点は必ず守ってください。

  • 欠席連絡は今までどおり LINE「よっとぶー」に自由な文章で投稿する。書式の強制はしない。
  • レシートは今までどおり LINE「○○代経理」のアルバム(「合宿費」「部費」「遠征費」「配車代」など)に上げる。
  • 経理の担当分け(合宿費=マネージャー、部費=経理、遠征費=遠征係、配車代=配車経理、イベント代=その都度決まる担当)と、下に書いた計算ルールは変えない。
  • 経理の記録・計算は今までどおりエクセルで行う。アプリはエクセルに書き込む/エクセルを出力する形にする。
  • 部員に新しいアプリのインストールや新しい操作を求めない。

技術的にどうしても今のままでは実現できない部分(例:LINE Bot がアルバムの画像を取得できない、など)が見つかった場合は、勝手に運用を変える前提で作らず、理由と「運用の変更が一番小さい代替案」を複数出して私に選ばせてください。

進め方

  1. まずこのプロンプト全体を読み、不明点・矛盾点・【要確認】【後で伝える】の項目を一覧にして私に質問してください。
  2. 回答をもとに、システム構成・データ構造(エクセルのシート設計)・処理の流れを図や表で提案し、私の OK をもらってから実装に入ってください。
  3. 下の「開発フェーズ」の順に1つずつ実装し、各フェーズで動作確認の手順を示してください。
  4. 推測で仕様を決めないこと。迷ったら質問してください。

背景

  • 依頼者は部の OB。完成後の管理者は部の代表者(毎年交代する現役学生、プログラミング経験なしの想定)。
  • 部の活動は3種類。練習:観音マリーナでの合宿(艇庫に泊まり、艇庫で食事を作る)/MT:大学でのミーティングまたはトレーニング/遠征・イベント:遠征、新歓、ファミリーデー、マネージャー感謝祭など。
  • 観音マリーナは陸の孤島で、近くのコンビニやスーパーまで歩いて1時間かかる。そのため買い出しにも車が必要。
  • 今の問題点:経理ごとに担当者が別々のやり方で欠席者の確認やお金の計算をしているため、請求のタイミングがずれる。その結果、年に一度いきなり大きな金額を請求されたり、お金が必要なときに手元に資金がなかったりする。

経理のルール(変えないこと)

1. 合宿費(担当:マネージャー)

  • 対象:練習期間の食材費、生活用品(トイレットペーパー、シャンプーなど)、ガス代。電気・水道は大学負担なので対象外。
  • 食材費は「1食単位」で割る。日単位ではない。例:2日間の合宿なら艇庫飯は「1日目昼・夜、2日目朝・昼・夜」の5食。両日参加の人は5食分、2日目から参加の人は2日目昼・夜の2食分を払う。途中から参加、途中で抜ける、夜ご飯だけ食べない、朝ご飯だけ食べない、などに対応すること。1食あたりの単価の出し方:【要確認】
  • 生活用品とガス代は、参加人数で均等に割る。「参加人数」に数える条件:【要確認】
  • 例外:練習期間の前日20時以降に欠席連絡をした人は、買い出しリストがすでに作られているため、もともと参加予定だった分と同じ金額を請求する。
  • 出費のレシートは「○○代経理」の「合宿費」アルバムに上がる。

2. 部費(担当:経理)

  • 対象:ヨットの整備費、ハーバー使用料など。収入・支出とも一番大きい。
  • 毎月の金額は決まっておらず、「1月は○円、2月は○円…」と月ごとに設定する。学年と所属(選手/マネージャー)によって毎月の請求額が変わる。
  • 細かい出費は「○○代経理」の「部費」アルバムに上がる。大きな出費は部に請求書が届き、経理が記録する。部費以外の収入もあり、経理が記録する。

3. 遠征費(担当:遠征係)/イベント代(担当:その都度決まる)

  • 対象:遠征のホテル代、ガソリン代、高速代など。イベント代は新歓・ファミリーデーなど。その遠征・イベントに参加した人で、かかったお金の合計を割り当てる。

4. 配車代(担当:配車経理)※一番大変なので特に丁寧に

  • 基本方針:直前の欠席者まで反映し、実際に車や電車に乗った事実に基づいて配車を組み、精算する。
  • 東広島市(大学)から観音マリーナへは「車」または「電車」で行く。車には「部車」と「個人車」がある。
  • 支出:部車のガソリン代(遠征のとき以外はすべて配車代から出す)/電車代の補助(車の定員を練習参加人数が超えたときの緊急手段。このときだけ片道590円を補助。私的な理由で電車を使った場合は補助なし・配車代の請求もしない)/個人車の補助(ガソリン代は持ち主の自己負担。ただし運転者のほかに1人以上乗せて移動した場合に限り、持ち主に補助。金額:【後で伝える】)/部車の運転手の減額(金額:【後で伝える】)
  • 収入:乗車ごとの負担(東広島市から観音マリーナへの車に1回乗るごとに加算。金額:【後で伝える】)/買い出し用の定額(金額・集めるタイミング:【後で伝える】)
  • 余ったお金の扱い:上の支出をすべて分配したあとに余ったお金は、「スーパーに連れていってくれてありがとう代」として個人車の持ち主に分配する。持ち主の間での分け方:【要確認】
  • 配車の記録について【要確認】:誰がどの車(または電車)に乗ったかを、現在どのように決めて記録しているか。アプリで欠席情報から配車案を自動で作るか、配車経理が作った配車表を取り込むだけにするか。予定と実際が違った場合(直前の欠席・代わりの車など)を、誰がどう修正するか。

現在の買い出しリストの作り方(これを自動化したい)

  1. 欠席者を確認し、それぞれの食事の人数を数える
  2. 献立を考え、必要な材料 × 人数で分量を見積もる
  3. 練習期間すべての献立について同じことをし、1つの買い物リストにまとめる(同じ材料を合算するのが特に大変)
  4. トイレットペーパーなど必要な生活用品を追加する
  5. 買い出しリストの完成

作ってほしい機能

  1. 欠席連絡の記録:LINE「よっとぶー」に投稿された欠席連絡(自由な文章)を読み取り、誰が・いつ(どの練習のどの食事/どの活動)いないかを Google カレンダーに記録する。読み取りに自信がないときは、自動で確定させずに担当者が確認できるようにする。連絡した時刻(前日20時より前か後か)も記録する。
  2. 欠席時の通知:欠席連絡があったときに、Google カレンダーの利用者(マネージャー、配車経理など)へ通知が届くようにする。前日20時以降の欠席は分かるように区別する。
  3. 買い出しリストの自動作成:Google カレンダーの練習日程と各食事の人数をもとに、献立と「1食・1人あたりに必要な材料」を入力すると、練習期間全体で同じ材料を合算した買い出しリスト(生活用品込み)を作る。献立とレシピは保存して次回以降も使えるようにする。
  4. レシートの読み取り:「○○代経理」の各アルバムに上がったレシートから日付・店名・金額を読み取り、アルバムの区分ごとのエクセルにまとめる。読み取り結果は担当者が確認・修正できるようにする。
  5. 合宿費の計算:レシートの実費と Google カレンダーの出欠(食数・参加者)から、上のルールどおり1人ごとの請求額を計算し、エクセルにまとめる。
  6. 配車代の計算:上の配車代のルールどおり、乗車記録・補助・減額・余りの分配まで計算し、エクセルにまとめる。
  7. 管理者の引き継ぎ:代表者が使えて、毎年の代替わりで管理者・担当者・部員名簿(学年・所属)・金額設定を引き継げるようにする。
  8. 金額設定を変えられるようにする:補助額・減額・乗車ごとの負担額・部費の月額・前日20時の締切時刻などは、プログラムを書き換えずにエクセルの「設定シート」などから代表者や担当者が変更できるようにする。

※ 余裕があれば、各経理の請求を1人ごとにまとめて見られる一覧も検討してください(年1回の大口請求・資金不足の問題に役立つため)。ただし請求のタイミングや方法そのものは各担当のやり方を変えないこと。

技術面の希望と、必ず調べてほしい点

  • 運用費はできるだけ無料にしたい。サーバーの管理が必要ない構成を優先する。
  • 部専用の Google アカウントなどに全部をまとめ、特定の個人のアカウントに依存させない(代替わりで使えなくなるのを防ぐ)。
  • 個人情報(名前、欠席理由、金額)の扱いに気をつけ、役職ごとに見られる範囲を分ける。
  • 以下は設計の前に必ず調べ、問題があれば「方針:今の仕組みは変えない」に従って私に相談すること。LINE Bot(Messaging API)を既存のグループ「よっとぶー」「○○代経理」に招待して、メッセージや画像を取得できるか(特にアルバムに上げた画像を取得できるか)/Bot は招待される前の過去のメッセージを読めない点/LINE 公式アカウント無料プランの通知数の上限/Google カレンダー、エクセル(保存場所:OneDrive/Google ドライブ等)とどう連携するか/自由な文章の解釈やレシート読み取りに AI を使う場合の費用(無料枠があるか)。

開発フェーズ

  • フェーズ1:部員名簿、練習日程(Google カレンダー)、欠席連絡の取り込みと通知
  • フェーズ2:献立・レシピの登録と買い出しリストの自動作成
  • フェーズ3:レシートの読み取りとエクセルへの記録
  • フェーズ4:合宿費・配車代の自動計算(あわせて部費・遠征費・イベント代の集計)
  • フェーズ5:プログラミング未経験の代表者向けの運用マニュアル(毎日の使い方、代替わりの引き継ぎ手順、トラブルが起きたときの対処法)

4. 対話で決めていったこと

プロンプトを渡すと、Claude Code はまず【要確認】【後で伝える】の項目と、気になる点(LINEのアルバムは Bot から取得できない、など)を一覧で質問してきました。そこから先は、質問に答える → 設計を表で提案される → OKを出す → 実装 → 実データで試す → 直してもらうの繰り返しです。途中で私が返した言葉と、それで変わったことの一部を並べます。

私が返したこと(要旨)どうなったか
AIの課金はなしで欠席の読み取りを、部の言い回し(「昼着艇後抜け」「始発で到着次第出艇」など)に合わせたルールベースに変更。迷うものだけ「要確認」にして人が確定する形に。
通知は要確認のときだけメールでBot はグループで一切発言せず、自動で判断できなかった連絡だけマネージャーにメール。
肉は1人40gの決まり。買い出しは余らないよう切り上げレシピのメモを貼るだけで1人分に換算して取り込む機能に。米は人数で升数を決め、8kg袋に換算。
(調味料の扱いで実装を始めかけたとき)案を出して確認して勝手に進めず、案A/B/Cを出し直してもらい、「量のない調味料は在庫を見て足りないものだけ押す」案Aに決定。
レシートの写真に名前や金額を書き込んでいる。手書きでもいける?無料のOCRでは手書きの区別は難しいと正直に説明され、「写真を横に見ながら担当が直す」形を選択。書き込まれた名前・金額から「誰がいくら立て替えたか」を読むルールを実物の写真で調整。
何の分の選択いらないかも。レシートを見れば時期わかるし画面からは消し、日付から練習・月を裏で自動記録(合宿費の計算に必要なため)。
入学年度を令和で呼ぶ文化がある(2023年度入学=05)。同姓同名は「浅野06」「浅野07」同姓同名の表示を「(06)」の形に。レシートに「浅野06」と書かれていても本人を特定。
遠征費は遠征ごと、イベントもイベントごとに会計を分けている会計ごとにシートを分け、宿代は泊数で按分・移動費は等分、1泊だけの人は個別の金額を設定できる形に。

振り返ると、部の「暗黙のルール」を言葉にして渡すたびに、アプリが部に合っていった感覚があります。AIは「何を知らないか」を質問の形で教えてくれるので、要件書に書き漏れていたことにも気づけました。

5. しくみ ― 運用費0円、サーバーなし

LINE「よっとぶー」→Google Apps Script(部のアカウント)→スプレッドシート・カレンダー→管理画面(React)

6. ぶつかった壁

LINEのアルバムは Bot から見えない

Messaging API では、アルバムに上げた写真は Bot に届きません。「部員にトークへ写真を送ってもらう」と運用が変わってしまうので、部員はアルバムのまま、経理担当が写真を保存して管理画面にまとめてドロップする案を選びました。

OCRの「合計」がずれる

実物のレシートでは「合計」が「百計」と読まれたり、見出しと金額が別々のかたまりになったりして、割引額や税額を合計と取り違えました。そこで、見出しだけに頼らず「小計+税=合計」「お預り=合計+お釣り」という金額どうしの関係で確かめるようにして解決しました。

Googleの細かい壁

7. できたもの

5
フェーズ名簿・欠席 → 献立 → レシート → 計算 → マニュアル
10
画面(タブ)欠席・出欠表・献立・レシート・合宿費・配車代・遠征・部費 ほか
0円
運用費サーバー代・AI課金なし
0
部員の新しい操作LINEに書く・アルバムに上げるだけ

8. やってみて思ったこと

残っているのは、配車経理が作っている配車表を貼り付けて取り込む機能と、役職ごとに見られる範囲の整理です。部で使いながら、少しずつ直していく予定です。

このアプリで減らしたいのは、作業の時間そのものよりも、「あれを確認しなきゃ」「計算が合わない」と頭の片隅を占め続ける負担です。空いた分の頭と時間を、後輩たちが風を読み、艇を走らせることに使ってくれたら、それが一番うれしいです。