子供のおもちゃ駆動開発/CTDD

 子供のおもちゃ駆動開発/CTDD

ふと子供がとあるおもちゃが欲しいと言ってきた。買うのは容易いが、ただ単に買うのでは面白くない。
じゃあ、作ってみよう。
そう、それが子供のおもちゃ駆動開発(CTDD)だ。
https://note.com/ohbashunsuke/n/na301be40df1c

9321a57bcb62d9d6fca07b5c5ca6f6d0?s=128

Shunsuke Ohba

September 15, 2020
Tweet

Transcript

  1. CTDD
 子供のおもちゃ駆動開発
 (Children’s Toy Driven Development) 
 2020.09.15 大庭俊介


  2. 自己紹介
 大庭俊介@ohbashunsuke
 デザイナー > Flashエンジニア > Unityエンジニアと変遷
 ▪主な業務
 - 現在はUnityでスマホゲームの開発


    - デザイナー・企画・エンジニア間の調整やワークフロー整備、UXの実装
 10年以上UX部分に関わる仕事をしています
 新規開発ゲームの立ち上げに関わることが多いです
 2

  3. ところで
 3


  4. 進研ゼミには
 「努力賞ポイント報酬カタログ」
 ※正式名称ではないと思う
 というものがあります。
 4


  5. いわゆる継続率アップ施策で、
 おもちゃが沢山載ってます
 5


  6. 今回の経緯
 6


  7. 小1女子がそのカタログを見て
 「欲しいおもちゃがある」
 と言い出しました
 7


  8. トランシーバーが欲しいらしい
 8


  9. ポイントは4~20/月貯まる模様
 公式ページより
 9


  10. 約半年ほどかかる試算
 10


  11. 約3000円/月かかります
 公式ページより
 11


  12. 6ヶ月×3,000円 = 18,000円
 12


  13. 18,000円あればガチっぽいのが買えそうです
 ※僕は全然この業界の事はわかりません。パット見の印象です
 13


  14. メルカリなら1,000円くらい
 14


  15. 時間をお金で買うか?
 15


  16. そこで、
 16


  17. 子供のおもちゃ駆動開発
 17


  18. とりあえず家にあるもので
 「なんちゃってトランシーバー」
 を作ってみよう!!
 (作ったことは無いけど)
 18


  19. 家にあるデバイス選定
 19


  20. デバイス要件の洗い出し
 - 音声を録音できる
 - 録音した音声を送信
 - 2端末間のみの通信のみでOK
 - 理想はリアルタイムに音声を通信
 20


  21. スマホを使うのがてっとり早い!
 21


  22. - 音声を録音できる => 可能
 - 録音した音声を送信 => 可能
 - 2端末間のみの通信のみでOK

    => 可能
 - 理想はリアルタイムに音声を通信 => やり方わからん
 家に余ってたスマホを使おう!
 22

  23. 理想は端末間直接通信
 23


  24. ちょっと調べたけど、
 時間がかかりそうだったので別案へ
 24


  25. サーバーにWAVファイルを保管する方針へ
 今までやったことがある
 YARIKATAを採用
 25


  26. CTDDで大事なのは
 「形にして納品すること」
 ※小さい子供はごまかせるはず
 26


  27. 「なんちゃってトランシーバー」の仕様
 1. 録音ボタンを押して録音する
 2. 録音終了後送信
 3. 受信ボタンでサーバーに保存されている
 音声をダウンロードして再生
 ※要は留守電を作ります
 27


  28. 開発手順
 1. クライアント開発
 a. Unityで録音とWAVバイナリ化 
 b. WAVバイナリをサーバーへ送信 
 c.

    サーバーからダウンロードして再生 
 2. サーバー開発
 a. PHPで音声バイナリを受け取ってWAVファイル保存 
 28

  29. なぜUnityを採用したのか?
 - プラットフォームの壁を越えるのが早い (使用機種がAndroid、iPhoneだった)
 - 録音処理も超簡単。以下の1行で実装
 _recordedClip = Microphone.Start(micName, false,

    10, 44100); 
 ※時間があればFlutterをやりたかった
 29

  30. 1.録音音声のWAVバイナリ変換
 UnityWavというOSSを利用させて頂いた(超感謝)
 https://github.com/deadlyfingers/UnityWav
 以下の一行でAudioClipをWAVバイナリへ変換
 var wavBytes = WavUtility.FromAudioClip(clip);
 
 30


  31. 2.クライアントからサーバーへ送信
 - UnityWebRequestでWAVバイナリをPOSTで送信
 31


  32. 3.サーバー側の実装
 - docker-composeでコンテナ立ててNGINXとPHPで実装
 - PHP実装は以下の2行のみ
 
 32


  33. 4.サーバーからクライアントへの通信
 - UnityWebRequestでWAVバイナリをダウンロード
 - ダウンロードしたWAVバイナリをAudioClipで取り出す(その後再生)
 33


  34. 完成
 34


  35. 結果
 - 小1女子は「なんちゃってトランシーバー」を楽しんでくれた
 - 隣の部屋から送信
 - 布団の中から送信
 - 風呂場から送信
 -

    子供にとっては新しい体験に価値がありワクワクしてくれる
 ※大人から見たら超使いづらいアプリだけど子供にとっては関係ない
 - 一緒にKPTした(通知がなくて使いづらいよね〜とか)
 35

  36. まとめ
 - 時間を区切って動くものを作り上げる事を優先 (所要時間2時間)
 - 本当はArduinoとかで作りたい(今後の挑戦)
 - Flutterでリプレイスしてみたい(今後の挑戦)
 - 中途半端なものでも形にする事で子供とPDCAを回して改善するのも面白い


    - ある意味子供の教育にも良いかも知れない 
 - 父としての株が上がる(多分)
 - スキあらばCTDDしていきたい
 36

  37. ありがとうございました
 
 Twitter@ohbashunsuke
 よかったらフォローしてください