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

技術書典5 で頒布される Django / Python の薄い本の情報を集めてみた

akiyoko です。

10/8(祝)の「技術書典5」で薄い本を出します。ブースは「か06:あきよこブログ」です。


今回の技術書典5では、(私のを含めて)何と Django の薄い本が合計7冊(新刊5冊・既刊2冊)も出そうな感じです。Django 好きにはたまらないですよね!



技術書典はドンキ的なごった煮感が好きなのですが、いかんせん技術書典公式の サークルリスト には「サークルカット」と呼ばれる一枚絵とサークル名、ざっくりとしたカテゴリが載っているのみで、結局ひとつひとつ目でチェックしていくしかありません。しかも今回は、サークル数が前回のほぼ倍(500サークル弱)に増えたのでそのチェック作業も重労働です。そこで、「私が注目している」という理由から、技術書典5 で頒布される「Django / Python」系の薄い本の情報を集めてみました。そっち系に興味がある方のみどうぞ。


青枠で囲んだ本は「新刊」、グレーの枠は「既刊」であることを示しています。出版社ブースについては本の数が多いので一律、本のタイトルは非掲載としました。なお、10/5 深夜時点の掲載情報を元にしています。販売価格やページ数は今後サークル主によって変更になる可能性があるので(書かなきゃよかった・・)、実際に購入する際は各自でチェックをお願いします。


情報の取得に際しては、Pythonista らしく、Scrapy でスクレイピング・・ではなく、手でひとつひとつ集めました。画像は PyOCR ・・ではなく目でチェックしました。抜け漏れはいくつもあるかと思いますがご容赦ください(もし間違えてたら連絡くだされば即対応します)。


そもそも「技術書典」って何?

技術書典」は、春と秋の年二回ずつ開催される、技術者による技術者のための技術系同人誌の販売イベントです。今回が5回目の開催になりますが、回を重ねるごとに認知度や参加者の数、サークルの熱量がどんどん増えていて、公式によると今回は一万人ほどの来場者を見込んでいるとのことです。

techbookfest.org



それでは、手動スクレイピングの成果をお見せします。
順番はサークルの並び順(あいうえお順・ただしスポンサーが先)です。



Python 関連

ス01:株式会社 インプレス(カブシキガイシャインプレス)

techbookfest.org

あ05:データリファインメント(データリファインメント)


Kaggleのチュートリアル第2版(108ページ / ¥1,000)

techbookfest.org

あ10:Secure旅団


俺らの愛したセキュリティ(¥1,000)

techbookfest.org

い07:マークアップ言語愛好会


マスタリング docutils(32ページ)

techbookfest.org

う04:改善屋tech

techbookfest.org

え12:PEAKS


ゼロから創る暗号通貨(304ページ / ¥3,600)

techbookfest.org

え39:つばめさんチーム


趣味のPython(80ページ / ¥500)

techbookfest.org

お21:日経BP出版局

techbookfest.org

か04:仮面の人

techbookfest.org

か09:Thunder Claw


ほぼPythonだけでサーバーレスアプリをつくろう(144ページ / ¥1,000)

techbookfest.org

か19:なにココ


PyCharmのすすめ ~デプロイとデバッグ編~(¥500)

techbookfest.org

か35:株式会社マイナビ出版

techbookfest.org

か49:KLab 株式会社


KLab Tech Book Vol. 2(76ページ / ¥500)

techbookfest.org

き07:eMbLog


PythonでGUIをつくろう〜はじめてのQt for Python〜(120ページ / ¥1,000)
PythonでGUIをつくろう〜はじめてのQt for Python〜(カラー電子書籍版)(120ページ / ¥800)

techbookfest.org

き21:74th


Fabric & Invoke Quick Guide(8ページ / 無料)


PythonタスクランナーFabric & Invokeを活用する技術(本+PDF / 80ページ / ¥1,000)
PythonタスクランナーFabric & Invokeを活用する技術(PDF / 79ページ / ¥800)

techbookfest.org

く05:craft by SKDN


【委託】Hello worldカルタ(¥1,900)

techbookfest.org

く11:暗黙の型宣言


「改訂版」流体計算で覚えるPython3(第2版)(188ページ / ¥500)

techbookfest.org

け02:電脳律速


株とPytnonでお金儲けを目指す本2(42ページ / ¥500)


株とPytnonでお金儲けを目指す本(84ページ / ¥1,000)

techbookfest.org



Django 関連

f:id:akiyoko:20181006210430p:plain

う08:黒塗りのビール


黒ビール好きの【IonicとDjangoの本】(100ページ / ¥1,000)

techbookfest.org

か05:jbking


どじゃんご本#1(72ページ / ¥1,000)

techbookfest.org

か06:あきよこブログ


現場で使える Django の教科書《実践編》(176ページ / ¥1,500)


現場で使える Django の教科書《基礎編》(180ページ / ¥1,500)

techbookfest.org

か07:みる会


Visual Studioで お気楽Web開発 Python + Django(48ページ / ¥300)

techbookfest.org

か08:Route 312


実践レシピ おいしく使うDjango(56ページ / ¥500)

techbookfest.org

け42:しょうゆのさーくる


nuxtとvuesaxとDjangoで作るモダンなサービスの作り方。tipsもあるよ!(28ページ / ¥500)

techbookfest.org


まとめ

Python 盛り上がれ。Django もっともっと盛り上がれ~!

最後に、私のサークルの頒布物まとめ記事もどうぞ。

akiyoko.hatenablog.jp

薄いのに?薄くない! 技術書典5 で Django の薄い本の第二弾『現場で使える Django の教科書《実践編》』を頒布します

akiyoko です。

10/8 の「技術書典5」で、二作目の技術同人誌 『現場で使える Django の教科書《実践編》』を頒布 します。先週末にすでに入稿完了したので、あとは当日を待つのみです。




【2018/10/11 追記】
技術書典5に来れなかった方のために、オンラインショップの「BOOTH」にて紙の本を販売開始しました。これ以上の増刷や電子版の販売は現在のところ予定しておりませんので、この機会にぜひどうぞ。

booth.pm


《実践編》はどんな内容?

全176ページまるまる Django 本です。
Python についての解説は一切ありません。

前回の技術書典4で出した『現場で使える基礎 Django』(*1)の続編にあたりますが、続編といっても Django の基本的な知識を有する方であれば理解できる 内容の本になっていますのでご安心を。

前作同様、現場で使える知識を中心に、さらに実践的な内容に踏み込んでいます。
たとえば、

  • 認証まわりの機能についての総まとめ+ソーシャル連携認証の仕組みから導入まで
  • ファイルアップロードについての完全解説
  • ユニットテストの仕組みから効率良く書く方法まで
  • クラウド環境に Django サイトをデプロイする手順をイチから分かりやすく
  • 本番公開時のセキュリティについて(チェックシート付き)
  • Django サイトの高速化についての TIPS

などを盛り込んでいます。
詳しくは後述の目次をご参照ください。

いわば全編がベストプラクティスで、現場のノウハウをこれでもかと詰め込んでいます。 前作にも勝るとも劣らない、著者渾身の一作です。


なお、本書の読者としては、

  • Django をもっと知りたい方
  • 仕事の現場で本格的に Django を使いたい方
  • 前作《基礎編》を読み終えた方

を想定しています。
特に、前作《基礎編》を読み終えた方には絶対オススメです。なぜなら「基礎のちょっと先」に手を出そうと考えている人向けの本になっているからです。詳しくは後で説明します。


表紙

表紙はちょっと大人っぽいシックなカラーに仕上がっています。今回は 橋本 OSO 鉄也さんというプロの方にデザインしていただきました。前回の緑の表紙は私がお絵描きしたものだったので、ガラッと様変わりしていてパット見、同じ著者のものとは気付かない方もいるんじゃないかなと思います。

Django の語源にもなっている ジャンゴ・ラインハルトセルマーギター や「現場」のコンクリート感など、コダワリ満載です。すごくお気に入りです。



f:id:akiyoko:20180930140739p:plain:w250

f:id:akiyoko:20181002010006p:plain:w250


技術書典の帰り、あるいは通勤通学の電車・バスの中で広げてもまわりがザワザワしない表紙になっています。


目次

気になる目次は、



f:id:akiyoko:20180930140511p:plain:w250

f:id:akiyoko:20180930140547p:plain:w250




第1章: はじめに
第2章: 開発のヒント(認証まわりをサクッと実装)
第3章: 開発のヒント(Bootstrap 4 対応)
第4章: 開発のヒント(Ajax 対応と JSON レスポンス)
第5章: 開発のヒント(ファイルアップロード)
第6章: ユニットテスト
第7章: デプロイ
第8章: セキュリティの TIPS
第9章: 高速化のための TIPS
付録A:メール送信の設定
付録B:Let’s Encrypt で SSL/TLS 証明書発⾏


となっています。

表紙を除いた 本文は全 176 ページ(目次・あとがき含む)です。
文字数は16万字ほどあります(400字詰め原稿用紙 400枚!)。


f:id:akiyoko:20181003024813p:plain:w400

本の厚さは(1円玉より大きい)11 mm 超もあります。全然薄くありません。そしてただ厚いだけでなく、内容も非常に濃いです。執筆は想像を絶するほど大変でした。9月はマジ死にました。。



読みどころ

もちろん全編が読みどころなのですが、中でも特に一番の読みどころは「第7章: デプロイ」で、44ページというちょっとした同人誌一冊分 の紙面を使って、クラウド環境への Django プロジェクトのデプロイ手順を一から完全解説しています。そろそろ Heroku を卒業して、自由度の高いサーバに Django をデプロイしてみたいという人には打ってつけの内容になっているでしょう。
OS は Ubuntu 18.04、ソフトウェアは現状の最新のもの(systemd+Nginx+Gunicorn+MySQL 8.0 or PostgreSQL 10.5)を使用。公開鍵を作るという最初の一歩から(*2)最後は Let's Encrypt で常時SSL 化するところまで、一気通貫で説明しています。世の中で一番詳しい Django のデプロイ解説書 にもなっているはずです。


「第2章: 開発のヒント(認証まわりをサクッと実装)」も、Django アプリの第一歩として非常に良いリファレンス(参考資料)になると思います。ちょっとした応用編として、ソーシャル連携認証を簡単に実装する方法について、「OAuth って何?」というレベルの方にも分かりやすいようその仕組みから解説 しています。


「第8章: セキュリティの TIPS」や「第9章: 高速化のための TIPS」もぜひ読んでいただきたい章です。いざ本番リリースするという段になって、「このまま公開してセキュリティ的に大丈夫なんだろうか?」「何だか遅いように感じるけど何でだろう?」 と途方に暮れたことはありませんか? そんな現場のお悩みを解消するヒントをここに書きました。


そのほか読みどころはいろいろあるのですが、もう全部読んでくださいとしか言えません。もし目次の内容で気になるものがあれば、ぜひ買って読んでみてください。中身については絶対の自信があります。知りたかったことが見つかったり、新しい発見があったりするはずです。


《実践編》を書いた理由は?

前作《基礎編》を書いた理由は Django 開発の現場で「Django の日本語の書籍が少ない」とずっと感じていたからでした。そして技術書典4で同人誌を出し、予想をはるかに超える反響をいただきました。想像以上に現場で Django が使われているという実感を持った一方で、「それだったらもっと実践的な内容の本も必要じゃないのか?」と感じたのが今回の本を書いたきっかけです。

当初は《実践編》ではなく《応用編》としてもう少し難しい内容の本を書こうと考えていました。しかしそんなとき、匿名の方からいただいた「《基礎編》やチュートリアルの次は具体的に何をすればいいの?」という質問が目に留まりました。そういった 初級者から一歩踏み出すための教材がまだ全然ないという現状にハッと気付き、だったら「基礎のちょっと先」の本を書いてそれに応えようと考えた のでした。

「次の本」の構想はあったものの、今回の《実践編》を実際に書き始めたのは 8月に入ってからです。そして 8月の半ば頃まではほとんど 《基礎編》の Kindle版 を出すための作業をしていたので、執筆期間は実質1ヶ月半くらいでしょうか。書き始めた頃はまさかこんなページ数になろうとは考えもしませんでした。9月は特に酷くて、毎日のように朝までボロボロになるまで書き続けていました(昼間は Django じゃない仕事があって何もできないので・・)。


頒布本情報

当日のお品書きを作りました。
お釣りがなるべく出ないように考慮した「会場特別価格」です。

f:id:akiyoko:20181002011116p:plain:w400

《実践編》は B5サイズ、176ページ。
技術書典5での会場特別価格 1,500円です。

前回の技術書典では新作が3時間で完売したので、今回はドンと倍プッシュしてみました(部数はヒミツ)。当日、来場者の行列を見て「これは買えないな」と思った方でも、もしかしたら買えるかもしれませんよ。


あと、既刊の《基礎編》も多少持っていきます。

f:id:akiyoko:20181003023739p:plain:w400

こちらは先に少し言及したように、Kindle で電子版とペーパーバック(紙)版が絶賛販売中です。ありがたいことに好評をいただいているようです。

◆ Kindle(電子版)

現場で使える Django の教科書《基礎編》

現場で使える Django の教科書《基礎編》

◆ Kindle(ペーパーバック版)

現場で使える Django の教科書《基礎編》

現場で使える Django の教科書《基礎編》



頒布場所は「か06」の「あきよこブログ」です。
見本誌を置いてますので、立ち読みだけでもお気軽にどうぞ。

techbookfest.org

f:id:akiyoko:20180930143251p:plain


池袋サンシャインシティ2F、10/8(祝・月) 11時オープンです。
午前中は混雑すると思いますのでご注意を。



「Django 島」について

そして、全国の Django 好きの皆さんに朗報!!
何と今回の技術書典5では、Django の薄い本(技術同人誌)が7冊(新刊5冊・既刊2冊)出る予定 です。皆さん、10/8(祝・月)は池袋に集合やで~!!


*1:8月より、その改訂版の『現場で使える Django の教科書《基礎編》』を Kindle で販売中です。

*2:もっと言うとその前のデプロイ先の選定や Webサーバとアプリケーションサーバの違いの説明から

これぞベスト・オブ・Django 本!『現場で使える Django の教科書《基礎編》』が Kindle で販売中

akiyoko です。

8月に Kindle 版『現場で使える Django の教科書《基礎編》』 を販売しました。技術書典4 で頒布した『現場で使える 基礎 Django』の改訂本です(書籍名も変更しました)。

全面的な修正と36ページ(本文144→180ページ)の加筆をおこない、まさに「Django を現場で使うための基礎知識」として十分な内容になっているものと自負しています。


◆ Kindle(電子版)

現場で使える Django の教科書《基礎編》

現場で使える Django の教科書《基礎編》

◆ Kindle(ペーパーバック版)

現場で使える Django の教科書《基礎編》

現場で使える Django の教科書《基礎編》



改訂内容

技術書典4 版より、以下の加筆をおこなっています。

  • Django 2.1 対応(第4章など)
  • 設定ファイルについて大幅加筆(第10章)
  • マイグレーションについて加筆(第11章)
  • Docker の活用について加筆・修正(第15章・付録D)
  • Python 3、PyCharm のインストールなど初心者向けの付録を追加(付録AをA・B・Cに拡充)
  • 表紙(デザイン by 橋本 OSO 鉄也さん)

なお、技術書典4 版の読みどころについては過去記事にガッチリ書かせていただきましたので、興味ある方はぜひご参照ください。

《過去記事》
akiyoko.hatenablog.jp


対象読者

本書の対象読者としては、

  • Python の文法はある程度分かるけど Django は初めてという初心者の方
  • Django を始めてみたけど今いちコツが掴めないという初級者の方
  • Django のベストプラクティスを学びたいと考えている中級者の方

を想定しています。特に、

  • Django の日本語書籍が無くて困っている方
  • Django で一度挫折したことがある方

にピッタリな再入門書にもなっていると思います。
しかしながら、Webアプリケーション開発の経験がまるっきり無いという方には多少難しい内容になっているかもしれません。

目次

目次は次の通りです。
本文は全部で180ページです(目次およびあとがきを含む)。


第1章:はじめに
第2章:アーキテクチャ
第3章:プロジェクト構成
第4章:URLディスパッチャと URLconf
第5章:ビュー(View)
第6章:モデル(Model)
第7章:テンプレート(Template)
第8章:フォーム(Form)
第9章:ミドルウェア(Middleware)
第10章:設定オブジェクトと設定ファイル(settings.py)
第11章:データベースのマイグレーション
第12章:開発用 Web サーバ(runserver)を起動する
第13章:管理サイト(Django Admin)
第14章:便利な Django パッケージを使おう
第15章:サンプルコード
付録A:Python3 のインストール手順
付録B:PyCharm のインストールと初期設定
付録C:PyCharm による Django 開発環境の構築手順
付録D:Docker でラクラク開発
付録E:覚えておきたい Django 管理コマンド10選



f:id:akiyoko:20180930125128p:plain:w190

f:id:akiyoko:20180930125146p:plain:w190

f:id:akiyoko:20180930125206p:plain:w190



Amazon レビューより

ありがたいことに、Amazon レビューで非常に良い評価をいただいています。
いくつか紹介させていただきます。

日本語情報の少ない、待望のDjango書籍です。Django2にも対応しています。
膨大な機能のあるDjangoフレームワークの、主要な機能をわかりやすく解説しています。
図や表もよく出てきて良い感じです。
その機能がどう動いているか、どういう流れなのかといった解説もあり、フレームワーク自体への理解も助けてくれるでしょう。


個人的には、何らかのチュートリアルが終わった人、一度挫折した人、新しいDjangoを知らない人に特にオススメです。
よくまとまっていますし、いくつかのベストプラクティクスと一緒に学ぶことができます。

Djangoの最新版に対応した日本語の書籍ということで貴重な書籍だと思います。
内容も実際に業務を行う上でのポイントもかかれており、実際にDjangoで何かWebサービスを作成するうえで役に立つ本だと思いました。
公式のチュートリアルを行ってから読むとDjangoの理解が進むと思います。

プログラマーの為の実践向け書籍。
django を勉強したけど、よく理解できなかった人向け。
django 公式ドキュメントで疑問に思った多くの事を補完できた。


まとめ

これぞ「ベスト・オブ・Django 本」と言えるような本ができました。
私自身仕事で Django を使っていて「Django の基礎知識がちゃんと書いてある本がほしいなぁ」という想いで書いた本なので、特に、仕事の現場で Django を使っている人に読んでいただきたい と思っています。

ということで現在、Kindle にて『現場で使える Django の教科書《基礎編》』が絶賛販売中です! 現場に一冊、ぜひともよろしくお願いします。


◆ Kindle(電子版)

現場で使える Django の教科書《基礎編》

現場で使える Django の教科書《基礎編》

◆ Kindle(ペーパーバック版)

現場で使える Django の教科書《基礎編》

現場で使える Django の教科書《基礎編》


【追記】
10/8(祝・月)の 技術書典5 で、続編の『現場で使える Django の教科書《実践編》』を頒布予定です。ぜひ遊びにきてください!!

techbookfest.org

speakerdeck.com

無料版 PyCharm で Django 開発環境を構築するまでの手順(「現場で使える 基礎 Django」本の補講その2)

akiyoko です。
この記事では、私が執筆した Django の同人誌「現場で使える 基礎 Django」で説明しきれなかった部分の加筆・補足をしています。まだ本を読んでいない方にも読める記事になっていますので、ご安心を。

補講その2として今回は、「無料版 PyCharm で Django 開発環境を構築するまでの手順」 について取り上げます。


記事の前半で「PyCharm」の概要や利点、「Professional 版」と「Community 版」(「CE」と略されます)のエディションの違い、Professinal 版のライセンスと料金体系を説明し、後半で無料版の「PyCharm CE」を使って Django の開発環境を構築するまでの手順を解説します。


同人誌を購入済みの方のために補足すると、技術書典4 で頒布したバージョン(v1.0.0)の「付録A:macOS の Python 3 環境構築の方法」や 6月以降に再販したバージョン(v1.0.1)の「付録A:macOS における Django 開発環境の構築手順」とは若干手順が異なっていますので、すでにお読みの方はご注意ください。改訂箇所は以下の通りです。

  • (使う必然性がなかったので)Anaconda を使わないように改訂(v1.0.1)
  • 初心者でも簡単に環境構築できるように PyCharm CE を使うやり方に改訂(v1.0.1)
  • 説明を簡便にするために、Python をインストールするまでの手順を省略(本記事)
  • インストールする Python のバージョンを 3.5.2 → 3.6.5 に変更(本記事)

本ブログ記事では長々と書いていますが、同人誌ではスッキリと書いていますのでご安心ください。



《CMコーナー》
「現場で使える 基礎 Django」は現在、増刷して絶賛発売中です! 完売しました!
booth.pm

《2018/8/17 追記》
BOOTH で販売していた技術書典4バージョンの「現場で使える 基礎 Django」(紙の本)はおかげさまで完売いたしました。そしてこのたび、36ページの加筆(本文144⇒180ページ)、Django 2.1 対応などの改訂をおこなった「現場で使える Django の教科書《基礎編》」を Kindle Direct Publishing で出版することになりました。電子版と紙の本を予定しています。






PyCharm とは

PyCharm」は「統合開発環境」(IDE)と呼ばれる開発ツールで、Python で開発をする際にいろいろと便利な機能を利用することができます。 仕事の現場でメモ帳を使って開発するとあまりにも非効率なので、このようなツールが一般的に使われています。

JetBrains 社の IDE では Java 向けの「IntelliJ IDEA」や、PHP 向けの「PhpStorm」が有名ですが、Python 向けの IDE が「PyCharm」という位置付けになっています。私は、Python 開発にはもっぱらこの「PyCharm」を愛用しています。

メリットとデメリット

私が Python の開発に PyCharm を使う理由は、以下の点が気に入っているからです。

  • コードジャンプ機能と自動整形機能を使うことで開発効率が著しく向上する
  • インストールしたそのままの状態で快適に使える

その他にも以下のようなメリットがあり、Python があまり得意でない方にも便利に使うことができるのも魅力です。

  • venv」(仮想環境を作成するためのモジュール)や「pip」(パッケージ管理ツール)のコマンドの使い方が分からなくても、PyCharm の画面からポチポチと操作できる
  • Windows 版も Mac 版もだいたい同じ操作性や見た目になるのでナレッジが共有しやすい

現時点でのデメリットとしては、例えば以下のものが挙げられるかと思います。

  • 一部機能が有料の Professional 版でないと使えない(後述します)
  • 現時点で Pipenv に未対応 *1
  • conda を使っている場合に PyCharm の画面からパッケージがインストールできない不具合がある(?)


PyCharm 関連でよく話題に上がるのが、エディションとライセンス、そして料金体系です。

エディション(Professional 版と Community 版の違い)

PyCharm には有料の「Professional」版と無料の「Community」版(CE)とがあり、Community 版では一部機能が使えないといった制限があります。
機能の比較表が以下になります。 *2

f:id:akiyoko:20180616115941p:plain
Features - PyCharm より引用)


この中で私が考える Professional 版のメリットはズバリ、以下の三点です。

  • ファイルの同期とリモートデバッグ(Remote development capabilities)
  • データベースのサポート(Database & SQL support)
  • Django などの各種フレームワークのサポート(Python web frameworks)


まず、「ファイルの同期とリモートデバッグ」は、私が Professonal 版を選んでいる一番大きな理由です。ファイルの同期とはその名の通り、Vagrant や AWS の外部サーバに SFTP 等で自動的にファイルを同期してくれる機能で、実サーバで動作検証する際に非常に便利に使うことができます。リモートデバッグとは、サーバで動作させている Django のプロセスをブレークポイントで止めて IDE 内でステップ実行できる便利機能です。pdb を使ってコンソールでデバッガを使うのと比較して、見慣れた環境でデバッグできるのため効率が劇的に上がります。

二点目の「データベースサポート」は、IDE 内でデータベースのレコードを表形式で表示したり、表のセルを更新することでレコードを直感的に変更できたりと、データベースの操作を IDE 内で統合的に使えるようにしてくれる機能です。
f:id:akiyoko:20180616163255p:plain
SQLite については良さげなクライアントツールがないので個人的にこの機能は重宝していますが、例えば MySQL であれば Sequel Pro、PostgreSQL であれば「PSequel」などのクラアンとツールがあれば特に必要ないとは思います。あと、ER図の作成機能があるので、プロジェクトによってはニーズはあると思います。

akiyoko.hatenablog.jp


最後の「Django などの各種フレームワークのサポート」ですが、例えば Django の場合であれば、テンプレートエンジンに合わせたシンタックスのハイライトや、ファイルに合わせたコード補完をサポートしてくれます。これらの機能はあればもちろん便利なのですが、私の感覚では必要不可欠とまでは言えないように感じています。詳しい情報は「Full-stack Web Development - Features | PyCharm」を参考にしてください。


ちなみに後述する通り、 学生は無料で Professional が使える ので、問答無用で Professional 版を利用すればよいと思います。


ライセンスと料金体系

以降で、Professional 版のライセンスについて説明します。

2017年以降はそれまであった「永久ライセンス」は無くなり、「サブスクリプションライセンス」方式になりました。PyCharm のサブスクリプションは、継続年数によって値段が異なるので少しややこしいです。また、基本は年払いですが、初年度に限り月払い(継続課金)も可能です。 *3

ライセンスは、PC1台ごとではなく、ユーザー1人ごとの料金になっています。ライセンスが1つあれば複数マシンで(別のOSでも可)利用できる のは嬉しい限りです。ただし、同一のユーザーが使うという前提でなければいけません。 *4


次に、コマーシャルライセンスとパーソナルライセンスの違いについて説明します。両者に機能的な差はありません。目的(開発するものが企業の製品・サービスなのか否か)によって、そのライセンスが異なります。パーソナルライセンスは、個人用に使うため(企業ではなく自分のお金で自分のために使う)のものですが、商用サービスの開発にも使えるとのことです。 *5 企業の業務内で利用する場合はコマーシャルライセンスを使いましょう、とのこと。 *6


そして気になる料金体系はこちら。
正確な値段については、公式サイトを適宜ご確認ください。


【パーソナル(個人)ライセンス】 *7

継続年数 料金(年額)
1年目 89.00 USドル /年
2年目 71.00 USドル /年
3年目以降 53.00 USドル /年


【コマーシャル(企業)ライセンス】 *8

継続年数 料金(年額)
1年目 199.00 USドル /年
2年目 159.00 USドル /年
3年目以降 119.00 USドル /年


また、大学のメールアドレスなど何らかの証明が必要となりますが、学生であれば無料で Professional 版が利用できます(PyCharm だけでなく JetBrains 社の全製品が無料になります)。 *9

私は個人的に有料の Professional版を利用していますが、以降で説明する内容は無料の Community 版でも問題なく動作させることができますのでご安心ください。



Django 開発環境を PyCharm CE で構築するまでの手順

手順の解説

今回の手順について、全体像となぜそのようにするのかを Q&A形式で説明します。

まず、全体像はこちらになります。

f:id:akiyoko:20180617162502p:plain


1.Python 3 をインストール

Q.Python 3 のバージョンは何を選べばよい?
A.3.6 系の最新安定版(執筆時点の最新版は「3.6.5」)を選ぶのがよいです。しかしながら 3.5 系でも Django を使う上では特に問題ないと思います。バージョン 3.6 と 3.5 の違いについては以下を参考にしてください。


(参考)

Q.Python 3 はどうやってインストールすればよい?
A.Python 公式サイト からダウンロードしてインストールするのが一番簡単です。macOS の場合は、Python のバージョンが簡単に切り替えられるように Pyenv というツールを使ってインストールすることをオススメしますが、やや手順が面倒になります。同人誌の付録では Pyenv を使ってインストールする手順についても説明しています。

Q.venv とは?
A.仮想環境作成モジュールです。Python 3.3 以降では「venv」が標準で付属しており、Python 3.5 以降は仮想環境を作成するのに(「virtualenv」や「pyvenv」ではなく)「venv」が推奨されています。 *10

Q.pip とは?
A.Django などの Python パッケージをインストール・アンインストールするためのパッケージ管理ツールです。Python 3.4 以降では「pip」が標準で付属しています。 *11


2.PyCharm をインストール

Q.なぜ PyCharm を使うの?
A.開発しやすいのが一番の理由です。そのほか、「venv」(仮想環境を作成するためのモジュール)や「pip」(パッケージ管理ツール)に詳しくなくても PyCharm の画面をポチポチ操作するだけで仮想環境を作れたり、ライブラリをインストールしたりできるので、初心者にも優しいツールになっています。

Q.初期設定は?
A.PyCharm は「out of the box(箱から取り出してすぐに使える、難しい設定などは一切なしで使える)」というのが大きな魅力のひとつですので、インストール直後の状態でほとんどそのまま使えます。より開発しやすくするための最低限の設定については、拙ブログの過去記事「 PyCharm のオレオレ最強設定 - akiyoko blog」を参考にしてください。


3.PyCharm プロジェクトを作成

Q.PyCharm プロジェクトを作成するときに何を指定すればよい?
A.ワークスペースのディレクトリのパス、仮想環境のディレクトリのパス、Python インタープリタのパスを指定します。ワークスペース以外はプロジェクト作成後でも指定できますが、プロジェクト作成時に済ませておくことをオススメします。

Q.ワークスペースのディレクトリは何を設定すればよい?
A.私はデフォルトのディレクトリを使っています。macOS であれば「~/PycharmProjects/」がデフォルトのワークスペースを配置する場所になります。

Q.仮想環境のディレクトリのパスは何を設定すればよい?
A.デフォルトのまま、プロジェクトが作成されるディレクトリ直下に「venv」という名前のディレクトリを作ればよいでしょう。

Q.Python インタープリタのパスは何を設定すればよい?
A.macOS であれば「which python3」で表示されるパス (*12)、Windows であれば「where python」で表示されるパスを指定します。

Q.Django をローカルPC にインストールするのはなぜ?
A.以下の理由があります。

  • Django に同梱されている django-admin.py(Django 管理コマンドユーティリティ)でプロジェクトのひな形を作るため
  • プロジェクトのひな形作成時に生成される manage.py(プロジェクト管理コマンドユーティリティ)でアプリケーションのひな形を作るため
  • PyCharm 上で Django モジュールへのコードジャンプができるようにするため



以降で、無料版 PyCharm で Django 開発環境を構築するまでの手順を実際に進めていきます。なお、私の環境は macOS 10.13(High Sierra)でそれを前提に進めていきますが、Windows 環境でも問題なく進められると思います。



1.Python 3 をインストール

Python 公式サイト から Python 3 をインストールします。
なお、macOS にはデフォルト状態では Python 2.7 が入っています。Windows 10 の場合は Python はインストールされていないと思います。

https://www.python.org/downloads/ から、インストーラをダウンロードします。

f:id:akiyoko:20180617173533p:plain


インストーラをダブルクリックしてインストールします。

f:id:akiyoko:20180617174009p:plain:w400

macOS の場合は自動的に PATH に指定されますが、Windows の場合はインストーラ実行時に「Add Python 3.6 to PATH」をクリックして PATH に追加します。

f:id:akiyoko:20180617174021p:plain:w350


今回の場合では、macOS では「python3」として実行できるようになります(Windows の場合は「python」)。


(macOS 10.13 の場合)

$ python3 --version
Python 3.6.5

$ which python3
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3

(Windows 10 の場合)

> python --version
Python 3.6.5

> where python
C:\Users\akiyoko\AppData\Local\Programs\Python\Python36-32\python.exe

 

2.PyCharm CE をインストール

https://www.jetbrains.com/pycharm/download/ から、Community 版である「PyCharm CE」のインストーラをダウンロードします。

f:id:akiyoko:20180617174742p:plain


インストーラをダブルクリックしてインストールを完了させます。



PyCharm CE を起動すると、いくつか初回設定を選択する画面になりますが、こちらは自分のスタイルに合わせて適宜選択します(後で変更し直すこともできます)。

なお、最初に出てくるキーマップ(keymap scheme)は、以前から使っているユーザーであれば「Mac OS X 10.5+ keymap」がよいかと思います。PyCharm 公式ショートカット一覧(Windows版 / Mac版)も非常に役立ちます。

f:id:akiyoko:20180617174858p:plain:w500
f:id:akiyoko:20180617174913p:plain:w500
f:id:akiyoko:20180617174927p:plain:w500
f:id:akiyoko:20180617174940p:plain:w500



3.PyCharm プロジェクトを作成

PyCharm プロジェクトを作成するには、PyCharm 起動後に「Create New Project」をクリックします。

f:id:akiyoko:20180617175016p:plain:w400

次の内容を入力してプロジェクトを新規作成します。
この際、「Virtualenv」を指定することで、プロジェクトごとに仮想環境が作成されます(仮想環境のディレクトリ名は「venv」としています)。 *13

項目 設定値
Location: 「/Users/akiyoko/PycharmProjects/mysite」
New environment using: 「Virtualenv」
Location: 「/Users/akiyoko/PycharmProjects/mysite/venv」
Base interpreter: 「/Library/Frameworks/Python.framework/Versions/3.6/bin/python3」(「which python3」の実行結果をコピー&ペースト (*14))

f:id:akiyoko:20180617175028p:plain

PyCharm プロジェクトが作成されました。

f:id:akiyoko:20180617175045p:plain


「Preferences」(⌘ + ,)から「Project Interpreter」を開き、下部の「+」ボタンをクリックして、Python パッケージをインストールする画面を開きます。

f:id:akiyoko:20180617175102p:plain

例えば、「Django」を検索して、現時点の 2系の最新版である「2.0.6」をインストールします。

f:id:akiyoko:20180617175118p:plain

依存パッケージを含めてインストールが完了しました。

f:id:akiyoko:20180617175143p:plain

次に、左下のアイコンをマウスオーバーして「Terminal」を選択すると、仮想環境がアクティベートされたターミナルが起動します。

f:id:akiyoko:20180617175200p:plain

アクティベートされない場合は、「Preferences」から[Tool]>[Terminal]>[Activate virtualenv]にチェックが入っているかを確認してみてください。

f:id:akiyoko:20180617175224p:plain

それでもダメな場合は、仕方なく以下のコマンドを実行します。

$ source venv/bin/activate


 
最後に、ターミナル上で次のコマンドを実行して、Django プロジェクトのひな形を作成します。設定ディレクトリ名は拙書に倣って「config」としています。

(venv) $ django-admin.py startproject config .


これで PyCharm で Django を開発する環境が整いました。


最後に

最後に一番大事な話。
4月に「技術書典4」で販売して即完売した「現場で使える 基礎 Django」が、現在増刷して絶賛発売中です!完売しました!

無償の PyCharm CE を利用すれば、仮想環境を作成するための「venv」やパッケージ管理ツールの「pip」のことがよく分からなくても、Python 開発のためのプロジェクトを簡単に作成することができます。今回紹介した手順に従えば、Django の開発環境もラクラクと構築することができると思います。これで安心して Django の開発に取り組めますよね。あとはこの本を読んで勉強するだけですよね。

booth.pm


この本は B5サイズ・148ページの 本格的な Django 解説書 ですが、Django を仕事の現場で6年ほど使っている私が 「現場でこんな本があったらなぁ」という想いで書いたので、仕事で使っているあなたにぴったりな本 に仕上がっているはずです。
そしてこの本は特に、

  • Django の日本語書籍が無くて困っている方
  • Django で一度挫折したことがある方

に絶対オススメの一冊となっています。


過去記事で読みどころの解説や読者の方々の評価を紹介していますので、気になる方はこちらも合わせてご覧ください。

《過去記事》
akiyoko.hatenablog.jp

Django 1.11 と 2.0 の違い (「現場で使える 基礎 Django」本の補講その1)

akiyoko です。
この記事では、私が執筆した Django の同人誌「現場で使える 基礎 Django」で説明しきれなかった部分の加筆・補足をしています。まだ本を読んでいない方にも読める記事になっていますので、ご安心を。

補講その1として今回は、「Django のバージョン」、とりわけ「Django 1.11 と 2.0 の違い」 について取り上げます。


「現場で使える 基礎 Django」の表紙に書かれた 「1.11 LTS 対応」という文字を見て、「なーんだ、最新の Django 2 じゃないのかよ!」と敬遠している貴方のためにせっせと書き上げました。


《宣伝》

「現場で使える 基礎 Django」は現在、増刷して絶賛発売中です! 完売しました!
booth.pm

《2018/8/17 追記》
BOOTH で販売していた技術書典4バージョンの「現場で使える 基礎 Django」(紙の本)はおかげさまで完売いたしました。そしてこのたび、36ページの加筆(本文144⇒180ページ)、Django 2.1 対応などの改訂をおこなった「現場で使える Django の教科書《基礎編》」を Kindle Direct Publishing で出版することになりました。電子版と紙の本を予定しています。



Django のバージョンについて

昨年2017年12月に、Django 2.0 がリリース されました。
Wikipedia によると 1.0 がリリースされたのが2008年9月なので、実に9年3ヶ月ぶりのメジャーバージョンアップとなりました。


それから半年ほど経ちましたが、現場ではまだ1系と2系が混在している、いわば過渡期の状況ではないでしょうか(あくまで私の肌感覚ですが)。


理由は3つほど考えられます。

【理由その1】

まずは、LTS の問題です。LTS とは「Long-Term Support」の略で、開発コミュニティからセキュリティパッチが長期間提供される特別なバージョンのことを指します。その点、Django 2系はまだ LTS バージョンがリリースされていません。LTS として予定されている「2.2」のリリースは 2019年4月となっており、まだ 10ヶ月ほど先になっているのが、2系へのバージョンアップに踏み切れない理由の一つに挙げられます。

f:id:akiyoko:20180531235800p:plain:w500
Django のバージョンごとのサポート状況
(画像は https://www.djangoproject.com/download/ より引用)


すでに次期 LTS の「2.2」のロードマップも細かく決まっていて(多少ずれるようですが)、2019年の4月にリリースされることが予定されています。

予定日 詳細
2019年1月14日 Django 2.2 アルファ版; 追加機能凍結
2月15日 Django 2.2 ベータ版; バグフィックス凍結(致命的なバグ対応は除く)
3月15日 Django 2.2 RC 1(リリース候補); 翻訳凍結
4月1日まで Django 2.2 正式版

https://code.djangoproject.com/wiki/Version2.2Roadmap より)


なお、1系のマイナーバージョン「1.12」はリリースされないことが決まっているため、「1.11」が 1系で最後のマイナーバージョンとなります。1系の最新バージョン は本記事の執筆時点で「1.11.14」となっています。


ということで、ビジネスで利用するとなると公式サポートが長い 1系がまだまだ主役の場合が多いのではないでしょうか。実際、現場の動きとしては「早く 2系へ移行しなければ!」という切迫感はまだあまり感じられません。

【理由その2】

次に、「Django 2系が Python 2のサポートを打ち切った」というのも、Django 2 への移行を阻害している大きな要因になっているのではないかと考えています。例えば、Python 2 で実稼働している Django 1系のプロジェクトでは、直ちに 2系にバージョンアップできない事情もあるでしょう。

【理由その3】

最後に、状況によっては利用しているライブラリが Django 2 にまだ対応していないということも考えられます。


結論として、現時点では、仕事の現場で使うなら「1.11 LTS」(2.2 LTS に向けて 2.0 から追従していくなら 2系でもOK)、趣味や研究で利用するなら「2系」を使えばよい と私は考えます。





ここで、実際の Django のバージョン別の利用状況を見てみましょう。

5月に開催された DjangoCongress JP 2018 で発表された事前アンケートの結果によると、Django 各バージョンの利用状況は以下の通りでした。


f:id:akiyoko:20180530221907p:plain:w300
DjangoCongress JP 2018 事前アンケート 画像を akiyoko が編集)

Django バージョン 利用率
1.8 以前 約 12 %
1.8 LTS 約 20 %
1.9〜1.10 約 21 %
1.11 LTS 約 24~25 %
2.0 約 22~23 %


2.0 の利用率が22~23 %にとどまっているという結果は要注目です。私の率直な感想は「意外と少ないなぁ」でした。半分まではいかないとしても、もう少し多いのかなと予想していました。もちろんアンケート自体は何ヶ月か前から収集していたはずなので、現時点での数値とは多少の開きがあるとは思いますが。


Django 1.11 と 2.0 の変更点

Django 2.0 のリリースノート には、1系の最終バージョンである「1.11」から「2.0」への変更点が記載されています。


大きな変更点としては、

  • Python 2 のサポートが打ち切られた
  • URLconf の書き方が簡単になった(django.urls.path() が追加)
  • モデルの ForeignKey と OneToOneField で「on_delete」オプションが必須に

が挙げられるでしょうか。後で詳しく説明します。

それ以外の細かな変更点のうち個人的に気になったところを以下にズラズラと挙げましたが、ぶっちゃけ、そこまで大きな変更点はありません。 一番インパクトが大きいのはやはり、上で挙げた 「Python 2 のサポート打ち切り」 でしょう。

  • ミドルウェアを settings.py で設定する際の変数「MIDDLEWARE_CLASSES」が廃止(「MIDDLEWARE」を使う)
  • User.is_authenticated() と User.is_anonymous() がメソッドではなく、属性になった
  • 管理サイトの画面がレスポンシブ対応に
  • Window 関数の OVER 句に対応
    • MySQL では 8.0.2 以降で対応
  • MySQL でクエリ内の「__search」ルックアップが使えなくなった
  • MySQL のトランザクション分離レベル(isolation level)のデフォルトが「read committed」に。1系では「repeatable read」だった
  • runserver で立ち上がるサーバが HTTP/1.1 に対応
  • django.conf.urls.include() の namespace を指定するときは、インクルード先の URLconf に app_name の指定が必須になった
    • app_name が指定されてあって、且つ namespace を include の引数として指定すると、値を上書きできるっぽい
  • django.conf.urls.include() の app_name 引数がなくなった
  • カスタムテンプレートタグがキーワード引数のみを許容
  • handler404 などのハンドラがコーラブルに(1系ではドット区切りの文字列だった)
  • バイト文字列はインプット・アウトプット以外の部分では扱わないようになった *1
  • AbstractUser.last_name の max_length が 150 に増えた(これまでは 30)
  • クエリをスライシングした後に QuerySet.reverse() や last() ができなくなった
  • 外部キー制約が SQLite でも有効に
  • QuerySet.iterator() が一度に取得する行数が 100 から 2000 になった

ここに挙げたものの中には検証していないものも多々ありますので、誤訳や誤解がありましたらご指摘いただけるとありがたいです。




大きな変更点として挙げた3点について、詳しく説明していきます。

1. Python 2 のサポート打ち切り

先に述べた通り、Django 2.0 では Python 2系のサポートが打ち切られました。Django 2 を使う場合には、Python 3.4 以降が最低限必要になります。Django 1.11 および 2.0 がサポートする Python のバージョンをまとめたものが以下の表になります。

  Python 2.7 3.4 3.5 3.6 3.7
Django 1.11
Django 2.0


(Python 2 系をサポートする最後のバージョンである)Django 1.11 LTS のサポートは早ければ 2020年4月に終了、Python 2.7 自体のバグフィックスのサポートは2020年1月に終了 するので、Python 2 を使っているプロジェクトは2019年末までには3系への移行を済ませる必要があります。

Python 2 で苦労した私としては、Python 2 のサポートをバッサリ切ったことはかなり嬉しいのですが、対応に追われるプロジェクトも今後出てきて大変そうだなという印象です。 *2


2. URLconf の書き方(URL ルーティングのシンタックス)

Django 1系では、正規表現の URL ルーティングは django.conf.urls.url() 関数を使って

from django.conf.urls import url

...(略)...
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
url(r'^shop/(?P<book_id>\d+)/$', views.detail, name='shop_detail'),

というシンタックスで書いていましたが、新しく追加された django.urls.path() 関数を使って

from django.urls import path

...(略)...
path('articles/<int:year>/', views.year_archive),
path('shop/<int:book_id>/', views.detail, name='shop_detail'),

と簡潔に書くことができるようになりました。
django.conf.urls.url() を使った書き方は、Django 2.0 でもそのまま使えるように互換性が保たれていますし、同じ用法で使える django.urls.re_path() が追加されたのでそれを使って書き直してもよいと思います。

3. ForeignKey と OneToOneField で「on_delete」オプションが必須に

モデルの ForeignKey と OneToOneField で「on_delete」フィールドオプションが必須になりました。このあたりは、「現場で使える 基礎 Django」の中でもしっかり説明してあります。


booth.pm



ここで、細かな変更点のうち、Windows 関数のサポートについても少し説明を加えておきます。

Window 関数について

Windows 関数は、あるまとまったデータ群(Window で区切られた集合)に対して集計処理をするための機能です。ランク付け(RANK 関数を使う)が一番理解しやすいでしょうか。なお、全ての Window 関数には「OVER句」が必要になります。

(参考)[SQL] 最強の分析ツールと言われるWindow関数について私が学んだこと | Developers.IO


Window 関数自体は、PostgreSQL や Oracle では以前からサポートされていましたが、MySQL では 8.0.2 以降で導入されています。なお、Django 組み込みのバックエンドも PostgreSQL、Oracle、MySQL(8.0.2以降)で Window関数をサポートしていますが、データベースの種類と関数によってはサポートが異なる場合もあるとのことです。 *3




最後に、MySQL のトランザクション分離レベルについて調べたことを書いておきます。

MySQL のトランザクション分離レベルについて

tree-tips: MySQLのトランザクション分離レベル | MySQL」に簡潔にまとめられていたのですが、1系でデフォルトだった「repeatable read」は 2系でデフォルトになる「read committed」に比べて「ファジーリード」(他セッションがコミットした更新データを参照してしまう)や「ファントムリード」(他セッションがコミットした追加データを参照してしまう)は起きないが、性能は「read committed」の方がよい(バージョン管理の範囲が狭くなるため)とされています。

MySQL 自体のデフォルトの分離レベルは MySQL5.6の公式ドキュメント によると「repeatable read」で、8.0 でも変わりません(変わるという噂もあるようですが)。それに対して、Oracle、PostgreSQL、SQL Server などでは「read committed」がデフォルトとなっています。

(参考)

 

そもそも 2.0 へのバージョンアップは必要なのか?

さて、そもそも 2.0 へのバージョンアップは必要なのでしょうか?


パッケージをアップデートする理由は、

  • 新しいバージョンで導入された新しい機能や改善点を利用したい場合
  • バグ修正によるリスク減少
  • セキュリティパッチのサポート延長
  • 一気にバージョンアップすることのコストを抑える
    • 例えば、LTS から LTS への大ジャンプはコストが掛かるため、普段から出来るかぎり最新バージョンに追随しておく
  • 依存しているパッケージ・言語のサポートの問題

などが考えられます。 *4


しかしながら、これらのメリットが無いのであれば、現在使っているパッケージを無理にバージョンアップさせなくてもよいでしょう。バージョンアップしなくても、例えば、特定箇所のバグ修正であれば手動でバックポートすることで対応できることもあります。


最後に

最後に一番大事な話。
4月に「技術書典4」で販売して即完売した「現場で使える 基礎 Django」が、現在増刷して絶賛発売中です! 完売しました!

対象バージョンは「Django 1.11 LTS」となっていますが、この記事で説明したように、Django の「1.11 LTS」と「2.0」は(Python 2 のサポート以外は)それほど大きな変更点はなく、「2.2 LTS」がまだリリースしていないため様子見が必要ということを踏まえると、もう買うしかないという気持ちになってきたはずですよね。

booth.pm


この本は B5サイズ・148ページの 本格的な Django 解説書 ですが、Django を仕事の現場で6年ほど使っている私が 「現場でこんな本があったらなぁ」という想いで書いたので、仕事で使っているあなたにぴったりな本 に仕上がっているはずです。
そしてこの本は特に、

  • Django の日本語書籍が無くて困っている方
  • Django で一度挫折したことがある方

に絶対オススメの一冊となっています。


過去記事で読みどころの解説や読者の方々の評価を紹介していますので、気になる方はこちらも合わせてご覧ください。

《過去記事》
akiyoko.hatenablog.jp


*1:困っている人は「Django 2.0へのアップデート (Removed support for bytestrings編)」の記事が参考になるはず!

*2:他人事ではないのが恐ろしいところ。。

*3:Query Expressions | Django documentation | Django

*4:Upgrading Django to a newer version | Django documentation | Django を参考

「現場で使える 基礎 Django」ってどんな本? その読みどころをガッチリ解説

akiyoko です。

今回は、4月22日の「技術書典4」 *1 で頒布した人生初の技術同人誌 『現場で使える 基礎 Django』 の概要と読みどころについて解説します。


現在、オンラインショップの「BOOTH」にて、増刷した紙の本が 販売中です。*2 完売しました!

booth.pm

《2018/8/17 追記》
BOOTH で販売していた技術書典4バージョンの「現場で使える 基礎 Django」(紙の本)はおかげさまで完売いたしました。そしてこのたび、36ページの加筆(本文144⇒180ページ)、Django 2.1 対応などの改訂をおこなった「現場で使える Django の教科書《基礎編》」を Kindle Direct Publishing で出版することになりました。電子版と紙の本を予定しています。





 

概要

どんな本?

この本は、B5サイズ・148ページの 本格的な Django 解説書 です。

Django を仕事の現場で6年ほど使っている私が、日本語で書かれた書籍が少なくてずっと困っていたので自ら書きました。「現場でこんな本があったらなぁ」という想いで書いたので、仕事で使っているあなたにぴったりな本に仕上がっている はずです。


表紙はこんな感じです。
電車の中でも読めるようなものがよいと思い、派手さは極力抑えるようにしました。

f:id:akiyoko:20180531233638p:plain:w200


いわゆる「技術系同人誌」というジャンルの自費出版本になりますが、いたって真面目な技術解説書です。

表紙も含めて基本的に一人で作り上げました。レビューには Django 界隈から有志の方二人と、同僚二人に協力していただきました。スタートから入稿まで二ヶ月ほどで書きましたが、執筆にかかった時間は優に300時間を超えていると思います *3


 

内容は?

目次はこのようになっています(クリックで拡大します)。



f:id:akiyoko:20180416234902p:plain:w160

f:id:akiyoko:20180416234958p:plain:w160

f:id:akiyoko:20180416235011p:plain:w160


この本は、サンプルプロジェクトを実装ながら(読者によっては実際に手を動かしながら)技術要素を順番に説明していくような、いわゆるチュートリアル本ではありません。Django の全体像から構成要素の詳細まで、基本動作やハマりやすいポイントについて幅広く解説した本です。読者の方々に「Django って意外と簡単だな」と感じていただけることを目指して、基礎から詳しく丁寧に解説しています。


本書の構成としては、第 3 章までで Django の全体像や重要な概念の説明をおこない、 第 4 章以降でそれぞれの構成要素の説明をしながら、私の知見や経験から得たベストプ ラクティスについても紹介しています。


f:id:akiyoko:20180526163355p:plain:w250


対象読者

本書の対象読者としては、

  • Python の文法はある程度分かるけど Django は初めてという初心者の方
  • Django を始めてみたけど今いちコツが掴めないという初級者の方
  • Django のベストプラクティスを学びたいと考えている中級者の方

を想定しています。特に、

  • Django の日本語書籍が無くて困っている方
  • Django で一度挫折したことがある方

にピッタリな再入門書にもなっていると思います。
しかしながら、Webアプリケーション開発の経験がまるっきり無いという方には多少難しい内容になっているかもしれません。

 

本の評判

日本語のまとまった情報が少ないということでやはりニーズが高かったのでしょうか、技術書典4 では(強気で刷った)300部が3時間ほどで完売してしまいました。当日は初参加の上に予想をはるかに超えた売れ行きにてんてこ舞いで、全く余裕がありませんでした。



Twitter に上がっていた Django 本の感想を勝手にピックアップさせていただきました。おおむね好評のようで、ほっとしました。



本を買っていただいた上に感想までブログに書いてくださった心優しい方も何人かいらっしゃいました。本当にありがとうございます。こちらも勝手に貼り付けさせていただきます。



匿名の読後アンケートフォーム を用意して感想を聞かせていただいたのですが(現在も絶賛募集しているので是非とも感想をお願いします)、その結果もおおむね良かったようです。改善すべき点としてご指摘いただいた部分については(すでに v 1.0.1 で対応したものもありますが)今後の改訂や補足ブログのネタにさせていただきたいと思います。



 

読みどころ

章ごとの簡単な解説をしながら、本書の読みどころについて書いていきます。

第1章: はじめに

1.1  なぜ今 Django なのか?
1.2  本書について
1.3  動作環境と各種バージョン
1.4  まとめ

短く書きたかったのですが、勢い余って長くなってしまった序章。

機械学習などで Python を使う人が増えているので、Django もどんどん盛り上がってくるよねという書き出しだったのですが、実際、私がよく参加させていただいている fin-py でも「Django の勉強がしたい」という声がちらほら聞こえていましたし、最近では日本では初めての DjangoCongress が今年5月に開催されるなど、本格的な盛り上がりを感じます。


Django に少し詳しい人なら気になるのが、Django のバージョンでしょう。結論から言えば、仕事で使うなら今はまだ「1.11 LTS」、趣味で使うなら「2系」を使えばよいと考えています。この本では仕事の現場にフォーカスしたので「1.11」推しとなっていますが、実際には 1.11 と 2.0 はそんなに違いがありません(Python 2 のサポートが切られたことを除いて)。これについては追々、補足のブロク記事で解説したいと思います。


(2018/6/15 追記)
補講記事をアップしました。
akiyoko.hatenablog.jp


Python は 3.5系で動作確認しましたが、これは 3.6系でも特に問題ないはずです。改訂するのであれば、3.6系を前提に書きたいと考えています。

第2章: アーキテクチャ

2.1  全体像
2.2  MTVフレームワークとは?
2.3  まとめ

何事にもまずは全体像から掴んだ方が理解しやすいので、大枠から解説。ビューやフォーム、モデルなどの構成要素(コンポーネント)がどのように連携しながら動作しているのかを、図を見ながらざっくりと理解することができます。

第3章: プロジェクト構成

3.1  プロジェクトとアプリケーション
3.2  django-admin.py と manage.py
3.3  よくあるプロジェクト構成
3.4  ベストプラクティス1: 分かりやすいプロジェクト構成
3.5  まとめ

本章の読みどころは、startproject コマンドや startapp コマンドを使って自動生成されたファイルの説明と、分かりやすいプロジェクト構成についてです。 *4

第4章: URL ディスパッチャと URLconf

4.1  概要
4.2  URLconfの書き方
4.3  ベストプラクティス2: アプリケーションごとに urls.py を配置する
4.4  まとめ

リクエストをビュー関数に振り分ける「URLディスパッチャ」と、リクエスト URLとビュー関数をマッピングしている「URLconf」(URL設定)についての解説です。URLconf については 2系で書き方が新しくなる(ただし 1系の書き方も継続して使える)ので、そちらは補足ブログで追記したいと考えています。

第5章: ビュー(View)

5.1  概要
5.2  ビュー関数の書き方(関数ベース vs クラスベース)
5.3  全ての基本となる基本汎用ビュー
5.4  シンプルでよく使う基本汎用ビュー
5.5  さまざまな用途に特化した汎用ビュー
5.6  ログイン・ログアウトについて
5.7  まとめ

本書では、関数ベースのビューについてはほとんど説明しておらず、クラスベースビューを中心に解説しています。クラスベースビューを使う理由やメリットについてももちろん書いていますし、デメリットである継承の複雑さやオーバーライドできるメソッドや変数がどうなっているかについては、解決のヒントを提示しています。

この章に書いた、Django でのログイン・ログアウト処理は実はややこしいのですが、よく分かっていなかった人もこれを読めばだいぶスッキリすると思います。

第6章: モデル(Model)

6.1  概要
6.2  モデルクラスの書き方
6.3  「一対一」「多対一」「多対多」リレーションはどう定義するか?
6.4  よく使われるUserモデル
6.5  モデルマネージャとクエリセット
6.6  単体のオブジェクトを取得する
6.7  複数のオブジェクトを取得する
6.8  単体のオブジェクトを保存・更新・削除する
6.9  ベストプラクティス3: Userモデルを拡張する
6.10  ベストプラクティス4: 発行されるクエリを確認する
6.11  ベストプラクティス5: select_related / prefetch_related でクエリ本数を減らす
6.12  まとめ

便利だけど実はいろいろとややこしい、そんなモデルを分かりやすく解説しています。

この章は本書で最もページ数を割いたトピックですが、なぜそんなにページ数を割いたかというと、個人的にモデルが Django 最強の武器(そして最も厄介な諸刃の剣)だと考えているからです。Django を使う場合は DB を使わないことは少ないと思いますので、モデルの仕組みを理解するのは必須でしょう。

モデルの設計で重要な「一対一」「多対一」「多対多」のリレーションについては、基本から説明しています。分かりにくいモデルマネージャとクエリセット、遅延評価、関連先モデルの JOIN についても詳しく説明しています。発展編として、あまり知られていない(と思われる)「select_related」「prefetch_related」の使いどころや実際に発行される SQL 文を確認する方法についても解説しています。

またこの章では、Django の User モデルについても解説。ややこしい継承関係や User モデルのカスタマイズ方法についても取り上げています。

第7章: テンプレート(Template)

7.1  概要
7.2  変数表示
7.3  フィルタ
7.4  テンプレートタグ
7.5  ベストプラクティス6: ベーステンプレートを用意する
7.6  まとめ

Django がデフォルトのテンプレートエンジンとして利用している「DTL(Django Template Language)」の記法について解説(Jinja2 については解説していません)。数あるフィルタやテンプレートタグの中からよく使うものをピックアップして紹介しています。

第8章: フォーム(Form)

8.1  概要
8.2  バリデーションの仕組み
8.3  フォームクラスの書き方
8.4  ビューやテンプレートからフォームを利用する方法
8.5  CSRF対策について
8.6  ベストプラクティス7: こんなときは ModelForm を継承しよう
8.7  まとめ

ユーザーの入力データを保持するためのフォームですが、やはりキモとなるのはバリデーションですよね。フォームでは is_valid() を起点としてさまざまなメソッドが順番に呼ばれますが、そのややこしいバリデーションのフローを図を使って分かりやすく解説しています。また、さらにややこしい ModelForm についても何とか一枚の図にまとめてみました。必見です。

エラーに悩まされた方も多いであろう、CSRF対策(csrf_token)についてもこの章で解説しています。

第9章: ミドルウェア(Middleware)

9.1  概要
9.2  主なミドルウェアの役割
9.3  ミドルウェアの書き方
9.4  ベストプラクティス8: メッセージフレームワークを使う
9.5  まとめ

Django のミドルウェア、何となく使ってませんか?

見逃されがちなミドルウェアですが、実は縁の下の力持ちなんですよね。ということで、新規プロジェクト作成時にデフォルトで設定されるミドルウェアの役割や必要性などについて解説しています。

また、便利なメッセージフレームワーク(いわゆるフラッシュメッセージ)については、注意点やちょっとした TIPS とともにベストプラクティスとして解説しています。

あと、1.11 から導入された ミドルウェアの新しい書き方 についても言及しています。django.utils.deprecation.MiddlewareMixin を継承する書き方は非推奨にマークされているので、要注意です。

ミドルウェアについてここまできちんと書いている Django の書籍は、おそらくこれまで無かったと思います。

第10章: 設定オブジェクトと設定ファイル(settings.py)

10.1  概要
10.2  インストールするアプリケーション一覧
10.3  デバッグ設定
10.4  静的ファイルパス関連の設定
10.5  ロギングの設定
10.6  その他の重要な設定
10.7  ベストプラクティス9: 個人の開発環境の設定は local_settings.py に書く
10.8  ベストプラクティス10: シークレットな変数は .env ファイルに書く
10.9  まとめ

実はこの章が本書の一番のウリかもしれません。匿名の読後アンケート でも最も評価が高かった章の一つでもあります。

Django でつまづくパターンとして、settings.py によく分からない設定がたくさん羅列してあるのを見たり、runserver を動かしたときに何だか分からないエラーが出たりして途方に暮れる、というのがあるのではないでしょうか。あるいは、「この設定って何が正解?」「動いたけどこのままでいいんだろうか?」と悩みながら何となく使っているのではないでしょうか。

また、

  • 「INSTALLED_APPS」にはアプリケーション名を書くべきか、それとも apps.py の AppConfig のサブクラスを書くべき?
  • 静的ファイルパス関連の「STATIC_URL」「STATIC_ROOT」「STATICFILES_DIRS」の違いは一体何なの?
  • 「SECRET_KEY」や「ALLOWED_HOSTS」って何に使うの?
  • 「LOGGING」は具体的にどう設定すればいいの?

など疑問は尽きないと思います。この章ではこれらの疑問に全てお答えしています。

そして現場で利用するなら必須のベストプラクティスとして、本番用の settings.py と個人開発用のものを分けるための方法や、シークレットな変数値を環境変数に分離する方法などについても解説しています。

第11章: データベースのマイグレーション

11.1  概要
11.2  マイグレーションコマンドについて
11.3  まとめ

マイグレーションについての説明は短め。実際の運用ではもう少しディープな理解が必要かもしれませんが、紙面の都合で割愛しました。

第12章: 開発用 Web サーバ(runserver)を起動する

12.1  概要
12.2  runserver コマンドについて
12.3  まとめ

開発用の Web サーバ(runserver)の特徴や使い方、Docker で利用する場合の注意点について書きました。こちらも割とシンプルにまとめています。

第13章: 管理サイト(Django Admin)

13.1  概要
13.2  モデルの登録方法
13.3  一部機能のカスタマイズ方法
13.4  利用条件
13.5  使い方
13.6  まとめ

Django の便利な点として、この管理サイト(Django Admin)が挙げられるかと思います。ログインできるユーザーや権限などの利用条件、一部機能のカスタマイズ方法など、少し詳しめに解説しています。

第14章: 便利な Django パッケージを使おう

14.1  概要
14.2  DRY系パッケージ
14.3  開発補助系パッケージ
14.4  まとめ

実際に開発する際にほぼ必須の知識になってくる「Django パッケージ」について、選定のコツや私のオススメするパッケージをいくつか紹介しています。

第15章: サンプル実装

「本のオンラインショップ」をテーマに、ログイン・ログアウトまわりを中心に実装したサンプルプロジェクトです。本書で説明したことをベースにしたサンプル実装になっており、コードには日本語の説明をなるべく多く書きました。紙面の都合でコードの掲載はカットし、その代わりにソースコードのURLを載せています。

付録

付録A: macOS における Django 開発環境の構築方法
付録B: Docker でラクラク開発
付録C: 覚えておきたい Django 管理コマンド 10 選

ローカルPC への Python の導入方法については、技術書典バージョンでは Anaconda を使った方法について書いていましたが、読者の方からの指摘を受けて、「v1.0.1」(BOOTH での6月以降販売分)ではよりシンプルな方法に修正しています。また、Django の開発環境についても PyCharm をベースにしたものに書き直しました。

あと、自分でも最近取り入れて良かったと思っているのが「Docker でラクラク開発」です。ローカルPCの環境を汚すことがなく、要らなくなったらすぐに環境を作り直せるので、開発や検証が容易になります。



 

おわりに

「現場で使える 基礎 Django」ってどういう本なの? 買うべきなの? と悩んでいる人向けに、この本はどういう本なのか、誰にピッタリな本なのかを解説してみました。

仕事の現場で使っている人を主なターゲットにしていますが、仕事ではなく趣味で使ってるという方や、2系の情報が知りたいという方にも有益な情報がたくさん含まれているはずですので、是非ともお手にとっていただければと思います。よろしくお願いします。


《販売サイトはこちら》


おまけ

DjangoCongressJP 2018 の一日目に一般参加したのですが、偶然にも LT で発表させていただく機会を得て、「Django の同人誌を書いた話」というテーマで登壇しました。

意外と小心者なので、テンパって噛みまくりでお聞き苦しかったかと思います。その節は大変失礼いたしました。

*1:春と秋の年二回ずつ開催される、技術者による技術者のための技術系同人誌の販売イベント。今回は4回目の実施となり、参加者は6,000人を超えました。 https://techbookfest.org/event/tbf04

*2:技術書典4で頒布したものから少しだけ改訂した「v1.0.1」バージョンになります。ページ数は同じです。

*3:多忙な時期とも重なり、本当に死ぬほど疲れました。。

*4:しかしながら、これがベストか?については異論あると思います。もう少し複雑になった場合の本格的なプロジェクト構成について、もし続編を書くのであればこのあたりも補足してみたいと考えています。