お問い合わせ
ページのイメージ
WEB開発 2019/08/01

シャッフルランチのグループ分け機能をLaravelで作ってみた

  •  

エンジニアの山下です。最近は案件のなかでPHPフレームワークとして注目されているLaravelを使う機会が出てきました。勉強も兼ねて、1つシステムを作ってみたので今回はそちらの紹介とLaravelについての所感をお伝えできればと思います。

 

何を作ったのか?

しずおかオンラインでは、週に1回、エンジニアやデザイナーのメンバーでランチに行きます。ランチに参加するメンバーの数が3人や4人ならば良いのですが、6人、7人がランチに参加する際に全員でランチに行くと席の都合上、全員入ることができない時があります。そうした状況を防ぐため、人数が多い時は均等にグループ分けをするシステムを作りました。

シャッフルランチの大きな機能としては、以下のような機能があります。

① Slackにて毎週金曜日にランチのお知らせをする機能

② ランチの参加登録機能

③ 均等に参加者をグループ分けする機能

④ Slackで結果通知をする機能

システムの概要は上記の図の通りです。このようなシステムを実際に作りました。

どのように作ったのか?

今回のシャッフルランチはエンジニアの先輩にデザインとマークアップをお願いして2人体制で作っていきました。

今回意識したことはスピードです。最低限の機能を実装した状態で、リリースし、後々、あったら便利な機能を付け足していくという方針で作りました。

Githubのissueとして必要な改修を洗い出して、役割分担をしていきました。ローンチするのに最低限必要なisssueをprojectに入れて、各工程の進捗を見える化することで、

あとどのくらいでシステムがリリースできるのかを見える化しました。

 

 

実際に開発する

以下は開発の中で、自分の中で工夫したことや挑戦したことを掻い摘んで紹介します。

①最低限の機能を実装だが、後々機能を増やしやすいように設計する

上述の通り、リリースまではスピードを意識し、最低限の機能だけ作るようにしました。ただ、個人的には後々様々な機能を追加しやすいようにしました。

実際のテーブルのE-R図は以下のような通りです。

ランチは、毎週金曜日以外でも設定したり、別のランチ会を作ることのできるようにしました。特に毎週金曜日の通知などは繰り返し通知の設定ができるように設計しました。

ランチテーブルの中のInterval_typeカラムで1→年、2→月、3→週、4→日と保存できるようにしてinterval_valueの中に値を入れることで、

毎週設定→interval_type = 3、interval_type=1

隔月設定→interval_type = 2、interval_value=2

という設定ができるようにしました。また毎回、ランチ開催のログを取っているので、前の週と同じ組み合わせができる限り生まれないように割り振るということも対応できるようにはしています(実際はまだできておりません。)

②テストコードを書く

リリースまではテストコードを書かずに作っていたのですが、リリース後、改めて自分のコードを見返すと、修正したいところが多々出てきました。ただ、すでに動いているシステムに手を加えるのは怖く開発が滞っている状態がありました。そうした状態から脱するため、コアなグループ分けの処理やモデルの処理のテストコードを書き、処理が動いていることを担保するようにしました。詳しくは以下のスライドにまとめているのでこちらも合わせてご確認ください!

最終的な完成形は以下のような感じです。(著作権的な関係上、目元は伏せさせていただきます。)

制作から約2ヶ月ほどで、無事にバグなくリリースすることができました。

Laravelの感想

今回のシステムはLaravelを使って作ったので、最後にLaravelを使ってみた感想だけお伝えしようと思います。

①プログラムを書きやすい

LaravelはRailsを模倣してできたフレームワークなので、備えられている機能はRailsとあまり変わりません。それに加え、Railsでは用意されたレールに沿ってシステムを作ることが求められますが、Laravelはどちらかと言うと自由に設計やコードを書くことがしやすいです。そのため、システムをスピーディーに作ることができました。またドキュメントもわかりやすくまとめられているので、Laravelのお作法を取り入れやすいと言うのも大きかったです。今回のWEBシステムも週末の時間だけで作ったのですが、それでも2ヶ月ほどでリリースすることができました。初めて触るフレームワークでこれほどスピードが出せたのはLaravelと言うフレームワークが書きやすく作られていたのが大きな要因なのではないかと感じております。

②ORMの機能が豊富

便利だなあと思ったのが、LaravelのEloquent ORM。

以下のようにデータがなかったら、404エラーで投げてくれるメソッドや、クエリを簡潔に書けるクエリスコープは便利だなと思いました。

そのほかにも削除処理のところは至れり尽せりで、プログラムを書かずとも論理削除してくれたり、findメソッドでは削除されたデータが取れないように予め設定されていたりとそこまでカバーしてくれるのかと言う驚きがありました。

 

最後に

以上、作ったシステムとLaravelの紹介になります。Laravelは機能豊富すぎて、まだ十分に使いこなすことができていませんが、開発スピードが上がることは間違いなさそうです。また何か0からWEBシステムを作ることになった際はLaravelで作ろうと思います。


しずおかオンライン中途採用社員も、積極募集中!
しずおかオンラインののスタッフとして、地域の魅力を伝える仕事です。
くわしくはこちら!

※「イエタテ」は2023年4月より㈱くふう住まいにて運営しています

Category

Ranking