プリキュアの各言語での実装まとめ

# 前置き
空前のズンドコブームによりズンドコキヨシが各言語で実装されています。

[ズンドコキヨシまとめ - Qiita](http://qiita.com/shunsugai@github/items/971a15461de29563bf90)

きよしのズンドコ節のリリースは2002年 [^zundoko] です。歴史があります。

しかしそれと同じくらいプリキュアにも歴史があります。プリキュアシリーズ第1作目である [ふたりはプリキュア](http://www.toei-anim.co.jp/tv/f_precure/) の放映開始は2004年です。ズンドコと近い！

[^zundoko]: [ズンドコ節 - Wikipedia](https://ja.wikipedia.org/wiki/%E3%82%BA%E3%83%B3%E3%83%89%E3%82%B3%E7%AF%80#.E3.81.8D.E3.82.88.E3.81.97.E3.81.AE.E3.82.BA.E3.83.B3.E3.83.89.E3.82.B3.E7.AF.80) より

キュアエンジニア [^cure_engineer] としては妙な親近感と対抗意識がわいたので、各プログラミング言語で実装されたプリキュアの紹介をしたいと思います

[^cure_engineer]: プリキュアが好きなエンジニア

# 各言語での実装紹介
## Acme::PrettyCure （Perl実装）
* https://github.com/kan/p5-acme-prettycure
* [Acme::PrettyCure - JPerl Advent Calendar 2010 Acme Track](http://perl-users.jp/articles/advent-calendar/2010/acme/6)
* [Acme::PrettyCure - プリキュアは永遠に不滅です - Perl Advent Calendar Japan 2011 Acme Track](http://perl-users.jp/articles/advent-calendar/2011/acme/2)

@kan氏作

全てはここから始まったと言っても過言ではない

執筆時点では第10作目の [ドキドキ！プリキュア](http://www.toei-anim.co.jp/tv/dokidoki_precure/) まで対応しています

## pycure（Python実装）
* https://github.com/drillbits/pycure
* https://pypi.python.org/pypi/pycure
* [プリキュアハッカソンで pycure 作った - 祢占堂](http://drillbits.hatenablog.com/entry/cure_hack)

@drillbits 氏作

執筆時点では第11作目の [ハピネスチャージプリキュア！](http://www.toei-anim.co.jp/tv/happinesscharge_precure/) まで対応しています

## rubicure（Ruby実装）
* https://github.com/sue445/rubicure
* https://rubygems.org/gems/rubicure

sue445作

前述の Acme::PrettyCure と pycure にインスパイアされて作りました

執筆時点では最新作の [魔法つかいプリキュア！](http://www.toei-anim.co.jp/tv/precure/) まで対応しています :triumph:

詳しくは下記エントリをご覧ください

* [rubicure カテゴリーの記事一覧 - くりにっき](http://sue445.hatenablog.com/archive/category/rubicure)
* [Rubicure - プリキュアを愛する方向けのRubyライブラリ MOONGIFT](http://www.moongift.jp/2014/01/rubicure-%E3%83%97%E3%83%AA%E3%82%AD%E3%83%A5%E3%82%A2%E3%82%92%E6%84%9B%E3%81%99%E3%82%8B%E6%96%B9%E5%90%91%E3%81%91%E3%81%AEruby%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA-2/)

rubicureの活用事例です

* [pecoでrubicureをより便利に使う - Qiita](http://qiita.com/tbpgr/items/a2b34bd006125ee530fe)
* https://github.com/sue445/faker-precure

## Precure（Common Lisp実装）
* https://github.com/stibear/precure
* [stibear/precure](http://stibear.tumblr.com/post/71830168190/stibearprecure)

@stibear 氏作。

執筆時点では第10作目の [ドキドキ！プリキュア](http://www.toei-anim.co.jp/tv/dokidoki_precure/) まで対応しています

## groovycure（Groovy実装） 
* https://github.com/ligun/groovycure
* [GroovyCureの紹介 #cure_advent | りぐん怪獣じゃないもん！](http://blog.ligun.net/2014/12/cure_advent_2014_01/)

@ligun 氏作

執筆時点では第12作目の [Ｇｏ！プリンセスプリキュア](http://www.toei-anim.co.jp/tv/princess_precure/) まで対応しています

## clocure（clojure実装）
* https://github.com/kaosf/clocure
* https://clojars.org/clocure

@ka_ 氏作。

執筆時点では最新作の [魔法つかいプリキュア！](http://www.toei-anim.co.jp/tv/precure/) まで対応しています

## precure.js（JavaScript実装）
* https://github.com/daishihmr/precure.js

@daishi_hmr 氏作。

執筆時点では第11作目の [ハピネスチャージプリキュア！](http://www.toei-anim.co.jp/tv/happinesscharge_precure/) まで対応しています

## goprecure（golang実装）
* https://github.com/sue445/goprecure
* [GoがGoでGo!プリンセスプリキュアを作った #gocon #cure_advent](https://sue445.github.io/gocon2015-winter/#/)

sue445作

[Ｇｏ！プリンセスプリキュア](http://www.toei-anim.co.jp/tv/princess_precure/) のみに対応しています [^goprecure]

[^goprecure]: Goだけに

## yes-precure5-command （haskell実装）
* https://github.com/igrep/yes-precure5-command
* https://hackage.haskell.org/package/yes-precure5-command

@igrep 氏作。

第4作目の [Yes！プリキュア5](http://www.toei-anim.co.jp/tv/yes_precure5/) と 第5作目の [Yes！プリキュア５GoGo！](http://www.toei-anim.co.jp/tv/precure5_gogo/) のみに対応

## FCure（F#実装）
* https://github.com/pocketberserker/FCure
* [TypeProviderによるプリキュア型の生成 - Qiita](http://qiita.com/pocketberserker/items/4e38b8da846641a7a989)

@pocketberserker 氏作

後述のRubicureAPIのjsonをそのまま利用してるらしい

## typesafe-precure (Haskell実装)
* https://github.com/igrep/typesafe-precure
* http://hackage.haskell.org/package/typesafe-precure
* [igreque : Info -> Haskellでプリキュアを作ってみた #cure_advent](http://the.igreque.info/posts/2016/06-type-safe-precure.html)
* [「タイプセーフプリキュア！」を支える技術 - Qiita](http://qiita.com/igrep/items/5496fa405fae00b5a737)

@igrep 氏作

執筆時点では最新作の [魔法つかいプリキュア！](http://www.toei-anim.co.jp/tv/precure/) まで対応しています

## 【おまけ】その他ツール群
### Cureutils
* https://github.com/greymd/cureutils
* https://rubygems.org/gems/cureutils

@greymd 氏作。

rubicureを利用した **次世代高度キュアIT人材育成用コマンド集**

詳しくは [入門Cureutils // Speaker Deck](https://speakerdeck.com/greymd/ru-men-cureutils) 参照

### RubicureAPI
* https://github.com/sue445/rubicure_api
* https://rubicure.herokuapp.com/

sue445作

rubicureをwebアプリにマウントしてjsonで取得できるようにしています。Rubyがインストールされてない環境でも `curl` があれば最新のプリキュア情報にアクセスできます

```shell-session
$ curl -s https://rubicure.herokuapp.com/series.json | jq .
[
  {
    "series_name": "unmarked",
    "title": "ふたりはプリキュア",
    "started_date": "2004-02-01",
    "ended_date": "2005-01-30",
    "girls": [
      "cure_black",
      "cure_white"
    ]
  },
  {
    "series_name": "max_heart",
    "title": "ふたりはプリキュア Max Heart",
    "started_date": "2005-02-06",
    "ended_date": "2006-01-29",
    "girls": [
      "cure_black",
      "cure_white",
      "shiny_luminous"
    ]
  },
  {
    "series_name": "splash_star",
    "title": "ふたりはプリキュア Splash☆Star",
    "started_date": "2006-02-05",
    "ended_date": "2007-01-28",
    "girls": [
      "cure_bloom",
      "cure_egret"
    ]
  },
  {
    "series_name": "yes",
    "title": "Yes！ プリキュア5",
    "started_date": "2007-02-04",
    "ended_date": "2008-01-27",
    "girls": [
      "cure_dream",
      "cure_rouge",
      "cure_lemonade",
      "cure_mint",
      "cure_aqua"
    ]
  },
  {
    "series_name": "yes_gogo",
    "title": "Yes！ プリキュア5 Go Go！",
    "started_date": "2008-02-03",
    "ended_date": "2009-01-25",
    "girls": [
      "cure_dream",
      "cure_rouge",
      "cure_lemonade",
      "cure_mint",
      "cure_aqua",
      "milky_rose"
    ]
  },
  {
    "series_name": "fresh",
    "title": "フレッシュプリキュア！",
    "started_date": "2009-02-01",
    "ended_date": "2010-01-31",
    "girls": [
      "cure_peach",
      "cure_berry",
      "cure_pine",
      "cure_passion"
    ]
  },
  {
    "series_name": "heart_catch",
    "title": "ハートキャッチプリキュア！",
    "started_date": "2010-02-07",
    "ended_date": "2011-01-30",
    "girls": [
      "cure_blossom",
      "cure_marine",
      "cure_sunshine",
      "cure_moonlight"
    ]
  },
  {
    "series_name": "suite",
    "title": "スイートプリキュア♪",
    "started_date": "2011-02-06",
    "ended_date": "2012-01-29",
    "girls": [
      "cure_melody",
      "cure_rhythm",
      "cure_beat",
      "cure_muse"
    ]
  },
  {
    "series_name": "smile",
    "title": "スマイルプリキュア！",
    "started_date": "2012-02-05",
    "ended_date": "2013-01-27",
    "girls": [
      "cure_happy",
      "cure_sunny",
      "cure_peace",
      "cure_march",
      "cure_beauty"
    ]
  },
  {
    "series_name": "dokidoki",
    "title": "ドキドキ！プリキュア",
    "started_date": "2013-02-03",
    "ended_date": "2014-01-26",
    "girls": [
      "cure_heart",
      "cure_diamond",
      "cure_rosetta",
      "cure_sword",
      "cure_ace"
    ]
  },
  {
    "series_name": "happiness_charge",
    "title": "ハピネスチャージプリキュア！",
    "started_date": "2014-02-02",
    "ended_date": "2015-01-25",
    "girls": [
      "cure_lovely",
      "cure_princess",
      "cure_honey",
      "cure_fortune"
    ]
  },
  {
    "series_name": "go_princess",
    "title": "Go!プリンセスプリキュア",
    "started_date": "2015-02-01",
    "ended_date": "2016-01-31",
    "girls": [
      "cure_flora",
      "cure_mermaid",
      "cure_twinkle",
      "cure_scarlet"
    ]
  },
  {
    "series_name": "maho_girls",
    "title": "魔法つかいプリキュア！",
    "started_date": "2016-02-07",
    "girls": [
      "cure_miracle",
      "cure_magical"
    ]
  }
]
```

```shell-session
$ curl -s https://rubicure.herokuapp.com/girls/cure_miracle.json | jq .
{
  "girl_name": "cure_miracle",
  "human_name": "朝日奈みらい",
  "precure_name": "キュアミラクル",
  "cast_name": "高橋李依",
  "color": "pink",
  "created_date": "2016-02-07",
  "birthday": "6/12",
  "extra_names": null,
  "transform_calls": [
    "cure_up_rapapa"
  ],
  "transform_styles": {
    "diamond": {
      "girl_name": "cure_miracle_diamond",
      "precure_name": "キュアミラクル（ダイヤスタイル）",
      "color": "pink",
      "created_date": "2016-02-07",
      "transform_message": "キュアップ・ラパパ！　ダイヤ！\nミラクル・マジカル・ジュエリーレ！\nふたりの奇跡！キュアミラクル！\n魔法つかいプリキュア！！",
      "attack_messages": [
        "リンクルステッキ！\nダイヤ！永遠の輝きを私達の手に！\nフルフルリンクル！\nプリキ ュア・ダイヤモンド・エターナル！\n"
      ]
    },
    "ruby": {
      "girl_name": "cure_miracle_ruby",
      "precure_name": "キュアミラクル（ルビースタイル）",
      "color": "red",
      "created_date": "2016-02-21",
      "transform_message": "キュアップ・ラパパ！　ルビー！\nミラクル・マジカル・ジュエリーレ！\nふたりの奇跡！キュアミラクル！\n魔法つかいプリキュア！！",
      "attack_messages": [
        "リンクルステッキ！\nルビー！紅の情熱よ私達の手に！\nフルフルリンクル！\nプリキュ ア・ルビー・パッショナーレ！\n"
      ]
    }
  }
}
```

APIの方が古いrubicureを使い続けてるような心配もあるかもしれないですが、

1. rubicureをリリース
2. [Tachikoma.io](http://tachikoma.io/)  が週に1回 `bundle update` してPullRequestを作成
    * 例） https://github.com/sue445/rubicure_api/pull/26
3. PullRequestをマージしたらHerokuに自動デプロイ

のような半自動運用にしてるのでだいたい最新に追随しています

# 最後に
僕が把握してるのはこれだけですが他にありましたらコメントや編集リクエストで教えてください :wink: