
就活生スマブラ―がエンジニア目指していろいろ作った話
みなさんお疲れ様です、おつです。(激オモロギャグ)
普段こういった記事を全体向けに書くこととかまっっっっったくないんですけど、今年1年いろいろ経験したんでせっかくなら振り返りつつ文章に起こそうかなーと思いまして、この記事を書いています。
スマ界隈にそこそこいてオフにもちょくちょく出ている身ですけど、自分が人見知り過ぎて全然絡んだことない人とか無限にいるので、この機会に自分のこと少しでも知ってもらえたらなーと思ってますm(__)m
※文章書くのマジで苦手なので、変な表現とかあっても温かい目で見守ってくれるとありがたいです🙇
自己紹介
そもそもお前誰?って人が多いと思うので軽く自己紹介
"おつ"という名前で関東のオフにちょくちょく顔出してます。魂のロボット単です。
篝火とかウメブラでは予選を抜けても本選で絶対に最速敗退する大型大会予選抜け芸人したりもしてます。悔しい…早稲田スマブラ研究会(通称わせスマ)という大学のスマブラサークルにも所属していて、昔は代表やってたりもしてました。インカレサークルなので興味ある人は入ってみてね☆ つえ~やついっぱいいます。
早稲田大学に合格した皆様、おめでとうございます!
— 早稲田スマブラ研究会 (@sumabura_ken) March 30, 2024
早稲田スマブラ研究会です!
サークル紹介画像を作成したので、興味のある方はご覧ください!
インカレサークルなので早稲田生以外も大歓迎です!
質問・入会希望の方はDMまで!#春から早稲田 #スマブラ#大乱闘スマッシュブラザーズ pic.twitter.com/eOBzycPckN
近況報告
以前から自分のことを知ってくれている人は気づいているかもしれませんが、今年の5月の篝火以降ほとんどオフ行ってません。スマブラせずにお前何してるん?という話なんですが、就活してました😱
厳密には就活に向けた勉強みたいな感じなんですけど、まあ総じて就活です。決して5月の篝火でプール第3シードをもらいかつ第4シードがDQという、絶対予選抜けれるやろ~なプールで、まさかの敗者側決勝の2つ手前で敗退し激萎えして引退したわけではありません!ほんとに、マジで
タイトルにもある通り、自分はエンジニア目指そうと思っていたのでその辺の知識を勉強したり、アプリ作ったりしていました。
その過程でスマブラにゆかりのあるものをいくつか作ったのでこのあと紹介していきます。
作成物
スマサー連合のbot
でかでかと作成物!とか書いてますけど、スマサー連合のbotに関してはもともと作られてたbotにちっちゃい機能を1個追加しただけです。
スマサー連合ってなに?という方に説明をしますと、全国のスマサーの元締めみたいなもんです(超適当)
スマサーに向けて大学間の対抗戦を運営したり合宿なんかも企画してる、スマサー民にとっては超偉大な組織です。
そんなスマサー連合には、大学間の対抗戦の運営に便利な機能をたくさん備えたdiscord bot が存在しております。rakuさんという方が作成・管理してます。スゴイ!
そんなbotですが、新たな機能を追加することになり、当時連合の代表だったけんぐーにありがたいことに声をかけていただきました。アリガタイ!
そんなけんぐーが連合への想いを綴った記事がこちら。botについても触れていて、自分の名前も一瞬だけ出てます。ヤッタネ!
botに実装した機能としては簡単なもので、調整さんに入力した内容を見やすいように成形してdiscordのメッセージとして投げるというもの。


わかる人向けに言うと調整さんの画面をただスクレイピングしているだけ。
それでも要件を聞きながらものを作るという経験が初めてだったのでいい思い出です。
チームビンゴアプリ
世はまさに大チームビンゴ時代
わせスマでチームビンゴめっちゃ流行っていたので、チームビンゴ専用アプリを作ってみました。
当時はdiscordで1人が画面共有をしてクマメイトのビンゴ表を2枚映してプレイしていたんですけど、画面共有できるやつがプレイする面子の中に必要だったり、そもそも画面共有がめんどかったりしたので、この辺を解決できればなーくらいのメンタルで作ってました。
というわけで最終的に完成したものがこちら👐


部屋IDのところに同じ文字列入れればみんなで同じ画面が見れます。他の人が埋めたマスもリロードすれば反映されます。ヤッタネ!
まだバグがあったり、アプリの管理がめんどかったりで現在わせスマに向けてしか公開してませんが、需要有りそうなら全体公開します。
大会結果晒しLINEbot
最低最悪の悪魔のbot
start gg から大会結果を取得して人の順位を勝手にさらします。

start gg のアカウントのID的なものを取得できればどのプレイヤーの情報でも取得できます。
こちらに関しては今後start gg でいろいろできそうなので技術的な部分も少し触れようと思います。興味ない人は飛ばしてください
start gg のAPI周りの話や、そもそもAPIってなんぞ?という話は先駆者様が懇切丁寧に解説してくださっていいたので、興味がある人はこちらをお読みください。私も大変お世話になりました。
自分がやったこととしては、特定のプレイヤーの大会結果を取得するというもの。
先駆者様やstart gg の公式ドキュメントのサンプルでは大会からいろいろ情報を取得するものが多く、特定プレイヤーに着目した前例があまり見つけられなかったので、この記事に残しておきます。まあ大会情報を取得する部分をプレイヤーに置き換えただけなので難しいことはしてないんですけどねHAHAHA
本記事ではクエリの指定方法や、各クエリが保持している要素の説明などは割愛させていただきます。先駆者様の記事で本当に詳しく説明してあるのでそちらを読んでいただければ理解できると思います。
ここでは、自分が実装した特定プレイヤーの大会結果を取得する部分だけをちょっと紹介します。
クエリ
query GetUserBySlug($slug: String!) {
user(slug: $slug) {
id
player{
gamerTag
recentStandings(limit: 5){
placement
entrant{
event{
numEntrants
tournament{
name
}
}
}
}
}
}
}
欲しい情報をどんどん書いていくイメージ
プレイヤーを特定するための要素としてslugを使ってます(後程解説)。userとplayerが両方あるのが2度手間な気がしますが、playerの中にはslugの要素が無いため特定ができず、大会結果を取得するにはplayerの中のrecentStanding(選手の直近の大会の結果を数を指定して取得できる)が便利だったため、こんな感じのコードになりました。
Variables
{
"slug":"add868f3"
}
先述した通りuserの特定のためにslugというものを用いています。先駆者様はplayerIdを使ってましたが、このIDを知るためにAPIを叩かなきゃいけなそうで、なんか2度手間な気がしたので今回はstart gg 上で直接見れるslugを使ってみました。
ちなみにslugはこれ

返ってくるもの
{
"data": {
"user": {
"id": 1578631,
"player": {
"gamerTag": "おつ",
"recentStandings": [
{
"placement": 33,
"entrant": {
"event": {
"numEntrants": 64,
"tournament": {
"name": "W-Zone smash"
}
}
}
},
{
"placement": 2,
"entrant": {
"event": {
"numEntrants": 24,
"tournament": {
"name": "Weekly Smash Party ~スマパ~ #161"
}
}
}
},
{
"placement": 5,
"entrant": {
"event": {
"numEntrants": 32,
"tournament": {
"name": "スマブラオフ対戦会「ろえスマ!」in池袋(復活版#1)"
}
}
}
},
{
"placement": 385,
"entrant": {
"event": {
"numEntrants": 2034,
"tournament": {
"name": "篝火#12/KAGARIBI#12"
}
}
}
},
{
"placement": 129,
"entrant": {
"event": {
"numEntrants": 516,
"tournament": {
"name": "DELTA#8"
}
}
}
}
]
}
}
},
"extensions": {
"cacheControl": {
"version": 1,
"hints": null
},
"queryComplexity": 32
},
"actionRecords": []
}
クエリで指定した情報が返ってきているのがわかります。recentStandingsのlimit を 5 にしてので直近5大会分の情報が返ってきてます。篝火プール第3シードとは思えない戦績
トーナメントの開催日時も取得できそうなので、直近〇大会という表示以外にも今月出場した大会みたいな感じでもできそう。
あとは返ってきた情報をもとにメッセージを作成してLINEのAPIを叩けば、大会結果を晒すLINEbotの完成です。
LINEまわりは説明が面倒なので割愛します。
自分は取得した大会結果の情報を活かす方法がLINEbotで晒すくらいしか思いつかなくてこんな感じの着地になってしまいましたが、やりようはいくらでもあると思うので誰かいい案あったら教えてください。なんなら作ってください
最後に
いろいろ作ってきましたが、まだまだエンジニアとしては赤ちゃんレベルなのでこれからも経験積んで っょっょ になりたいですね。
エンジニアスマブラ―とかいたらお話したい所存
ただ、根っこはスマブラ大好き人間なので来年はガッツリオフとかに出てスマブラ―としての生活を送りたいヽ(`Д´)ノ。
3月くらいには就活ケリつけます。
長くなってしまったのでそろそろ締めます。
ここまで読んでくださり、ありがとうございました!文章読みづらかったらすんません(m´・ω・`)m