これは プリキュア Advent Calendar 2013 の16日目です。
はじめに
12/16はキュアピースの中の人の金元寿子さんの誕生日です。おめでとうございます!!!
15日目
id:tdakak さんの ハートキャッチプリキュア!の好きなところ でした
16日目:Rubyでプリキュアを作った
プリキュアハッカソン で id:drillbits さんが作っていた pycure にインスパイヤされてRuby版を作りました。(Ruby 2.0以上必須)
使い方
gem install rubicure
してください irb
で
require "rubicure"
すれば使えるようになります。
実際に使ってみます。
Rubicure::Seriesを取得
Precure.〜
でそれっぽいタイトルを入れればRubicure::Seriesを取得できます。
Precure.max_heart.title #=> "ふたりはプリキュア Max Heart" Precure.splash_star.title #=> "ふたりはプリキュア Splash Star" Precure.yes.title #=> "Yes! プリキュア5" Precure.yes_gogo.title #=> "Yes! プリキュア5 Go Go!" Precure.fresh.title #=> "フレッシュプリキュア!" Precure.heart_catch.title #=> "ハートキャッチプリキュア!" Precure.suite.title #=> "スイートプリキュア♪" Precure.smile.title #=> "スマイルプリキュア!" Precure.dokidoki.title #=> "ドキドキ!プリキュア"
ここで勃発する初代(無印)問題。
無印は下記のようにunmarkedを使うか、Precure
から Rubicure::Series
のメソッド呼んだ場合無印になります。*2
Precure.unmarked.title #=> "ふたりはプリキュア" Precure.title #=> "ふたりはプリキュア"
余談ですがここの method_missing
は地味に面倒くさかったです
def method_missing(name, *args) unmarked_precure = Rubicure::Series::find(:unmarked) if Rubicure::Series::valid?(name) Rubicure::Series::find(name) elsif unmarked_precure.respond_to?(name) unmarked_precure.send(name, *args) else super end end
タイトルのaliasも一通り用意しているのでまず困ることはないかと思います。 https://github.com/sue445/rubicure/blob/master/config/series.yml
放映中のプリキュアを取得
Precure.now
か Precure.current
で取れます。
Precure.now #=> {:title=>"ドキドキ!プリキュア", :started_date=>Sun, 03 Feb 2013, :ended_date=>Sun, 26 Jan 2014, :girls=>["cure_heart", "cure_diamond", "cure_rosetta", "cure_sword", "cure_ace"]} Precure.current #=> {:title=>"ドキドキ!プリキュア", :started_date=>Sun, 03 Feb 2013, :ended_date=>Sun, 26 Jan 2014, :girls=>["cure_heart", "cure_diamond", "cure_rosetta", "cure_sword", "cure_ace"]}
プリキュアの放送がされてない期間(下のサンプルだとスマイルとドキドキの空白期間)ではエラーになります
require "delorean" Delorean.time_travel_to "2013-02-01" Precure.now #=> RuntimeError: Not on air precure!
現在時刻系のテストには delorean 使うと超便利
日付を渡して放映期間中かどうか調べる
Rubicure::Series#on_air?
メソッドに Date
か Time
か日付っぽい文字列*3 を渡します
Precure.dokidoki.on_air?("2013-12-16") #=> true Precure.smile.on_air?("2013-12-16") #=> false
番組に出てくるプリキュアの一覧を取得する
Rubicure::Series#girls
で Rubicure::Girl
の配列が返ってきます
Precure.smile.girls #=> [#<Rubicure::Girl:0x007fbd60a5d6e0 @human_name="星空みゆき", @precure_name="キュアハッピー", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!ハッピー!!)\nキラキラ輝く未来の光! キュアハッピー!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスハッピー", "ウルトラハッピー"], @current_state=0, @state_names=["星空みゆき", "キュアハッピー", "プリンセスハッピー", "ウルトラハッピー"]>, #<Rubicure::Girl:0x007fbd60a5d5c8 @human_name="日野あかね", @precure_name="キュアサニー", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!サニー!!)\n太陽サンサン熱血パワー! キュアサニー!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスサニー", "ウルトラサニー"], @current_state=0, @state_names=["日野あかね", "キュアサニー", "プリンセスサニー", "ウルトラサニー"]>, #<Rubicure::Girl:0x007fbd60a5d500 @human_name="黄瀬やよい", @precure_name="キュアピース", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!ピース!!)\nピカピカピカリンジャンケンポン! キュアピース!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスピース", "ウルトラピース"], @current_state=0, @state_names=["黄瀬やよい", "キュアピース", "プリンセスピース", "ウルトラピース"]>, #<Rubicure::Girl:0x007fbd60a5d410 @human_name="緑川なお", @precure_name="キュアマーチ", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!マーチ!!)\n勇気リンリン直球勝負! キュアマーチ!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスマーチ", "ウルトラマーチ"], @current_state=0, @state_names=["緑川なお", "キュアマーチ", "プリンセスマーチ", "ウルトラマーチ"]>, #<Rubicure::Girl:0x007fbd60a5d320 @human_name="青木れいか", @precure_name="キュアビューティ", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!ビューティ!!)\nしんしんと降り積もる清き心! キュアビューティ!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスビューティ", "ウルトラビューティ"], @current_state=0, @state_names=["青木れいか", "キュアビューティ", "プリンセスビューティ", "ウルトラビューティ"]>] Precure.smile.girls.map(&:human_name) #=> ["星空みゆき", "日野あかね", "黄瀬やよい", "緑川なお", "青木れいか"] Precure.smile.girls.map(&:precure_name) #=> ["キュアハッピー", "キュアサニー", "キュアピース", "キュアマーチ", "キュアビューティ"] Precure.smile.girls.count #=> 5
Cure.~
Rubicure::Girl
は Rubicure::Series#girls
経由じゃなくても取得できます
Cure.lemonade #=> #<Rubicure::Girl:0x007fbd60ae72a0 @human_name="春日野うらら", @precure_name="キュアレモネード", @transform_message="プリキュア!メタモルフォーゼ!\nはじけるレモンの香り、キュアレモネード!\n希望の力と未来の光!\n華麗に羽ばたく5つの心!\nYes!プリキュア5!\n", @extra_names=[], @current_state=0, @state_names=["春日野うらら", "キュアレモネード"]> Cure.pine #=> #<Rubicure::Girl:0x007fbd60aee640 @human_name="山吹祈里", @precure_name="キュアパイン", @transform_message="チェインジ!プリキュア・ビートアップ!\nイエローハートは祈りのしるし!\nとれたてフレッシュ、キュアパイン!\nレッツプリキュア!\n", @extra_names=["キュアエンジェルパイン"], @current_state=0, @state_names=["山吹祈里", "キュアパイン", "キュアエンジェルパイン"]> Cure.sunshine #=> #<Rubicure::Girl:0x007f83413a6e18 @human_name="明堂院いつき", @precure_name="キュアサンシャイン", @transform_message="(プリキュアの種、いくですぅ!)\nプリキュア!オープンマイハート!\n陽の光浴びる一輪の花! キュアサンシャイン!\nハートキャッチ、プリキュア!\n", @extra_names=["スーパーキュアサンシャイン"], @current_state=0, @state_names=["明堂院いつき", "キュアサンシャイン", "スーパーキュアサンシャイン"]> Cure.muse #=> #<Rubicure::Girl:0x007fbd60af7510 @human_name="調辺アコ", @precure_name="キュアミューズ", @transform_message="レッツプレイ!プリキュアモジュレーション!!\n爪弾くは女神の調べ! キュアミューズ!\n響け4人の組曲!スイートプリキュア!\n", @extra_names=["クレッシェンドミューズ"], @current_state=0, @state_names=["調辺アコ", "キュアミューズ", "クレッシェンドミューズ"]> Cure.peace #=> #<Rubicure::Girl:0x007fbd60aceca0 @human_name="黄瀬やよい", @precure_name="キュアピース", @transform_message="(レディ?)\nプリキュア・スマイルチャージ!\n(ゴー!ゴー!レッツ・ゴー!ピース!!)\nピカピカピカリンジャンケンポン! キュアピース!\n5つの光が導く未来!\n輝け!スマイルプリキュア!\n", @extra_names=["プリンセスピース", "ウルトラピース"], @current_state=0, @state_names=["黄瀬やよい", "キュアピース", "プリンセスピース", "ウルトラピース"]> Cure.rosetta #=> #<Rubicure::Girl:0x007fbd60af42c0 @human_name="四葉ありす", @precure_name="キュアロゼッタ", @transform_message="プリキュアラブリンク!\nL! O! V! E!\nひだまりポカポカ キュアロゼッタ!\n響け愛の鼓動!ドキドキプリキュア!\n世界を制するのは愛だけです、\nさぁ、あなたも私と愛を育んでくださいな\n", @extra_names=[], @current_state=0, @state_names=["四葉ありす", "キュアロゼッタ"]>
シャイニールミナスとミルキィローズは下記の方法で取得してください
Shiny.luminous #=> #<Rubicure::Girl:0x007fbd60ad7288 @human_name="九条ひかり", @precure_name="シャイニールミナス", @transform_message="ルミナス・シャイニングストリーム!\n輝く命、シャイニールミナス!\n光の心と光の意志、すべてを一つにするために!\n", @extra_names=[], @current_state=0, @state_names=["九条ひかり", "シャイニールミナス"]> Milky.rose #=> #<Rubicure::Girl:0x007fbd60aded08 @human_name="美々野くるみ", @precure_name="ミルキィローズ", @transform_message="スカイローズ・トランスレイト!\n青いバラは秘密のしるし! ミルキィローズ!\n", @extra_names=[], @current_state=0, @state_names=["美々野くるみ", "ミルキィローズ"]>
その他alias https://github.com/sue445/rubicure/blob/master/config/girls.yml
Rubicure::Girl
nameで現在の名前が取れます
yayoi = Precure.smile.girls[2] yayoi.name #=> "黄瀬やよい"
transform!
で掛け声とともに変身し、nameも変わります
yayoi.transform! (レディ?) プリキュア・スマイルチャージ! (ゴー!ゴー!レッツ・ゴー!ピース!!) ピカピカピカリンジャンケンポン! キュアピース! 5つの光が導く未来! 輝け!スマイルプリキュア! yayoi.name #=> "キュアピース"
第2形態以降もあれば繰り返し変身します(が、掛け声はありません)
yayoi.transform! yayoi.name #=> "プリンセスピース" yayoi.transform! yayoi.name #=> "ウルトラピース"
最後までいくと人間に戻ります
yayoi.transform!
yayoi.name
#=> "黄瀬やよい"
humanize
だと途中でも変身を解除して人間に戻ります
yayoi.transform!.transform! yayoi.name #=> "プリンセスピース" yayoi.humanize #=> 0 yayoi.name #=> "黄瀬やよい"
プリキュアオールスターズ
Precure.all_stars
でプリキュアオールスターズ全員取得できます
Precure.all_stars.count #=> 33 Precure.all_stars.map(&:precure_name) #=> ["キュアブラック", "キュアホワイト", "シャイニールミナス", "キュアブルーム", "キュアイーグレット", "キュアドリーム", "キュアルージュ", "キュアレモネード", "キュアミント", "キュアアクア", "ミルキィローズ", "キュアピーチ", "キュアベリー", "キュアパイン", "キュアパッション", "キュアブロッサム", "キュアマリン", "キュアサンシャイン", "キュアムーンライト", "キュアメロディ", "キュアリズム", "キュアビート", "キュアミューズ", "キュアハッピー", "キュアサニー", "キュアピース", "キュアマーチ", "キュアビューティ", "キュアハート", "キュアダイヤモンド", "キュアロゼッタ", "キュアソード", "キュアエース"]
未実装
- transform_with
- 初代だとパートナーがいないと変身できないという設定なので
- ただ、厳密にやろうとするとパートナー妖精も考慮しないといけなくなるのでYAMLだけでなんとかするのは限界があった
- (みなと)みらいのともだち
- 坂上あゆみ?知らない子ですね
- S☆S
- 満と薫?知らn(ry
![映画プリキュアオールスターズ NewStage みらいのともだち 特装版 [Blu-ray] 映画プリキュアオールスターズ NewStage みらいのともだち 特装版 [Blu-ray]](http://ecx.images-amazon.com/images/I/51omWgtgFUL._SL160_.jpg)
映画プリキュアオールスターズ NewStage みらいのともだち 特装版 [Blu-ray]
- 出版社/メーカー: TCエンタテインメント
- 発売日: 2012/07/18
- メディア: Blu-ray
- 購入: 1人 クリック: 40回
- この商品を含むブログ (16件) を見る
参考になったもの
- 英語版wikipedia
- 作品名でググって左端から各言語のページに飛べるのマジ便利
- プリキュアがいっぱい!ーお父さんのためのプリキュア検定ープリキュア大辞典
- 変身セリフとか
- 一度200円で買ったらずっと更新され続けるのはお得感ある
まとめ
- rubyを書き始めてまだ1年半ですが、自分が使いたいものを作ったり RailsにPullRequestを送る程度には使いこなせるようになったと思います
- ネタgemを作るとメタプロが捗る *4
おまけ
せっかくなのでcodeclimate登録してみたらGPA 4.0でした (・ω<)
追記
ブコメレス
いや無印はunmarkedじゃないでしょう……firstとかが妥当
Enumerable以外でfirst使うのはそれはそれで違和感が。yamlで別名をつけているので
Precure.futari_wa_pretty_cure
でも取得はできます。
追記 12/16 23:32
サンプルでスイートとサンシャインが抜けていたのを追記
18日目
@oakaka_gohanさんの プリキュアに愛を伝えたくて #cure_advent : どっくりぽんかんじま です

映画プリキュアオールスターズNew Stage2 特装版Blu-ray
- 出版社/メーカー: TCエンタテインメント
- 発売日: 2013/07/26
- メディア: Blu-ray
- この商品を含むブログ (3件) を見る