こんにちは。私たちチーム3は「旅館の人手不足を解消する」ことを目標としてReactとDjangoで動作するタスク管理webアプリを作成し、4位入賞することができました。今回はその開発の流れをお伝えします。
メンバー
Tonky(backend)
ymdkk(backend)
chosa(backend)
masaya(data)
Riko(design)
higashiji(frontend)
事前準備期間
アイデア出し
3班の使命は“旅館の人手不足を解消すること“です。最初期の議論ではNotionに班員が思い思いに人手不足の原因を投げました。
投げられた人手不足の原因をまとめると以下の3つになります。
・旅館業は激務で不人気
・給料が悲しみの金額
・正社員のキャリアプランが不透明
旅館業は頻繁期には掃除など非常に重労働が深夜まで続くにもかかわらず,給料が割に合わないなどの原因で,離職率が低く,人手不足に拍車をかけていると考えられます。
アプローチ
次にこの問題へのアプローチの検討に入りましたが,これには以下の二つの方針があると考えました。
・魅力的な求人広告を打つなどして,“労働人口を増やす“.
・“業務の効率化“を行い一人当たりの負担を減らす
今回のハッカソンでは3日という限られた時間の上,Techで問題をhackするというシノノメのハッカソンのコンセプトから,労働人口を増やすアプローチは技術というよりコンサル的になってしまい不適切という理由からボツにしました。
そのため私たちは業務効率化を問題へのアプローチとしました。
コンセプト
私たちが業務効率化のために作成したのはタスク管理アプリです。このアプリは以下のことを実現することを期しています。
・旅館全体のタスクの共有,進行状況報告のオンライン化
・客室の状況のオンラインでの管理
以上の機能で,これまで口頭で行っていた業務連絡を,アプリ上で行うことで伝達ミスの削減,迅速化,タスクの確認の効率化が期待できます。
事前開発
事前開発では,dockerなどを利用した各自のローカル環境で,プログラムを作成しました。AWSを実装してサーバーでプログラムを動かすのはハッカソンの現場で行うこととしました。事前開発では,APIなどは利用しなかったこともあり,バックエンド,フロントエンド,デザインそれぞれおおむね問題なく開発を行うことが出来ました。
成果物について
成果物
温泉旅館での利用を想定した、タスク管理アプリです。
PC・モバイル端末のブラウザで動きます。
実装できた機能は、
- サインイン・サインアップ
- 旅館全体のタスク管理
- 部屋の状態一覧
- 作業ログ
です。
サインアップ・サインイン
なんの変哲もないサインアップ画面です。
ここで入力してもらったユーザー名が、タスク一覧などで担当者名として表示されます。
タスク管理
タスク一覧はカードで表示されます。
一覧画面では、タスク名、担当者名、進行状況、コメントを確認することができます。ボタンを押すとモーダルウインドウが開き、そこでタスクの追加・編集・削除を行うことができます。担当者は登録されたユーザーの一覧から一人選びます。
タスクの管理は誰でも行うことができるので、手が空いた人が順に拾っていくというような形を想定しています。
進行状況を色分け・チップで表示することで視認性を確保しています。
部屋状態
部屋一覧画面では
- 部屋番号
- 担当者
- 状態
が確認できます。
部屋ごとのコメントに関しては詳細のモーダルウインドウで確認できます。
「清掃中」、「使用可能」などの状態が確認できるため、実際に部屋に足を運ばずとも状態が把握できます。また、担当者を表示することで責任の所在をはっきりさせることができるのもメリットの一つです。
作業ログ
タスクや部屋の追加、状態変更を行うと自動的に日時と変更内容が記録され、作業ログ一覧に表示されます。
過去の取り組みを可視化しすることで業務を効率化できるほか、責任者の明確化、問題個所の特定に役立ちます。
使用技術
フロントエンド
- react
- TypeScript
- MUI
- axios
- react-hook-form
Reactを使ってSPAを作成しました。MUI(Material UI)を利用してUIを構築しました。APIとの通信にaxiosを使っています。入力項目のstate管理にはreact-hook-formを使いました。一応Typescriptで開発を進めましたが、かなり行き当たりばったりになってしまいTypeScriptで書く意味がほぼありませんでした。
バックエンド
使用技術
- DRF
- Docker
- AWS
開発中はDockerでサーバー構築し、実装ではAWSでサーバーを構築しました。従業員やタスクの情報をUserモデルやTaskモデルとして定義し、それらの情報をAPIとして提供しました。その際にDRFを用いました。また、ページごとの認証には、DRFのトークンを用いました。