現在、私が所属しているwecodeでは自分が好きなウェブサイトをclone codingするプロジェクトを行っています。clone codingというと、「サイトをそのままコピペするのでは?」思われるかもしれませんが、それとは違います。
コピペすることは一切なく、フロントエンドもバックエンドもサイトを分析し、必要な機能やレイアウトを一から作り出します。既存のウェブサイトをcloneする理由は、2週間という期間で企画・デザインまで全く新しいサイトを作るのは容易ではなく、コーディング技術を磨くブートキャンプの目的とも適さないからです。
今回のプロジェクトで作ったのは、韓国のホテル予約サイトであるSTAY FOLIOです。このサイトを選んだ理由は、以前勉強した会員登録やログイン機能の復習するとともに、サイトのメイン機能である予約およびその確認機能を自分で作ってみたかったからです。
2020/10/19 ~ 2020/10/30(約2週間)
Python
Django
MySQL
AQueryTool
postman
bcrypt
jwt
Github
Slack
Trello
今回、プロジェクトはフロントエンド4名、バックエンド1名(私)で構成されました。ほかのチームはバックエンド2名ずつなのに、初の共同プロジェクトでバックエンドが自分だけというのは大変心細かったです。
それでもなんとかチーム唯一のバックエンドとして、責任をもって以下の機能を実装しました。
instagram clone codingまでは、一人でがんばれば結果は出るものでした。ですが、フロントエンドの方と協力して作るとなると、一人でやっていたときでは予想できなかったトラブルが多くありました。
例えば自分でテストしたときは問題なかったことが、実際通信してみると画面に表示されなかったり、コミュニケーションミスで、変更になったJSONキーが伝わってなかったりなど、些細なトラブルが相次ぎ発生しました。
それからはSlackや朝のミーティングで変更点について必ず周知するように心がけました。
APIを実装することについては大きな問題なく、スムーズに実装できて、自分でもよくできたと思います。また、公式文書で読んだことはあっても使う機会がなかったメソッドなども使ってみて効果を実感することもできました。
APIの実装を除いては改善すべき点もありました。
特にGithubの使い方がまだはっきりわかっておらず、branchごとの作業を徹底できなかったことが悔しかったです。次のプロジェクトでは、もっと明確にbranchを定め、ほかの作業と被らないように注意していきたいと思います。
プロジェクト開始当初は、たくさんフロントエンドと話し合って決めていきたいと考えていましたが、実際プロジェクトが始まり、どんどん忙しくなるにつれ、コミュニケーションの回数が減っていきました。その結果、必要なデータが抜けていたり、データを渡しても気づかなくて使えなかったなどの問題がありました。
次のプロジェクトでは一日に一回、コミュニケーションする時間を決め、変更点や提案をしていきたいと思います。そのためには、変更点等をちゃんと記録しておくことも必要になっていきます。
もちろん、バックエンド志望としてフロントエンドのすべてを知る必要はないと思いますが、今回のプロジェクトで、フロントエンドの知識が全くないと、話をすることも難しいと感じました。
これからは時間を作って、Reactを勉強して少しコミュニケーションの役に立てたいと思います。
select_related, prefetch_relatedを使えば、因子に指定したテーブルやフィールドの情報を最初にまとめて持ってきてキャッシュデータに保存するため、loop文などで何回もデータを呼ぶとき、毎回データベースを呼び出さなくて済むので、スピードが上がりました。
aggregateはテーブルの一つのフィールドに対して最小・最大値や平均等が簡単に計算できるメソッドで、ホテルの全部屋の最安料金、最高料金を求めるときとても便利でした。
ホテルリストのページにはフィルターがあり、カテゴリー・地域・料金3つの条件に合うホテルのみ表示する機能がありました。この機能をつくるためにフロントエンドから条件がクリックされるたび、そのデータをQuerystringでもらい、filter_setに入れることで該当するデータのみ抽出、もし条件がなければすべてのホテルを返すことができました。
コードではないですが、ホテルのデータベースを作るにあたりまずはモデリングを実施しました。実際のホテルのデータベースに比べたら簡単ではありますが、モデリングにかなり時間を要しました。
初めてのプロジェクトで、一人でバックエンド全体を担当していろいろとミスや戸惑いはありましたが、予約システムまでは構築できて嬉しかったです。
一方、まだ実装できなかった機能や改善できるコードもたくさんあるので、次のプロジェクトでは今回できなかったことができるように勉強していきたいと思います。