圧倒亭グランパのブログ

30年後の自分にもわかるように書くブログ

slackで将棋を指したい

@at_grandpa です。

この記事はVOYAGE GROUP エンジニアブログ : Advent Calendar 2014の10日目の記事になります。

 

今回のテーマ


f:id:at_grandpa:20141207092226p:plain

最近、将棋がマイブームです。
マイブーム過ぎて、こんなイベントを開催するくらいです。

将棋現状確認会
将棋現状確認会#2 〜第二回 AJITO王決定戦〜

いずれも白熱した闘いが繰り広げられ、とても盛り上がりました。やはり実戦は勉強になりますね。

#3も開催する予定なので、ご興味ある方は是非。zusaarで呼びかけを行う予定です。

 

さて、今回のテーマは Slack x 将棋 です。

発端は、

  • とにかくサクッと指したかった
  • 今まで社内の方と指すことが多かった
  • 社内LT大会(今から約3ヶ月前)の発表が近かった(今回のものは3ヶ月前に作ったものです)

です。

 

「よし、slackで将棋を指せるネタにしよう」

ということで、hubotを使って実装することにしました。

そして出来上がったのがこちらです。(画像は Public Domain のものを利用させていただきました。)

 

 

f:id:at_grandpa:20141210105450p:plain
powered by hubot

 

 

helpは次のようになっています。

slack上で at_grandma help、もしくは ag h と打てばhelpを見ることができます。

 

  ---------------------------------------------
     Shogi on Slack Bot 'at_grandma' ver 0.2
  ---------------------------------------------

at_grandma commands are:


  at_grandma (help|h)
  ag (help|h)

      このhelp


  at_grandma shogi <command>
  ags <command>

      - (req|re|r)
                      対戦リクエストを発信する

      - (ok|o)
                      対戦リクエストを受け付ける

      - (board|bo|b)
                      現在の盤面情報を表示する

      - (kifu|ki|k)
                      直近の棋譜を表示する

      - (init|ini|i)
                      すべてを初期化する

      - <持つ座標> <打つ座標><打つ駒>[成]
                      動かしたい駒の座標を指定し、次に指定した場所に打つ
                      ex1) ags 77 76歩
                      ex2) ags 74 73歩成 (成る場合は「成」をつける)
                      ex3) ags 00 52金   (持ち駒は00指定)

      - (help|h)
                      最善手っぽいものを教えてくれる


使える駒:

      歩 と 香 杏 桂 圭 銀 全 金 角 馬 飛 龍 玉



※注  このシステムはBonanzaとは一切関係ありません。
     (いずれ関係は持ちたい)

 

 

一連の操作を追ってみる

 

ちょっと対局を見てみましょう。
(自分対自分です。対grandmaではありません。grandmaは仕切り役です。)

 

f:id:at_grandpa:20141210105601p:plain

 

優しく語りかけてくれますね。

 

それでは指してみましょう。

 

f:id:at_grandpa:20141210105617p:plain


f:id:at_grandpa:20141210105631p:plain


f:id:at_grandpa:20141210105641p:plain


f:id:at_grandpa:20141210105652p:plain

 

なんと優しい声掛け。やる気も出ますね。

しかもちゃんとキレイな図を表示してくれます。

 

 

 

局面は進んで、このようになりました。

 

f:id:at_grandpa:20141210105711p:plain

 

「あたしは読んでたわよ。」

 

さすが grandma 。将棋も嗜んでいらっしゃる。

 

さて、ここまでくると現状の棋譜を出力したいですよね。

そんな時も grandma に聞けばよいのです。

 

f:id:at_grandpa:20141210105736p:plain

 

このようにしっかり教えてくれます。(「直」や「右」がないのはご愛嬌)

 

 

さてさて、局面はさらに進み以下のようになりました。

 

f:id:at_grandpa:20141210105755p:plain

 

次は先手番(手前側)です。

ここでちょっとズルをしてみましょう。

 

f:id:at_grandpa:20141210105807p:plain

 

いきなり玉を取っちゃう作戦!(・ω<)

 

f:id:at_grandpa:20141210105817p:plain

 

読まれてるぅぅぅ

 

しかも、それを許してしまうなんて、なんて優しいんだ grandma 。

(ちなみに、対局者じゃない人が勝手に指そうとしたりすると、そこはちゃんと怒ってくれたります。)

 

実はまだ移動可能位置のバリデーションが未実装なのです。

つまり 先手必勝(1手目から玉を取れる) なんですよね。

(・ω<) テヘペロ

 

 

実装

局面図生成について

今回の実装について、便利なサイトがあったので紹介します。

クラウド将棋局面図ジェネレーター

将棋局面図WebAPI です。決まったフォーマットでURLを作れば、その局面図を取得できます。
hubotとの相性抜群!
詳しくはリンク先をご参照ください。

 

hubotスクリプト

githubで公開しています。

github.com/at-grandpa/at_grandma

遊んだり改良したりしたい方はどうぞ。

 

最後に

結論、全然サクサク指せませんでした。

これが原因で社内には全く広まりませんでした。

でも、grandma が悪いわけじゃないです。

 

at_grandma、仲良くしてやってください。

 

 

明日は @sinamon129 です。

キュートな記事を書いてくれることでしょう!