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 ソースコード