「現場で使える 基礎 Django」を読みました #技術書典

ということで紙版の「現場で使える基礎Django」を手に入れたので読んでみました。

対象者

著者の akiyoko さんの ブログ によると次のとおりです。

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

ちなみに自分は仕事でPython、Djangoを使いはじめて1年ちょっとです。 空いた時間を使ってDjangoの公式ドキュメントを翻訳したりしているのですが、すべてを把握するには膨大です。 ちょうどよく仕事で使えそうなボリュームでまとまった書籍がほしいなーと思っていました。

感想

全体を通して大変わかりやすかったです。 図を使っているので説明のイメージがつかみやすく、 「こうゆうのないかな」と思うようなことが「現場で使うために必要な分量」でまとまっていていると思いました。

よいところ

  • Djangoの全体像や、バリデーションのフローが図で書いてあるので関連がわかりやすい
  • 今自分がどのファイルを編集すればいいのか、現在地がわかりやすくなるよう工夫がされている
  • 要素技術を「現場で使うために必要な分量」で説明しているため、説明が頭の中にはいってきやすい
  • 「こうゆうのないかな」と思うけど、調べるのにちょっと時間がかかりそうな箇所もまとまっている
  • 著者の経験からくる知見と「Two Scoops of Django」のTipsが1冊の本にまとまっている(ように感じた)

気になったところ

macOSの環境構築にpyenvとAnacondaを使っているのが謎でした。

書籍の中で特別pyenvやAnacondaを活用しているケースもないですし、書籍ではDockerでの環境構築にも触れています。 Dockerを使うならDockerで、もしくはWindowsやmacOSなら www.python.org からDLしたものを使えば不足がないはずなのに、 説明されている理由がわかりませんでした。

とはいえここはDjangoとは直接関係があるところというわけでもないので、好みの問題かもしれません。

終わりに

残念ですが紙の書籍は 技術書典BOOTH ともに既に完売しています。

著者のakiyokoさんのTwitterによるとPDF版は検討中とのことなので、販売され次第購入したいですね。akiyokoさん、良い本をありがとうございました!

蛇足

最後の方にあるサンプルにプルリクエストを送ったので採用されるといいなぁ。

Add django-tables2 to requirements.txt akiyoko/django-book-mysite-sample

瑞牆でボルダリング&キャンプしてきた話

忘備録としてボルダリング&キャンプに何を持っていったのかや実際どうだったのかを書いておく。 岩場でボルダリングは何度かしているのですが、キャンプを兼ねるのははじめてだったのでメモ。

基本装備

言われてなくても普段からもっていくもの。これと服さえ着てればなんとかなるやつ。

https://store.storeimages.cdn-apple.com/8561/as-images.apple.com/is/image/AppleInc/aos/published/images/i/ph/iphone6s/gallery4/iphone6s-gallery4-2015?wid=2000&hei=1536&fmt=jpeg&qlt=95&op_usm=0.5,0.5&.v=1475087917795
  • 携帯
  • 財布
  • 家の鍵

クライミング用

クライミングジムや岩場に行くときは大体もっていったり装備していくもの。

https://tenaya.net/img/productos/climbing/oasi/tenaya--escalada--galeria--oasi.jpg
  • 水: クリスタルカイザー700mlを持っていくことが多い
  • ポカリスエット: ジムだと900mlだけど、岩場だとあまり水を飲まないで500ml
  • ウィンドブレーカー: 風よけ+登っていると腕を擦る課題があるので
  • モバイルバッテリー: 10000mAhのものを1つ持っているが、携帯とWiFiルーターの2台体制の場合サブがほしい
  • 折り畳み傘: できれば使いたくないけど当日雨が降ることもあるので…
  • ハンドクリーム: 手の保湿用に
  • 汗拭きシート: 運動後は汗のケアをしたい
  • クロックス: クライミングシューズをはいた上で履けるぐらいのサイズだと岩場での移動に便利
  • クライミングシューズx1: ジムでも岩場でも「テナヤ オアシ」を使ってる
  • ハンドブラシ: 背が届くなら力の入れやすいものを使いたい
  • チョーク(粉、ベース用): 今は粉チョークに東京粉末のブラック、ベース用にPD9を使用してる
  • アプローチシューズ: 課題にアプローチするのに軽いクライミングが必要な場所もあるのであると快適
  • クラッシュパッド: ボルダリングには必須
  • pamostick long: これがあると高い岩場のリップも届く
  • キッチンペーパー: 岩場が染み出しで濡れていることもあるので持っていく。持っていくと何かと便利。

泊まり用

泊まりでクライミングをするときは大体もっていくもの。

https://outdoorgearzine.com/wp-content/uploads/DSC06592_Nashville.png
  • ソックス(クライミング用)x2: 裸足でやってましたが、汗をかくので最近はあったほうがいいなと思うようになりました
  • ソックス(歩き用)x2: クライミング用だけでは汗で気持ち悪いので
  • 下着類(パンツ、シャツ) x2~3: インナーは着替えたい
  • ヒートテックタイツx1: 持っていって正解でした。日が落ちてからは極寒だった。
  • 七分丈パンツx2: 寒かった。くるぶしまであるクライミングパンツ1枚で二日間過ごしたい…
  • Tシャツx3: 1枚は予備で
  • 腰当てクッション: 長時間移動のお供
  • ネックピロー: 車中で寝るときは必要
  • 耳栓: 今回は使用せず

キャンプ用に揃えたもの

今回キャンプもするので揃えたもの。日帰りの岩場でも使えるものがいいなと思い揃えたものも。

https://images-na.ssl-images-amazon.com/images/I/81Y3VaBWmvL._SL1500_.jpg
  • アース製薬 虫よけスプレー サラテクト フレッシュミスト携帯用 60mL: あってよかった。次回も持っていく。
  • 汗止めバンド 3本セット ヘッドバンド 髪留め 通気性がよい 清潔しやすい 抗菌防臭: 今回は不要だった
  • ヘリノックス チェアワンもどき 870g: 背もたれによりかかれるのがよかった。岩場に毎回となると大きいので考えもの。
  • スプーン&フォークセット: 活躍した。なくしやすいので、大きいものとセットで保管しておきたい。
  • 防風板: 安定して火を起こせてよかった
  • SOTO アミカスポットコンボ: 水沸かすだけだったら半分(500ml)のサイズがいい
  • SOTO パワーガス105: 念を入れるなら2缶もっていくべきだが特にいらないかな…
  • ロールテーブル: あってよかった。次回のキャンプも持っていく。
  • ユタカ グリーンシート: よかった。クライミングのマット用に一つ買い足していいかも。
  • いろはす2Lペットボトルをつぶしたもの: よかった。1Lのものとどちらを選ぶか悩みどころ。
  • ヘッドライト&ランタンセット: なかったら詰んでた。必須。
  • ビニール袋: 何かと便利

レンタルしたもの

テント泊用の装備とWi-Fiルーターをレンタルしました。 諸事情により購入や契約するのに躊躇していたので、レンタルできたのは大変ありがたかったです。

テント泊用

一通り揃えるとなると軽く10万は飛ぶのでどうしようか考えた結果、レンタルで済ますことに。

http://www.soranoshita.net/item/images/mainimages/0082.jpg

利用したのはアウトドアギアレンタルの そらのしたはじめてのテント泊登山セット 。 トータルで¥18,618。¥5000分の保証金を含んでおり、いずれ返ってくるはず。

送られてきたものの値段を調べてみたら10万以上したので、 この金額でどんなものか体験できたのはよかったと思う。

通信回線

以前瑞牆に行ったときはauが使えず、docomoしか繋がらないという話を後に聞いたので、今回はWi-Fiルーターをレンタルしました。

https://www.wifi-rental.com/img/item_28

利用したのは WiFiレンタルどっとこむdocomo E5383 5GB 。 値段はトータルで¥2,272。ルーターがXiエリアのみの対応だったのでFOMAエリアが使えなくて大丈夫か不安だったけど、無事使えました。 1泊2日で928MBだったので、容量は余裕を持って使えました。動画再生を何度もやっていたらあっという間に1GBは超えるので…

月に何度も行ったりするようなら素直にdocomo回線を契約したほうがいいとは思います。

あればよかったもの

今回ソロキャンプを想定した装備でいったので、グループで行くときとかにあればよかったものをメモ

https://images-na.ssl-images-amazon.com/images/I/61f6Cz1M98L._SL1500_.jpg
  • サブの小さいコッヘル: 焼きものをしたり、ものをよそう用に
  • マグカップ: 飲み物つくったり・受け取ったりする用に
  • オーバーパンツ: パンツの上から着れるものがあるらしい
  • 冬用靴下: シュラフも足元から冷えたので、対策に
  • 焚き火台: 瑞牆自然公園は直火NGなので夜にあるといいなと
  • 吊り下げ式ランタン: 上からの灯りがあると安心すると思った
  • レインウェア: 今回は雨が降らない予報だったのでスルーしたが、設営や片付けの最中に降ってきた場合はどうしようもないので

総評

キャンプ泊してのクライミングはありですね。ただ指皮がもたないので1泊2日が限界かな… それと日が出ているうちはいいけど、出ていないときはあっという間に寒くなるので防寒対策は必須ですね。(現地に到着したときは2℃とかだった) 今回は瑞牆だったけど、小川山でもキャンプ泊できるのでそっちでも機会があったらやってみたい。

Pipenvに移行した話

Pipenv がPyPAに移ってからしばらく経ちました。 以前個人のPC環境は virtualenvwrapper を使用していましたが、折を見て自分も pipenv に移行しました。

理由は次の3つです。

  • virtualenvwrapper スクリプトが bash 起動を遅くする原因になっていた
  • Windows/macOS/Linux問わず同じように使いたかった
  • peco&ghq でのディレクトリの移動や管理に慣れてきた (peco&ghq に関する記事は探すと色々あったのでこの記事では割愛します。)

現在主に使う環境はこんな感じでやってます。

OS:macOS Sierra/Ubuntu 17.10
Python:3.6.x
pipenv:11.8.0

Pipenvとはなんぞや

稲田さんのツイートによるとこうです。

要は pipvirtualenv (と requirements.txt) をいい感じにラップしてくれるツールです。 インストール方法やどんなことができるか詳しくは Pipenv: 人間のためのPython開発ワークフロー を参照してください。

冒頭にある動画を見るとどんなことができるかイメージがつくと思います。

個人的Pipenvとの付き合い方

前述の通り、Pipenvは pipvirtualenv をいい感じにラップしてくれるツールなのですが、以下のルールで使用しています。

  • PIPENV_VENV_IN_PROJECT=true にしてプロジェクトのディレクトリに .venv を作成する
  • $HOME のようなプロジェクトのディレクトリ以外の場所に requirements.txtPipfile を残置しない
  • 困ったときは pipvirtualenv の使い方にならう

PIPENV_VENV_IN_PROJECT=true を設定

これを bashrc などに設定しておくと、プロジェクトディレクトリ(~/projects/hoge など)で pipenv install/shell した時に ~/projects/hoge/.venv となるように仮想環境を作成してくれます。

デフォルトの挙動だと /Users/<username>/.local/share/virtualenvs/プロジェクトのディレクトリ名+ハッシュ値 のように仮想環境名が決まるため、どこを指定すればいいのかわかりにくいです。これが PyCharmVSCode で仮想環境を設定するときに面倒でした。

プロジェクトディレクトリに仮想環境が作成されることで、その欠点が解消できます。

Note

WORKON_HOMEを指定すると、指定した箇所にまとめて仮想環境を作成してくれます。 仮想環境を作成する場所をまとめたい時は export WORKON_HOME=~/.virtualenvs などとするとよいです。

requirements.txt や Pipfile を放置しない

ホームディレクトリ ( $HOME )に requirements.txtPipfile を放置していた結果、 個別のプロジェクトディレクトリ以下で pipenv install するときに意図しないライブラリがインストールされました。

原因は $HOME に放置していた pipenvPipfile を読み込んでいたからでした。 しかし $HOME に置いていたファイルが影響するとは想定していませんでしたので、 プロジェクトのディレクトリ以外に requirements.txtPipfile を放置しないようにしました。

困ったときは pip と virtualenv に戻る

pipenv に移行しましたが、「 pipenvpipvirtualenv をいい感じにしたい」から使っています。 なので個人的には、次のようにコマンドを置き換えて使ってる感じです。

virtualenvの場合 pipenvの場合
virtualenv .venv pipenv install/shell
souce .venv/bin/activate pipenv shell
deactivate exit

pip install とかは普通に使ってますし、 requirements.txt も現役です。

注意すべきところとして、 pipenv はそれ自体で単体のツールではなく複数のライブラリを組み合わせて使用するものだということです。 何かトラブルが起きた時は最低限 pipvirtualenv の使い方が理解できていないとツラいかもしれません。

2018/03/15時点での依存関係は次のとおりです。

(test)kashewnuts@ubuntu:test$ pipenv graph

pipenv==11.8.0
  - certifi [required: Any, installed: 2018.1.18]
  - pip [required: >=9.0.1, installed: 9.0.1]
  - setuptools [required: >=36.2.1, installed: 38.5.2]
  - virtualenv [required: Any, installed: 15.1.0]
  - virtualenv-clone [required: >=0.2.5, installed: 0.3.0]

触り始めの pipenv==8.2.x と比べて依存するライブラリが必要なものに絞られてきて、いい感じになってきました。 しかし、 virtualenv+pip をラップして使うため予期せぬ不具合を踏むこともあります。 そんなときは pipenv の問題なのか、それとも virtualenvpip の問題なのかを切り分けて考えるとよいと思います。

実際どうなのよ

「普通にvirtualenv/venv+pip使えばいいじゃん」という方には不要なものだと思います。

個人的には結構便利です。ただ慣れるまでハマりどころはあるかもしれません。

virtualenvwrapper が担っていていたプロジェクトへの移動を peco&ghq でできるようにしたので、 pipenv にそれ以外のところを任せられてる感じです。

Pythonに限った話だと virtualenvwrapper の方が「仮想環境の管理」+「自動activate」とセットで機能が提供されているので楽でした。 workon projectname で「自動activate」+「プロジェクトディレクトリへの移動」なんかもできましたし安定していました。

しかし「 .env ファイルを自動で読み込んでくれると嬉しいな」とか、Windows/macOS/Linuxと共通の手順で導入できるし、 peco&ghq を活用すればディレクトリの移動もお楽にいけそうだと思ったので、「個人でよしなにやるプロジェクトなら pipenv の組み合わせでいいかー」と思い移行することにしました。

今のところ個人の環境でしか試してないので、本番環境で運用したりしてる人はどうしているのかなとは気になりますね。