Instagram Clone Coding Project(Back-end)

jiffydev·2020년 10월 21일
0

Instagram Clone Coding Project(バックエンド)

プロジェクト概要

有名SNSのInstagramの各種機能(ログイン、会員登録、いいね機能、フォロー機能等)をClone Coding

開発期間📆

2020/10/5 ~ 2020/10/16(約2週間)

開発目的🏁

DjangoのMVT概念を熟知
今まで学んだDjangoを利用し、実際に機能するAPIを作成
GitおよびGithubでStaging-Commit-Pull Requestといった一連の流れに慣れる
Authentication & Authorizationの理解を深める

使用技術 & 実装機能⚙️

使用技術

Python
Django
httpie
bcrypt
jwt

実装機能

会員登録、ログインAPI
投稿、コメント投稿API
投稿へのいいね&いいね取り消し機能API
他のユーザーへのFollow & Unfollow API
投稿を修正および削除API
コメントに対するコメントAPI
パスワードを暗号化して保存
ログインしたユーザーにTOKEN発行

code review🌏

ちょっと自慢したいコード

1. ユーザーフォローのモデリング

ユーザー同士でフォローするためにはどのようにモデリングをすべきか、グーグルやStackoverflowを探しまわっていたら「ユーザー同士はManyToMany関係だが相互フォローな関係ではないのでsymmetrical=Falseにしなければならない」というコメントを見ました。
「これだ」と思いDjangoの公式文書を確認したらFK,ManyToManyFieldで自分を参照("self")するときはsymmetrical=Trueがデフォルトになっていて、Trueだと自動的に要素が相互的な関係になるとのことでした。

それでsymmetrical=Falseでモデルを作成して、うまくフォロー関係を作ることもできました。メンターに褒めてもらいましたので、自慢したいコードとさせていただきました。

記憶に残ったコード

1. いいね機能およびフォロー機能


どちらも最初の条件分岐でDBにいいね/フォローしたデータがあるか確認し、データがなければいいね/フォロー、データがあればいいね/フォローを取り消してDBから削除するロジックで構成されています。最初、取り消す機能は予定してなかったですが、同期と話しているうちに、やはり必要だろうとのこどで加えました。
いざ作成してみると、思ったよりもシンプルなロジックでに取り消す機能が追加できて驚きました。(インスタグラムでこのようなロジックになっているかは不明ですが。。)

2. コメントを呼び出す機能

最初のコードはRequestボディーにコメントのDB idを載せて値があればコメントの中のコメントをreturnし、なければひとつの投稿のすべてのコメントをreturnする流れでした。しかしそうなると「わざわざエラーを起こさないとすべてのコメントは呼び出せないのでは」というコードレビューをいただき修正しました。
レビューの際にQuery Stringという存在をヒントでいただいて、調べたら、とても便利なものでした。urls.pyを変えなくても、Requestボディーにも追加せず、必要に応じてQuery Stringにcomment_idを追加すればコメントを呼び出すことも、comment_idの中のコメントだけ呼び出すことも可能になりました。

これから勉強が必要なコード

1. 例外処理


例外処理はPythonを学んだとき入っていた内容ですが、今までの課程では使う機会が少なかったのもあって、View作成のときは例外処理で
かなり苦戦しました。想定しなければならないエラーの数も多く、どんな時にどんなエラーが起こるのかも把握できていないため、これからはDjangoでよく使われる例外処理について勉強する必要があると強く感じました。

2. データモデリング

データモデリングは最も苦手なところであり、その中でもN:N関係のデータはまだまだ至らない点が多いところです。
今回、投稿へのいいね機能において、そのモデリングは最初、中間テーブルは自分で作らず、DjangoのManyToManyFieldを定義すれば自動的に作られるテーブルで良いと思っていました。
しかしManyToManyFieldを定義するときはthrough属性で中間テーブルを作ったほうがいいとレビューをいただいて修正しました。
たしかに、自動的に作られるテーブルだけでは開発側でフィールドを追加することができないので、今後のデータ追加を考えたらthrough属性は必須だと感じました。

次のプロジェクトに向けて

約2週間PythonとDjangoを学んで、それを使ってまた2週間、実際に動くものを作ったのはとてもいい経験になりました。今まで、これを学んでなにが作れるんだろうと悩んでいたことが少し解消できた感じです。
ただ、その一方で、この1ヶ月間で学んだことだけで、次のプロジェクトを完成できるのかという不安が増していくのも事実です。特に次のプロジェクトからはフロントエンドと協力しながら、既存のウェブサイトをコピーして全く同じように動くサイトを作らなければいけないため、ハードルは上がっていきます。
でも避けて通れない道なので、次の1か月も死ぬ気でがんばるしかないと思います。目標としては任された仕事を全うすることはもちろんですが、さらに周りのことをちゃんと見ながらチームに貢献することです。

1ヶ月を振り返って

私はいま、WECODEというブートキャンプで開発者になるための勉強をしています。ここ1ヶ月はゼロからプログラミング言語やWEBの仕組みに関するの知識を叩き込まれ、ひたすら自分との闘いが多かったので、「どんな開発者になりたいか」という質問に対してはっきりと答えることは難しいです。でも段々と、「もっと読みやすいコードを書きたい」とか「もっと効率的なコードにしたい」と思うようになり、私が書いたコードで誰かの役に立つことができる開発者になりたいと思うようになりました。

profile
잘 & 열심히 살고싶은 개발자

0개의 댓글