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
子ども向けプログラミング学習サービスQUREOの技術的アプローチ
Search
yasuiro
September 10, 2018
Programming
0
110
子ども向けプログラミング学習サービスQUREOの技術的アプローチ
bitvalley2018で発表したスライドになります。
yasuiro
September 10, 2018
Tweet
Share
More Decks by yasuiro
See All by yasuiro
子供向けプログラミング学習サービスQUREOの開発裏話
yasuiro
0
620
Other Decks in Programming
See All in Programming
PHPカンファレンス関西2025 基調講演
sugimotokei
4
570
商品比較サービス「マイベスト」における パーソナライズレコメンドの第一歩
ucchiii43
0
190
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
270
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
15k
What's new in AppKit on macOS 26
1024jp
0
150
MCPを使ってイベントソーシングのAIコーディングを効率化する / Streamlining Event Sourcing AI Coding with MCP
tomohisa
0
170
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
レベル1の開発生産性向上に取り組む − 日々の作業の効率化・自動化を通じた改善活動
kesoji
1
310
SwiftでMCPサーバーを作ろう!
giginet
PRO
2
160
A full stack side project webapp all in Kotlin (KotlinConf 2025)
dankim
0
150
マッチングアプリにおけるフリックUIで苦労したこと
yuheiito
0
210
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
470
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
40
1.9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
54k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Bash Introduction
62gerente
613
210k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
The Cult of Friendly URLs
andyhume
79
6.5k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Adopting Sorbet at Scale
ufuk
77
9.5k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
840
Building Flexible Design Systems
yeseniaperezcruz
328
39k
The Language of Interfaces
destraynor
158
25k
Transcript
子供向けプログラミング学習サービス の技術的アプローチ
自己紹介 鈴木 康弘(すずき やすひろ)@yasuiro ・Web制作会社を経て2014年サイバーエージェントグループに入社 ・2016年よりアプリボットにてQUREOの立ち上げに携わる ・元Flashエンジニア。現在はFrontend界隈を中心に活動しています。 ・最近の興味はFacebook の Instant
Gamesとか
本日お話すること ・QUREOとは ・QUREO立ち上げの背景 ・システム構成 ・正誤判定と成績 ・画像同士における衝突判定 ・まとめ フロントエンド寄りのお話が多いです。
とは
https://youtu.be/zOk9o1fB0e4
None
https://qureo.jp ・子供向けオンラインプログラミング学習サービス ・ゲームを作りながら、プログラミングの基礎を学んでもらう ・ビジュアルプログラミングによる学習方法を採用 「実力がしっかり身につく、新しいプログラミング教材」
プログラミング環境とカリキュラムが一体化している が特徴的な点 ・現時点で300レッスン程あり、最終500レッスン位になる予定
立ち上げの背景
2020
プログラミング教育必修化
None
2013年設立 プログラミング教育
「プログラミング教育」の課題点 ステージ0 特に取り組みをしていない ステージ1 担当を決めて検討中 ステージ2 研究会や研修を行っている ステージ3 授業を実施している その他
地域間の格差が生まれている ※画像:文部科学省「教育委員会等における小学校プログラミング教育に関する取組状況等」より
None
教育ノウハウ ゲーム制作で培った開発力
システム構成
システム構成図
システム構成図 フロントエンドの領域 サーバーサイドの領域
None
正誤判定と成績
None
合っている? 間違っている?
子どもの書いたコードの正誤判断 その場で講師が判断できる 講師がいないため判断できない 塾の場合 オンラインの場合
課題 オンライン上でどのように判断するか?
レッスン数が300近くあり、 一つ一つ答えの定義をプログラミングしていくのは非現実的 どれだけ似ているかというアプローチ
コサイン類似度と呼ばれる、 文書などの類似度判定に使われるアルゴリズムを使用 使用しているブロックの種類をベクトルの軸に変換し 正解かどうかが判定可能に! 2つのベクトルの内積の値が1〜-1になる性質を利用した方法です。 ベクトルが「同じ方向を向いていれば1」「反対方向を向いていれば-1」 になり、1に近ければ同じ方向を向いているということになり 似ていると判断ができるアルゴリズムになります。 コサイン類似度とは
例1 正解ブロック 実装したブロック
例1 正解ブロック 実装したブロック ( 1 , 1 , 1 )
スタート 待つ 右回転 ( 1 , 1 , 1 ) スタート 待つ 右回転
例1 正解ブロック 実装したブロック ( 1 , 1 , 1 )
スタート 待つ 右回転 ( 1 , 1 , 1 ) スタート 待つ 右回転 類似度計算 1.00
例1 正解ブロック 実装したブロック ( 1 , 1 , 1 )
スタート 待つ 右回転 ( 1 , 1 , 1 ) スタート 待つ 右回転 類似度計算 1.00 同じ
例2 正解ブロック 実装したブロック
例2 正解ブロック 実装したブロック ( 1 , 1 , 1 ,
0 ) スタート 待つ 右回転 ( 1 , 1 , 0 , 1 ) スタート 待つ 右回転 大きさ 大きさ
例2 正解ブロック 実装したブロック ( 1 , 1 , 1 ,
0 ) スタート 待つ 右回転 ( 1 , 1 , 0 , 1 ) スタート 待つ 右回転 類似度計算 0.66 大きさ 大きさ
例2 正解ブロック 実装したブロック ( 1 , 1 , 1 ,
0 ) スタート 待つ 右回転 ( 1 , 1 , 0 , 1 ) スタート 待つ 右回転 類似度計算 0.66 比較的似てはいる 大きさ 大きさ
正誤の判定が可能になった 成績
どのように成績を付けているか?
概念の洗い出し 順次実行 30概念位を定義してあります 繰り返し 条件分岐 などなど …
概念をチャプターに紐付けて概念別に成績を付与 順次実行 S 繰り返し 条件分岐 … チャプター1 A B チャプター2
チャプター3
結果 順次実行 条件分岐 よし先に進もう チャプター3を もう一度やろう S B
結果 順次実行 条件分岐 よし先に進もう チャプター3を もう一度やろう 今後の学習の進め方がわかりやすくなる S B
None
画像同士における衝突判定
None
・透過部分は衝突させたくない ・今後専用のお絵かきエディタを実装する予定があり、 ユーザーが自由に素材を作成できる機能が入る ・画像は縦横比を保ったまま拡大縮小される 要件
ブロードフェーズとナローフェーズに分離
ブロードフェーズは矩形での判定
ブロードフェーズは矩形での判定 当たった!
当たった! 矩形同士の判定であればすごくシンプル
透過部分が重なっている場合でも判定されてしまう
ブロードフェーズで重なったと判定できたあと、 ナローフェーズでの工夫が必要
ナローフェーズにおける判定
案1 事前に判定領域をパス情報として用意する
判定領域用のパスを保持するようにしようと思いましたが “ユーザーが自由に素材を作成できる機能が入る” という要件があったため厳しそう
判定領域用のパスを保持するようにしようと思いましたが “ユーザーが自由に素材を作成できる機能が入る” という要件があったため厳しそう
判定領域用のパスを保持するようにしようと思いましたが “ユーザーが自由に素材を作成できる機能が入る” という要件があったため厳しそう
案2 ピクセルレベルでの判定
重なった領域のみピクセル単位で判定
重なった領域のみピクセル単位で判定 処理が重い
重なった領域のみピクセル単位で判定 処理が重い
案3 前処理&判定エリアの簡略化
リアルタイムピクセル判定は厳しい 一度だけ前処理をすることで リアルタイム判定を軽くできないか?
画像をロードしたタイミングで正方領域に分割し 領域内の透過ピクセル数の比率で、領域を衝突判定領域とするかを決定する この時、分割最大数を決めることで 画像のサイズに応じて分割数が多くならないようにしています。
画像をロードしたタイミングで正方領域に分割し 領域内の透過ピクセル数の比率で、領域を衝突判定領域とするかを決定する この時、分割最大数を決めることで 画像のサイズに応じて分割数が多くならないようにしています。 判定領域としない 判定領域とする
判定領域を算出
計算しやすいように判定領域を矩形ではなく円にする
隙間を埋める
円同士の衝突判定をする 距離関数(三角関数)で判定できるため、計算量が少なくなります
判定領域を円にすることで 拡大縮小や回転への計算も対応しやすくなる 行列を使用することで容易に対応できる
こういった場合は衝突とみなさなくなった
この場合は衝突とみなすようになった
この場合は衝突とみなすようになった 良い感じの判定
・パフォーマンスと判定のバランスが良い ・精度的には落ちる部分はあるが問題ないレベル
まとめ
・Tech Kids Schoolのノウハウが詰まったカリキュラム ・正誤判定にはコサイン類似度を利用 ・成績から得意不得意がわかり、学習計画が立てやすくなる ・透過PNG同士の当たり判定は領域の簡略化を画像ロード後 前処理として行うことで予め決められた判定情報を持たず に対応可能に
告知
None
ご静聴ありがとうございました