1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

チーム作業トラッカー『Torail』を Django × React で作った話 (v2.0)

Last updated at Posted at 2025-07-10

👋 はじめに

昨年・今年と続く学生チーム制作で感じた課題は 「タスクを抱え込みがち」 という点でした。

  • 作業の見える化がない → どこで詰まっているのか分からず、助けを求めづらい 🤷‍♂️
  • 他メンバーの進捗が見えない刺激 がなく、開発が停滞しがち 😪

そこで開発したのが Torail (トレイル) v2.0 です。React (Vite) フロントと Django REST バックエンド、そして Redis + Celery によるメール通知で、作業タイマー完了時に “今やった作業+メモ” を保存 & チーム全員へ共有 します。

GitHub レポジトリ ➡️ https://github.com/Rakuninaritai/Torail
本番デモ ➡️ https://torail.app

🎯 ターゲット: チーム/ペア開発を行う学生・新人エンジニア


🛠️ 開発環境

ツール バージョン
Python 3.12
Django 5.1
React 19 + Vite
Redis 7
Celery 5
Railway Hobby プラン
PostgreSQL 14

v2.0 での主なアップデート

  • 作業タイマー完了時の 自動メール通知 を Celery + Redis で実装
  • Docker Compose を刷新し、frontendbackend をワンコマンド起動

🏗️ アーキテクチャ (v2.0)

ポイント

  • API: Django REST Framework + JWT でトークン認証
  • 非同期処理: Celery + Redis Streams でタイマー完了メールを送信 (Slack 通知や LINE Notify も拡張可能)

🌟 3 つのキーページ

画面 スクリーンショット 見どころ
タイマー スクリーンショット 2025-07-11 043414.png 課題、教科選んでクリックでタイマー開始。終了後にメモ入力→「保存」を押すだけで作業が共有されます
メール スクリーンショット 2025-07-11 043602.png メンバーの作業をすぐに確認することが出来ます。 サイトにも飛べます。
チーム統計 スクリーンショット 2025-07-11 043746.png テーマ・言語別にフィルタできるグラフ。

全ページ Bootstrap で最小限の色味&余白設計。モバイルでも見やすいレスポンシブ対応です。


🚀 デプロイ & CI/CD

本番環境は Railway に自動デプロイしています。main ブランチへの Push をトリガに、GitHub Actions が API / Frontend / Worker の 3 サービスを順次更新します。

🔮 今後の展望

  • ソーシャルログイン、Discord,Slack通知
  • ポモドーロタイマー
  • AI導入

📝 まとめ

  • 作業タイマー + メモ共有 により、チーム内で助けを求めやすくなった
  • Celery × Redis で 非同期メール通知 を実現し UX 向上
  • Docker Compose + Railway で 学生でも簡単に CI/CD

最後までお読みいただきありがとうございます! 🎉
質問・フィードバックはコメントでお待ちしています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?