akiyoko blog

akiyoko の IT技術系ブログです

初学者・初級者向け Django の学習ロードマップ

この投稿は 「Django Advent Calendar 2018 - Qiita」 の1日目の記事です。

akiyoko です。
2018年はまぎれもなく「Django の一年」でした(少なくとも個人的には)。

振り返れば、4月と10月に 技術書典 で Django の技術同人誌を出したり、Django Girls Tokyo という女性エンジニア向けイベントのコーチをしたり、モグモグ Django のスタッフをしたりと、Django を始めたばかりの方と向き合う機会が特に多かったです。

そんな中、
「Django って難しいよね」
「やってみたけどよく分からなかったので諦めた」
という声を聞くことが何度かありました。

最初は「フルスタックゆえに学習コストが高い」というのが原因なのかなとぼんやり思っていたのですが、最近はそうではなく、Webアプリケーション開発の前に知らないといけない知識やスキルが多すぎる、つまり、Django に至るまでの道のりが長すぎる というのが大きな原因になっているのではないかと考えるようになってきました。


そこで本記事では、「ビフォー Django」(Django に至るまで)と「アフター Django」(Django を学びはじめた後)に分けてそれぞれ必要となる知識やスキルを整理し、それを踏まえて特に初学者・初級者に向けた「Django の学習ロードマップ」を示してみようと考えています。私があれこれ妄想しただけのものなのでもちろん異論反論あるかと思いますが、ジャストアイデアとして温かくご査収いただければ幸いです。


本記事を書くにあたって、Djangoのハマりどころや難しいと感じている点について、Django 経験者に匿名のオンラインアンケートをおこないました。その結果、予想を大きく上回る92名(!)の方から回答をいただくことができました(アンケート期間は11月13日〜28日)。アンケートにご協力いただいた方々にこの場を借りて感謝申し上げます。

docs.google.com


 

ビフォー Django(Django に至るまで)

Webアプリケーションを初めて学ぶという場合は、Django をはじめとした Webアプリケーションフレームワークを学習する前にいわゆる「予備知識」あるいは「前提知識」を身につける必要があります。また、Python 未経験の方であれば、Django 学習のスタート地点に立つために Python の読み書きがひと通りできるレベルのスキルが必要になります。

学習ロードマップ

Webアプリケーションフレームワーク、および Python の基礎を習得するために必要と思われる「Web技術」「データベース」「インフラ」「Python」の知識やスキルの洗い出しをしてみました。レベルについては「ITスキル標準とは?:IPA 独立行政法人 情報処理推進機構」を参考にしてみました(が、雰囲気程度です)。


f:id:akiyoko:20181201110838p:plain
(図1.Django 以前に必要な知識・スキル)


これらを最低限レベル2まで習得した上で、ようやく次のステップである Django という土壌に立てるわけです。そりゃあしんどいですよねぇ。

なお、レベル3 のスキルについては案件に応じて獲得する必要がありますが、すべての場合において必須というわけではありません。

学習方針(案)

新しい言語やプロダクトの学習をする場合の学習法は世の中にたくさんありますが、

  • 書籍を読む(技術同人誌や電子版を含む)
  • オンラインチュートリアルを読む(非公式のものも含む)
  • ブログ記事を読む *1
  • プログラミングしながら学べる学習サービスで学ぶ *2
  • 動画学習サービスで学ぶ *3
  • 勉強会に参加する *4

くらいに分類できるかと思います。それぞれの学習法にはメリット・デメリットがあります。たとえば、次のような感じです。

f:id:akiyoko:20181201114854p:plain:w550


当たり前ですが、自分のレベルや好き嫌いに合った学習法をオススメします。

また今回のアンケート結果から、

  • 若い人ほど、ブログで学習する(相関係数 r=0.19)
  • 若い人ほど、プログラミング学習サービスで学習する(r=0.21)

という分析結果が得られました。経験がある人は二次情報を見ない(一次情報をあたる)という傾向を表しているのでしょうか。効率から言えば一次情報にあたる方がよいのでしょうが、経験が浅い人からすると最初は何が分からないかも分からない状態なので、「〇〇とは」系の簡単なブログ記事で全体像や雰囲気をざっくり掴むところから入るのがよいでしょう。


本記事の最後に、私がオススメする教材リンクを掲載しました。初学者向け(★)、初級者向け(★★)、脱初級者〜中級者向け(★★★)に分けて紹介していますので、ご自身のレベルに合わせて参考にしてください。



アフター Django(Django を学びはじめた後)

ようやく Django を学習しはじめたところで、ここでフルスタック由来の「学習コスト高い問題」という壁が立ちはだかります。

まずは、アンケート結果から見ていきます。

難易度

「Djangoは難しいと感じますか?」という問いに、4人に1人の方(全体の25%)が「Django は難しい」と回答しました。「簡単」と答えた方は10人に1人(9.8%)しかいませんでした。


f:id:akiyoko:20181201085304p:plain:w450
Q4.「Djangoは難しいと感じますか?」

Q3.「Django の経験はどのくらいですか?」の結果によると回答者の多く(63%)が「Django 経験が1年未満」だったことから、単に「難しい」の割合が「簡単」の割合よりも多いというだけで「Django =難しい」とは言い切れません。次に示すのは、Django の経験年数ごとに難易度の度数を集計した度数分布表です。パッと見て、経験1年未満で「難しい」と答える割合が多かった(「1年未満」の36.2%が「難しい」と回答)ことが分かります。「Django 経験年数」(階級値を使用)と「難しいと回答した割合」の相関を調べると、やはり 経験が浅い人ほど「難しい」と感じる傾向が大きい ことが分かりました(弱い相関 r=0.24)。


f:id:akiyoko:20181129012004p:plain:w550
表.Django 経験年数ごとの難易度の度数分布表


ハマりどころ

「Djangoでハマったところ、あるいは難しいと思うところはどこですか?」という問いに対する回答結果(選択方式・複数回答可)を得票順に並べ替えたのが、次のグラフです。

f:id:akiyoko:20181130235710p:plain
Q5.「Djangoでハマったところ、あるいは難しいと思うところはどこですか?」


「全体像を理解するのが難しい」と回答した方が最も多かった です。そしてまた、初学者や初級者が多いと思われる「経験1年未満」のグループで「全体像」と答えた割合が特に多かった ことも分かりました(次に示す Django 経験年数ごとの度数分布表を参照)。初学者や初級者は最初のイメージを掴むところでつまづいてしまう、というのがあるのでしょう。

f:id:akiyoko:20181130235624p:plain
表.Django 経験年数ごとのハマりどころの度数分布表

ハマりポイントの第2位は「デプロイ」でした。こちらも「1年未満」のグループで「デプロイ」を挙げる方が多かったようですが、これについては、初学者が手始めに利用することの多い Django Girls チュートリアルの後半に突如として出てくる Heroku へのデプロイでつまづいてトラウマになった人が多かったのでは? というのが個人的な見解です。最近リニューアルした 新バージョンの Django Girls チュートリアルのデプロイ では PythonAnywhere というよりシンプルな環境を使うように改良されているので、つまづくことはだいぶ少なくなっていると思います *5。一度諦めていた方もぜひ再チャレンジを。

ハマりどころとしては以下、「ビュー」「ユニットテスト」「静的ファイル」と続いています。ビューやユニットテストについては、Django が用意してくれているクラスを継承して簡単に書ける反面、何をオーバーライドして使えばよいのかがブラックボックスになっていて分かりづらいという点がハマりどころになっているのではないかと想像します。このあたりは現時点ではまとまったよい情報がほとんどなく、「ソースコードを読めば分かる」的な側面もあります。


そのほか、上の度数分布表を見ると経験が「1~3年」のグループでは「フォーム」「静的ファイル」「ユニットテスト」が多くなっていて本格的に使い始めている感じがするなど Django の経験年数によってハマりどころが変化している ところや、セットで利用されることが多いからでしょうか、フォームとテンプレートのハマり度に相関があった(相関 r=0.56)のは、非常に興味深かったです。

学習ロードマップ

以上のアンケートと私の経験を踏まえて、Django についてはこのような学習ロードマップを提案してみたいと思います。


f:id:akiyoko:20181201102426p:plain
(図2.Django 以降で必要な知識・スキル)


学習方針(案)

真っ先に全体像を把握するところから始めます。 フルスタックである Django がカバーしている範囲を見極めることや、機能単位で分離している構成要素(コンポーネント)同士のつながりを把握することが重要であると考えるからです。


全体像を把握した後は、簡単な Django プロジェクトのサンプルを作成して動かすのがよいでしょう。 Django にはプロジェクトのひな型を作るためのコマンド(startproject)や簡易的な Webサーバを実行するコマンド(runserver)があらかじめ用意されているため、導入部分をチュートリアル形式で学ぶというスタイルとの相性がよいです。

そして「Django はチュートリアルで十分」という意見も多く出るくらい、Django は非常にチュートリアルが充実しています。 *6 有名どころでいえば、

などが挙げられるでしょうか。

その中でも「Django 公式チュートリアル」から入る初学者の方が多いと思いますが、少し注意が必要です。というのも、公式チュートリアルには図が一切なく、全体像が把握しづらいです。あと、大事なところをしれっとすっ飛ばしたり、リンクで逃げて説明していなかったりと少し不親切なところも散見されます。したがって、初学者・初級者向けには少し分かりづらいかもしれないと感じています。あと、「ビフォー Django」の内容については触れられていません。

ちなみに Django 公式チュートリアルは完全に日本語翻訳がされていますが、リンクをたどった先がほとんど英語のままになっていることも多いです(ドキュメント全体の3〜4割しか翻訳できておらず *7、特に詳細レベルの内容については翻訳されていないものが多い)。英語が苦手なエンジニアはそこで腰が引けてしまうかもしれません。


「ビフォー Django」をきちんと学習してこなかった方には「Django Girls チュートリアル」をオススメします。インターネットの仕組みやコマンドラインの使い方から、HTML や CSS などの基礎的な話についてもカバーしてくれています。ただし先に述べた通り、途中に出てくるデプロイやそれに付随する Git の習得については非エンジニアの方にはレベルが高すぎるため、とりあえずはすっ飛ばしてもよいでしょう。


次のレベルとなるプロレベルの基礎知識としては、各コンポーネントの詳細な使い方や書き方、Django で特に充実しているユーザーまわりの機能について把握しておく必要があるでしょう。本格的に仕事で使う場合には、ユニットテストの書き方についても理解しておく必要があります。「Django パッケージ」は開発効率を格段に向上させるので、積極的に導入したいところです。また、個人的にハマりポイントが多いと感じている「静的ファイル・メディアファイル」についても必要になるケースが多いため、正しい知識をインプットしておきましょう。


このように Django についても、全体から詳細へ、というパターンで学習することをオススメします。この記事の最後に私がオススメする教材リンクを掲載しました。初学者向け(★)、初級者向け(★★)、脱初級者〜中級者向け(★★★)に分けて紹介していますので、ご自身のレベルに合わせて参考にしてください。


オススメ教材リンク(ビフォー Django)

私の観測範囲がビフォー Django について疎いため、網羅的にカバーしきれていません。あとで追加するかもです。

初学者向け(★)

《 Web技術 》

超絶初心者のためのサーバとクライアントの話(ブログ)
qiita.com


『イラスト図解式 この一冊で全部わかるWeb技術の基本』(書籍)

買って読みましたが、図+簡潔な説明で書かれていて非常に分かりやすかったです。


HTML & CSS | Progate [プロゲート](学習サービス)
prog-8.com


JavaScript | Progate [プロゲート](学習サービス)
prog-8.com


《 データベース 》

SQL | Progate [プロゲート](学習サービス)
prog-8.com


《 インフラ 》

Command Line | Progate [プロゲート](学習サービス)
prog-8.com


《 Python 》

Python のバージョンは、よほどの事情がない限り「Python 3」を勉強しましょう。文字コードの扱いが大変すぎますし、何より、Django の新バージョン 2.0 以降では Python 2 はサポート外になっていますので。


Python | Progate [プロゲート](学習サービス)
prog-8.com


『スラスラ読める Pythonふりがなプログラミング』(書籍)

小学生でも読めてしまう、画期的な Python 参考書です。


『Python3 入門ノート』(書籍)

入門者にもやさしく、最後に少し機械学習の導入部分まで学べる一石二鳥の本。


『Pythonチュートリアル 第3版』(書籍)

Pythonの作者 Guido van Rossum が書いた本の翻訳書です。私も持っている Python の資格試験「Python 3 エンジニア認定基礎試験」の教材にもなっていますので、この本をマスターすれば Python の資格もバッチリです。


初級者向け(★★)

《 Python 》

Django に限っていえば、基本文法と仮想環境の使い方、Python パッケージの活用だけで十分です。Django の前提知識としては、そのあたりを押さえておけばよいでしょう。


『Pythonエンジニア ファーストブック』(書籍)

ついでに Django 基礎知識も学べる一石二鳥の本。まるまる一冊 Django ではないですが一章分(70ページ)割いています。


脱初級者〜中級者向け(★★★)

《 インフラ 》

『体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践』(書籍)

「徳丸本」と呼ばれているほど有名なセキュリティ対策本の第2版。


オススメ教材リンク(アフター Django)

初学者向け(★)

《 全体像 》

全体像をつかむための一枚絵などの情報は意外と少なかったです。


Djangoフレームワークの紹介(その他)

Django 界隈で有名な tokibito さんのスライドです。


Rails以外全くわからないマンがDjangoに触れてみて驚いたRailsとの違い - Qiita(ブログ)

Rails から来た人が最初に読むと全体像がつかめて分かりやすいです。

qiita.com


《 チュートリアル 》

プロジェクトの作成からはじまり、runserver で管理画面を確認して、簡単な機能を実装するところまでをひと通りおさえるというチュートリアルがよくあるパターンです。Django ではチュートリアル系の情報が大変充実しています。


Django Girls チュートリアル(チュートリアル)

大人気のチュートリアルです。非エンジニアなどの超初心者ならこちらをオススメします。インターネットの仕組みやコマンドラインの使い方から HTML や CSS など、初歩の初歩からステップ・バイ・ステップで解説してくれています。

古いバージョンのものは Heroku にデプロイするようになっていて結構ハマる人がいましたが、リニューアルされたものは PythonAnywhere にデプロイする形に書き直されていて、ハマることは少なくなっているはずです。

なお「Girls」と付いていますが、女性じゃなくてもウェルカムだそうです。もともとは世界的な女性向けイベントのために作られたサイトを各国語で翻訳したものです。

はじめに · Django Girls Tutorial


公式チュートリアル(チュートリアル)

初学者にはちょっと難しいところもあるかもしれませんが、安心と信頼の公式チュートリアルです。

はじめての Django アプリ作成、その 1 | Django documentation | Django


Python Django入門 (1)(ブログ)

ブログ系で Django のチュートリアルを勉強するなら、これがよいでしょう。

qiita.com


Django入門編1: Djangoの基本を理解しよう | プログラミング学習サービス【paizaラーニング】(動画学習サービス)

11月29日に「Django」の講座が追加されました。早速やってみましたが、初心者にもやさしい系でした。「エル、エス、エンター!」

paiza.jp


『プログラミング初心者でも安心、Python/Django入門講座』(動画学習サービス)

Udemy の Django 講座をいくつか受講しましたが、その中で圧倒的に良かったのがこの narito さんの『プログラミング初心者でも安心、Python/Django入門講座』です。Udemy は頻繁にセールをやっているので、それを狙って気になった講座をまとめて買うのもよいでしょう。

プログラミング初心者でも安心、Python/Django入門講座 | Udemy


DjangoBrothers チュートリアル(チュートリアル)

比較的新しいチュートリアルで、しっかり Django 2系です。解説も丁寧でやさしいです。

www.djangobrothers.com


Python Django 超入門(書籍)

そもそも Django の書籍は少ないので貴重です。超初心者向けならこの本です。ちなみに電子版はありません。


『Django for Beginners: Learn web development with Django 2.0』(書籍)

英語に問題がないなら、Django 本の選択肢は広がります。こちらは実用系チュートリアルの本でレビューの評価も非常に高いです。私も読みましたが、英語も比較的容易なものでした。Vincent さんの記事はネットでたまにヒットしますが、非常に信頼がもてる記事を書いています。


Django チュートリアル| MDN(チュートリアル)

まだ鋭意翻訳中ですが、初心者向けのページからテスト、デプロイ、セキュリティまで、非常に守備範囲の広いチュートリアルになっています。今後に期待。

developer.mozilla.org


初級者向け(★★)

『現場で使える Django の教科書《基礎編》』(書籍)

私の技術同人誌です。現場レベルの Django の知識を扱った日本語書籍はまだまだ少ないので貴重です。チュートリアル形式ではありませんが、コンポーネントごとの仕組みや書き方、ベストプラクティスまでを解説しています。

読みどころについては、ブログの過去記事で解説していますので、興味ある方はぜひ。

akiyoko.hatenablog.jp



脱初級者〜中級者向け(★★★)

『現場で使える Django の教科書《実践編》』(書籍)

10月の技術書典で新刊として出した私の Django の薄い本の第二弾で、開発の現場で必要になる知識やよくある問題へのヒント・解決策を中心に、デプロイやセキュリティ、高速化などさらに実践的な内容に踏み込んでいます。ユニットテストについて解説した章もあります。

現在、紙の本を BOOTH という(技術同人誌を含めた)同人誌を多く扱ったオンラインショップで、電子版を Amazon で販売中です。

《紙の本》
booth.pm

《電子版》


『Two Scoops of Django』(書籍)

世界的に有名な Django 本。だが英語だ。
ベストプラクティスが詰まっている本で、Django をイチから順にすべて解説した本ではありません。あと残念ながら対象バージョンが 1.11 ですが、信頼のおける非常に良い本です。

Two Scoops of Django 1.11: Best Practices for the Django Web Framework (English Edition)

Two Scoops of Django 1.11: Best Practices for the Django Web Framework (English Edition)


過去記事でも、この本をオススメしています。興味がある方はこちらもどうぞ。

akiyoko.hatenablog.jp


『どじゃんご本 #1』(書籍)

Python / Django 界隈で有名な jbking さんの Django の薄い本。REST framework についての解説もあり。そのほか、認証・認可、ページネーションの発展的な内容についても触れています。
しかしこんなにお安くていいんでしょうか?? 何かの間違いでは??

booth.pm


『実践レシピ おいしく使うDjango』(書籍)

Route 312 さんの技術書典5の新刊。ファイル操作、バックグラウンド処理についての章があり、詳しく書かれています。

booth.pm


その他のお役立ちサイト

ブログなどで、Django の信頼できる情報を提供してくれている方々を勝手に紹介します。

narito ブログ

上でも紹介した、narito さんのブログ。かなり広範囲に渡って記事をアップしています。

narito.ninja


okoppe8@Qiita

Qiita でDjango といえば okoppe8 さんでしょう。かなり信頼できる記事をいくつも書いていて、非常に有用です。

[Django] Heroku デプロイ方法 2018年版 - Qiita
[Django] ファイルアップロード機能の使い方 [基本設定編] - Qiita


Djangoフレームワークのユーザーモデルと認証

tokibito さんのユーザーまわりの機能についてのスライド。非常によくまとめられています。


Django における認証処理実装パターン

認証まわりについての c-bata さんの非常に有用な記事です。脱初級者向けに読んでおいたほうがよいでしょう。

nwpct1.hatenablog.com


Djangoのテストの書き方とCircleCIを活用した継続的インテグレーション

codezine.jp


Django 管理画面逆引きメモ

qiita.com


Django のおすすめライブラリ

qiita.com


最後に

機械学習のおかげか、Python 界隈が非常に盛り上がってきています。Webアプリケーションも Python で一気通貫で作るとなると、Django や Flask、あるいは Tornado や Bottle、Pyramid という選択肢があり、ユーザー認証が必要となると Django が強力な選択肢になります。

「Django が難しい」と感じるのは、フルスタックである Django がカバーしている範囲が大きい(機能がテンコ盛りすぎる)からかと思いきや、そもそも Webアプリ開発の前に知らないといけない知識やスキルが多すぎるというのが原因のひとつであるようにも感じています。つまり、「Django の学習コストが高い」のではなく、「Django に至るまでの Webアプリケーションを含めたスキル全般に対する学習コストが高い」と言えるのではないでしょうか。

この記事では、Django をマスターするために必要な知識やスキルを整理し、その全体像となる学習ロードマップを示してみました。いかがでしたでしょうか? この記事が Django の初学者や初級者の方々のお役に少しでも立てれば幸いです。


学習法ではないかもしれませんが、Django(だけでなくさまざまなプロダクト)を習熟するために一番良い方法は「自分でちょっとしたサービスを作ってみる」だったりします。そういった場合には、チュートリアルを見ながら手を動かして何か作り始め、その延長で自分の作りたいサービスを作ってしまうというパターンがよいかもしれません。

*1:Qiita、はてなブログなど

*2:ProgatePyQなど

*3:Udemyドットインストールpaizaラーニング など

*4:もくもく会、カンファレンスなど

*5:それでも黒い画面も Git も必要なので、非エンジニアにとってはまだまだハードルは低くないですが。。

*6:チュートリアルとは、基礎的なところから順を追って解説したもので、ひと通り終えることで基本的な操作を学べるようになっています。

*7:django-docs localization