akiyoko blog

akiyoko の IT技術系ブログです

DjangoCongress JP 2019 で「現場で使える Django のセキュリティ対策」というタイトルで登壇してきました

akiyoko です。

昨日の DjangoCongress JP 2019(Day 1 カンファレンスデー)で「現場で使える Django のセキュリティ対策」というタイトルで登壇してきました。その報告です。


発表資料は こちら にアップしています。


発表の動機

仕事の現場でもっと Django を使ってほしい という想いから、この発表を思い立ちました。Django 普及の突破口のひとつとして、まずはセキュリティの懸念を取り払うことが重要なのでは?と考えたのです。

Python が企業でも幅広く使われるようになったことや書籍が充実し始めたことで、日本でもようやく Django が注目されるようになりました。4月に待望のバージョン2系の LTS がリリースされ、ますます現場で Django が盛り上がることが予想されますが、導入検討の際にネックになるもののひとつに「セキュリティ」への懸念があります。私は現在、ある Django プロジェクトの立ち上げに携わっているのですが、そこで実際によく言われたのが「Django ってセキュリティ的にどうなん?」 でした。日本では(特に SIer 界隈では)Django がまだあまり知られていないので、そのような疑問が出てくるのは当然といえば当然かもしれません。

一方の開発者からすると、フルスタック(全部入り)の Django にはデフォルトでセキュリティ対策も含まれていますが、そのあたりの理解が中途半端だと、リリースした Webアプリケーションが悪意ある攻撃者の格好の餌食になってしまいかねません。そうならないためにも、Django のセキュリティ事情については開発前から(もちろん開発中でも)きちんと把握しておきたいところです。

そこで今回、IPA(情報処理推進機構)が注意喚起情報として公表している「安全なウェブサイトの作り方」という冊子にまとめられた代表的な脆弱性の概要と、それらの脆弱性に対して Django では具体的にどのような対策をしているのかについて解説することにしました。これによって発注側企業においてはセキュリティの懸念が払拭され、一方の開発側企業においてはセキュリティ施策のヒントとして活用されることを期待しています。

対象者

対象者は、Django の導入を検討している方、および Django を使った Webアプリケーション開発者 を想定しています。なお、Django 初級者の方にも十分理解できる内容になっていると思います。

Webアプリケーションの基本的な知識(特に Cookie を使ったセッション管理や HTTPヘッダなどの知識)があれば、セキュリティの知識についてはほぼゼロ(用語を何となく聞いたことがあるレベル)でも問題ありません。CSRF などの重要な、そして重要な割にあまりよく理解されていないものについては、「CSRF(しーさーふ)って何?」というレベルの人にも分かるように基本から解説しています。

ポイント

メインの話題として

① Webアプリケーションのセキュリティ対策ってそもそも必要なの?
② 「これだけは絶対やっとけ」的な基準はある?
③ フルスタック(全部入り)の Django を使えばセキュリティ対策もまるっと万事解決?

の三点について話しました。
詳細についてはスライドをご覧ください。

発表の準備

昨年の LT でド緊張して失敗した苦い思い出があるので、今回はまず、心構えから入りました。事前に読んだのは、たまたま見つけた オリラジ中田さんの講演会ログ です。要約すると、プレゼンでは「カンペを読まない」「言い訳しない」「練習をサボらない」の3つのタブーがあるということです。中でも、人前で練習をすることが「練習」でそれ以外は「練習」ではない というのはまさにその通りだと思い、リハーサルをなるべく多くこなそうと考えていました。

発表の内容については CFP を出した頃に目次レベルまで固めていたのですが、実際に発表資料を準備し始めたのは仕事の関係もあって GW の終盤からとなりました。しかしこれはちょっと遅すぎました。資料が完成したのは本番5日前。そこから2回、会社の Django 経験者やコンサルタントのメンバーの前、そして現プロジェクトメンバーの前でのリハーサルをおこないました。メンバーからのフィードバック、そして自身の反省から、資料がブラッシュアップされていき、話した方がよいこと・話さなくてよいことが明確になり、想定問答も明らかになって私にとっては良いこと尽くめでした。もっとリハーサルをしたかったのですが、何度も集まってもらうのもメンバーの負担になるのと、直前にフィードバックをもらっても反映できない、余計に混乱してしまうと感じたので、これが限界だったのかも知れません。あとはブツブツ独り言を繰り返し、本番の流れをイメージしていきました。


フィードバックの中で、「図を指差しで説明するよりもレーザーポインターでやった方がいい」と言われて急遽買ったのがこれ。パワポのページ送りもできます。本番前日の夕方に届きました。しかしこれが、当日あのような事件を引き起こすことになろうとは。。


あと、GW 中盤に引いた風邪がずっと長引いていたので体調を整えるために前日夜にマッサージに行ったのですが、強かったのか余計に首を痛めてしまいました。


発表はどうだった?

「発表前にやることリスト」を作っていたので、それを淡々とこなすことで緊張はギリギリのところで抑えられていました。

しかし、プレゼン開始直後に事件が起きました。前日の動作チェックでは問題なかったレーザーポインターがページ送りができなくなり、直前に使用を諦めました。これで緊張のコップから水が少し溢れてしまいました。。


f:id:akiyoko:20190519130935p:plain:w180

この事件がきっかけとなって冒頭の10分はガチガチでした。途中からあきらめの境地に至ってから割と話せるようになったと思いますが、そこで何とか踏み止まれたのも事前のリハーサルのおかげです。あれが無ければもうボロボロの結果になったに違いありません。協力してくださった皆さん、本当にありがとうございました。



質問

想定よりも時間がかかってしまいましたが、発表は42分頃に終わりました。そこで出た質問について補足します。

Q.{% csrf_token %} タグを入れ忘れてしまうのを防ぐ方法はないのか?

POST リクエストを送信する form 要素に {% csrf_token %} タグを入れ忘れると、403 エラーが出ます。しかしながら、CsrfViewMiddleware を無効にするなり @csrf_exempt デコレータを利用したりすると、CSRF 検証はされずに脆弱性が露呈してしまいます。会場では、設定ファイルのセキュリティチェックをしてくれる「python manage.py check --deploy」を実行すれば CsrfViewMiddleware が無効化されていることをチェックできるかも知れないと回答しましたが、それを改めて検証してみました。

実際に CsrfViewMiddleware を「MIDDLEWARE」からコメントアウトして check コマンドを実行すると、期待通りに CsrfViewMiddleware が無効化されているという警告が出ました。

(venv) $ python manage.py check --deploy
...(略)...
?: (security.W003) You don't appear to be using Django's built-in cross-site request forgery protection via the middleware ('django.middleware.csrf.CsrfViewMiddleware' is not in your MIDDLEWARE). Enabling the middleware is the safest approach to ensure you don't leave any holes.


いい感じですね。


反響

いろいろと反響をいただきましたが、一番驚いたのがこれです。


あの徳丸さんにTweetしてもろた!😲マジか!

徳丸さんは、私の発表でも紹介した Webアプリのセキュリティ対策の金字塔「徳丸本」こと『体系的に学ぶ 安全なWebアプリケーションの作り方 第2版』の著者です。現場でも必読書になっています。



あと夕方頃に気付いたのがこちら。Speaker Deck のスライド資料が、はてなブックマークのホットエントリーに入っていたみたいです。


最後に

今年の DjangoCongress JP 2019(Day 1 カンファレンスデー)はセッションもパーティーも大盛況で、大御所イベントのような安定感がありました。これも、ずっと前からこの日のために動いてくれていたスタッフの皆さんの準備、運営、そして情熱のおかげです。本当にありがとうございました。昨年も参加させていただき、そして今年はセッション発表の機会をいただいて、このような素晴らしい場で発表側に回れたことは大変光栄に感じています。おかげさまで昨年のリベンジもできました。またたくさんの方にセッションを聴きに来ていただき、嬉しくそして心強かったです。機会があれば来年もチャレンジしてみたいと思います。




おまけ

じゃんけん大会で一番人気だった『現場で使える Django REST Framework の薄い本』は、BOOTH というオンラインショップから購入可能です(紙の本のみ)。

akiyoko.booth.pm


DjangoCongress に来るくらいの人はもうほとんど持ってる or 知ってるという噂もありますが(笑)、『現場で使える Django の教科書』シリーズ(基礎編・実践編)も BOOTH で購入できます。

akiyoko.booth.pm


『現場で使える Django の教科書』シリーズ(基礎編・実践編)は、Amazon でも販売しています(電子版もあり)。

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

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

現場で使える Django の教科書《実践編》

現場で使える Django の教科書《実践編》

技術書典6 で『現場で使える Django REST Framework の薄い本』を頒布します

akiyoko です。

本日いよいよ「技術書典6」が開催されますね。私は今回も「あきよこブログ」としてサークル参加します。これで3回連続3回目のサークル参加になります。

f:id:akiyoko:20190413231539p:plain:w400


過去2回で2冊の「Django の薄い本」を出してきましたが、今回の新刊も Django 関連本です。『現場で使える Django REST Framework の薄い本』というタイトルからお分かりの通り、「Django REST Framework(通称「DRF」)」に関する技術同人誌 です。

Django REST Framework(DRF)って何?

「Django」は Python で Webアプリケーションを作成するためのフレームワーク で、Webアプリケーションを作成する際に必要となるコンポーネント(部品)や API を多数提供しています。Django は多数の機能を提供しているものの、REST API バックエンド(REST API を提供する Webアプリケーション)を構築する際のさまざまなニーズに応えるには少し機能が足りず、いろいろと自前で実装しなければいけません。

そこで登場したのが、「Django REST Framework」(以降「DRF」と表記)です。DRF は、REST API バックエンドを構築することに特化したサードパーティ製の Django パッケージ で、REST API を提供する際に必要となる機能や便利な機能を補完・拡充してくれる拡張パックのような役割を果たします。実際のプロジェクトでは、Webアプリケーションのベースとなる機能は Django を利用し、REST API に特化した機能は DRF を利用する、といった使い方をします。


f:id:akiyoko:20190413224931p:plain:w500

DRF 本を書いた理由

かく言う私も現在仕事で「DRF」を使っており、仕事の現場においては「素の Django」よりも「DRF」の方が使われているようにも感じています。しかしながら、DRF に関する日本語情報は Django よりも圧倒的に不足しています。日本語書籍については現在どこを探しても見つかりません。 商業誌を待っていてもあと何年かは出ないだろうから、もし技術書典6に当選したら30ページくらいの本当に薄い本を書いてみようかなと思い立ったのが昨年末。これが地獄の始まりでした。。

それからどうなったか?

技術書典4から3回連続で技術同人誌を頒布していますが、今回が一番辛かったです。昨年末あたりから執筆のための調査を始めていて実質的な執筆は2月から開始したのですが、あれよあれよという間に30ページが50ページになり、70ページになり、最終的には表紙を含めて128ページの「薄くない本」に仕上がってしまった のでした。

毎回執筆内容を Git で管理していて今回からコミットコメントに執筆時間を加えることにしてみたのですが、今回の合計執筆時間は333時間になりました(会場価格は1,000円なので私の作業1時間あたり「3円」で買えてしまうということですね・・)。内容には満足しているものの、3月は生活のすべてを投げ打って執筆に没頭してしまいました。ご迷惑をお掛けした関係各所の皆さま、本当に申し訳ありませんでした。最後に、家族のサポートがなければこの本は世に出ていなかったということも付け加えさせてください。

どんな内容?

Django REST Framework(DRF)を現場で使う際に必要となる基礎知識についてまとめた技術同人誌で、本文124ページ、まるまる「Django REST Framework」に関する本 です。なお、DRF は Django をベースにしている部分があるので Django についての解説は要所要所で書いているものの、Python についての解説は一切ありませんのでご注意ください。

前半は DRF の概要や全体像、コンポーネントごとの仕組みや使い方、セキュリティや認証などの基礎知識を座学で進めていきます。後半はチュートリアルおよび発展的な Tips という構成になっています。

後半のチュートリアルでは、Django も Django REST Framework も何にも分からないという方でもちょっとした SPA が作れるように、Django REST Framework と Vue.js を使った SPA のサンプルプロジェクトを2つ、簡単なものと少し難しめなものを用意しました。 これを手本に写経すれば、REST API を使った Webアプリケーションの仕組みが何となく掴めるでしょう。


レビュアーとして、くろのて勉強会 を主催をしている @crohaco さんにもご協力いただいたのですが、@crohaco さんからお墨付きをいただけました。DRF の勉強会ではお世話になりました。そしてレビューありがとうございました。

そのほか、Django 系イベントでいつも会う @kaizumaki さんや u1 さんにもレビューをしていただきました。ありがとうございました!

対象読者

対象読者としては、

  • Django は何となく分かるが、Django REST Framework は初めてという方
  • Django REST Framework のまとまった日本語情報を手に入れたい方
  • Django REST Framework + Vue.js で SPA を構築したい方
  • 現場で本格的に Django REST Framework を使いたい方

を想定しています。

最低限必要の知識としては「Django の仕組みが何となく理解できていること」です。Django 公式チュートリアルDjango Girls チュートリアル をひと通り終えたくらいであれば、何とか理解できるレベルになっているかと思います。拙著『現場で使える Django の教科書《基礎編》』を読み終えたくらいの知識があれば万全ですが、『現場で使える Django の教科書《実践編》』レベルの知識は不要でしょう。


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

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

現場で使える Django の教科書《実践編》

現場で使える Django の教科書《実践編》


目次

気になる目次は ↓ のようになっています。


はじめに
第1章: Django REST Framework(DRF)の概要
第2章: モデル・シリアライザ・ビュー・URLconf の基本的な使い方
第3章: DRF とセキュリティ
第4章: DRF と認証
第5章: チュートリアル その1: DRF + CDN 版 Vue.js で Cookie 認証付き SPA をスピード構築
第6章: チュートリアル その2: DRF + Vue CLI 3 で JWT 認証付き SPA を本格構築
第7章: 現場で使える Tips 集
おわりに


f:id:akiyoko:20190413231404p:plain:w300


頒布本情報

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

f:id:akiyoko:20190413231539p:plain:w400



あと、既刊の『現場で使える Django の教科書《基礎編》』『現場で使える Django の教科書《実践編》』も持っていきます。

f:id:akiyoko:20190413231654p:plain:w400

f:id:akiyoko:20190413231728p:plain:w400

これらの既刊については、Amazon や BOOTH で電子版とペーパー版が絶賛販売中です。


◆ 現場で使える Django の教科書《基礎編》 - Amazon(電子版・ペーパー版)

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

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

◆ 現場で使える Django の教科書《実践編》 - Amazon(電子版)

現場で使える Django の教科書《実践編》

現場で使える Django の教科書《実践編》

◆ 現場で使える Django の教科書《実践編》 - BOOTH(ペーパー版)
現場で使える Django の教科書《実践編》【紙の本】(技術書典5バージョン) - あきよこブログ(akiyoko - BOOTH

頒布場所

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

f:id:akiyoko:20190413232620p:plain

池袋サンシャインシティ2F、4/14(日) 11時オープンです。今回は、会場2時間は有料入場券(1,000円)が必要になっています。それでも午前中は混雑すると思いますのでご注意ください。

なお勝手ながら、当日13時までの有料入場者特典として、弊ブースにて『現場で使えるDjangoの教科書《実践編》』(紙の本)を会場特別価格からさらに500円引きさせていただきます(1,500円→1,000円)。(後払いアプリだと対応できないかもしれないので)現金払いのみでの割引とさせてください。



最後に

ウチの奥さんに「そんなに寝てないと死ぬよ?」と何度も言われながら、ようやく今週の火曜にすべり込み入稿できました。表紙がモノクロだったので標準価格からのアップは免れましたが、カラーだったらアウトというギリギリっぷりでした。そんな感じで今回の執筆で気力体力ともに尽き果てました。今日の技術書典が終わったら昇天しているかもしれません。。

仕事で本格的に Django を使うなら『現場で使える Django の教科書《実践編》』がオススメ!

akiyoko です。

昨年10月の 技術書典5 で Django の技術同人誌シリーズの2作目となる新刊 『現場で使える Django の教科書《実践編》』 を出してから数ヶ月経ちました。その間、Django 本の読書会 をしたり、Amazon で電子版の販売を開始したり、年末のコミケに初参加してサークル「あきよこブログ」として本を再販したりするなど、いろいろとイベントが目白押しでした。

そうやって技術書典5 からの数ヶ月を忙しく過ごしたわけですが、ふと思い返すと私のブログで《実践編》の内容を紹介していなかったことに最近気づいたので、この記事で 『現場で使える Django の教科書《実践編》』の概要と読みどころ について紹介しておきたいと思います。


f:id:akiyoko:20180930140739p:plain:w200

現在、《実践編》の紙の本はオンラインショップの BOOTH で、電子版は Amazon で販売中です。

◆ BOOTH(紙の本)

◆ Amazon(電子版)

 

《実践編》の概要

本書は Python 製の Web アプリケーションフレームワーク「Django(ジャンゴ)」の解説書の第二弾で、Django を本格的に使っている/使おうとしている開発者に向けた本です。開発の現場で必要になる知識、よくある問題へのヒントや解決策を中心に、デプロイやセキュリティ、高速化などさらに実践的な内容 にも踏み込んでいます。前作同様、開発現場に必携の一冊にすべく、様々なノウハウをこれでもかと詰め込みました。


《実践編》をひと言で表すと、「基礎のちょっと先に手を伸ばしてみようと考えている開発者に向けたステップアップ本」になっています。前作同様、Django プロジェクトの現場にあると嬉しい一冊になっているはずです。

対象読者

《実践編》の対象読者は、

  • Djang のことをもっと知りたい方
  • 仕事の現場で本格的にDjangoを使いたい方

を想定しています。

Django 公式チュートリアルDjango Girls Tutorial では物足りなかった方や、実践的な開発に不安のある方にも十分満足できる一冊になっているはずです。そしてもちろん、前作の《基礎編》を読み終えた方にはちょうど良いレベルのステップアップ本 になっているでしょう。


なお、Django の基礎(全体像、コンポーネントごとの仕組みや基本的な実装方法など)については説明していません。それらについては、前作《基礎編》でベストプラクティスを交えて詳しく解説しています。


各章の読みどころを紹介

目次


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


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

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


第2章:開発のヒント(認証まわりをサクッと実装)

Django を使った Webアプリ実装の第一歩として、まず「ユーザー認証まわり」から実装することが多かったりする のではないでしょうか。実は、Django 組み込みの認証システムを使うと、認証まわりの機能をサクッと実装することができます。そのことを知らずに、ログインやパスワード変更といった機能を自前で実装してしまったりするのは「DRY(Don’t repeat yourself)」の原則に反します。しかしながら、認証まわりのノウハウについてまるっと解説した本は(少なくとも日本語の書籍では)ありませんでした。

本章ではまず、最小限の実装でユーザー認証まわりの機能をひと揃えするための具体的な方法について解説 をしています。


しかし実際の現場では、サクッと実装しただけでは問題がある場合があります。それは「仕様変更」です。Django デフォルトの認証の仕組みをそのまま利用できる場合はよいのですが、ちょっとカスタマイズしたいとなった場合に難易度が途端に跳ね上がるという点には注意が必要でしょう。たとえば、「ユーザー名ではなくメールアドレスとパスワードで認証できるようにしたい」といったニーズは日常茶飯事に発生します。このような場合にどのように改修すればよいのか、その改修ポイントや具体的なコードを載せています。


本章の最後ではさらに実践的なニーズのひとつである「ソーシャル連携認証」について解説をしています。これを読めば、「OAuth って何?」というレベルの方でも、ソーシャル連携認証の仕組みが分かるようになり、GitHub アカウントでソーシャル認証ログインできる Django サイトが実装できるようになります。

第3章:開発のヒント(Bootstrap 4 対応)

ところで皆さんは「味覇(ウェイパー)」という調味料をご存知ですか?

味覇(ウェイパー) 缶 500g

味覇(ウェイパー) 缶 500g

味覇は中華料理のベースの味付けに「とりあえず使っとけ」という感じで万能・安心・簡単に使える調味料なのですが、「Bootstrap は Webサイトのスタイルを下支えする味覇である」というブログ記事を見て思わず吹き出してしまったことがありました。

さて、業務で Webアプリを作る際、特にプロトタイプを作る段階では Bootstrap などの CSSフレームワークをとりあえず入れてスタイルを「それ」っぽく整えておくのは常套手段ではないでしょうか。CSSフレームワークはデザインセンスの乏しいエンジニアの強い味方です。

第3章の前半では、Webアプリ開発の初めの一歩として押さえておくべき「Bootstrap 4 の導入方法」について書いています。Django に特化した話はほとんどありません。後半では、「django-bootstrap4」という Django パッケージを使って「Bootstrap 4」の適用をサポートする方法について解説しています。

第4章:開発のヒント(Ajax 対応と JSON レスポンス)

Django のビューでは通常のレスポンス以外に、JSONレスポンスを返すことができます。テンプレートの JavaScript から Ajax リクエストを送信して JSONレスポンスを受け取ることで画⾯全体を更新せずに⼀部の部品だけを書き換えることができるため、これを利用することで UI・UX のよい Web画面を制作することができます。

なお、Django から JSON を返す⼿段としては、「Django REST framework」と呼ばれる有名なパッケージを使う⽅法があります。REST でリクエストをしてJSON で受け取るような SPA やアプリのバックエンドとしてよく利⽤されています。しかしこの章で紹介する⽅法によって、Django REST framework を使わなくても簡単に JSON レスポンスが返せることがお分かりいただけると思います。

なお、JavaScript で Django に Ajaxリクエストを送信する際、またビューから JSONレスポンスを返す際にそれぞれちょっとした注意点があります。第4章の中盤ではそれらの注意点について具体的なコード例を交えて解説をしています。

章の終盤では、AjaxとJSONレスポンスを応用すればこんなアプリが作れるぞ!というちょっとしたアプリのコードを紹介しています。時系列データを保持した pandasDataFrame を JSONレスポンスとして返し、テンプレート側では「Tabulator」という JavaScript のライブラリを利⽤して JSON を処理するというサンプルになっています。はっきり言って、ポエムです。

f:id:akiyoko:20181021163655p:plain:w450

第5章:開発のヒント(ファイルアップロード)

Django では、静的ファイルのうち、システム管理者を含めたユーザーが Webアプリケーションを利⽤してアップロードする CSV や PDF、画像などのファイルを「メディアファイル」と呼んでいます。

前作《基礎編》では「STATIC_ROOT」「STATICFILES_DIRS」「STATIC_URL」などの静的ファイル関連の設定について詳しく説明しましたが、本作では、メディアファイル(およびファイルアップロード)について、設定から実装、注意点に至るまで詳しく解説しています。

少し発展的な内容として、「django-storages」を使ってクラウドストレージにファイルアップロードする方法とその設定について記載しています。そのほか、ファイルアップロードを利用する際に便利に使える Django パッケージをいくつか紹介しています。

章の最後は、不正なファイルがアップロードされないためのセキュリティ対策について。ユーザーがアップロードしたファイルを他のユーザーに配信する場合は、ファイルの不正チェックが必須になるでしょう。

Django の最もハマりがちなポイントといえば「静的ファイル」でしょう。メディアファイルは静的ファイルと混同しやすく、ファイルアップロードの実装は簡単ですが仕様に少し癖があります。業務用 Webアプリではよく利用されるので一度全体を整理して把握しておきたいところです。

第6章:ユニットテスト

動くコードも大事ですが、現場においてはテストも同じくらい重要です。 Django では、以下に示すようなユニットテストのサポートが最初から用意されており、非常に充実しています。

  • test コマンド
  • テストランナー
  • 標準の unittest.case.TestCase を継承した Django の TestCase クラス
  • Webテストクライアント

Django のユニットテストで押さえておくべき知識は、次の3点です。

  • ① 慣例と命名ルール
  • ② TestCase における各種メソッドの実行フロー
  • ③ テストの実行方法

まず、慣例と命名ルールを押さえておかないと、テストランナーが自動で収集してくれなくなります。次に、Python 標準の unittest.case.TestCase を継承した TestCase には、テスト用のデータベース作成および削除、フィクスチャと呼ばれるファイルからのテストデータ生成、登録および変更したテストデータのロールバックなどの機能が追加されています。それらを含めた各種メソッドの実行フローや拡張ポイントを把握しないと、効率の良いテストケースを書くことはできません。Django 標準のユニットテストは test コマンドから実行できますが、その実行方法についても押さえておく必要があるでしょう。

また、多くのプロジェクトでは Coverage.py を導入してカバレッジを計測します。カバレッジ・レポートを品質指標として利用できるほか、実際に実行されたコード行を可視化することでテストケースに抜け漏れがないか、あるいはテスト条件や実装方法に誤りがなかったかどうかを把握できるといったメリットもあります。

第7章:デプロイ

「デプロイ」とは、実際に利用する環境に Webアプリを配備(deployment)して、ユーザーから利用できる状態にすることを指します。特に、本番環境へのデプロイは「本番デプロイ」などと呼ばれます。

デプロイの工程には、サーバの調達から必要なソフトウェアのインストールやその設定、データベースの構築や初期データの投⼊、セキュリティの設定など、ありとあらゆる作業が含まれます。本章では、インフラエンジニアでない⽅にもできるだけ分かりやすいように、デプロイ⼿順を最初から最後まで一気通貫に説明していきます。具体的には、サーバに乗り込むための鍵ペアの作成から Let's encrypt による常時 SSL化の設定まで、かなーり詳しく書いています。全部で44ページ! 世界で一番詳しい Django のデプロイ解説書を目指しました。

本章で構築するサーバ構成は、サーバ1台でリバースプロキシサーバ、アプリケーションサーバ、データベース、ファイルサーバなど全てをまかなうオールインワン構成です。シンプルで安上がりになる反⾯、可⽤性(冗⻑化)やスケールを考慮していない点には注意が必要です。

  • サービス: DigitalOcean(クラウド)
  • OS: Ubuntu 18.04
  • サービスマネージャ: systemd
  • データベース: MySQL 8.0 (またはPostgreSQL 10.5)
  • リバースプロキシサーバ: Nginx 1.14
  • WSGI サーバ: Gunicorn 19.9
  • Python: 3.6.5
  • Django: 2.1

なお、各ソフトウェアのバージョンはできる限り最新のものを利用しています。

第8章:セキュリティの TIPS

前章では本番デプロイについて書きましたが、本番公開時にどうしても気になるのがセキュリティの問題 ですよね。いざ本番リリースしようとしたときに「これって公開しちゃって大丈夫なの?」と怖くなってしまうことはないでしょうか?

Djangoはフルスタック(全部入り)が大きな特徴のひとつですが、セキュリティ対策もその中にちゃんと含まれています。 ただし、「適切に利用していれば」という条件付きです。というわけで、本章の前半は Django が提供しているセキュリティ対策についてのおさらいです。後半では、本番デプロイを想定したオリジナルの「セキュリティ・チェックリスト」を用意しました。ぜひ本番リリース時にお役立てください。

第9章:高速化のための TIPS

「Django は遅い」なんてもう言わせない!

最終章の9章では、簡単に実現できる高速化の具体策について解説しています。前章で説明したようにセキュリティまで「全部入り」の Django は悪く言えば重厚長大で、パフォーマンスは二の次であると言わざるを得ません。

ここで高速化の対策として解説しているのは二点です。一点目は、データベースのクエリ実行について。特定の画面のレスポンスが異常に遅い場合、クエリ実行に問題がある(クエリの本数が想定以上に多くなってしまう、いわゆる「N+1」問題が発生している)場合がありますが、その対策について解説します。二点目は、Django にデフォルトで含まれている「キャッシュ」機能について、その使いどころをいくつか具体的に挙げています。アプリ次第では劇的に応答時間が短くなることもあるでしょう。


《実践編》の評価

SNS やブログ上での『現場で使える Django の教科書《実践編》』の評価を勝手に掲載させていただきます。


ks6088ts.github.io


まとめ

おかげさまで、前作の Django の技術同人誌『現場で使える Django の教科書《基礎編》』は まだまだ販売好調で、販売累計数は 2,500冊を超えています。 こちらも Django プロジェクトの現場にあると嬉しい一冊ではありますが、どちらかというと、現場に入った新規参画者や新人に読んでほしい初心者・初級者向けの一冊になっていると思います。


◆『現場で使える Django の教科書《基礎編》』Amazon(電子版/ペーパーバック版)

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

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



基礎編を読み終えて、仕事でもっと本格的に使っていこうと考えているなら、今回紹介した『現場で使える Django の教科書《実践編》』が絶対オススメです。 何かで詰まって半日無駄にするくらいなら、《実践編》を一冊買う方が絶対安いです。きっと役に立つ情報がたくさん載っていると思います。特に、デプロイや高速化、セキュリティ、認証、ユニットテストに関しては、これほどまとまった情報を提供しているところは他にはまだないと自負しています。

気になった方はこの機会に《実践編》をぜひどうぞ。


f:id:akiyoko:20190120144009p:plain


なお、紙の本で『現場で使える Django の教科書』シリーズの二冊(基礎編・実践編)をお得に手に入れたいという方には、BOOTH での二冊セット販売も用意しています。

booth.pm

2018年の akiyoko blog 振り返り


f:id:akiyoko:20190105062315p:plain:w360

明けましておめでとうございます。
今年も、毎年恒例となっている昨年のブログの振り返りからスタートです。


ちなみに一昨年(2017年)の振り返りはこんな感じでした。

<過去記事>
akiyoko.hatenablog.jp


2018年の akiyoko blog 振り返り

昨年一年間にアップした記事の本数は 12本で、昨年の 37本から約3分の1 に激減してしまいました。その理由はズバリ、ほぼ一年中 Django の執筆をしていたからです。


カテゴリも「Django」の記事が9本、「技術同人誌」の記事は8本(重複あり)となっていて、ブログもまさに「Django の技術同人誌」一色となったのでした。


実は密かに昨年から、勉強会の参加ログを記事として残さないようにしていました。同じ勉強会(fin-py もくもく会 など)に何度も行くようになったのと、単に忙しくて記録を残す時間が取れなかったのが主な理由です。


ブログ記事ごとのアクセス数ランキング(akiyoko blog 2018年)

記事ごとのアクセス数ランキングです。2018年内のアクセス数(*1)ランキング上位 30本をリストアップしています。

なお昨年中に書いた記事 12本中、30位以内に入ったのは 5本でした。 *2


# 昨年比 タイトル 作成日 ポイント
1 「プロジェクトマネージャ試験」に一発合格するための三か条 - akiyoko blog 2014/10/26 116.9
2 PyCharm のオレオレ最強設定 - akiyoko blog 2017/03/10 83.1
3 初学者・初級者向け Django の学習ロードマップ - akiyoko blog 2018/12/01 71.5
4 pandas.DataFrame の列の抽出(射影)および行の抽出(選択)方法まとめ - akiyoko blog 2017/04/03 52.3
5 「一対一」「一対多」「多対多」のリレーションを分かりやすく説明する - akiyoko blog 2016/07/31 47.9
6 IPA「情報セキュリティマネジメント試験」に一夜漬けで合格するためのたった二つの勉強法 - akiyoko blog 2016/11/17 45.7
7 無料版 PyCharm で Django 開発環境を構築するまでの手順(「現場で使える 基礎 Django」本の補講その2) - akiyoko blog 2018/06/17 30.5
8 AppStore 登録前の iOSアプリを Ad-Hoc で配布してインストールする方法 - akiyoko blog 2014/08/23 28.5
9 Git で コミットを無かったことにする方法 (git revert の使い方) - akiyoko blog 2014/08/21 26.3
10 matplotlib のグラフに日本語を表示する方法(文字化け対応) - akiyoko blog 2017/04/11 23.8
11 Video.js を使って HLS形式の動画をストリーミング再生する - akiyoko blog 2015/08/11 23.1
12 Python でリストのソートまとめ - akiyoko blog 2014/09/26 22.0
13 Pandas の DataFrame の基本的な使い方 - akiyoko blog 2017/03/27 16.2
14 まだ CSV の文字化けで消耗してるの?(Excel で直接開いても文字化けしない CSVファイルを Python3 で作成するスマートな方法) - akiyoko blog 2017/12/09 16.1
15 Apple Developer Program の有効期限が切れてしまったときの対処方法 - akiyoko blog 2015/11/13 14.9
16 Mac の MySQL クライアントに「Sequel Pro」を使っているなら PostgreSQL クライアントは「PSequel」がオススメ - akiyoko blog 2016/07/29 14.5
17 Pythonで単回帰直線 - akiyoko blog 2013/06/16 11.5
18 「現場で使える 基礎 Django」ってどんな本? その読みどころをガッチリ解説 - akiyoko blog 2018/06/05 11.4
19 ベスト・オブ・Django本! - akiyoko blog 2016/12/05 11.0
20 Django ORM の select_related, prefetch_related の挙動を詳しく調べてみた - akiyoko blog 2016/08/03 10.7
21 Open BroadCaster Software (OBS) で YouTube ライブストリーミングを使った動画配信をする方法 - akiyoko blog 2016/01/26 9.8
22 Python, Django 界隈の単体テスト事情(unittest / nose / django-nose) - akiyoko blog 2015/01/01 9.5
23 pandas.DataFrame で時系列データの手習い - akiyoko blog 2017/04/10 9.3
24 iMovie の設定あれこれ - akiyoko blog 2016/02/01 9.3
25 Ansible 初心者なら、まずは Ansible Galaxy から始めてみよう - akiyoko blog 2015/12/06 9.2
26 見よ!これが Python製の WordPress風フルスタックCMSフレームワーク「Mezzanine(メザニン)」だ! - akiyoko blog 2015/12/23 9
27 Python で MagicMock を使う - akiyoko blog 2015/01/04 8.9
28 Python で Selenium WebDriver を使ったブラウザテストをする方法 - akiyoko blog 2014/04/29 8.4
29 技術書典5 で頒布される Django / Python の薄い本の情報を集めてみた - akiyoko blog 2018/10/06 8.2
30 仮想通貨税金計算サービス「BITCOINTAX」をリリースしました - akiyoko blog 2018/02/14 8.1


30記事のうち「Python」または「Django」に関係しているものが 19 もランクインしています。その中でも、pandas や matplotlib などのデータ分析系、「PyCharm のオレオレ最強設定 - akiyoko blog」や「無料版 PyCharm で Django 開発環境を構築するまでの手順(「現場で使える 基礎 Django」本の補講その2) - akiyoko blog」などの PyCharm 系の記事が強いなぁという印象です。


今見てみると、中には Python 2 をベースにしている古い記事もあったり、そもそも Python のバージョンを記事の中に明記していなかったりして不親切なものも多いなと感じます(書き換えたいけど時間がない・・)。



今年の目標

今年も akiyoko blog の目標は特にありません。

今執筆している本をきちんと出すことと、さらに Django を盛り上げていくのが、個人的な今年の目標です。今年もよろしくお願いします。

*1:純粋な PV数ではなく、作成日からの日数で割ったポイントで算出しています。

*2:作成日のところを黄色く塗っています。

技術書を執筆するために本当に大事なこと

この投稿は 「技術同人誌 Advent Calendar 2018 - Adventar」 の8日目の記事です。

はじめに

世の中には二種類の人間がいる。
書くのが得意な人間と、苦手な人間である。


私は後者の「書くのが苦手な人間」です。

「技術書典で本まで出しておいて何を言っているんだ」と言われるかもしれませんが、執筆中は、書くことが苦痛でたまりません。

学生の頃、夏休みの感想文(しかも2冊)を最終日までノータッチだったたことがあるくらい本の読み書きが苦手なのです(その後1日で2冊読んで感想文を2つ書き上げたのが私のベンチマーク・オブ・火事場のクソ力になっているのですが、それはまた別の話)。

そんな私がどうやって技術書典の同人誌(180ページ)を書き上げたかという「秘密」についてお話しします。

《宣伝》

技術書典5 の新刊『現場で使える Django の教科書《実践編》』(紙の本)が BOOTH で販売中です。
booth.pm

最近、電子版も出しました。

現場で使える Django の教科書《実践編》

現場で使える Django の教科書《実践編》


執筆に大事な3つの「コウ」

まず、執筆には次の三つの「コウ」が大事です。

  • 実行(ジッコウ)
  • 推敲(スイコウ)
  • 健康(ケンコウ)


「実行」は、まず書いてみること。
書かないことには何も始まりません。はじめの一行を書くこと。そこからすべては動き出します。


そして、「推敲」。
書いた文章は叩けば叩くほど、つまり赤入れすればするほど、強くなって蘇ってくる「サイヤ人」みたいなものだと常々感じています。「せっかく調べたからあれもこれも書き残しておこう」などとすぐに文章をテンコ盛りにしてしまうのが私の悪い癖です。削れば削るほど文章は良くなる、というのは自分の中ではほぼ真理です。


最後に、「健康」。
私の場合は日中は普通に仕事をしているので、執筆の時間はだいたい夜、〆切が近いと明け方までずっと執筆や推敲、技術検証やレビューなどをしていました。今振り返ると、1ヶ月半よく体がもったものだと思います。気力があるときは体を壊さないと言いますが、きっとそうだったのでしょう。しかしながら、日常的に健康な体をキープできないと執筆に大きな支障が出ます。ちょっとしたスキマ時間にも執筆できてしまう環境を作ってしまうと、出かけたり、運動したりする時間が失われてしまいます。執筆は短距離走ではなく、マラソンと捉えてスケジューリングするのがよいでしょう(自戒)。

そして一番大事なこと

上の3つももちろん大事なのですが、本の執筆に一番大事なのは「情熱」です。 これはもう疑いようがありません。

特に〆切が近づくと「あかん。。」「終わらん。。」「とりあえず Hulu でアニメ見よ。。」と何度も投げ出しそうになりますが、それをグッとこらえて机に向かわせるのは「これを絶対世に出すぞ!」と体の奥から湧き上がってくるパッションにほかなりません。そしてそのパッションは、「この本を待ち望んでいる人がいる!」と半ば勝手に思い込むこと、あるいはもっと俗っぽく「どうだ、すごいだろ!」と自慢したいということから湧き上がってきたりするのでしょう。

執筆は本当にツライです。自分で執筆してみてはじめて世に出ている本の裏側の苦労が分かるようになりました。きっとどんな本も著者の情熱がなければ生み出されないのでしょう。今ではそう信じています。

最後に

このように、本というものは著者のいろんな犠牲の上に作られた奇跡の一品です。だから Amazon のレビュry

4月の技術書典4で本を出してから8ヶ月ほど経ちますが、技術同人誌を書く前は想像もしていなかったことが今起こっています。

  • 同人誌をきっかけに仕事の依頼が来た
  • 商業誌の依頼が来た
  • 勉強会や読書会で講師をするようになった
  • クラシックを聴くようになった

最後のは、いつもだらだらと観ていたTVが執筆の邪魔になり、バックグラウンドミュージックとしてクラシックを聴くようになったという変化です。どうやら私はワルツが好きらしく、いい意味でどの曲も曲調が変わらないのがその理由だと分析しています。

久々のポエムでした。

初学者・初級者向け 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 の学習ロードマップ」を示してみようと考えています。私があれこれ妄想しただけのものなのでもちろん異論反論あるかと思いますが、ジャストアイデアとして温かくご査収いただければ幸いです。 *1


本記事を書くにあたって、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 のスキルについては案件に応じて獲得する必要がありますが、すべての場合において必須というわけではありません。

学習方針(案)

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

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

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

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 というよりシンプルな環境を使うように改良されているので、つまづくことはだいぶ少なくなっていると思います *6。一度諦めていた方もぜひ再チャレンジを。

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


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

学習ロードマップ

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


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


学習方針(案)

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


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

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

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

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

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


「ビフォー 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 ドキュメント | 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フレームワークのユーザーモデルと認証

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


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

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

nwpct1.hatenablog.com


Djangoで静的ファイルとうまくやる(その他)

静的ファイル・メディアファイルについて理解を深めるのに良い資料(tell-k さんの DjangoCongressJP 2019 の発表資料)です。

tell-k.github.io


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

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

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

akiyoko.hatenablog.jp



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

現場で使える Django のセキュリティ対策(その他)

Django のセキュリティ対策についてまとめた資料です。DjangoCongress JP 2019 で「現場で使える Django のセキュリティ対策」というタイトルで登壇してきました。


『現場で使える 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 for APIs: Build web APIs with Python & Django』(書籍)

初学者向け Django 本でも紹介した Vincent さんは、「Django REST Framework」の本も執筆しています。平易な英語で書かれているので、英語が何とか読めるならこれで DRF の導入部分を押さえるのもアリ。

Django for APIs: Build web APIs with Python & Django

Django for APIs: Build web APIs with Python & Django


『現場で使える Django REST Framework の薄い本』(書籍)

商業誌ではなく技術同人誌ですが、現時点で唯一の Django REST Framework の日本語書籍です。技術書典6で頒布した3冊目の Django 本です。

booth.pm


その他のお役立ちサイト

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

narito ブログ

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

narito.ninja


okoppe8@Qiita

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

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


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:随時アップデートしています。

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

*3:ProgatePyQなど

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

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

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

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

*8: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