TL;DR
ここで稼働しています。
https://www.saiuma.com/sunshine
最近、サンシャイン池崎ゲームなるものが考案されたらしい。
ムスメ5歳とゲームを考えた。
— ジウ (@ziuziu) 2017年10月11日
題して「サンシャイン池崎ゲーム」。
ルールはシンプル。歌を歌って「い」がついたら、「イェー!」に変えるだけ。
ムスメ5歳「おおきなのっぽの古どけイェー!、おじイェー!さんのとけイェー!!」
げらげら笑った。
仕事で疲れて帰ってきたら、「ムスメ5歳と遊んでいたサンシャイン池崎ゲームをサンシャイン池崎がやっている」という世にも奇妙な世界に辿り着いた。(敬称略です)
— ジウ (@ziuziu) 2017年10月13日
ゲームが出来たらリゾルバが欲しくなるのはエンジニアの性ですので、さくっと作りましょう。
コード解説
コード全体はGithubに置いてあります。
https://github.com/nak1114/docker-sinatra-sunshine
さくっと作るため通いなれたsinatraで作りました。
RDBが無いのでRailsはお休みです。
日本語の読みかたを知るためMecabを使っています。
Mecab-Ruby間はnatto gemを使わせてもらいました。
それぞれのインストールは Dockerfile に書いてあります。
コードの肝は以下の部分です。
改行コードなどを除いて"い"と読める単語があったら全てカタカナに直して、最後に一括で"イェー!"に変換です。うん単純だ。
ちなみに@refescape
はTweeter投稿用のパラメータです。
post '/sunshine' do
text=params[:text]
ret=""
nm = Natto::MeCab.new
text.each_line do |line|
nm.parse(line.chomp) do |n|
sp=n.feature.split(",")[7]
if sp && sp.include?("イ")
ret+=sp
else
ret+=n.surface
end
end
ret+="\n"
end
@title="サンシャイン池崎ゲームリゾルバ(結果)"
@restext=ret.gsub("イ","イェー!")
@refescape=URI.encode_www_form({"text"=>@restext})
slim :sunshine
end
あとがき
こんなの誰か作るだろうと思っていたけど、くだらなすぎて誰も作っていないみたいだったので速攻で作りました。
MecabとRubyの組み合わせは初めてですが全然簡単でした。先人たちの踏破した道は楽でいいですね。