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