Django Congress 2021 発表資料です。
初めて触ったフレームワークがDjangoだった私は、いろいろなことを悩んだりしながら個人開発としてアプリを開発しました。そのDjangoを使用して個人開発のアプリを完成するまでに悩んだこと、初学者から見てDjangoで開発して良かったと思うことなど、技術的な話より初学者として学習するときに困ったことや、どのように学習していけば良かったと感じているか、を発表させていただきます。
未経験者のDjangoでの個人開発haru Django Congress 2021
View Slide
おまえ誰よ / Who are you・haru・17歳・N高等学校(2年)・ゲーム、アニメ、英語の勉強・プログラミング始めて一年ほど経ちました・Twitter ID: @haruu_iq
このトークでお話しすること初学者の私がアプリケーションを開発している中で悩んだ点や勉強時に意識したこと、反省点、どのような学習方法が良いと考えるかなどお話しします。専門的な話より、初学者がどんな感じで頑張ってきたかお話しするので温かい目で見ていただけると嬉しいです!
アジェンダ・アプリの開発で悩んだ点・学習の反省・意識して良かったこと・反省から考える学習方法・Djangoで良かったと思っていること・まとめ・参考資料
URL:crowdgamers.comGithub:github.com/haruu8/CrowdGamers
アプリ開発で悩んだ点
静的ファイルへの理解が足りなかった「静的ファイルを一つの場所に集めなければならない」ということすら知らなかった「静的ファイルの設定、コマンド(一部)」・STATIC_ROOT → collectstaticコマンド時にファイルを集めるパスの指定・STATIC_URL → staticタグを使用し相対パスで指定できるようにする・STATICFILES_DIRS → 個別アプリ以外の静的ファイルを探すように指定する・MEDIA_ROOT → ユーザーによってアップロードされたメディアファイル・collectstatic コマンド → 一つの場所に静的ファイルを集めるためのコマンド静的ファイルの設定
個人的な選択肢は2つ・allauth◦メールアドレス・パスワード認証 + ソーシャル認証◦パスワード変更・メール変更機能が簡単に実装できる・python-social-auth◦ソーシャル認証◦KEY, TOKEN をsettings.py に記述、htmlにリンクを書いて実装できるアカウント関連のライブラリ
アカウント関連のライブラリ・開発に集中したい◦デザイン部分(html, css, UI)の実装を最小限にしたい◦python social auth の方が実装コストが少ない・allauth の使用経験あり◦別のライブラリはどのような形で実装するのか知りたかった→ python social auth を採用
ORMの使いかた・SQLは一通り学習していた◦理解しているつもりになっていた・ORMで書いたコードがSQL文だとどういう風になるか想像せずに使用していた◦User.objects.all = select * from t_user→上記の変換すらできていなかった※ t_user は Userのテーブル名
ORMの使いかたデータを登録する view の処理がわからなかった・投稿データにどのユーザーが投稿したか保存する場合・form.user に保存したいデータを代入する必要がある◦チュートリアルでやったはずだが、理解できていなかった
発展形(通知機能の作成)・特定のチームに所属しているメンバーの中のオーナーのユーザーに通知を送りたい・filterや逆参照を使用してデータを取得、代入◦考え方はシンプルだが、難しく考えていた
テストコードの書き方・モックは知っていたが・・・◦単純なユニットテストしか書いたことがなかった・具体的にDjangoでどのように書けばいいかわからない◦知識・経験が足りなかった◦参考にできるコードが見つけられなかった・テストが書きづらいコードを書いていた◦書きづらいコードのテストを書く力がなかった◦テストが書きづらいコードを書きやすいコードに書き換える力もなかった
本番環境と開発環境の設定・本番環境の設定方法が記事ごとに違う◦自分が使用したい技術のセットで説明している記事がなかった◦何を参考にすればいいかわからなかった・一つ一つの使用方法・設定が曖昧になっていた◦一つ一つ理解する必要があったが焦っていた
本番環境と開発環境の設定主に悩んだ部分・PostgreSQL or MySQL・Nginx or Apache・gunicorn or uvicorn・Dockerあり or なし・静的ファイルの設定・環境変数の設定(Django + Docker)
学習に関して
学習での反省①・チュートリアルだけで、一気に応用に進む◦「理解したつもり状態」なので、エラー対処できない◦後戻りして確認することが多かった・共同開発を意識してGitHubを使用してなかったので共同開発時に混乱した◦pull, fetch の違い◦Pull Request の書き方◦Issue, Wiki とは etc...
学習での反省②・推測でトラブルシューティング◦英語をなんとなくで読む ❌◦翻訳ツールを使って、まずエラー文を理解する ⭕・GitHub Issueに解決方法が書いてあることが多いがそれを避けてきた◦翻訳ツールを使って英語を読めば良かった・十分な理解ができていないまま使用するものがあった◦Nginx, gunicorn, 静的ファイルの設定項目
意識して良かったと思っていること・設計を意識◦拡張性、命名規則、モジュール分割 etc...・docstringを記述◦どういう情報が開発者にとって欲しいか理解できた・GitはCLIで利用◦GUIに左右されないで使用することに慣れた・エラー検索の工夫◦ユニークな名前がついているものは一般的な名前に変更するor 削除する◦(例) NotificationCreateView → ArticleCreateView or CreateView
・非公式の記事を参照する場合、下記を確認してから進める◦バージョン・実現したいことと近いことが実装できるか◦自分が理解できる程の説明が書いてあるかどうか→ 時間の浪費を減らせる・ドキュメントを参照する◦最新且つ、正確な情報がのっている反省から考える学習方法①
反省から考える学習方法②・初歩を理解して、少しずつ応用に寄った学習をする◦チュートリアルから理解を少しずつ深めていく◦理解できていない部分が多いと混乱する・疑問点は解消する癖をつける◦だんだんと理解できるようになってくる
・Discordでコミュニティがある◦質問が日本語で出来る◦様々な意見が聞ける・標準でセキュリティ対策がしっかりしている◦SQLインジェクション◦XSS etc…・標準の管理画面・Form機能が使いやすいDjangoで良かったと思っていること
まとめ・学習はとにかく時間をかけるしかない・設定項目で疑問に感じる部分があるなら、放置しないで調べる(後に役立つ)・基礎から学習を始め、応用によった学習をしよう(欲張らない)・Django はとても使いやすいフレームワーク
参考資料・Djangoドキュメント 静的ファイル・django-allauthドキュメント・python social authドキュメント・CrowdGamers ソースコード