nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | (第91回)Python mini Hack-a-thon ~Django Girls Tutorial翻訳レビュー~ #pyhack

はじめに

いつも心は虹色に! nikkieです。
8/11はpyhackで翻訳レビュー進めてきました。
レビューもだいたい終わったということで、Django2.0.x系対応日本語版がつい先日ベータリリースされています。
https://tutorial.djangogirls.org/ja/

勉強会の概要

(第91回)Python mini Hack-a-thon - connpass

スプリントのゆるい版みたいな感じで各自自分でやりたいことを持ってきて、勝手に開発を進めています。参加費は無料です。 初めての方も常連さんもぜひご参加ください。

pyhackの特徴の一つは床枠だと思いますが、今回は机が増えていて、机がだいぶ行き渡っていた印象です。

取り組んだこと

Django Girls Tutorialの翻訳レビュー

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しているにもかかわらず、ブラウザでアクセスできなくなってしまいます。

翻訳レビュー

手を動かしながら翻訳レビューを進めていきます。

CSSでカワイくしてから、テンプレート1を導入。
f:id:nikkie-ftnext:20180813233401p:plain

アプリケーションを拡張して、ブログ記事の詳細画面も追加。
f:id:nikkie-ftnext:20180813233518p:plain
公開していない記事についても詳細画面は確認できます。(URI直打ちでしか対応していませんが) f:id:nikkie-ftnext:20180813233552p:plain

ブログ詳細画面の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じゃないから、今はやらない」に現れている最優先のものにだけ集中する姿勢がいいなと思います。
スクラムの考え方(優先度の高いプロダクトバックログアイテムから取り組む)に通じるんじゃないでしょうか。

他の方の取り組みから

グローバルスコープとローカルスコープについて

質問されて曖昧と気づいたので調べました。
pythonのグローバル変数覚書 · GitHub

  • 前提:jupyter notebook使用(事象の確認ではインタラクティブシェル使用)
  • 関数のローカルスコープで変数をタイポ(numのつもりがmun)
  • グローバルスコープでnumを定義してあったので関数は何事もなく動いた(グローバルスコープのnumを参照するので変数未定義扱いにはならない)

『退屈なことはPythonにやらせよう』の3章2を参照しました。

グローバル変数はローカルスコープから読むことができる
同じ名前のローカル変数とグローバル変数を使っても問題ない

今回はnumへの代入文がないためグローバル変数として扱われたと理解しました。
(関数内で代入していたらローカル変数として扱うそうです)

感想

夏山合宿以来1月ぶりでしたが、開発〜懇親会まで非常に楽しい時間でした。
PyConトークの準備をしている方が多い環境なので、自分も目指してみようと思えます。
(懇親会の席で「資産あるんじゃないですか?」と言っていただけて、「そうか、自分もトークできるかも」と思えました!)
1日ありがとうございました!


  1. テンプレートの{% block content %}ってRailsでいうところの<%= yield %>ですね。https://railstutorial.jp/chapters/static_pages?version=5.1#sec-layouts_and_embedded_ruby

  2. 英語版は公開されています:https://automatetheboringstuff.com/chapter3/