akiyoko blog

akiyoko の IT技術系ブログです

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

4/22 の「技術書典4」で「現場で使える 基礎 Django」を頒布します

akiyoko です。

このたび、4/22 の「技術書典4」で人生初の技術系同人誌『現場で使える 基礎 Django』を頒布する ことになりました。


techbookfest.org


f:id:akiyoko:20180416235202p:plain:w300
(表紙はこんな感じになりそうです。*1




(2018/4/25 追記)

お陰さまで技術書典4では300部を3時間ほどで完売することができました。皆さま、ありがとうございました!

部数限定ですが、会場に持ち込めなかった紙の本を BOOTH にて再販致しました。現地で購入できなかった方、技術書典4に来れなかった方は是非どうぞ。

akiyoko.booth.pm



「技術書典」って何?

技術書典」は、春と秋の年二回ずつ開催される、技術者による技術者のための技術系同人誌の販売イベントです。今回が4回目の開催になりますが、毎回どんどん認知度と熱量が上がっているようで、今回天気が良ければ 3,000〜4,000人ほどの来場者で溢れ返りそうな勢いのホットなイベントなのです(行ったことないけど)。

私は初のサークル参加でもあり、初のイベント参加にもなります。

techbookfest.org

前々から何か本が書きたいなと思っていたところで「当選したら書いてみようかな」という軽いノリでこのイベントのサークル参加に申し込みをしたら、見事に抽選に当たっ(ってしまっ)たのが二月初旬。そこからちまちまと目次を作り始め、本格的に書き始めたのは二月下旬あたり。そこから泣きそうになりながら毎日明け方まで執筆することを繰り返し、ようやく脱稿できそうな目処がついて安堵感を感じ始めています。これまでに要した総時間はおそらく 300時間を超えると思います。



こちらは昨日 Twitter で聞いたアンケート。
半数が入稿済みだった。皆さん早い!!



「基礎 Django」はどんな内容?

全148ページ(表紙や奥付を除けば本文 142ページ)まるまる Django 本です。執筆はほぼ完了し、現在絶賛校正中です。


本書の読者としては、

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

を想定しています。

私自身 Django 歴がまだまだ浅い(仕事で6年ほど)ので上級者向けの本は書けませんが、Django の動作原理から実戦的な書き方まで、初級者向けの基礎知識として押さえるべき内容は全て網羅したつもりです。読者の皆さんに「Django って意外と簡単だな」と感じていただけることを目指して、基礎から詳しく丁寧に解説しています。

特に、

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

にオススメです。


目次

気になる目次は、



f:id:akiyoko:20180416234902p:plain:w190

f:id:akiyoko:20180416234958p:plain:w190

f:id:akiyoko:20180416235011p:plain:w190


となる予定です。
もう動かない・・・はず。


「基礎 Django」を書いた理由は?

今回 Django 本を書いた理由はズバリ、「Django の日本語の書籍が少ない」からです。 私自身、Django をずっと仕事で使っているのですが、日本語で書かれた良書が見つからず、結局「Two Scoops of Django」シリーズという海外の書籍(個人的に「ベスト・オブ・Django本」に認定)に辿り着いたわけですが、それだと初心者向けに薦める本としてはハードルが高過ぎるのではないかとモヤモヤを感じていたのです。Django の人気が今ひとつ上がらないのも、日本語の書籍が不足していることが大きな要因になっているのではないか、と思い立ったのがきっかけです。


akiyoko.hatenablog.jp


この状況を打破すべく、「無いのなら 自分で書こう Django本」ということでまず私から書いてみることにしてみました。この本が版を重ね、将来「ベスト・オブ・Django本」と呼ばれるようになればという願いを込めて。




頒布本情報

B5サイズ、148ページ(1円玉より少し小さい 9.3 mm の厚さです!)。

技術書典での価格は 1,000円。
お釣りの煩雑さを考えての特別価格です(他のサークルさんもだいたい 1,000円にしているようです)。

部数は未定。

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

f:id:akiyoko:20180415000417p:plain


秋葉原UDX、4/22(日) 11時オープンですが、午前中はどえらい混雑すると思いますのでご注意を。

お品書きも作りました。

f:id:akiyoko:20180421021919p:plain:w400


今悩んでいること

来週月曜(4/16)が入稿の〆切で、そこで何部刷るかを決めなくてはいけません。

これまでの技術書典の売れ行きから考えて、200部くらい刷れば十分余るかな?と考えていたのですが、「万万が一早々に売り切れてしまって、欲しいという人が買えなかったら嫌だなぁ」という邪念がムクムクと出てきてしまっている状態がまさに今なのです。


後日、BOOTH で当日売り切れなかった紙の本(電子版はもし対応可能であれば)の販売をしようと考えているので、結構余ってもいいとは考えています。


もし反響があれば少し多めに刷ろうかなとも目論んでいたりしますが、どうなることやら。


何はともあれ、技術書典の当日(4/22)、秋葉原 UDX アキバ・スクエア まで遊びに来ていただければありがたいです!

ぜひ冷やかしにきてくださいませ。

*1:黄色の丸は「Django(ダンゴ)三兄弟」です。だいぶ古いな。。