体分の得点をスプレッドシートですべて管理した話。

# はじめに
久しぶりにQiitaを書く孤独のコーヒーです。いつもなPython関係の話をしますが、今回は自分の学校関係の話です。

学校は一応伏せますが北海道札幌市にあるとある工業高校の生徒会の2年生です。
（札幌に工業高校2校しかないです！）

まず体分とはなにかですが、正式名称は秋季体育文化大会と言って、おそらく他の高校では体育祭や体育大会などなどですが、うちの高校の場合は、運動が苦手な生徒のために文化系の競技も取り入れています。

## なぜ作ろうと思ったか。
理由は簡単です。得点ミスが多く、さらに人手不足です。
おととしまでは生徒会だけではなく他の委員会なども使い得点集計を行っており、その得点を電卓などを利用し出していました。しかし、人の手のためミスが多かったため作ろうと思いました。

### 昨年の場合はスプレッドシートに移行しましたが、、
そして昨年度はPCに強つよ先生が生徒会の担当となったことで、やっと紙からシートへ移行となりましたが、、、
![2023-11-01_15h11_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/e7eae616-9523-65d7-8400-6f30a2388d11.png)

このように作ってもらったのはよかったもののわかりずらく、
トーナメントとこの画面を見ながら入力する必要があり、当日ミスが発生しまくったことが経緯があり、さらに後日得点ミスも判明。

# 今年度の場合
そして説明が長くなりましたが、今までの経緯を得て「よっしゃ作るか！」となり、一番最初に作ったのは去年の12月でした（ちなみにこの時点でほほぼぼ今の形にとても似ている）。

そして、本格的に動いたのが6月ぐらいとなり、人手不足もあったため得点系で人を割けないとなった時に今回の体分の担当の先生にこのシステム使えません？
と言ったところ、めっちゃ気に入れられ、一気に始動することとなります。

## 夏休み
そして、夏休みに一気構築することを決定！
![2023-11-01_15h22_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/058f93bc-d082-1a42-de59-1cdf12b050b6.png)
上の写真が夏休みの前半までに作れたもので勝ったほうのクラスにチェックを入れるだけとなります。

### 夏休み中の予想外の出来事。
夏休み中では先生との連絡手段はクラスルームだけという正直ゴミでした。
そんな中で得点の話が少し出てこれでさらに加速した中で、、


**雨天競技になると得点ほぼ変わります！**

正直忘れてました。雨天だと競技変わることも今から雨天競技のスプレッドシートも作るか・・？と考えたときに。
雨天競技は以下の4つの方式になりますと。

* 全日晴天
* 全日雨天
* 1日目晴天　2日目雨天
* 1日目雨天　2日目晴天
。。。。
え、じゃ4組のスプレッドシート作らんと行けないの!?!?
正直ここでマジで折れそうになりました。
一回シートから離れて風呂入って寝ました。
翌日、、、

**ボタンとかで切り替えればよくね！！！**
ってことで作成したのが下の写真です、![2023-11-01_15h32_33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/8dac694d-ede3-6773-3fbf-89f40a1413b2.png)

このようにして雨天競技には対応しました！

## 夏休み明け
夏休み明けからは怒涛のコピペでした。既存のシートをコピーしてペーストなどなど、そんな中でひとつ問題が、、、今回の体分はクラスを3つのグループに分け、この1つグループの優勝クラスが他の2つのグループ優勝クラスと戦う総当たりでした、最初は(*￣-￣)ふ～んと思っていましたが、、奇数です。
各グループが一勝ずつした際はどう決めるのか。
1. 試合勝敗
2.得失点の多いクラス
3.失点が少ないクラス
4.じゃんけん

このような決め方となりスプレッドシートもそれに対応する必要があり、体育系は
なんとななったものの文化系が少しややこしく、
例としてあげると大富豪がありますが、得点もなにもないため
一つの試合で3回やるとゆうことでこの三回の中で大富豪が多かったクラスから順位を決定するようにしました。![2023-11-01_15h40_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/835d5483-818d-6caf-fdf2-f9e1618ea38b.png)

# スプレッドシートを簡単に紹介
今回作ったスプレッドシートは競技別でシートが分かれており、その競技のシートを取得し一枚のスプレッドシートで全競技の得点を計算しました。
競技にスプレッドシートで勝ち負けをチェックつける
すると勝ったクラスは自動で次戦のセルに表示され、、、優勝までとなります。
そしてこの競技結果を全競技得点シートで計算し出しています。
![2023-11-01_15h55_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/df3db2cf-56e1-125d-a547-a241ede79684.png)
![2023-11-01_15h56_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613330/8ff87b46-624d-42b0-ae80-08e8a0ccd9b6.png)
（テスト段階の順位です）

そして裏ではGASを利用し自作関数でシートからは利用しやすいようにしました。


# 前日
最終チェックとして適当にクラス分けをし、得点・順位があっているかすべて精査しました。17時ぐらいから始まり終了したのが。。21時過ぎ。
学校を出たのは22時近くでした。
ここは反省で前々日からやっておけばよかったです（VALORANTとやってたせいや）

# 当日（1日目）
当日ももちろん早く学校に登校し７時前には着きスプレッドシートの本当に最終確認を行っていました。
そして競技開始、最初を乗り越えてくれれば、なんとか一日目はなる。、、なにも起きないでくれ！
と思いながらスプレッドシートの監視をしつつ本来の仕事である競技の仕事をしていました。

そして前々からなんども説明を繰り返していたり、確認をしていたおかげで一日目はなにも起こらず終了。

## 2日目
2日目天候悪化が予想されていため、雨天競技へ切り替えることへ
前に書いたとおりチェックを変更するだけ、めっちゃ簡単
これ作った自分に感動しましたｗ

そして二日目は少しややこしい総当たり戦も行われますので一日目より重点的に監視をしていました。やはり総当たり戦について質問も出ましたが、すぐ理解してくれたので安心。そして最後のほうになり、順位も確定してきたところで、一個の競技でミスが発生本来2つのクラスが進むところを1つのクラスしか進まなかったと
つまり本来　1位　2位　3位　4位　と決まるところ
1位　2位　3位　３位　になると急遽スプレッドシートを変更し4位を3位にし得点も変更しました。ここは素早く対応できたので周りの人達に感謝です。

### 得点発表
スプレッドシートを利用してるからすぐ出せると担当の先生は思ったのでしょうか、最後の競技が終わって10分後には閉会式が行われ、得点発表です。
がしかしスプレッドシートで案の定すぐでるため発表しました。

# 終わりに
いつもPythonを書いてる中で別言語を書くのは正直大変でしたがなんとな成功までこぎつけることができていて感動しています。
次使うときはもっと改良をしていきたいです。
（トーナメントを自動で線に色を付けてくれるとか、、）

そして
初めての試みなのにこれを利用しようと許可してくれた先生には感謝しています。
そしてそれについてきてくれた生徒会の人たち本当にありがとう。
ここまで読んでくれた人もありがとうございます。読みずらいところもあったと思いますが、ご了承ください