はじめに
いつも心は虹色に! nikkieです。
8/11はpyhackで翻訳レビュー進めてきました。
レビューもだいたい終わったということで、Django2.0.x系対応日本語版がつい先日ベータリリースされています。
https://tutorial.djangogirls.org/ja/
勉強会の概要
(第91回)Python mini Hack-a-thon - connpass
スプリントのゆるい版みたいな感じで各自自分でやりたいことを持ってきて、勝手に開発を進めています。参加費は無料です。 初めての方も常連さんもぜひご参加ください。
pyhackの特徴の一つは床枠だと思いますが、今回は机が増えていて、机がだいぶ行き渡っていた印象です。
取り組んだこと
Django Girls Tutorialの翻訳レビュー
- CSSでカワイくしよう · Django Girls Tutorialからレビュー
- 仮想環境(virtualenv)の代わりにDockerを試してみる
DockerでDjangoを動かしてみて
Dockerを仮想環境の代わりに使えば、Pythonを入れなくてもDjangoが動く環境が作れると気づいたので、
Quickstart: Compose and Django | Docker Documentationを参考に試してみました。
Dockerfile(ブログのソースコードのディレクトリに配置)
FROM python:3.6 ENV APP_DIR /code EXPOSE 8000 RUN mkdir $APP_DIR WORKDIR $APP_DIR COPY requirements.txt $APP_DIR RUN pip install --upgrade pip RUN pip install -r requirements.txt
buildしてから
$ docker run -it -p 8000:8000 -v "$(pwd)":/code --rm django_girls:1.1 bash
(ブログのソースコードのディレクトリをコンテナにマウント)
以降はdocker exec
でコンテナに接続してコマンド実行します。
まっさらな環境なので
migrate
createsuperuser
が必要。1回やるとsqliteのDBが作られるため、コンテナ再起動時は不要なようです。
コンテナ内でrunserverするときのポイントは0.0.0.0:8000指定でした。
python manage.py runserver 0.0.0.0:8000
Flaskの場合と同じなのかなと捉えています。参考:Flaskのサーバーはデフォルトだと公開されてない
これを忘れるとDockerfileで8000番ポートをEXPOSEしているにもかかわらず、ブラウザでアクセスできなくなってしまいます。
翻訳レビュー
手を動かしながら翻訳レビューを進めていきます。
アプリケーションを拡張して、ブログ記事の詳細画面も追加。
公開していない記事についても詳細画面は確認できます。(URI直打ちでしか対応していませんが)
ブログ詳細画面のURIの指定が1.11.x系ではr'^post/(?P<pk>[0-9]+)/$'
と正規表現のようだったのですが、
2.0.x系ではFlaskでも使われているような書き方('post/<int:pk>/'
)になっていました。
こんなところも変わっているんですねー。
原文を読んでの気づき
すごく共感できる箇所があったので紹介。こういうのに気付けたとき、翻訳面白いなって思います。
CSS(Bootstrap紹介)
But we don't want to start from scratch again, right? Once more, we'll use something that programmers released on the Internet for free. Reinventing the wheel is no fun, you know.
車輪の再発明(Reinventing the wheel)への言及がありました!
CSSを一から書くのは大変なので、Bootstrapを使いましょうという文脈です。
ただ、車輪の再発明という訳語は学習者に通じにくそうなので、わかりやすい訳にするのが難しい箇所ですね。。
404ページをカスタマイズしない
But it's not super important right now, so we will skip it.
「super importantじゃないから、今はやらない」に現れている最優先のものにだけ集中する姿勢がいいなと思います。
スクラムの考え方(優先度の高いプロダクトバックログアイテムから取り組む)に通じるんじゃないでしょうか。
他の方の取り組みから
- Dockerのドキュメントにオーケストレーションまで扱ったチュートリアルがあるそうです:Get Started, Part 1: Orientation and setup | Docker Documentation
- Discord Bot興味深いですPythonで実用Discord bot(discord.py解説)
- コードフォーマッタBlack GitHub - ambv/black: The uncompromising Python code formatter
グローバルスコープとローカルスコープについて
質問されて曖昧と気づいたので調べました。
pythonのグローバル変数覚書 · GitHub
- 前提:jupyter notebook使用(事象の確認ではインタラクティブシェル使用)
- 関数のローカルスコープで変数をタイポ(numのつもりがmun)
- グローバルスコープでnumを定義してあったので関数は何事もなく動いた(グローバルスコープのnumを参照するので変数未定義扱いにはならない)
『退屈なことはPythonにやらせよう』の3章2を参照しました。
今回はnumへの代入文がないためグローバル変数として扱われたと理解しました。
(関数内で代入していたらローカル変数として扱うそうです)
感想
夏山合宿以来1月ぶりでしたが、開発〜懇親会まで非常に楽しい時間でした。
PyConトークの準備をしている方が多い環境なので、自分も目指してみようと思えます。
(懇親会の席で「資産あるんじゃないですか?」と言っていただけて、「そうか、自分もトークできるかも」と思えました!)
1日ありがとうございました!
-
テンプレートの
{% block content %}
ってRailsでいうところの<%= yield %>
ですね。https://railstutorial.jp/chapters/static_pages?version=5.1#sec-layouts_and_embedded_ruby↩ -
英語版は公開されています:https://automatetheboringstuff.com/chapter3/↩