kinoppyd.dev

blog

products

accounts & contact

ゲームプラットフォームとしてのSlack

posted at 2015-12-19 04:28:39 +0900 by kinoppyd

この記事は、 Slack Advent Calendar の19日目です。

Slackは、ゲームプラットフォームだ

最近、よくSlackをチームのチャットツールだと誤解されている方をお見受けしますが、皆本質を見誤っていると言わざるを得ません。Slackがチャットツールではなく、ゲームプラットフォームだという理由は、次の点から明らかです。

以上のように、Slackがゲームプラットフォームだということは疑いようのない事実ですが、その反面ゲームプラットフォームとしてはやや機能が不足していると思われる面も少なくありません

まあなんというか、Slackはゲームプラットフォームなのに割とゲームを作る能力としては低いです。むしろ最近は、副産物としてのチャットツールの方を成長させようと躍起になり、ゲームプラットフォームとしての本分を忘れ去っているように見えます。

Slack Game

そんなSlackを、ゲームプラットフォームとして活用するために足りないのは何かと考えたところ、どうやら啓蒙活動が足りないように思えました。そう、Slackをゲームプラットフォームとして便利に利用するフレームワークが無いのです。

そこで、作りました。

slack-game

Slack上でゲームを作ることを支援する、RubyGemです。

How to use

とりあえず、手っ取り早く説明するために、デフォルトでデモとして入っているライフゲームを動かします。

echo "source 'https://rubygems.org'\ngem'slack_game" >  Gemfile
bundle install --path tmp/bundle
export SLACK_TOKEN=your_slack_token
export CHANNEL=you_slack_channel
export LIFE_ALIVE=:black_large_square:
export DEFAULT_SPACER=:white_large_square:
echo "require 'slack_game'; SlackGame::Game::Lifegame.new(ENV['CHANNEL'], 20).main_loop" > test.rb
bundle exec ruby test.rb

lifegame

なんとなく、雰囲気はつかめてもらえたのでは無いでしょうか?

次に、最も簡単なサンプルをGistに用意しました。SlackGameのgemの中に用意されている、Demoというゲームを解説するために、適当に作りました

git clone https://gist.github.com/kinoppyd/00f50bb4eee7ad8c62ae game_example
cd game_example
export SLACK_TOKEN=your_slack_token
export DEFAULT_SPACER=:fog:
export CHANNEL=bot_test
bundle install --path tmp/bundle
bundle exec ruby run.rb

コード自体はこんな感じ

簡単な解説も付け加えておきます

このデモでは、l(left), r(right), u(up), d(down)の入力をSlackへの入力から取得し、キャラクターを動かして画面を再描写する簡単なゲームです

このように、SlackGameを使うことで、ドットを使った簡単なゲームを作成することが可能です。

免責

SlackGameは、基本的にSlackAPIを連打します。RateLimitに引っかかってなにか泣きを見ても、私は一切の責任を負いません。

言い訳

1ヶ月ほど前に、お酒を飲みながら作ったコードなので、いろいろと内部は綺麗ではありません。あまり参考になるコードは無いと思います。

これからは心を入れ替えて、真面目にコードを整備するので、いつの日かきちんとしたコードになると思います。

他の頭おかしい方々

Vim scriptによるゲームの新アーキテクチャの考察