Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
謎解きサイトを Rails SPA で作って RubyKaigi で配布した話
Search
kokuyouwind
December 19, 2025
Programming
87
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
謎解きサイトを Rails SPA で作って RubyKaigi で配布した話
「忘年LT大会~今年のドヤ!を発表しあおう~」の発表資料です。
https://leanertechnologies.connpass.com/event/376577/
kokuyouwind
December 19, 2025
More Decks by kokuyouwind
See All by kokuyouwind
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
550
ドメイン指定Cookieとサービス間共有Redisで作る認証基盤サービス
kokuyouwind
0
40
Do LLMs dream of Type Inference?
kokuyouwind
0
42
Let's use LLMs from Ruby 〜 Refine RBS types using LLM 〜
kokuyouwind
0
8.5k
APMをちゃんと使おうとしたら、いつのまにか独自gemを作っていた話
kokuyouwind
0
970
RBS meets LLMs - Type inference using LLM
kokuyouwind
0
1k
オンラインボードゲームを作りたい人生だった
kokuyouwind
0
700
1年間本番運用してわかった、スタートアップこそAWS Copilot CLIを使うべきNつの理由
kokuyouwind
2
12k
なるべく楽したいAWSセキュリティ
kokuyouwind
1
120
Other Decks in Programming
See All in Programming
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
130
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
620
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
800
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
130
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
9
4.3k
Google Apps Script で Ruby を動かす
kawahara
0
120
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
300
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
140
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
630
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
490
AI時代、エンジニアはどう育つのか -未経験エンジニアの成長を間近で見て考えたこと-
thasu0123
0
210
Claude Team Plan導入・ガイド
tk3fftk
0
250
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.1k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
860
The Curious Case for Waylosing
cassininazir
1
440
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
My Coaching Mixtape
mlcsv
0
180
A Tale of Four Properties
chriscoyier
163
24k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Believing is Seeing
oripsolob
1
180
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
470
30 Presentation Tips
portentint
PRO
1
360
Building an army of robots
kneath
306
46k
Transcript
謎解きサイトを Rails SPA で作って RubyKaigi で配布した話 Leaner Technologies, Inc. 黒曜
(@kokuyouwind) 1
$ whoami 黒曜 / @kokuyouwind Leaner Technologies Inc. 所属 Rails
エンジニア・SRE 今はLeaner の認証基盤サービスを 作ってます 2
2025 年のドヤ! 3
Kaigi on Rails で認証基盤の話をした! https://kaigionrails.org/2025/schedule/#day2 4
https://gihyo.jp/magazine/SD/archive/2025/202511 Software Design に記事を寄稿した! 5
RubyKaigi でゲームナイトを開催! https://leanertechnologies.connpass.com/event/349031/ 6
個⼈的イチオシのドヤ! 7
RubyKaigi で⾃作謎解きを配布! 8
Cursor YOLO 使って1 時間くらいで Rails SPA に移植 当初LINE アプリで作ったが、 海外の⼈はLINE
使ってないと気づいた 9
https://escape-game-rubykaigi-2025.kokuyouwind.com/ デモ 10
実装 - 回答判定(Turbo Stream) class KeyController < ApplicationController CORRECT_ANSWERS =
[ " ほげ", # 0: 問題1, " ふが", # 1: 問題2 ] def update # 正解判定 key_id = params[:id].to_i is_correct = (params[:value] == CORRECT_ANSWERS[key_id]) if is_correct # 正解の場合のみsession に値を保存 session["key_#{key_id}_value"] = params[:value] else # 不正解の場合はflash.now に不正解フラグを設定 flash.now["key_#{key_id}_incorrect"] = true # 不正解でも⼊⼒値をリクエスト内で保持 @input_value = params[:value] end 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 render turbo_stream: [ turbo_stream.replace( "key_answer_form_#{key_id}", partial: "top/key_answer_form", locals: { index: key_id } ), turbo_stream.replace( "key_answers_table", partial: "top/key_answers_table" ) ] end end 1 2 3 4 5 6 7 8 9 10 11 12 13 11
実装 - カタカナ変換(Stimulus) // クロスワードの答え⼊⼒をカタカナに変換するコントローラー // app/javascript/controllers/key_input_controller.js export default class
extends Controller { static targets = ["incorrectIcon", "input", "form"] connect() { // コントローラーが接続された時の処理 // フォーム送信前にカタカナ変換を⾏う if (this.hasFormTarget) { this.formTarget.addEventListener( 'submit', this.handleSubmit.bind(this)) } } ... // 利⽤側ではdata: { key_input_target: "form" } を指定 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 12
ドヤポイント 謎解きの主題にイベントに因んだ題材を盛り込んだ Ruby ⾔語, RubyKaigi, 松⼭にまつわるもの リーナーの会社や主催イベントにまつわるもの AI を活かして⼿早くサイト化できた 知ってるけど使ったことのない技術を実例で試せた
Turbo Stream Stimulus 13
来年もなんかやるぞ!!! https://rubykaigi.org/2026/ 14
BuriKaigi も登壇するのでよろしくです https://fortee.jp/burikaigi-2026/proposal/59dc9edc-5d05-4ef4-a82c-39f37df4df5b 15