-
Taskコマンドのインストール
-
pre-commitのインストール
-
環境構築
task setup
taiki-kuraishi / nfc-entry-management Goto Github PK
View Code? Open in Web Editor NEW開志専門職大学 Kaishi Lab 入館管理システム
License: MIT License
開志専門職大学 Kaishi Lab 入館管理システム
License: MIT License
Taskコマンドのインストール
pre-commitのインストール
環境構築
task setup
本プロジェクトは、Kaishi Labの入退室を管理するシステムを開発します。システムは、学生証のNFCリーダーを用いて学生の入退室を自動で記録し、管理します。
フロントエンド部分は、Felica-RC-S380というNFCリーダーとPythonを用いて学生証の情報を読み取ります。バックエンド部分は、Go言語で作られたAPIサーバーとMySQLデータベースから構成され、学生の入退室情報を管理します。
学生がKaishi Labに入室する際には、学生証をNFCリーダーにかざすことで、その情報がAPIサーバーに送信され、データベースに保存されます。同様に、学生が退室する際にも学生証をかざすことで、その情報がAPIサーバーに送信され、データベースの該当するレコードが更新されます。
flowchart
%%フロント側
subgraph DO1[Docker]
subgraph GOU[front]
OU1[Felica-RC-S380]
Python[python]
end
%%バックエンド
subgraph BC1[BackEnd]
subgraph AP1[api-server]
Go[Go]
end
subgraph DB1[DB]
MySQL[MySQL]
end
end
end
erDiagram
User ||--|{ Entry : "1:N"
User {
uint StudentNumber PK "学籍番号"
string Name "氏名(カタカナ)"
datetime CreatedAt
datetime UpdatedAt
}
Entry {
uint ID PK
datetime EntryTime
datetime ExitTime
uint StudentNumber FK
}
graph LR
student_card[student_card]
nfc_reader[Felica-RC-S380]
api-server[api-server]
mysql[(mysql)]
student_card -- scan --> nfc_reader -- StudentNumber,Name,DateTime --> api-server -- StudentNumber,EntryTime --> mysql
graph LR
student_card[student_card]
nfc_reader[Felica-RC-S380]
api-server[api-server]
mysql[(mysql)]
student_card -- scan --> nfc_reader -- StudentNumber,Name,DateTime--> api-server -- StudentNumber,ExitTime
--> mysql
flowchart TD
subgraph Infrastructure
router
router -.-> controller
router ==> I-controller
subgraph Interface Adapter
repository
repository ==> DB
repository -.-> DB
usecase -.-> repository --> I-repository
controller
controller ==> I-usecase
controller -.-> usecase
controller --> I-controller
subgraph Usecase
usecase ==> models
usecase ==> I-validator
usecase -.-> validator --> I-validator
usecase ==> I-repository
usecase --> I-usecase
subgraph Entities
models
end
end
end
end
イベントID | イベント名 | 概要 | 詳細 |
---|---|---|---|
EVENT-nfc-reader-01 | Card_Scan_Correct | Felica-RC-S380で学生証に埋め込まれた情報を取得する | 1.Felica-RC-S380が待機状態のときに、学生証をかざす 2.学生証がFelica-RC-S380に触れたとき、main.pyに書かれたon_connect関数が動き、学生証の情報を読取る 3.学生証が正しく読み取られたら、API-ServerのEVENT-01が走る |
EVENT-nfc-reader-02 | Card_Scan_Error | Felica-RC-S380で学生証以外のカードを検知したときにエラーを吐く | 1.Felica-RC-S380が待機状態のときに、学生証をかざす 2.学生証がFelica-RC-S380に触れたとき、main.pyに書かれたon_connect関数が動き、カードの情報を読取る 3.エラーを出力し、カードが離れたら待機状態に戻る |
イベントID | Architecture 対応箇所 | イベント名 | 概要 | 詳細 |
---|---|---|---|---|
EVENT-api-server-01 | router | Router | nfc_readerからのAPIを受け取るAPIエンドポイント | http://localhost:8080/ POSTメソッドを受け取りEnrtyControllerを呼び出す。API Keyが正しくない場合、HTTP statu code 403を返す。処理が正常に動作した場合、HTTP statu code 200を返す。API詳細ドキュメント @nfc_reader → api_server |
EVENT-api-server-02 | controller | EnrtyController | 条件分岐に対応したusecaseを呼び出すコントローラー | 条件分岐に対応したusecaseを呼び出すコントローラー |
EVENT-api-server-03 | usecase | RegistrarUser | 新規ユーザ作成処理 | UserValidatorとCreateUserを呼び出す |
EVENT-api-server-04 | UpdateUser | ユーザ情報更新処理 | UpdateUserByStudentNumberを呼び出す | |
EVENT-api-server-05 | Entry | 入室処理 | CreateEntryを呼び出す | |
EVENT-api-server-06 | Exit | 退出処理 | UpdateExitTimeを呼び出す | |
EVENT-api-server-07 | validator | UserValidator | ユーザ情報のバリデーション | student_numberが8桁の数字であること、nameがUTF-8でエンコードされた2文字以上32文字以下であること、timestampがiso8601形式でmsまで表された文字列であること |
EVENT-api-server-08 | EntryValidator | Entry情報のバリデーション | student_numberが8桁の数字であること、timestampがiso8601形式でmsまで表された文字列であること | |
EVENT-api-server-09 | repository | CreateUser | User Tableにレコードの追加 | |
EVENT-api-server-10 | UpdateUserByStudentNumber | StudentNumberが一致するUser Tableの最初のレコードをUpdateする | Update可能なカラムは、name,UpdateAtのみ | |
EVENT-api-server-11 | GetUserByStudentNumber | StudentNumberが一致するUser Tableの最初のレコードを取り出す | ||
EVENT-api-server-12 | CreateEntry | Entry Tableにレコードの追加 | ExitTimeはnullでレコード作成 | |
EVENT-api-server-13 | UpdateExitTime | IDが一致するUser Tableの最初のレコードをUpdateする | update可能なカラムは、UpdateAt,nameのみ | |
EVENT-api-server-14 | GetActiveEntryByStudentNumber | Entry TabaleのStudentNumberが指定した値で尚且つExitTimeがnullのレコードを取り出す |
2/28日に行われる予定のデモンストレーションにて、動作がわかりやすいように
ログの追加を行う
mainブランチへのマージは行われない
Dockerを使用した、開発環境とプログラム実行環境の構築
pre-commitを設定し、リンターとフォーマットを自動化
vscode拡張機能の設定
dockerを使用することで環境の一貫性と移植性を高めるとともに、開発速度の向上を目的とする
pre-commitを使用し、コードの品質の向上、チェックとリンターとフォーマッターの自動化による開発速度の向上を目的とする
vscode拡張機能を設定したファイルextensions.json
を作成し、全ての開発者が同じツールを使用して作業することによる開発の効率化目的とする
sequenceDiagram
participant pi as nfc-reader
participant api as api-server
participant db as DB
Note over pi : "学生証をタッチ"
pi ->>+ api : http post
api ->> db : データを格納
api -->>- pi : http response
erDiagram
User ||--|{ Entry : "1:N"
User {
uint StudentNumber PK "学籍番号"
string Name "氏名(カタカナ)"
datetime CreatedAt
datetime UpdatedAt
}
Entry {
uint ID PK
datetime EntryTime
datetime ExitTime
uint StudentNumber FK
}
Security policyの策定
システムで使用する個人に関するデータに対して、非人道的な扱いをしないことを利用者に明示することができる
利用者に明示し、利用者が同意した場合、システム担当者は同意した個人に関するデータの扱いをすることができる
ただしそのデータの使用範囲は、策定したセキュリティポリシーの範囲を越えてはならず、越えた場合、個人情報保護法違反となる可能性があり、懲役1年または100万円以下の罰金が科される
また、セキュリティポリシーをシステム担当者全員に周知する意味でも、セキュリティポリシーは必要である
自己判断が難しい。先生に見てもらうが良しな気がする
READMEファイルの整備
Taskfileを使用した一連のコマンドを一元化と再利用可能化
README.md
の作成Taskfile.yml
の作成pre-commitを使用して行っている、リンター、フォーマッターをGitHub Actionsでも実行する
コミットが行われる前に、pre-commitのチェックが回避された場合でも、pre-commitがインストールされていない環境からのコミットが行われる際も、すべてのコードがリンターやフォーマッター、テストなどのチェックを正常にパスすることを目的とする
Code_quality_and_docker_build.yml
の作成.pre-commit-config.yml](https://github.com/taiki-kuraishi/nfc-entry-management/blob/d860d32464be75bc48d620c8a53616fc8fcc019a/.pre-commit-config.yaml)と同等のチェックをGitHub Actionsにて実行できることが確認されていない
コード静的解析ツール CodeQL を導入し、
GitHub Actionsとpre-commitでの実行
セキュリティ脆弱性を検出し、その原因となるコードパターンを特定
CodeQLをpre-commitフックとして実行することは可能ですが、CodeQLの解析は通常時間がかかるため
開発効率を低下させる可能性がある
feature_and_enhancement.mdが.github/ISSUE_TEMPLATE に定義されているにもかかわらず、GitHubにてfeature and enhancement templateが表示されない
https://github.com/taiki-kuraishi/nfc-entry-management/issues/new/choose
にアクセスしてもfeature and enhancement templateが表示されない
feature and enhancement template(feature_and_enhancement.md)が.github/ISSUE_TEMPLATE に定義されており、使用できる
現状bug report teamplateしか表示されない
Issue テンプレートは、.github/ISSUE_TEMPLATE に定義されています
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.