Upgrade to Pro — share decks privately, control downloads, hide ads and more …

現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜

Avatar for siroemk siroemk
October 16, 2026

現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜

Kaigi on Rails 2026 Day1

Avatar for siroemk

siroemk

October 16, 2026

More Decks by siroemk

Other Decks in Programming

Transcript

  1. About me Emiko Ando / @siroemk • Rails engineer at

    Catal Inc. • Customer Support → FBC (programming school) → Rails Engineer • Came from Nagasaki
  2. Moving a tool the eld built into an existing Rails

    app fi 現場で作られた業務ツールを既存のRailsアプリの機能として移行した話
  3. A tool no engineer knows about has quietly become part

    of the business エンジニアの知らないところで作られたツールが いつのまにか重要な業務の一部になっている
  4. And then this happens Nobody remembers Still in use It

    keeps growing, why it exists because it seems needed one addition at a time 作った人が異動して 経緯がわからなくなる なんとなく必要そうだから 使い続けている 付け足し、付け足しで 肥大化していく
  5. “Could you turn this into a proper app?” Harder than

    it looks 😱 「これ、ちゃんとアプリにしてほしい」
  6. English-language school Nine branches, from Tokyo to Fukuoka. We build

    our own curriculum and our own systems. 東京から福岡まで9つの校舎 カリキュラムもシステムも自社で開発しています Catalのエンジニア!
  7. Learning management system • Rails backend. • Students work through

    curriculum on an iPad, and coaches coach while looking at the same screen. 生徒はiPadでカリキュラムを進め、 コーチもCatallogを見ながらコーチングします
  8. “We manage something called the lesson support sheet in Google

    Sheets. Could that become a feature in Catallog?” 「レッスン補助シートというものをGoogle Spreadsheetで管理しているんですが、 これを Catallog の機能に移行できないですかね🤔」 Staff at one of the branches / 校舎スタッフ
  9. What the lesson support sheet was • A daily log

    for each lesson. One row per lesson, appended as they go. レッスンごとに1行ずつ書き足していく、業務日報のようなもの
  10. This sheet was how those two kept each other informed.

    The lesson support sheet ff Sta レッスン補助シート Coach Runs the branch Coaches the students 校舎全体のマネジメント 生徒にコーチングを行う この2者の情報共有に使われていた
  11. Three reasons to move it into Catallog 01 Cognitive load

    02 Permissions 03 Different formats 認知負荷 権限管理 フォーマットの差異 A spreadsheet cannot scope access Each branch recorded Coaches kept both openat once, and handovers slipped through. row by row. different things.
  12. Di erent formats The rst spreadsheet fi ff fi Each

    branch kept adding elds it thought it needed. As a result, each branch had its own lesson support sheet format.
  13. Data does not tell you how the work runs データを見ても、運用は分からない😐

    • Is anyone acting on this data? このデータで、何かアクションをとっているのか • If so, when, and what do they do? とっているなら、いつ、どんなアクションをしているのか • Why is this data recorded? 何のために記録しているのか
  14. Migrating it without understanding the eld Branch A uses this

    eld, so add a column. A校舎が使っているからカラム追加 Branch B needs this, so add that feature too. fi fi B校舎に必要だからこの機能も追加
  15. Migrating it without understanding the eld Branch A uses this

    eld, so add a column. A校舎が使っているからカラム追加 Same mess, now in Catallog. Spreadsheetで起きたことをCatallogで作り直すだけ🤔 Branch B needs this, so add that feature too. fi fi B校舎に必要だからこの機能も追加
  16. The name hides the work ow and the purpose So

    we had to sort them out rst fl fi 整理する必要がある
  17. But understanding it rst was not realistic either • Staff

    across nine branches were too busy to interview. 9校舎のスタッフも通常業務が忙しく、ヒアリングは現実的でない • A sheet that already worked made the ROI hard to justify. 動いているシートがある以上、ROIも合わない Requested several times, but put on hold. fi 何度か要望があったが見送られていた🥲
  18. “We manage something called the lesson support sheet in Google

    Sheets. Could that become a feature in Catallog?” 「レッスン補助シートというものをGoogle Spreadsheetで管理しているんですが、 これを Catallog の機能に移行できないですかね🤔」 “If moving it into Catallog is too hard, we would at least like the scattered sheets uni ed.” fi 「Catallogへの移行が難しければバラバラになっているシートの統一だけでもやりたい」
  19. “We manage something called the lesson support sheet in Google

    Sheets. Could that become a feature in Catallog?” 「レッスン補助シートというものをGoogle Spreadsheetで管理しているんですが、 That much, we could do. これを Catallog の機能に移行できないですかね🤔」 それならできるかも! “If moving it into Catallog is too hard, we would at least like the scattered sheets uni ed.” fi 「Catallogへの移行が難しければバラバラになっているシートの統一だけでもやりたい」
  20. We did not merge the nine sheets 引き継ぎ 共有事項 連絡事項

    スタッフからの共有 We kept only the elds every branch needed and rebuilt a simpler sheet. fi 全校舎が必要としている項目だけ抽出し、シンプルに作り直す
  21. Make it better than the sheet they already had Lesson

    rows were copied from Catallog by hand, every day. Catallogからレッスン情報を手動で更新していた
  22. Make it better than the sheet they already had We

    made lesson information appear automatically in the sheet. レッスン情報が自動でシートに反映される仕組みを作った
  23. Make it better than the sheet they already had The

    script lled in lesson_id, too. fi lesson_idも自動入力させた
  24. Removing the manual typing is what lowered the barrier to

    moving 手入力をなくしたことが、移行の心理的な障壁を下げた
  25. After the shared sheet shipped It’s so easy to use!

    とても使いやすい Having lesson details lled in automatically makes things easier! レッスン情報が自動化されて楽になりました Coaches can ll it in without confusion! fi fi コーチも迷わず入力できます
  26. Then came the bug reports😱, and the requests.✨ The script

    is acting up — the lesson data isn't coming in. GASの調子が悪くてレッスン情報が取得されません If we rename or reorder a column, the lesson data stops coming in. 列の名前や並びを変えたらレッスン情報がとれません For some reason the lesson data comes in twice. なぜかレッスン情報が二重で入ります This half was feedback we could act on 改善するためのフィードバック The previous report matters — could you show it here too? 前回報告された内容が大事だから、前回の報告も表示してほしい We use these for feedback to parents — can good points and issues be recorded separately? 保護者へのフィードバックに使いたいので、良かった点と課題は分けて記録したい For Eiken, we want to see the whole prep period at once, not lesson by lesson. 英検の記録は、英検対策期間のすべてを一度に確認したい
  27. Changing a spreadsheet is cheap Start small, share early, get

    feedback, and repeat. 小さく始めてすぐに見せ、フィードバックをもらう
  28. We came to understand how the work actually runs 引き継ぎ

    共有事項 連絡事項 スタッフからの共有 GOOD POINTS 課題点 GOOD POINTS 課題点 Staff picked out the good points and sent them to parents. Different names, the same thing Looks like one thing — but it should be two 名前が違うだけで中身は同じ 分けておくべき
  29. We found a concept with a di erent lifecycle Report

    Report Report Report Report Report Some only make sense For most reports, the last one is enough. when you see weeks of them at once. ほとんどの報告は前回の1回分が見られれば足りる 一部の報告は数週間ぶんをまとめて見ないと意味がない The same word, but a di erent lifecycle. 同じ報告でもライフサイクルが異なる ff ff (For us, it was Eiken prep, the weeks leading up to one exam.)
  30. The words settled into one shared vocabulary • The same

    words came to mean the same thing across all nine branches. 言葉と概念が、校舎を越えて揃ってきました • “This word holds this” — the eld and engineering nally read it the same way. fi fi 「この言葉にはこれを入れる」が現場とエンジニアで同じ理解になった
  31. CoachingInformation The important parts of a lesson report — staff

    at each branch copy those into CoachingInformation by hand. レッスン報告の中から重要な情報は、各教室のスタッフが コーチング情報に手動で移しているんです The eld was already treating them as the same concept. 同じ概念として扱っていた 現場はすでに、2つを fi 50
  32. The lesson_id the script had lled in paid o here

    The lesson_id the API had been lling in paid off here. ff fi fi レッスン補助シートにAPIで入れていた lesson_id がここで役に立った
  33. Seven months later A core feature now — used every

    day, and still growing. 毎日使われる主要な機能になり今も拡張が続いています An AI summary of the reports — and more — are being built on top of it. レッスン報告のAI要約など、新しい機能が追加されています
  34. Two sides of the same wall I don't know how

    they build things, I can't see how the work runs, so how much should I explain? so I don't know what to ask. 開発のことが分からないから 運用が見えないから、 目的も経緯もどこまで話せばいいのか 何を聞けば曖昧さが消えるのか 分からない 分からない
  35. Start small, show it early, and keep the loop going.

    小さく作って、すぐに見せて、フィードバックをもらう • It gives both sides of the wall a way through. 現場とエンジニア両者の困りごとを埋める機会になる • It's the shortest path to what's actually needed. 本当に必要なものへの近道になる