バイトのシフトが削られまくったのでシフト管理アプリを作った話

# <font color="rgb(107, 142, 35)">1.はじめに</font>

地方の大学に通う文系大学生です。4月から新4年になります。
今回開発したアプリの概要や苦労した点をつらつらと書いていきたいと思います。

# <font color="rgb(107, 142, 35)">2.アプリの簡単な概要</font>

同時記録型シフト管理アプリ「shifty」です。 カレンダーをチーム全員で共通管理することでシフトの調整が楽になることがメインコンセプトになります。


詳しい概要や動作デモは後ほど書きます。

![スクリーンショット 2023-03-17 4.05.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958845/532952d7-a083-78e5-c914-e80ffa9cbbcf.png)

# <font color="rgb(107, 142, 35)">3.なぜ作ったか</font>

**<font color="red">バイト先のシフトに全く入れなくなったからです！！（泣）**


元々就活の時期で忙しかったのも要因としてはありますが、提出したシフトの1/3しか入れないくらいひどい状態でした。
シフトを削られてたのは自分だけでなくスタッフ全体だったようで、おばちゃんパートさんと一緒にいつも愚痴を言っていました。


そんなこんなで「もう耐えられない！」というわけでそのバイトを辞めることになったのですが、最終日の際に店長から「シフト調整むずすぎる云々」の話を聞いて開発欲が高くなったのを覚えています。


![company_black_baito.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2958845/50633e02-7777-7b99-f2d3-aec6c86d9dc6.png)



紆余曲折ありましたが、この問題を解決するアプリを自分で作っちゃおうとなりました！

振り返ってみると、自分が当事者意識を持って関われるこの課題はすごく最適だったなと思います。



他には、就活で使えるポートフォリオとして作りたいという思いもありました。今後ブラッシュアップしながら就活でも活用していきたいと考えています。

# <font color="rgb(107, 142, 35)">4.開発日誌</font>

少し余談ですが、今年の1月から書き始めた開発日誌を紹介します。

[ひよっこエンジニアによる個人開発日誌 by @udonrm ](https://qiita.com/udonrm/items/ab099aab90d85b00d592)

1/23から記事を書き始めて3/22に筆を置いたので開発期間は2ヶ月となりますね。
途中めちゃくちゃ寄り道したので振り返って読んでみると意外と面白いです。
最初はDjangoを使って開発しようとしてたり、インターンに熱中しすぎて開発を放棄してた時期もありました。。


技術的には1mmも参考になりませんが、個人開発に興味のある初学者の方や未経験エンジニアの方にはぜひ読んでもらいたいです。

# <font color="rgb(107, 142, 35)">5.アプリの詳しい概要

ここから、このアプリが解決する課題や使用技術について書き連ねたいと思います。

### 解決したい課題

**<font color="red">シフトに入れないこと（泣）**

さらに言語化すると、具体的には主に以下の2点になるかなと思います。
- シフト作成者の負担が大きすぎること（調整、リマインドなど）
- スタッフが希望通りにシフトに入れない不公平さ

実体験に基づくものなので、明確な課題を定義できたのはすごく良かったなと思います。


### 課題の発生原因

この課題が起こる原因を分析してみました。


**<font color="red">従来のシフト確定までの流れ**

①シフト作成者が従業員にシフトの提出を求める

②スタッフはシフトを提出する

③その後のシフト作成や調整は全て作成者の責任になる


**<font color="red">この流れによって起こる弊害**
シフト作成者：負担が大きすぎる。各スタッフの希望のバランスを汲むのが大変

スタッフ：シフトが確定するまでシフトの作成状況がよくわからない。
なので、スタッフ補充の連絡を後出しされても対応できない。（実体験に基づく）



ザッとこんな感じかなと思います。

### 課題の解決方法

<font color="red">【**シフトの入力状況をスタッフ全員が見られるようにする**】

- 店舗スタッフ全員でカレンダーを共有する
- 各自入力したシフトの状況がリアルタイムで確認できる

→

- 定員に達した時間帯のシフトは自動で確定される
- 人のいない時間帯を狙ってシフトを出そうという心理が働くので人手不足も解決できそう
- シフトが確定するまでのふわふわした時間がなくなる
- シフト作成者は調整が楽になる


# <font color="rgb(107, 142, 35)">6.動作イメージ

[sifty動作イメージ-ログイン後から基本操作まで](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/564a3ea9-8193-44b5-8244-ec9c824e74e6/sifty%E5%8B%95%E4%BD%9C%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B7%E3%82%991.mp4)

ログイン後からシフトの入力、シフトの確認までの動作イメージです。

直感的なドラッグ＆ドロップ操作でシフトを簡単に追加、編集することができます。

機能も最小限まで絞ったため、誰でも簡単に使えるアプリになっています。



[shifty動作イメージ-チームでの運用場面.mp4](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d5edb005-2e5f-491b-88e7-846d3e873ffd/shifty%E5%8B%95%E4%BD%9C%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B7%E3%82%99-%E3%83%81%E3%83%BC%E3%83%A0%E3%81%A6%E3%82%99%E3%81%AE%E9%81%8B%E7%94%A8%E5%A0%B4%E9%9D%A2.mp4)

実際にチームの複数人でアプリを運用する場面を想定した動画です。

左画面がユーザー1で右画面がユーザー2の操作画面です。

全員のシフトの入力状況が即座にリアルタイムで更新され全員が確認できるようにこだわりました。

自分のシフトはオレンジ色で目立たせ、他の人のシフトと区別しやすいように設定しています。当然ですが、他のスタッフのシフトは勝手に編集できないように設計しました。

このようにシフト提出を管理することで、人の足りていない時間帯や人の多すぎる時間帯が全員に共有される（管理者が知らせる必要がない）ため効率的なシフトが組まれることが期待できます。

# <font color="rgb(107, 142, 35)">7.使用技術

フロント：HTML/CSS , JavaScript

サーバーサイド：PHP/Laravel

認証、ログイン関連：Laravel Jetstream

データベース：MySQL

カレンダー：FullCalendar

開発環境:MAMP

エディタ：Visual Studio Code

本番環境：エックスサーバーでデプロイ

# <font color="rgb(107, 142, 35)">8.個人開発を経験してみて思ったこと

個人開発をする前は「**アプリ１個作れたらもう一人前だ！無敵！！！！**」くらいに思っていましたが、
全然そんなことはありませんでした。

むしろ自分の技術力の低さを自覚して相当凹むことになると思う。（少なくとも初学者の方は）

ただ、自分の立ち位置やレベル、ひいては今後どういうキャリアを歩みたいのか（バックエンドかフロントか、もうコード書きたくない！、とか）を嫌でも知らされることになるのでいい経験になりました。

なので、個人開発はハードルが高い！と思っている初学者の方はいますぐでも個人開発を始めた方がいいと思ってます。
フレームワークやライブラリに依存したアプリとかなら、基礎を固めれば無理なく作れると思うのでUdemyとか参考にしながら作りましょう。

# <font color="rgb(107, 142, 35)">9.参考資料

UdemyのLaravelの講義から公式ドキュメント、ネットでの技術ブログが中心です。

備忘録と感謝の意味も兼ねて以下にまとめます。


……長い間!!! くそお世話になりました!!! この御恩は一生…!!! 忘れません!!!!


- [**ちゃんと学ぶ、PHP+MySQL(MariaDB)入門講座**](https://www.udemy.com/share/101ZsI3@2qgvnmAU7w4iJj1a8yLGaENPx7c_9f7D7AxNAz8vEjxlmOpCXZyPrt8W7FSd2lCqgg==/)
- ****[PHPからLaravelまで サーバーサイドをとことんやってみよう【初心者から脱初心者へ】【わかりやすさ最重視】](https://www.udemy.com/course/phpbeginnertolaravel/learn/lecture/19218332#overview)****
-  [Laravelでaccess deniedが表示された時の対処法](https://coinbaby8.com/access_denied.html)
- [npm update](https://zenn.dev/wowsawa/scraps/d824736d334acc)
- [日本語ドキュメント](https://readouble.com/laravel/9.x/ja/validation-php.html)
- [tailblocks](https://tailblocks.cc/)
- [Tailwind](https://reffect.co.jp/html/tailwindcss-for-beginners)
- ****[【初心者必見】Laravelを1から入門してTodoアプリを作ってみよう](https://b-risk.jp/blog/2022/08/laravel/)****
- ****[【Laravel入門】MacにLaravelをインストール – プロジェクトの作成](https://code-graffiti.com/install-laravel-on-mac/)****
- [MVCパターンについて](https://laraweb.net/surrounding/922/)
- **[Laravelの構造と処理の流れを【MVCモデル】で初心者向けに解説【model,view,controller】](https://hikopro.com/laravel-mvc/)**
- ****[はじめてのLaravelアプリケーションガイド](https://qiita.com/Fendo181/items/dece727ea402552fee19)****
- ****[【Laravel】"{{ }}"二重括弧は何に使うの？](https://tektektech.com/laravel-double-braces/)****
- ****[Laravel – フォーム入力・データ登録](http://taustation.com/laravel-form-input-and-data-storing/#create_store)****
- ****[圧倒的に開発をラクにできる Laravel を使ったアプリケーション開発入門｜研修コースに参加してみた](https://www.seplus.jp/dokushuzemi/blog/2022/12/tutorial_laravel.html)****
- **[Laravel9でLaravel UIパッケージを利用して認証設定](https://reffect.co.jp/laravel/laravel9-laravel-ui)**
- [laravel Breeze](https://readouble.com/laravel/9.x/ja/starter-kits.html#laravel-breeze)
- [ミドルウェア](https://readouble.com/laravel/9.x/ja/middleware.html)
- ****[【Laravel】Eloquent(エロクアント)の使い方やモデルとの紐付け方法](https://tech.amefure.com/php-laravel-eloquent)****
- [Jetstream](https://readouble.com/jetstream/1.0/ja/teams.html)
- ****[Laravel Jetstreamチーム版でユーザーの役割と権限を簡単に設定する](https://biz.addisteria.com/jetstream_teams/)****
- **[Laravel8でLivewireの使い方を学ぶ](https://reffect.co.jp/laravel/laravel-livewire)**
- ****[LaravelでTailwindCSSを使う方法](https://codelikes.com/laravel-use-tailwindcss/#toc3)****
- [Vite](https://readouble.com/laravel/9.x/ja/vite.html)
- ****[LaravelでレスポンスをJSON形式で返す](https://laraweb.net/surrounding/4476/)****
- ****[【FullCalendar】導入とスケジュールの登録【実装】](https://chigusa-web.com/blog/fullcalendar/)****
- ****[【Laravel】FullCalendarでカレンダーを導入しよう！](https://juno-engineer.com/article/laravel-fullcalendar/)****
- ****[【Laravel × livewire × FullCalendar】動的なスケジュールアプリを作ろう。Part1【予定表示〜作成編】](https://zenn.dev/sgrs38/articles/868826479a5fb1#この記事の対象)****
- ****[Laravel 9 Fullcalendar Ajax Tutorial Example](https://www.itsolutionstuff.com/post/laravel-9-fullcalendar-ajax-tutorial-exampleexample.html)****
- ****[Laravel9にJetstream Livewire版をインストールする方法と注意点・初期設定を解説](https://biz.addisteria.com/jetstream_livewire_install/)****
- [FullCalendar Docs](https://fullcalendar.io/docs)
- ****[【エックスサーバー】Laravelで作成したWebアプリを公開](https://chigusa-web.com/blog/xserver-laravel/)****
- [Mailtrap](https://chigusa-web.com/blog/laravel-mailtrap/)
- ****[【Git】Laravel×Vue.jsアプリをXserverにデプロイする方法！500エラー解決](https://tech.amefure.com/web-git-laravel-vue-xserver)****
- ****[LaravelプロジェクトをGitHubにpushする方法と注意点](https://tech.amefure.com/web-github-laravel-push)****
- ****[XServerにSSH接続してLaravelプロジェクト(ないしデプロイ)を作成する手順](https://maasaablog.com/development/backend/php/laravel/2142/)****
- ****[【Mac】秘密鍵でSSH接続しリモート操作](https://chigusa-web.com/blog/mac-ssh/)****
- ****[【エックスサーバー】LaravelをGitHubからデプロイして公開](https://chigusa-web.com/blog/xserver-laravel-github/)****
- ****[XSERVERにlaravelのwebアプリをgitからデプロイ](https://qiita.com/ren7087/items/654f2be6b34ba428405f)****
- ****[【Laravel】開発用のメールサーバーを使おう【MailHog】](https://chigusa-web.com/blog/laravel-mailhog/)****
- [本番環境のメール設定](https://www.naka-style-blog.com/laravel本番環境の構築/)


# <font color="rgb(107, 142, 35)">10.最後に

質問やアドバイス等あればめちゃくちゃ喜びます！ぜひリアクションお願いします！！！