はじめに
これは「プリキュア Advent Calendar 2015」の7日目です
6日目
@deroter さんの ゆいちゃんという特異点的な存在についての考察 でした
7日目:GoがGoでGo!プリンセスプリキュアを作った
昨日開催された「Go Conference 2015 Winter」でLTをしたのでその発表資料になります。ご査収ください
スライド板
GoがGoでGo!プリンセスプリキュアを作った #gocon #cure_advent
エントリ版(内容はスライドと全く同じです)
GoがGoでGo!プリンセスプリキュアを作った
Go Sueyoshi a.k.a sue445
2015/12/06 Go Conference 2015 Winter
(兼 プリキュアAdventCalendar 7日目)
自己紹介
- Go Sueyoshi a.k.a @sue445
- Railsの会社でサーバサイド全般を浅く広く見守るお仕事
- インフラ、アプリ、ライブラリ、社内ツールetc
- 会社ではプリキュアおじさんと呼ばれています
【今期の嫁】キュアトゥインクル
【本妻】キュアピース
Agenda
「Go!プリンセスプリキュア」とは
日曜朝8:30からテレビ朝日系で放映しているアニメ
GoPrecureとは
https://github.com/sue445/goprecure
使い方
go getしてimport
go get github.com/sue445/goprecure
import github.com/sue445/goprecure
プリキュアのインスタンスを作成
// キュアフローラ flora := goprecure.NewCureFlora() // キュアマーメイド mermaid := goprecure.NewCureMermaid() // キュアトゥインクル twinkle := goprecure.NewCureTwinkle() // キュアスカーレット scarlett := goprecure.NewCureScarlett()
Name で名前を取得
flora := goprecure.NewCureFlora()
flora.Name()
// 春野はるか
Transform で変身
flora.Name() // 春野はるか flora.Transform() flora.Name() // キュアフローラ
実際にはこんな感じ
GoPrecureではフォームチェンジを忠実に再現
各プリキュアに対応するドレスアップキー
// キュアフローラ g.DressupKeys = []DressupKey{Flora, Rose, Lily, Sakura, Royal} // キュアマーメイド g.DressupKeys = []DressupKey{Mermaid, Ice, Bobble, Sango, Royal} // キュアトゥインクル g.DressupKeys = []DressupKey{Twinkle, Luna, ShootingStar, Ginga, Royal} // キュアスカーレット g.DressupKeys = []DressupKey{Scarlett, Hanabi, Phoenix, Sun, Royal}
苦労したこと
例
Transform
の後に Exchange
すると Exchange
の標準出力だけ出してほしいのに直前の Transform
のも一緒に出るので邪魔
golangのREPLがまだGoPrecureに追いついていない感があるw
プリキュアの他言語での実装の紹介
- Ruby: rubicure (@sue445)
- GitHubのstarも多いしおそらくこれがたぶん一番有名
- Perl: Acme::PrettyCure (@kan)
- Python: pycure (@drillbits)
- Groovy: groovycure (@ligun)
- clojure: clocure (@kaosf)
rubicureとGoPrecureの設計思想の違い
rubicureの設計思想
- Rubyの柔軟性を利用してメタプロを大活用
- クラスにメソッドはほとんど定義せずに
method_missing
でymlに飛ばすとか
- クラスにメソッドはほとんど定義せずに
transform!
(変身) やattack!
(必殺技) など破壊的メソッドには!
をつけるRubyの慣習に則った- 基本的にプリキュア全員対応するため特定のシリーズに特化させない汎用的な設計
- rubicureのおかげでRubyの勉強になった
GoPrecureの設計思想
- 静的型付けを意識した設計
DresupKey
という型をconst
で定義することによりExchange
に未知のドレスアップキーが引数がわたらないようにした(コンパイルエラーになる)
- Go!プリンセスプリキュアだけに特化させることでドレスアップキーとモードチェンジを関連付けた実装が実現した
- GoPrecureのおかげでgolangの勉強になった
まとめ
新しい言語を勉強する時は自分の好きなものを実装すると良い。
補足
プリキュアのRuby実装
こちらを御覧ください
Go!プリンセスプリキュアは(今のところ)43話連続神回
なのでみんなBD買うといいと思います
![【Amazon.co.jp限定】Go!プリンセスプリキュア vol.1(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray] 【Amazon.co.jp限定】Go!プリンセスプリキュア vol.1(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray]](http://ecx.images-amazon.com/images/I/514EQUsnzbL._SL160_.jpg)
【Amazon.co.jp限定】Go!プリンセスプリキュア vol.1(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray]
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2015/10/21
- メディア: Blu-ray
- この商品を含むブログを見る
![【Amazon.co.jp限定】Go!プリンセスプリキュア vol.2(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray] 【Amazon.co.jp限定】Go!プリンセスプリキュア vol.2(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray]](http://ecx.images-amazon.com/images/I/61chJQfHhVL._SL160_.jpg)
【Amazon.co.jp限定】Go!プリンセスプリキュア vol.2(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray]
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2016/01/20
- メディア: Blu-ray
- この商品を含むブログを見る
![【Amazon.co.jp限定】Go!プリンセスプリキュア vol.3(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray] 【Amazon.co.jp限定】Go!プリンセスプリキュア vol.3(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray]](http://ecx.images-amazon.com/images/I/61chJQfHhVL._SL160_.jpg)
【Amazon.co.jp限定】Go!プリンセスプリキュア vol.3(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray]
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2016/03/16
- メディア: Blu-ray
- この商品を含むブログを見る
![【Amazon.co.jp限定】Go!プリンセスプリキュア vol.4(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray] 【Amazon.co.jp限定】Go!プリンセスプリキュア vol.4(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray]](http://ecx.images-amazon.com/images/I/61chJQfHhVL._SL160_.jpg)
【Amazon.co.jp限定】Go!プリンセスプリキュア vol.4(ジャケットイラスト布ポスター(B2横型)付) [Blu-ray]
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2016/04/20
- メディア: Blu-ray
- この商品を含むブログを見る