推しアイデア
部内情報を返してあげるように
部内情報を返してあげるように
気軽に・何度でも・遠慮なくじょぎについて質問できる環境を提供し、新入生の不安を解消&部員の対応負担を軽減
開発環境整備
チャットUI: http://localhost:3000/ https://jyogi-navi-web.jyogi.workers.dev/
admin: http://localhost:3001/ https://jyogi-navi-admin.jyogi.workers.dev/
fastapi: http://localhost:8080/ デプロイしたら更新する
| 項目 | 内容 |
|---|---|
| 対象ユーザー | サークルに入部する前の新入部員 |
| 提供価値 | 気軽に・何度でも・遠慮なくじょぎについて質問できる環境を提供し、新入生の不安を解消&部員の対応負担を軽減 |
| コア体験 | チャットbotへの質問、じょぎの情報を得る |
| 成功指標 | ①新入生対応数1.5倍増加 ②対応時間30%削減 ③入部率10%向上 |
データ取得処理を作成してTiDBに登録 or Difyの機能で接続
本来はOSS版を使用してセルフホストしたかった -> 詰まりまくったので急遽DifyCloudへ移行して作業が止まらないように
じょぎらしい情報(わいわい内輪) -> Discord
ちゃんとしたFAQ ->Notion
root/ ├── .github/ │ └── workflows/ # GitHub Actions ├── apps/ │ ├── web/ # 新入生向けチャットUI(P0) │ ├── api/ # 軽量API(ログ保存/PII/評価)(P0) │ └── admin/ # 管理画面(P1) ├── scripts/ │ ├── ingest/ # 手動エクスポート整形(P0) │ └── ops/ # KPI集計/バックアップ(P0) ├── infra/ │ ├── cloudflare/ # Terraform: Cloudflare 周辺リソース(GitHub Secrets 等) │ ├── dify/ # Dify起動設定(docker-compose) │ ├── docker/ # API用Dockerfile │ └── env/ # 環境変数テンプレート ├── docs/ └── README.md
fastAPIがopenapi.jsonを吐き出せたりSwaggerUIを見れて便利!
吐き出したopenapi.jsonを利用してクライアントサイドの型やfetchの関数を自動生成して実装コストを下げ、ずれがない安全な開発ができる
Githubのチケットを取り合って1チケット1PRで作業
mainにプッシュされると確認してない怪しいコードが本番に入ってしまいます そのためGithubのブランチルールを使用して仕組みで守りました
以下のルールをつけました
{ "id": 14219230, "name": "protect main", "target": "branch", "source_type": "Repository", "source": "jyogi-web/Jyogi_Navi", "enforcement": "active", "conditions": { "ref_name": { "exclude": [], "include": [ "~DEFAULT_BRANCH" ] } }, "rules": [ { "type": "deletion" }, { "type": "non_fast_forward" }, { "type": "pull_request", "parameters": { "required_approving_review_count": 1, "dismiss_stale_reviews_on_push": false, "required_reviewers": [], "require_code_owner_review": false, "require_last_push_approval": false, "required_review_thread_resolution": false, "allowed_merge_methods": [ "merge", "squash", "rebase" ] } } ], "bypass_actors": [] }
時間がないなかでしたがお互いにレビューをしてましたが疲弊してきたので1次レビューはcoderabbitにレビューをしてもらえるようにしました
PRを作成すると自動でレビューが走るように...
レビューの際にドキュメントとの乖離がある場合指摘するようにしてドキュメントの鮮度を保ちました。
テンプレートを使って人によって伝える要素が足りないということがないようにしました テンプレートに沿って埋めていけばある程度伝わるようになることが良いですね https://github.com/jyogi-web/Jyogi_Navi/tree/main/.github
今回のリポジトリはモノレポ構成で広い範囲の知識が詰まっています 今後参加する開発者は誰が詳しいのか?誰にチェックして貰えばいいのかがわからず困りますね レビュー依頼に時間を使ってしまいます
また、適当な人に依頼をして「よくわかんないけどヨシッ」をしてしまいmainがぶっ壊れることもあります()
ルールでレビュアーを設定しよう! GithubのCodeOwnersという責任者を設定してレビュアーに自動で入れてくれる仕組みを使用しました
https://qiita.com/FumiyaShibusawa/items/c7a3ff4d0793ca2d281f
https://skills.sh/ を使用して整備したよー 便利なのと使用するAIAgentを選択して導入ができて楽だった 変なやつを入れないようには気をつけよう(公式のやつを入れた)
CIを構築すると作業したことによる既存の実装が壊れる問題が消えていく(Testをちゃんと書いている場合に限る)
なるべくテスト書いた
================================ tests coverage ================================ _______________ coverage: platform linux, python 3.13.12-final-0 _______________ Name Stmts Miss Cover Missing ---------------------------------------------------------- config.py 22 0 100% db/models.py 38 0 100% db/session.py 23 23 0% 1-56 exceptions.py 18 2 89% 32, 41 main.py 38 1 97% 6 middleware/request_id.py 11 0 100% routers/admin.py 9 1 89% 16 routers/chat.py 38 6 84% 44-54 routers/consent.py 2 0 100% routers/faq.py 14 0 100% routers/feedback.py 13 0 100% routers/health.py 18 0 100% routers/usage_logs.py 11 0 100% schemas/admin.py 9 0 100% schemas/chat.py 7 0 100% schemas/faq.py 5 0 100% schemas/feedback.py 14 0 100% schemas/session.py 15 0 100% scripts/export_openapi.py 10 10 0% 6-21 services/dify_client.py 51 8 84% 27, 59-60, 66, 69, 72, 76-77 services/faq_search.py 12 0 100% services/feedback_store.py 12 0 100% services/log_store.py 43 0 100% services/pii_mask.py 11 0 100% services/rate_limit.py 12 3 75% 18-20 services/stats.py 12 7 42% 13-39 ---------------------------------------------------------- TOTAL 468 61 87% Coverage XML written to file coverage.xml ============================== 63 passed in 2.76s ==============================
shell入るだけで環境揃ってうれしい!
今回は実稼働をなるべく管理したくてdisco-kintaiを使用しました 誰がいつ作業しているかをデータ化・視覚化できるので連絡しやすかった
