【初めてのポートフォリオ作成】銀行専用人材管理システムを作ってみた

# 目次
| 項番 | ページ内リンク |
|:----:|:-------------|
| 1 | [1. どのような機能を](#1-どのような機能を) |
| 2 | [2. どのような技術を用いて](#2-どのような技術を用いて) |
| 3 | [3. どのような工夫をして](#3-どのような工夫をして) |
| 4 | [4. どのような成果に繋がったのか](#4-どのような成果に繋がったのか) |
| 5 | [5. 機能概要](#5-機能概要) |
| 6 | [6. テーブル定義書](#6-テーブル定義書) |

# システム
**【プロジェクト名】**
BANKBANK 銀行向け人材管理システム
![logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/89d6725e-552f-2a0e-2bd2-ca166a7a92b5.png)

# 1. どのような機能を
**【機能概要】**
銀行を対象にした人材管理システムです。

銀行業務において発生し得る多様なニーズに即して、
業務の改善と円滑化を図る事ができます。
→詳しい機能概要とテーブル定義書については、最後に載せています。

**【課題とその背景】**
エンジニアのアウトプットとして何か成果物をと思った際、
正直今の自分に他の人達に負けない様な新奇性のあるアイディアを生み出せる自信は無く、
またその熟考する時間をポートフォリ作成の為に投下する事は不必要だと感じたので、
学習コスト、時間コスト、自身のこれまでのキャリアとの相関性から鑑み、
このシステムを作るに至りました。

# 2. どのような技術を用いて
**【インフラ構成図】**
![BANKBANK_構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/d85d551c-d5d5-49ab-2b6e-1822ee8eb3b1.png)

**◯言語：Java 11**

（選定理由）
普段業務で使用しているJavaのバージョンはほとんどが6、7、8なので、
当初学習コストを鑑みその辺りのバージョンを使おうと考えていました。
しかし当然ですが、
調べていく内に新しいバージョンの方が色々と出来る事が沢山ありそうで興味が湧いたので、
11にしました。

**◯ライブラリ：Jasper Report 6.9.0**

（選定理由）
Javaで帳票の出力機能を盛り込もうと考えた際、
こちらが最もモダンかつ情報ソースが多いと感じたので選定しました。

**◯ライブラリ：OpenCSV 5.4.0**

（選定理由）
JavaでCSV取り込みの機能を盛り込もうと考えた際、
情報ソースの多さと一見した時に使いやすそうだったので選定しました。

**◯テンプレートエンジン：Thymeleaf 3.0.11**

（選定理由）
Java＋Springの開発のベストプラクティスとしては無難な様でしたので、
選定しました。

**◯フレームワーク：Spring 2.3.3**

（選定理由）
Javaのフレームワークの中では、
Springを採用されている会社さんが昨今多く見られるイメージがありましたので、
市場ニーズの高さからこちらにしました。
普段の業務では、
Seaser2と自社のフレームワークを使う事が多かったので、
キャッチアップには若干苦戦しましたが、
使っていく内に理解が深まり大変勉強にもなりました。

**◯ライブラリ：Spring Security**

（選定理由）
制作したシステムが業務システムなので、
セキュリティ面も疎かに出来ないと考え、
こちらを盛り込みました。

**◯言語：Go 1.15.14**

（選定理由）
最も興味のあった言語で絶対にどこかにこちらの要素を盛り込みたいと考えていました。
全体をGoで作る事も考えましたが、
ほぼ0ベースの知識になるので完成まで工数が掛かりすぎると思い、
一旦ベースはJavaで作り、要所でGoを使う事に決めました。

使用箇所としては、
　EC2内のcronでRDSにSQLを発行する際のプログラムとして、
　LambdaでAPIとしてDBをSELECTしてくるSQLを発行する際のプログラムとして、
使用しました。

環境構築、DBハンドリング共にGoで行う事は初めてでしたが、
大変良い勉強になり、何より新しい言語を使うワクワク感と楽しさがありました。

**◯フレームワーク：BootStrap 4.3.1**

（選定理由）
デザインの知識がほとんど無かったので選定しました。
レスポンシブ化が容易に導入出来たので感動しました。

**◯言語：Vue.js**

（選定理由）
フロントエンドのフレームワークとして、
多くの会社さんで使用されているイメージがあったので選定しました。
こちらもGoと同様にどうしても盛り込んでみたかった技術です。
フロントエンドのライブラリはjQueryぐらいしか使用した事が無かったので、
大変勉強になりました。
Vueのライブラリも面白そうなものが沢山あるようなので、
今後個人開発の際には使用していきたいと考えています。

**◯DB：PostgreSQL 12.4**

（選定理由）
こちらも業務ではOracleを普段使っていますが、
興味があったので選定しました。

**◯インフラ：AWS**
・VPC
・EC2
・RDS
・ALB
・Lambda
・Route53
・ACM

（選定理由）
インフラの構成は現場で実際に採用されているを形態を意識し構成しました。

**◯バージョン管理：GitHub**

**◯CI/CD：CircleCi CI/CD**

（選定理由）
業務ではJenkinsを使用していますが、こちらの方がモダンな印象を受けましたの選定しました。

# 3. どのような工夫をして
**【該当技術使用や行動の背景】**
開発工数が掛かりすぎない様にベースとなる言語は、
前知識があるJavaにしました。

機能要件は実際に利用するユーザーのニーズを想定して選定しました。

このシステムのみで完結するだけでなく、
APIを利用し外部のシステムと連携出来る様にしました。

人材管理を主としたシステムではありますが、
人事部の職員の利用のみに特定せず、
網羅的に他の部署の職員も利用できる様に機能付けを行いました。

# 4. どのような成果に繋がったのか
開発が進むに連れて、
導入したい機能や改善点がどんどんと増えていくので着地点を見つけるのに苦労しました。

日々の業務の中でクライアントの要望が二転三転して仕様変更が乱発する事が散見されますが、
今回このシステムを作っていく中で正にその現象が起きており、
クライアントのような自分が開発者の自分の首を絞める状態が慢性的に続きました。

開発に入る前の要件定義の大切さと工数決定の重要性、
また、予期出来る全てを周到に準備しても、
結果的にはその全てが何の意味もなさなくなる可能性があるという現実の悲しさを改めて認識しました。

しかし、やはりシステムが形になって現れてくる感動はひとしおで、
調べながら作業を行っていく中で技術的な問題を解決した時や自身の知見が新たに広がった時は、
何とも言えない喜びとプログラミングの楽しさを改めて感じました。

# 5. 機能概要

![BANKBANK_機能紹介.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/0eae86b7-d9ef-0fff-fc18-6b7eace57b28.jpeg)
![BANKBANK_機能紹介.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/89a510aa-9bdd-164c-aee7-0704f6c81501.jpeg)
![BANKBANK_機能紹介.003.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/6e219dbe-1d85-1886-23b3-1e24b4b242fd.jpeg)
![BANKBANK_機能紹介.004.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/a20cd5c1-880b-e806-895e-09cf0598a2ba.jpeg)
![BANKBANK_機能紹介.005.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/f19c70fe-aefd-dbaa-e837-2e968c7837d2.jpeg)
![BANKBANK_機能紹介.006.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/ba97a1af-c9da-0a72-df0d-3f6b64496aac.jpeg)
![BANKBANK_機能紹介.007.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/bfe09f15-123e-cb42-0e61-a713767ca57c.jpeg)
![BANKBANK_機能紹介.008.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/5081e9dc-f1db-1654-8341-32b030855216.jpeg)
![BANKBANK_機能紹介.009.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/951f6439-f35e-cc65-ce1d-2ea4c1a86676.jpeg)
![BANKBANK_機能紹介.010.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/f631140f-4112-a2e0-e766-e5fe97e652c2.jpeg)
![BANKBANK_機能紹介.011.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/b6a53a87-2fd3-e874-362b-b1b740349b46.jpeg)
![BANKBANK_機能紹介.012.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/2e379b3b-5931-fc28-3d84-3d54439a730b.jpeg)
![BANKBANK_機能紹介.013.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/904faad5-d0fa-f491-3adc-849ca28514b6.jpeg)
![BANKBANK_機能紹介.014.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/9f57334d-c7fd-12f9-1712-469beeea2f72.jpeg)
![BANKBANK_機能紹介.015.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/9bbf3f85-46a1-45a4-b29a-2d8da696f31f.jpeg)
![BANKBANK_機能紹介.016.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/6c46b6f3-909e-f929-f859-1fc2743e8d47.jpeg)
![BANKBANK_機能紹介.017.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/b8bed201-6384-4777-d929-696e999bbe0c.jpeg)
![BANKBANK_機能紹介.018.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/fd2db527-918a-b876-dfb9-f53f64ea0b9c.jpeg)
![BANKBANK_機能紹介.019.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/bd7f2437-da60-9e7d-f825-6859e89f35be.jpeg)
![BANKBANK_機能紹介.020.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/e706203a-516b-f7a2-8db1-ec89ea8d4b79.jpeg)
![BANKBANK_機能紹介.021.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/960b2693-69b1-a8ea-7af4-05f3e72a79b8.jpeg)
![BANKBANK_機能紹介.022.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/55ad39aa-9dea-742d-a42c-c1a8a39807b2.jpeg)
![BANKBANK_機能紹介.023.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/11c8c7b4-5701-588d-6ab1-c38d4ff8c835.jpeg)
![BANKBANK_機能紹介.024.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/ca1fbe3a-093f-9153-204f-0177e2bfb875.jpeg)
![BANKBANK_機能紹介.025.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/723a9338-24e1-9bec-e05e-a8677fa279a9.jpeg)
![BANKBANK_機能紹介.026.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/82fd1732-513c-dc53-2a76-760b808ef4f4.jpeg)
![BANKBANK_機能紹介.027.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/19999888-850f-3c44-cc85-e1bf1637eb33.jpeg)
![BANKBANK_機能紹介.028.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/17e6463a-17fb-ecc9-0585-0b56f4a148c7.jpeg)

# 6. テーブル定義書
![BANKBANK_テーブル定義書_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/718696fe-0dc8-0123-7c89-faf1bfd89357.jpeg)
![BANKBANK_テーブル定義書_page-0002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/9198d719-ef36-abfe-b292-37c163e70c2d.jpeg)
![BANKBANK_テーブル定義書_page-0003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/5052a00d-980c-5651-9378-2d15f71ea50a.jpeg)
![BANKBANK_テーブル定義書_page-0004.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/80fc4a2c-2e0f-1cf2-1448-ba538ca9b5fc.jpeg)
![BANKBANK_テーブル定義書_page-0005.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/20e36964-c749-0085-376d-b5e92ccd3d00.jpeg)
![BANKBANK_テーブル定義書_page-0006.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/daf0a78a-2ab1-4fe3-e89d-bc8bdf56a9e6.jpeg)
![BANKBANK_テーブル定義書_page-0007.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/93969fd8-4102-a628-71b1-2d61798f3d87.jpeg)
![BANKBANK_テーブル定義書_page-0008.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/efa3dd40-e5e7-6609-6924-69cb6caf026f.jpeg)
![BANKBANK_テーブル定義書_page-0009.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/83962c8f-ecdd-48c2-e1f2-d464ff639e6d.jpeg)