# 開発背景
開発理由はいくつかあり、1つめにポートフォリオを何か作成しておきたい、2つめに学生の頃に行っていた趣味のプログラミングの感覚を思い出したい、3つめに私の趣味である料理レシピをまずは自分のために管理、精査、分析したいの3点によるものです。
この3点をクリアし満足した際には外部に公開してより情報を収集したいとも考えています。
# 目的
- ReactJsとDjangoRestFrameworkの学習
- 「レシピ研究サイト」というサービス像を形にし、果たしてこのサービスでより良いレシピができるか検証すること
# システム概要
バックエンドはAPIを、フロントエンドはSPAの2つのサービスから成り立ちます。
実装機能は以下です。
# 各種リンク
ポートフォリオサイト
https://shortbread2329.github.io
GitHub
https://github.com/shortBread2329/CookLab
※現在はfeatureReactMockupブランチで開発途中です。
# 使用言語・フレームワーク・API等
- バックエンドAPI
- DjangoRestFramework
- Python
- フロントエンドSPA
- ReactJS
- JavaScript
- SemanticUI
# 開発環境・ツール
| 端末・ツール | 名称 |
| :--------------- | ------------------------ |
| 開発端末 | デスクトップ Windows 10 |
| デバックブラウザ | Chrome |
| IDE | VSCode |
| ソース管理 | Git,Github |
# 開発前の私のスキル
pythonの実務経験はスクリプトの開発を一年未満ほどと、趣味でスクレイピングツールを開発した程度でした。Reactについては、どんなフレームワークなのか耳にしていただけでした。
# 開発フロー
1. 簡単な要件定義、サービス像の簡易的な文章化
2. 画面レイアウトのスケッチ
3. 画面の構成検討
4. フレームワーク選定
- DjangoRestFramework採用理由
- 趣味の時間なので、経験してみたいが一番の理由ですが、それだけではなく、ORMと管理画面が便利そうである点、あとDjangoRestFrameworkの「ModelViewSet 」というものを使い、モデルを作るとCRUD APIがほぼ出来上がる点の2点から、開発効率がよいのではと考えたためです。
- ReactJS採用理由
- 開発以前の、私のフロントエンド開発スキルはJQueryでしたが、今回のシステムをJQueryで実装していた場合は複雑になりそうでしたので、脱JQueryが一つの理由です。あとはVueJsを少しかじっていたため、ReactJSがどんなものなのか知りたかったためというのがもう一つの理由です。
5. 開発準備
- Githubのブランチ作成
- DjangoRestFrameworkのインストール、管理画面の使用感確認
- ReactJSインストール
- CORSの導入、ハローワールド実行テスト
6. 開発
- SPAにトップ画面をデザインの通り作成
- APIにModelを作成することでレシピデータベースやCRUD APIを構築
- SPAにレシピ参照画面の作成、動作確認
- SPAにレシピ投稿画面の作成、動作確認を実施するが、Modelの構築に問題が見つかる
- APIにModel改修を実施し、投稿機能が一連の動作をすることを確認
- 現在開発中
# 今後の予定
- レシピに画像も投稿できるようにしたい。
# 苦労した点
まずCORSについての理解です。セキュリティのためにリクエスト制御はしないといけないなと考えひとまず導入してみましたが、CORSによるHTTPリクエストの流れが勉強不足だったことによって、自身が実装したAPIのPOSTリクエストがなぜはじかれるのか、原因調査に時間がかかりました。この事象に対して、いったん落ち着き冷静になってから、公式ドキュメントなどからCORSのリクエストルールを調べ、リクエストヘッダに余計なヘッダーを設定していたことが分かりました。
ReactJsのState管理もすぐには慣れず、Stateを複数回更新してしまう、Stateの更新ができずにボタンを2回クリックしないと画面が表示されない(1回クリックしただけではクリック前のStateの状態)というような事象が多発し悩みました。State管理を復習しなおした上で現状をフローチャートにし、絵にかくことで頭を整理することで問題を解決しました。
# ここまで作った成果と感想
まだ完成していない点は、新しい技術に挑戦しすぎ、勉強コストがかかっていることが原因だと感じていますが、逆に言えば、ここまで新しいことに挑戦し、今まで経験したことのない障害がありましたが、基本機能がある程度完成するレベルまで自分の力で実装できたことが成長を感じます。