Haskellでプリキュアを作ってみた

by Yuji Yamamoto on December 11, 2016

Tagged as: Haskell, Precure.

この記事は「プリキュア Advent Calendar 2016」11日目の記事です。
現時点で11日目であるにもかかわらず私が最初の投稿者になってしまいそうで悲しいですorz. 遅れてもいいので登録したなら投稿はしていただきたい!

めげている場合ではありません。掲題通り、Haskellでプリキュアを実装しました。
何をいっているんだお前はと思うかたもいらっしゃるかもしれませんが、要はプリキュアの各作品の変身シーンの台詞や設定などを収録したライブラリーです。
似たようなものは各言語に存在します。過去にはACME::PrettyCureをはじめ、PycureClocureなどが作られました。
そしてもちろん当Advent Calendarの主催にしてフルスタックキュアエンジニア、sue445さんのrubicureも忘れては行けません。その他の実装はこちらのまとめをご覧ください。

今回私が作ったプリキュア実装はtypesafe-precureといいます。hackageにも先ほど上げました!

以下、READMEの和訳も兼ねて特徴を紹介します。

⚠️注意⚠️ ver. 0.8.0.1 より、変身アイテムに装備品(Mofurunに対するLinkleStoneDiaなど)を付ける場合の仕様が変わり、この日本語版READMEに書いてあるサンプルコードは動かなくなりました。新しい方法については英語のみですが最新のREADMEをご覧ください。

タイプセーフプリキュア!

プリキュアの変身と浄化技の、型安全な実装。
Haskell製。

機能

特徴

すべての女の子・プリキュア・プリキュアのスタイル・特殊アイテム、それぞれに固有の型を割り当てています。
そのため、正しい組み合わせによる変身、浄化技の発動しかできないように作られています。
結果、rubicureやclocureなど他のプリキュア実装に比べて非常に使いにくくなってしまっていますが、より正しい設定で再現するようになっています。
このライブラリーにとっては「正しさ」の方が優先なのです。

インストール方法

# unicode-showは必須ではありませんが、GHCiで試す場合は入れた方がいいでしょう。
$ stack install typesafe-precure unicode-show
## ... あるいは
$ cabal install typesafe-precure unicode-show

使用例

注意:

変身したプリキュアなどの取得

$ ghci -interactive-print=Text.Show.Unicode.uprint

ghci> :m ACME.PreCure
ghci> transformationSpeech (Mirai, Liko) (Mofurun LinkleStoneDia)
[ "キュアップ・ラパパ! ダイヤ!"
, "ミラクル・マジカル・ジュエリーレ!"
, "ふたりの奇跡!キュアミラクル!"
, "ふたりの魔法!キュアマジカル!"
, "魔法つかいプリキュア!!"
]
ghci> transformedStyle (Mirai, Liko) (Mofurun LinkleStoneRuby)
(CureMiracle_Ruby, CureMagical_Ruby)
ghci> purificationSpeech (CureMiracle_Ruby, CureMagical_Ruby) (LinkleStick LinkleStoneRuby, Mofurun LinkleStoneRuby)
[ "リンクルステッキ!"
, "(モッフー!)"
, "ルビー!紅の情熱よ私達の手に!"
, "フルフルリンクル!"
, "プリキュア!ルビー・パッショナーレ!"
]

プリキュアモナド

ghci> :{
ghci> let scene = do
....>       say "この罪を抱いたまま、もう一度、グランプリンセスを目指す!"
....>       scarlet <- transform Towa (PrincessPerfume DressUpKey_Scarlet)
....>       scarletModeElegant <- transform scarlet (PrincessPerfume DressUpKey_Phoenix)
            purify scarletModeElegant (ScarletViolin DressUpKey_Phoenix)
ghci> :}
ghci> :t scene
scene :: ACME.PreCure.Monad.PreCureMonad ()

純粋な関数として変身したり浄化したりする

ghci> composeEpisode scene
[ "この罪を抱いたまま、もう一度、グランプリンセスを目指す!"
, "プリキュア!プリンセスエンゲージ!"
, "深紅の炎のプリンセス!キュアスカーレット!"
, "冷たい檻に閉ざされた夢、返していただきますわ。"
, "お覚悟を決めなさい!"
, "エクスチェンジ!モードエレガント!"
, "スカーレット・バイオリン!フェニックス!"
, "羽ばたけ炎の翼!"
, "プリキュア! フェニックス・ブレイズ!"
, "ごきげんよう。"
]

IOアクションとして変身したり浄化したりする

台詞が一行ごとに出力されます。rubicureに似た機能があったのでインスパイアされました。

ghci> printEpisode scene
この罪を抱いたまま、もう一度、グランプリンセスを目指す!
プリキュア!プリンセスエンゲージ!
深紅の炎のプリンセス!キュアスカーレット!
冷たい檻に閉ざされた夢、返していただきますわ。
お覚悟を決めなさい!
エクスチェンジ!モードエレガント!
スカーレット・バイオリン!フェニックス!
羽ばたけ炎の翼!
プリキュア! フェニックス・ブレイズ!
ごきげんよう。

以上が現在2016年12月11日時点のREADMEです。

苦労したところとか、気合いを入れたところとか。

開発はrubicureのconfigを見ながら行いましたが、ついついこだわってしまい、コピペはしつつも、原則youtubeなど(DVDではないですすみません…)を見返して、自分が感じた表記の違いなどを考慮しながら書いたため非常に時間がかかってしまいました。「正しさ」にこだわった結果です。

以下は箇条書きでもろもろを。

みなさんにお願い: 変身や浄化技・必殺技の台詞を募集します!

正しさにこだわって実装したtypesafe-precureですが、残念ながら浄化技やプリキュアの特殊なフォームは一部しか実装されていません。時間の力には勝てませんでした。
そのため、みなさんの好きなあの技・フォームがない可能性が十分あります。そうした場合は、こちらのルールにしたがって報告していただけると幸いです
また、もちろん誤字・脱字や設定の大きな間違いについても受け付けます(キリがなくなりそうな状態になると私の一存でクローズするかもしれません。あらかじめご容赦を)。

以下が報告用フォームです。GitHubアカウントがないと報告できません。あしからず。

New Issue · igrep/typesafe-precure

謝辞

rubicureを作ったsue445さん始め、参考にした下記のサイトを編集されたみなさん、大変ありがとうございました!
みなさんの多大な努力によって、世界に新たなるプリキュア(のプログラミング言語による実装)が生まれました!
今後も精一杯頑張ってリポジトリーの平和を守りますので、今後もよろしくお願いします。 vim(_ _)mer

それともっと大事な、忘れてはいけない、東映アニメーション様を始めプリキュアという素晴らしいアニメ作りに携わるすべてのみなさん。
また妙なものを作ってしまい恐縮ですが、これからもわれわれファンが楽しく二次創作に励めるような、わくわくもんの作品を作り続けてください!
応援しております!

次回予告


I'm a Haskeller Supported By Haskell-jp.