はじめに
こんにちは! 基盤本部プラットフォームグループのかいかいです。
今回はhacomonoプロダクトチームの社内イベント「9月だョ!全員集合」での出し物で、私が担当したじゃんけんゲームについて紹介させていただきます。
※注意点として、この記事はじゃんけんを AWS Step Functions で実装することを推奨するものではありませんので、ご承知おきください。
経緯
全員集合イベントでは、コミュニティブースか新機能コンテストのどちらかに参加することができ、我々プラットフォームグループでは、グループの活動を広めることを目的にコミュニティブースに出展することにしました。
楽しんでもらいながら、グループの活動がイメージできるような出し物を考え抜いた結果、グループ紹介と、AWS Step Functions のハンズオンをコンテンツとして入れ込むことにしました。
Step Functionsのハンズオンを取り入れた理由は以下の通りです。
- プラットフォームグループでは 本番、検証環境の作成などでStep Functions を多く利用しているから
- プロダクト開発チームにも Step Functions を知ってもらうことで、今後の開発に活かしてもらえるかもしれないから
- Step Functions のフローを作るのは楽しいから!
持ち時間内(20 分)で Step Functions のハンズオンを行い、Step Functions の良さを知ってもらうにはどうすれば良いかと考え、以下の理由からじゃんけんゲームを作成することにしました。
- じゃんけんは誰でも知っているため、じゃんけん自体の説明を省略でき、 ハンズオンに集中できると考えたから
- じゃんけんであれば状態遷移や条件分岐など、Step Functions の機能を生かせると考えたから
ハンズオンについて
じゃんけんに関するインターフェイスは Slack を選定し、エンジニアではない参加者でも簡単に利用できるようにしました。
ハンズオンの内容は、
- 不完全な Step Functions のフローをあらかじめ用意しておく
- 不完全なフローを Slack から呼び出してもらい、フローが失敗することで参加者に何が悪いか認識してもらう
- うまくいくように Step Functions のフローを完成させる
といった流れで進めました。
不完全なフローは以下画像のフローを用意しました。
簡単に実行内容を説明します。ちなみに3〜4人で一つのチームを作り、じゃんけんをしてもらう方式です。
- チームの代表がSlackのslash commandを実施し、入力フォームからチーム全員の情報を入力する。
- 1の入力をトリガーにStep Functionsが実行され、入力情報を返す。
- RegisterSessionでは2の結果(チームの参加者情報)などがDBに保存される。
- SendStartによってじゃんけんの手の選択を促すようなメッセージがチーム全員のSlack に送信される。
- SendStart で送信されるメッセージ内のグー,チョキ,パーいずれかのボタンを参加者が選択、選択した手が DB に保存される。
- CheckHands で DB の中身を確認し、チーム全員の手が揃っているかを返す。
- 5の結果がIsReadyで確認される。
- 手が揃っている場合はSendResult でじゃんけんの結果を Slack に送信して正常終了する。
- 手が揃っていなかった場合はFail へと遷移してフローが終了する。
上記の不完全なフローでは、2~6 までのフローが一瞬で実行されてしまい、4-1(参加者がSlackでじゃんけんの手を選ぶ手順)を実施する前に Fail に遷移してしまいます。
上記の状態から少しずつ指示を出していき、フローを修正してもらう、というのが今回用意したハンズオンです。
最終的なフローは以下の画像のようになっており、CheckHands でじゃんけんの手が揃っていない場合は一定秒待機して、揃うまでCheckHands に遷移するようになっています。
このように、Step Functions の 条件分岐や実行待機機能をじゃんけんを通して体感してもらうといったものです。
いざ本番へ!
結論から申し上げますと、概ねうまくいき、参加者の方々に楽しんでもらえたと思います!(ネットワーク接続が悪い時はありましたが。。。)
いただいたフィードバックでは、
- わかりやすかった。つまづくことが少なかった。
- Step Functions で何か作りたくなった
- ハンズオンできたことで、Step Functionsの利用に対して心理的ハードルを下げることができた
などのコメントをいただき、とても嬉しかったです。
そしてなんと、プラットフォームグループのコンテンツは「最も勉強になったで賞」をいただくことができました!
ハンズオンだけではなく、プラットフォームグループ全員で様々なコンテンツに力を入れていたので、とても嬉しかったです。
学びや感想
今回のコンテンツを通して、以下のような学びや感想を得ることができ、エンジニアとしても成長できたかな?と思います。
- Slack App を用いた開発は初めてだったので、大変だったが理解が進んだ!
- Step Functions は AWS コンソールでフローを作成し、jsonとして出力して Terraform などの IaC にコピペするのが個人的には簡単で楽だと気づいた!
- Terraformのmodule機能が便利すぎた!
- 複数のチームができることを想定してフローを複数作成する必要があったが、module機能のおかげで少ない記述で達成できた!
- 今回のような簡単な仕組みでも一から作るのは大変。。。(4営業日ぐらいかかった。。。)
- UI と絡んでいる状態遷移ロジックの自動テスト実装方法がわからなかった。。。(そもそも設計がイケてない?)
- じゃんけんを実装するのに Slack ✖️ Step Functions はオーバーエンジニアリング(面白いけど)
おわりに
今回はじゃんけんを題材にAWS Step Functionsのハンズオンを実施しました。
本番ではなんとかうまくいき、参加者の方々に楽しんでもらえたようでよかったです。
ちなみに、「最も勉強になったで賞」の景品として私はプリンをいただいたのですが、とても美味しかったです。
※写真はプラットフォームグループの説明をしているシーンです!
株式会社hacomonoでは一緒に働く仲間を募集しています。
エンジニア採用サイトや採用ウィッシュリストもぜひご覧ください!