未経験者のDjangoでの個人開発
by
Haru
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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 ソースコード