【個人開発】プロ野球好きのエンジニアがPython×Flaskで初めての個人開発

## はじめに
プロ野球観戦記録ツール[やきゅログ](https://yakyu-log.com)をリリースしました。まだまだ改善途中で利用者も数少ない状況ですが、開発の経験を少しでも共有できればと思いこの記事を書きました。なお、QiitaはおろかWeb上で記事を書くことも初めてなので、読みづらい所も多々あるかと思いますがご了承ください。

## 自己紹介
- 24歳
- 高専卒（情報系）
- アプリケーションエンジニア（4年目）
- プロ野球観戦が大好き

## サービスの内容
プロ野球の現地観戦成績を記録することができるツール（Webアプリ）です。自分が観戦する／した試合を検索して追加することで、観戦成績（例：16勝12敗0分1中止、勝率0.571）を自動集計することができます。また、追加した試合における選手の成績ランキングを表示したり、試合ハイライト動画を表示する機能等も実装しました。

## 背景
筆者は、年間数試合から十数試合を現地観戦するそこそこのプロ野球ファンです。
同じ界隈の方は共感してくれると思うんですが、ファン同士の話題の中で、今年の勝率はどうだとか、自分が観戦する試合ではxxが全く打たないみたいな話でよく盛り上がったりします。なので、私はいつも以下のように日付やスコア、先発投手等をメモしていたのですが、これが結構面倒臭いんです。もっとラクに管理できるツールとかあればすごく便利なのにな～と思い立ち、本ツールを開発することにしました。

<img width="400" alt="IMG_0955.jpeg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017007/7cfb6d67-c731-47ab-a267-fbe322aad08a.jpeg">

## 目的
- 観戦結果の集計を自動化し、手入力の手間を省く
- 現時点の開発スキルの把握と腕試し
- 自分自身のスキルアップのため

## 目標
- 利用ユーザー1000人
- あわよくばマネタイズしたい

## 使用技術
- **バックエンド**・・・python
- **フロントエンド**・・・HTML、CSS、Bootstrap
- **フレームワーク**・・・Flask
- **DB**・・・PostgreSQL
- **インフラ**・・・Amazon EC2（Ubuntu）、Apache、WSGI

## 設計
### ER図
簡易的なER図は以下の通りです。

![やきゅログER図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017007/653830a3-34fb-4e5b-867b-33114f4fdfdf.png)

### システム構成
本当は完全無料にこだわりたかったんですが、自身の学習も兼ねてAWSを選択しました。それでも費用はできるだけ抑えたいので、サーバーはEC2の12ヶ月間無料枠「t2.micro」のみという超最小限構成としました。すなわち、RDS等のDBサーバーは持たせず、Webサーバーと同じEC2内にPostgresql環境を構築しています。スペック的にもセキュリティ的にも宜しくない構成ですが、趣味の範囲なので致し方なしということで。
なお、プロ野球の試合データについてはNPB公式サイトよりWebスクレイピングを用いて取得しています。

![やきゅログAWS構成図.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017007/baed7fa7-f8f6-4ee6-8b8f-cf76e3d18b30.png)

## 実際の画面
実際の画面を簡単にご紹介します。基本的にスマホで使ってもらう想定なので、縦画面での紹介となります。

### トップページ
私自身、デザインセンスに関しては皆無ですので、様々なWebサイトのデザインを参考にさせていただきました。自分で言うのも何ですが、割とそれっぽく？なったのではないかと思っております。

まず、試合結果を保存する必要があるため、ログイン機能を実装しました。セキュリティの関係上、メールアドレスや電話番号等は取得せず、任意のユーザーIDとパスワードで登録します。
また、ログイン機能があると利用するハードルが上がってしまうと考え、ログインなしでも使えるようにしています。「使ってみる」ボタンを押下すると、ゲストユーザーとしてログインできます。データは一定期間で削除される仕組みになっています。

<img width="400" alt="IMG_1806.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017007/1af48be2-62ca-4667-900f-dcec6733de71.png">

### ホーム画面
画面上部に観戦成績が表示され、下部には観戦した試合リストが表示されます。各試合のカードを押下すると、試合の詳細を確認したりメモを入力したりできます。また、「成績をポスト」を押下すると、Xで自身の観戦成績をポストすることもできます。

<img width="400" alt="IMG_0927.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017007/bb4cb654-ee3b-44bc-9074-72097db93993.png">

### 選手成績画面
画面上部に観戦時のチーム成績が表示され、画面下部には個人成績のランキングが表示されます。選手名はリンクになっており、押下すると詳細な成績を確認することができます。

<img width="400" alt="IMG_1799.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017007/f73cde59-314b-43c6-a1b8-756f58506ea9.png">

### 試合追加画面
シーズン／月／チームを指定して検索すると、試合が表示されます。自分が観戦する／した試合を選択し追加すれば、観戦成績が自動集計されます。

<img width="400" alt="IMG_1798.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017007/6d12d6cd-408d-4a89-a527-96412476f769.png">

## 課題
- Webスクレイピングを使用しているため、NPB公式サイトのHTML構造に依存している
- 需要がないのか、宣伝が足りないのか、ユーザー数が全然伸びない

## 今後の展望
機能追加やデザイン修正等、まだやりたい事は山々あるのですが、ユーザー数が伸びていない現状では中々やる気が出ないといったところです。
また、今後何かの間違いでユーザー数が増えたりした場合は、Google AdSense等で収益化することも考えたいと思います。（なお既に2回審査に落ちています...）

## 最後に
読みづらい記事を最後まで読んでいただきありがとうございました！
今回の開発を通じて、プログラミングだけでなくインフラ周りの技術も身につけることができました。
私は基本的にプログラムだけ書いていたい人なので、インフラに関しては正直苦手意識がありましたが、今回AWSのEC2を選択したことで、一からサーバーを構築するという経験ができたので、苦手意識も少しは払拭できたのかなと感じています。

加えて、ユーザーを集めることの難しさを改めて痛感しました。個人的には結構いい物ができたと思っていたのですが、やはりまだまだ考えが甘かったと認識させられました。

もし今回の記事で「やきゅログ」に興味を持って頂けた方がいらっしゃいましたら、是非一度使っていただけると嬉しいです。使ってみた感想や、今回の記事に関してのご意見、アドバイス等ありましたらコメント頂けますと幸いですm(_ _)m

### サービスURL
やきゅログ
[https://yakyu-log.com](https://yakyu-log.com)