Lean Baseball

No Engineering, No Baseball.

「実践Django」から学ぶ「プロとして学ぶ・実践すべきWebアプリケーション開発」のこと

PythonでWebアプリケーションをよく作るマンです.

来週(7/19)に発売となる, 「実践Django Pythonによる本格Webアプリケーション開発」の書籍レビューに参加させていただきかつ, 執筆者の@c_bata_さん, 出版元の翔泳社様のご厚意により一冊いただきました.

f:id:shinyorke:20210714145826j:plain
ひと足先に読ませていただきました(感謝)

芝田さん, 翔泳社の皆様ありがとうございました🙇‍♂️

原稿の査読・レビューで読ませてもらったり(コメントさせてもらったり), こうして届いた初版を改めて読んで,

Djangoをやる方はもちろん, Djangoを抜きにしてもWebアプリケーション開発をされる方にめちゃくちゃオススメしたい!

と思いました, レビューさせてもらったときからすごく良かったんですよ, それぐらい興奮しました*1.

このエントリーでは,

という話をしたいと思います.

TL;DR(要約)

実践Django Pythonによる本格Webアプリケーション開発」はDjangoに限らず, Web開発で網羅的に使えるノウハウ・考え方が詰まった良著です.

おしながき

実践Django

本の紹介・自分の感想を軽く踏まえつつ, 想定読者別のオススメな読み方を紹介します.

どんな本なのか

翔泳社の紹介サイトによると,

本書は、業務で必ず役に立つ実践的なDjangoの解説書です。

モデルやビュー、テンプレートといった基本コンポーネントの解説はもちろん、Djangoの実践的なテストテクニック、ユーザーモデルのカスタマイズ方法、認証処理のベストプラクティスなど、Web開発において必ず知っておくべき内容を幅広く取り上げました。

また実際に業務でWebアプリケーション開発に取り組む際には、これらの理解だけでは不十分なこともしばしばあります。

N+1問題の理解や対策方法、RDBのインデックスチューニングによるSQLの最適化、Web APIの実践的なページネーションの実装方法、CSRFやSQLインジェクションのような攻撃を防ぐためのセキュリティに関する知識など、高度かつ重要なトピックをDjangoのコントリビュート経験もある筆者が分かりやすく解説します。

ホントこの通りで, Pythonを代表するWeb Framework「Django」に関する書籍で, Webアプリケーションを開発する方向けの本です.

昨今はPythonでの仕事やWebアプリ開発の機会増えてるなと思いますが, その中でもよく使われるDjangoに特化した本であるととともに,

  • Webアプリ開発で必要不可欠なデータベースを使う開発の基礎知識(特にMySQL). N+1問題の対処, インデックスチューニングなど
  • 認証・認可周り
  • セキュリティの基本(CSRF, SQLインジェクション, etc...)

を網羅的かつ, ちょうどよいボリュームで扱っており, Djangoに関係なくWebアプリケーション開発者にオススメしたい書籍です.

オススメしたい方

全てのWebアプリケーション開発者!...と言っちゃうのは流石に雑すぎるので, ちょこっと体系的にまとめてみました.

f:id:shinyorke:20210714191800p:plain
【図】実践Djangoのレベル別読み方オススメ

「Pythonの読み書きがほどほど出来て, 何かしらのFrameworkでWebアプリケーションを作っている」が前提としてありつつ,

  • Djangoを殆ど触ってない開発者(もしくは初心者)
  • Djangoをよく使う開発者. 実務もだが, 書籍やオンライン学習でDjangoを自学自習している方も含む.

で分かれそうだなと思ってこの区分にしてみました.

Django殆ど触ってない

Djangoを触ったこと無いもしくは, Webアプリケーション開発そのものが初心者という方が該当するかなと.

f:id:shinyorke:20210714193059p:plain
この辺の方々

おそらくこの辺のフェーズの方々は,

  • Djangoがどういうモノなのか
  • どうやったらDjangoを使ったWebアプリケーション開発を覚えられるのか?

あたりが関心事かなと思います.

自分のオススメとしては,

  • ひとまず「Ch. 1 コードスニペット共有サイトの開発」を読んで写経する
  • その後, 必要に応じてCh. 2(モデル定義とクエリ操作)以降を読む・真似をしてみる

で必要な事は覚えられそうな気がします.

公式のチュートリアル*2じゃなくて, オリジナルなアプリケーション(この場合は実践Djangoのサンプル)を作ることで,

  • アプリケーションを作る際の効率的な作業順*3
  • それぞれの作業で必要なこと・ハマりポイント
  • 開発タスクをどう分割してやればいいのか*4

が覚えられるので良いと思います.

また, すでにDjango以外でWebアプリケーション開発に慣れている方は知っているFrameworkや開発手法と比較しながら覚えるでいいと思います.

Djangoをよく使う

Djangoを使ったWebアプリケーション開発の経験がある方, となります.

f:id:shinyorke:20210714193706p:plain
すでにDjangoに慣れてる人

この辺になると,

  • Django ORMの細かい使い方
  • DB周りの処理が遅い・止まるけど何が起きてる🤔
  • テンプレートやビューを効率よく開発したい
  • 認証・認可(OAuthとか)周りってどうやるんだったっけ?

などなど, 書籍のタイトル通り実践的な内容が気になる感じだと思います.

これも自分のオススメとしては,

  • すでに仕事でDjangoを扱ってる方は公式ドキュメントの傍らに置く辞書・困ったときのTips探しに活用する
  • Djangoでの仕事経験が無い or 浅い方は最低でもCh.2〜6, できれば全て読んで「実践的な開発のハマりどころ」を把握する

といった使い方がいいのかなと思います.

自分が「実践Djangoすばらっ」ってなったのがまさにこの辺でして, ORMとかクラスベースのビューとか静的ファイルの配置・パス通しあたりはいつも忘れるので, そんな時に頼りにできる!!と思ったりしました(し実際そういう使い方できそうです).

Djangoの本は何冊か読ませてもらいましたが, 実践的なTipsや求めているものの探しやすさは自分が過去読んだ書籍の中でもナンバーワンかもです.

Webアプリケーション開発に必要なこと

以上が「実践Django」の感想ですが, せっかくなので自分が考えている・思っている「プロとして学ぶ・実践すべきWebアプリケーション開発」もちょこっと触れたいと思います.

上げればたくさんあるのですが, 敢えて2つに絞ると

  • たくさん作ってたくさん世の中に出して経験値を積む
  • 覚悟を持って手段(特に言語やFramework)を選ぶ

この2つかなと思います.

経験値が第一

「どうやったら一人前にエンジニアできますか?」

「Pythonでご飯食べたいのですがどうすれば」

と聞かれる機会まあまあありますが, どっちもプロとして給料もらって開発者になるという意味なら,

仕事でも個人開発でもなんでもいいので経験を積め

と答えるようにしています.

Hello worldとかチュートリアルをちょこっとやるんじゃなくて, アルバイト的に仕事をするでも自分の企画を形にするでもいいのでひとまず何か作ってみようと.

先程の感想で「Django触ってない方は, ひとまず「Ch. 1 コードスニペット共有サイトの開発」を読んで写経する」とオススメしたのもこの「経験値を積む」タスクの入り口としていいなと思ったからです, コードスニペット共有サイトの難易度はちょうどよいと思います.

覚悟を持って手段を選ぶ

ちょこっと仕事でWebアプリケーション作ったり, 何かの機会で新規プロダクト・サービス立ち上げの機会ができると,

  • 今どきのWeb開発はどんな言語でやるのがイケてるのか
  • PythonでやるんだったらDjango? Flask??それともFast API???

みたいな話で盛り上がると思います. 自分を含めこの話題好きな人多いですよね???

プロとしてこの辺を選ぶ時*5は,

  • 言語・Frameworkの強み・弱みが今のチーム・組織にフィットするか?
  • 向こうX年先もメンテできるか? メンテ出来ない場合は適切なタイミング*6でリプレース(作り直し)が効くか?
  • これらがサービス・事業のROI的に釣り合いが取れるか?

など, 考えることがいっぱいあります.

ここにはプラクティスは無い*7と私は思っていて(なぜならその時々の状況で判断・決断の条件が違うからです), 結局の所

手段を提案・主体的におすすめするなら覚悟を持って進めような(勧めような)!!!

かなと思っています.

個人的には,

  • いくつかの選択肢が取れるように色んなものを触って(ハンズオンして)学ぶ
  • それぞれの選択肢のpros/cons, メリデメを自分の言葉として言えるよう把握する
  • 自分の趣味嗜好とサービス・プロダクト・チームが求めているものはしっかり分ける

ようにしています.

Djangoを選択した場合は実践Djangoを参考にするとして, 他の言語・Frameworkのときもいい感じにできるように学べるといいのかなと思います.

結び

というわけで, 「実践Django Pythonによる本格Webアプリケーション開発」の紹介とちょっとした雑談でした.

本当に素晴らしい書籍なので, PythonとくにDjangoで仕事をする機会がありましたら手に取ると良いかなと思います.

個人的にはまたDjangoで新しいプロダクト開発したいと思っております!*8

*1:レビューしながら, 「そうだよ!そこが大事なのよ!!」とか家で一人声を出しながら食い気味に読ませていただきました苦笑. 発売前に原稿が読めて幸せでした(感謝)

*2:Djangoそのもののチュートリアルの他, Django Girlsのチュートリアルなんかも有名ですね.

*3:Ch.1の内容が「少しずつ作りながら動かす」が一貫してやれていて, ホントに良い構成です.

*4:個人で開発する時は別にいいのですが, 複数人のチーム開発ではマストな考え方・ノウハウで, プロとしてメシを食うときは必ずといっていいほど問われる内容となります.

*5:個人プロダクトなどで制約がない時はこの限りでは有りません

*6:扱い方次第ですが, 減価償却が決まってるものなら理解できると思います(資産計上って意味で)

*7:探しがちになりますが, 無いと思ったほうがスッキリしますしその都度考える・悩むほうが結果的にいい感じになると自分の経験上でもそう思ってます.

*8:弊社(JX通信社)でDjangoはよく使ってるのですが, 私コントリビュートできてないんですよね...実は本格的なDjangoアプリ開発から2年くらい遠ざかってます苦笑