人材管理系のシステム作る
# 概要
とある使用目的で既存のツールやサービスでしっくりするものが無いので自分で作ることにした。
あと、前期お金余って法人税それなりに取られてもったいなかったので、知り合いのエンジニア達にお金払って手伝ってもらってお金を有意義に使う為でもある。納めた税金がちゃんと使われてれば払うんだがね。。。
メモもかねて構想、考案中内容を書いていく。
# 作成物
いわゆる BI ツールに部類するデータ保存/管理及び自由分析をするツール
- 個人、組織内に所属する人の職務経歴情報を管理しそれを基にスキル情報などを可視化する
- 登録した情報は静的ファイルでパブリックに公開できる
- 職務履歴の各設定項目や分析/可視化できる項目は自由に設定可能
# 作成した後
- 自分が使う
- フリーソフトとして配布する(zabbix や redmine などのようなイメージで)
- (思ってたよりいい感じのものができて、時間に余裕があれば)クラウドサービス化する
# 技術内容など
# 前置き
実は以前ちょろっと作成したプロトタイプがあるが、いろいろバージョンとか古いし使用技術も変えるのでほぼ新規で丸っと作る
# 開発環境
ローカル OS は windows11 上の WSL2+ubuntu、エディタは VSCode
- java 開発でいつも使ってる Eclipse はやめて VSCode を使用する。フロントエンドを VSCode で開発して統一させたいのと、WSL2 の ubuntu 上と docker コンテナ内での開発を行いたいので。
- ローカルの OS は WSL2 使って ubuntu 上で開発したいので windows11。ローカルマシンの環境一切汚さずかつ速度もローカルとほぼ変わらずメモリ消費量もそこまでない WSL2 と ubuntu の組み合わせが今時点で最強かと
# フロントエンド
(プロト)react→(今回)react/typescript
- フロント側でも複雑なデータ構造をガシャガシャいじる必要あるので Altjs で型付けする。Altjs は typescript 以外あんま知らない。
- vue や angular は多少やったことあるけどやっぱ react がいろいろライブラリ使いやすいのあるし MaterialUI 使いたいので react にする。
- 状態管理はサーバとの req/res データや form データ、コンポーネント跨ぎで使用するデータは redux、その他画面内で完結する簡易的なものは hooks を使う
- css 関連は、JS で書くような動的処理を内包してくれていて、当たり障りのない見た目の MaterialUI 使う、一部それで実装できないものは CSS-in-JS で実装。CSS-in-JS は慣れている styled-components 使う。
- 分析系の UI には MaterialUI の見た目に合いそうなのと機能豊富なので GoogleCharts 使う。実装コストかかりそうなら使い慣れている Chart.js を使うかも。
# バックエンド
(プロト)php/laravel→(今回)java/spring
- 複雑なデータモデルになり、コード上でもデータの操作を激しく行うことが想定されるので静的型付け言語必須。
- C++はコード量増えると思うし、性能性そこまで求めるほど大規模にはならないので除外。
- C♯ は実行環境回りや DB 操作関連あまり慣れてない。(Entity Framework 周りの見えない何かにハマったことが何度もある)
- 消去法かつ一番慣れ親しんでいる言語の為、java にする。あとの静的型付け言語はやったことないしあんまよく知らない。
- フレームワークは java で web なので spring。Struts より spring のほうが簡単だし機能豊富。他やったことない。
- spring boot 使う。よく知らんけどが多分 spring やってたら問題なくできるだろうきっと。
# DB
(プロト)mysql→(今回)postgres
- 無償かつクラウド使用想定で mysql か postgres だが、postgres にする。
- 大量データ集計やるだろうし、アカウント切り替えやワークスペース的な機能で動的にスキーマ切り替えや RLS も使うかもしれないし。
- あとやっぱ postgres はコマンドラインの各コマンド便利
# インフラ
とりあえず docker で開発してあとは必要になった時に考える
# 体制
# 自分
- 仕様決め
- プログラム設計/開発/テスト
- インフラや開発環境回りの設計/設定
- もろもろ管理
# ヘルプメンバー
- 機能の横展開やリファクタ
- 単発機能の設計と実装
- テスト関連
# ヘルプメンバーに必要なスキル
- 作業内容が書かれたチケットを理解し自走できる人
- 静的型付け言語で保守性/性能性が高いプログラム開発(バックエンドメイン)ができる人
# 2022/11/20 追記
できた。