努力を可視化！ 積み上げ管理アプリの開発〜5週間でSpringアプリリリース〜

# はじめに
先日、「5週間でwebサービスリリース人集まれ!!!第三弾」という勉強会企画に参加し、約5週間の間Webアプリ開発・リリース作業を行った後、LTで成果物を発表しました。
使用したフレームワークはSpringです。
本記事では作成したWebアプリの機能の紹介や開発経緯、今後のWebアプリ改修の課題について記します。

勉強会企画のURL（connpass）：
[5週間でwebサービスリリース人集まれ!!!第三弾※もくもく会のみ参加もOK](https://shinjukuasakatu.connpass.com/event/183656/)
[【朝活・新宿・もくもく会】第3弾 5週間でwebサービスリリースイベントのLT発表会](https://shinjukuasakatu.connpass.com/event/187636/)

# 作成したWebアプリの概要

今回作成したのは、毎日の努力＝積み上げを記録・表示するアプリです。
Twitterで「今日の積み上げ」というハッシュタグがあり、勉強や筋トレといった毎日の努力やライフログが投稿されていますが、その積み上げを可視化したいと考えました。

平たく言えば、日々の勉強や筋トレなどについて、
**自分は今までこれだけ頑張ったんだ、ということを目に見える形で記録したい**ということです。

作成したWebアプリのURL：
[http://stackmanagement-env.eba-zmspvrm3.ap-northeast-1.elasticbeanstalk.com/login](http://stackmanagement-env.eba-zmspvrm3.ap-northeast-1.elasticbeanstalk.com/login)

# Webアプリの機能

ユーザ登録・ログイン後、以下の入力フォームから1日ごとの積み上げの記録を登録できます。
1日3件ごと、積み上げのタイトル・費やした時間（分）・コメントを入力できます。
![スクリーンショット 2020-09-07 12.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409123/18285bc4-ecc1-d7fa-7639-c0be4d5a8339.png)
積み上げ登録ボタンを押下すると、入力内容が積み上げ一覧に登録されます。
![スクリーンショット 2020-09-07 12.28.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409123/c6518749-c5f8-18b6-be3a-9fc6ff5612c6.png)
入力画面で「テンプレート登録ON」を設定していた場合、入力内容がテンプレート一覧にも登録されます。
![スクリーンショット 2020-09-07 12.43.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409123/6aa75be0-860e-ad7c-5d3d-c6d7f17bf049.png)
テンプレート一覧に登録した内容は入力画面の「テンプレート選択」のプルダウン選択によって呼び出すことができ、以前登録した内容と同じ内容を繰り返し入力することができます。
![スクリーンショット 2020-09-07 12.45.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/409123/df8af918-473c-1b67-d358-08578d4a4412.png)

その他、詳細ボタンから登録内容の更新・削除、ADMINユーザからユーザ情報の更新・削除も行えます。

# Webアプリ開発の経緯
以前転職活動を行っていた際にJavaの経験を活かそうと考えたものの、Springの知識がないために技術レベルの高い会社に入ることはできず、同じことは繰り返すまいとSpringを学ぼうと考えました。
Kindle Unlimitedで「Spring解体新書」という書籍を見かけて、この機に挑戦したいと考えたのもきっかけです。
Webアプリの土台は書籍中で作成するサンプルと同じですが、サンプルではユーザ登録・ユーザ情報更新・ユーザ情報削除・ログイン機能までしか作成しないため、積み上げ入力やテンプレート登録といった機能はオリジナルとなります。

参考書籍：
[Spring解体新書](https://www.amazon.co.jp/dp/B07H6XLXD7/ref=cm_sw_em_r_mt_dp_3fBvFbG3PGDN5)
[Spring解体新書 セキュリティ編]
(https://www.amazon.co.jp/dp/B08BFLJ47Z/ref=cm_sw_em_r_mt_dp_jhBvFbJ9TM8QD)

# 主な使用技術
•Spring Boot
Javaで動作するWebアプリフレームワークです。
Spring FrameworkというJavaのオープンソースフレームワークの集合体を、使いやすくまとめたものとなります。
Javaの標準機能であるJava ServletでもWebアプリは作成できますが、それに比べると、依存性の注入(DI)の機能によってインスタンス生成(new演算子)を省略できる、アスペクト指向プログラミング(AOP)によってメソッド開始・終了時などに共通処理を実行できるといった利点があります。
簡単な説明：[SpringのDIとAOPの簡潔な説明](https://qiita.com/shuntaro_tamura/items/ba5a2e9b3ba305285edd)

•Bootstrap
Twitter社が開発したCSSフレームワークです。
今回は書籍の通りにMavenからBootstrap 3.3.7-1を導入しました。

•PostgreSQL
オープンソース系のリレーショナルデータベースです。
書籍ではH2DBを使用していますが、そちらではSpring Bootアプリを終了するたびにデータが消えるため、最終的にPostgreSQLに切り替える必要がありました。
テーブル仕様が固まっていない時など試行錯誤の段階の場合は、H2DBの方が都合がいいと感じています。

•AWS
Amazonが提供するクラウドサービスです。
今回は[AWS Elastic Beanstalk](https://aws.amazon.com/jp/elasticbeanstalk/)に、Spring Bootアプリ一式を固めたjarファイルをアップロードすることでデプロイを行いました。
アップロードした時点でEC2インスタンス生成とデプロイが実行されるほか、Elastic BeanstalkのオプションとしてRDSと連携させることで、WebアプリからDBを使用できるようになります。

参考資料：
[SpringBootアプリをGithubActionsで超簡単にAWS ElasticBeanstalkにデプロイしてみた](https://qiita.com/kilvis/items/a59351c4f27083b3956f)
[Elastic BeanstalkでSpring Bootのアプリをデプロイしたときの手順と遭遇したエラー](https://qiita.com/aaaaaayyymmm/items/6fa82521bc7a9c12dd46)

# 今後の課題
実際に自分で積み上げの記録を入力していくことで、こうだったらいいのにな、という点を見つけて改良していきたいと考えております。

例：

- 自分のアイデアを元に機能追加
 - 単に記録を表で表示しているだけなので、それをグラフ化する
 - スマホ表示時に最適化できるようにする
 - 入力内容をTwitterに投稿できるようにする

- 類似アプリ([Trickle](https://blog.h13i32maru.jp/entry/2018/11/12/092904)、[23UP](https://23up.fun/lp/v0CSoon)など)を参考に機能追加
　- カレンダー形式で記録を表示できるようにする
　- 画像を投稿できるようにする
　- 他のユーザの投稿をタイムラインのように表示させる
　- 投稿にタグを付けて分類する

# 最後に
今回の企画で、自分で継続的に運用して改修していけるアプリを作ることができたため、他分野の学習の傍らに、Springの学習も積み上げていける体制を整えることができたと考えております。
本記事内の記述に誤り等ございましたらご連絡をお願いいたします。