似非プログラマのうんちく

「似非プログラマの覚え書き」出張版

巳年じゃないけど Python やろうぜ(その 4)

ちょっと前回の補足。

もし Python 3.6.0 しか入れていないか、もしくは Python 2.7.x の後に Python 3.6.0 をインストールしていて、なおかつ Python Launcher をインストールしていたなら、開発用サーバの起動は

>manage.py runserver

で行えます。その他の Django 用のコマンドも同様に実行できます。

Django アプリを作る

アプリを作るためのコマンドは「うまくいった!」のページに書いてありましたね。今回は hello という名前のアプリを作ります。

>manage.py startapp hello

こんな感じで新たに hello というフォルダができています。

django_test
│  db.sqlite3
│  manage.py
│
├─django_test
│      settings.py
│      urls.py
│      wsgi.py
│      __init__.py
│
└─hello
    │  admin.py
    │  apps.py
    │  models.py
    │  tests.py
    │  views.py
    │  __init__.py
    │
    └─migrations
            __init__.py

Hello ページを作る

実際に Hello ページを作ってみましょう。django_test\hello\views.py を編集して以下のようにします。

from django.http import HttpResponse


def index(request):
    return HttpResponse('Hello, Django!')

Python のお作法として

  • 関数定義などのブロックはインデント(半角スペース 4 個)で明示する
  • 関数定義やクラス定義などの前には空行を二つ入れる
  • ファイルの終端は改行で終わる

などがあります。だいたいは pep8 が教えてくれるので、その通りにやりましょう。

次に django_test\django_test\urls.py を編集します。

from django.conf.urls import url, include  # include を追加
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/', include('hello.urls')),  # この行を追加
]

コメントは分かりやすさのために入れてるので、実際には書かなくても大丈夫*1です。

これは何をやっているのかというと、http://localhost:8000/hello/ にアクセスしたら、それ以降の URL 文字列の処理を hello アプリの urls モジュールに委ねますよ、ということです。

なので、当然 django_test\hello\urls.py を作成することになります。このファイルはあらかじめ用意されていないので、新規に作成します。

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.index),
]

これで http://localhost:8000/hello/ にアクセスしたら、先ほど views.py に書いた index 関数が呼ばれるようになりました。

最後に、settings.py を編集して、hello アプリが追加されたことをプロジェクトに教えてやります。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'hello',  # この行を追加
]

さて、開発用サーバを起動して http://localhost:8000/hello/ にアクセスしてみましょう。

表示されました。でもこれ、本当にただのテキストです。HTML でも何でもありません。HTML を表示させるには HttpResponse に HTML を渡す必要があります。でも直接長々と HTML を書き込むのは面倒ですよね。そこでテンプレートの登場となります。

*1:ちなみに行末にコメントを書くときは半角スペース 2 個分開けてから書きなさい、と pep8 が教えてくれました。

巳年じゃないけど Python やろうぜ(その 3)

似非プログラマです。本日、御年 41 になりました。また一つ、おっさんの階段を上りました。

まぁそんなことは置いといて、Django です。

そもそも Django って何よ ?

Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.

(The Web framework for perfectionists with deadlines | Django より引用)

ざっくり訳すと「素早い開発、かつ綺麗で現実的なデザインを後押ししてくれる高水準な Python の Web フレームワークですよ~」ってところかしら。

Django 以外だと、Web2py なんてのがあるらしいけど、残念ながらこいつはまだ Python 3 系には対応してない。まぁそのうち対応するんじゃないかな。

ということで。

とにかく入れる

とにかくインストールする。と言っても、ものすごく簡単。コマンドプロンプトを開いて

>pip install django

以上。あとは画面をボーッと眺めてれば、ものの数十秒で Django はインストールされます。便利な世の中になったアル。

とにかく作る

Django のアプリを管理するプロジェクトを作ります。お好きなフォルダに移動して

>django-admin startproject django_test

すると django_test というフォルダができます。ちなみにできたフォルダの中身はこんな感じ。

django_test
│  manage.py
│
└─django_test
        settings.py
        urls.py
        wsgi.py
        __init__.py

とにかく動かす

>cd django_test
>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).

You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 14, 2017 - 22:40:49
Django version 1.10.5, using settings 'django_test.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

ということでブラウザで http://localhost:8000 にアクセスしてみましょう。

とりあえず動きましたが、まだ何もありません。

日本語化する

ここから Atom で作業します。

django_test\django_test\settings.py を開くと、106 行目~108 行目に

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

ってのがあると思うので、これを

LANGUAGE_CODE = 'ja-jp'

TIME_ZONE = 'Asia/Tokyo'

に直します。保存すると、コマンドプロンプトで runserver が再起動しているのが分かると思いますので、さっきのページをリロードしてみましょう。

メッセージが日本語になりましたね。もちろん、まだ作業は何も手を付けていません。次にやるべきことは、もう書いてありますね。そう、startapp でアプリのひな型を作るのです。

巳年じゃないけど Python やろうぜ(その 2)

前回からの続きです。

開発環境を整える

PyCharm は割とおすすめらしいんだけど、無料版だと Web 開発にはやや機能不足っぽい。

ということで、無料で整えられる環境としては以下のパターンがあるかと思います。

Eclipse + PyDev

Eclipse - The Eclipse Foundation open source community website.
PyDev

おなじみの Eclipse に PyDev プラグインをインストールして Python の開発環境として使う方法。マウスクリックで Django プロジェクトも作れる。そんなに悪くない。

Atom + 各種パッケージ

Atom

GitHub が提供している無料の高機能エディタにパッケージを入れて Python 用のエディタとして使う方法。linter-pep8 linter-pycodestyle を入れると pep8 pycodestyle*1 を利用してコードのチェックができる(PyDev は pylint のみ対応)。pep8 pycodestyle の他に flake8 というのもあって、そちらを使うのであれば linter-flake8 を入れればよい。

一応、両方それぞれに構築してみた。Eclipse + PyDev は特に問題なし…と思ったが、後に pylint の設定でハマる。

Atom は差し当たり

あたりを入れておけばいいんじゃないでしょうか(Django 関連は後ほど紹介)

各種 linter のインストール

pylint

普通に pip install pylint したら見事にハマりました ! のぉー !

というわけで、昨日紹介した非公式バイナリ配布サイトから lazy_object_proxy と wrapt を持ってきてまず先に入れておきます。それから pip install pylint でインストール完了。

pep8 pycodestyle, flake8

pip install pep8 pip install pycodestyle, pip install flake8 で問題なし。

次はいよいよ Django ですよ !

*1:pep8 は pycodestyle にリネームされたそうです。

巳年じゃないけど Python やろうぜ(その 1)

どうもすっかりとご無沙汰しておりました。

忙しかったり体調崩したり、なかなかブログに本腰が入れられない状態がずっと続いていましたが、暇になったのでまた再開しようかと思います。今後も相変わらず不定期ですが、なにとぞよろしくお願いいたします。

きっかけ

昨年末に「来年こそ書初めするぜ !」と意気込み、さてどの言語にしようかと考えていたのですが、以前から Django に興味があったので「この流れで行くと Python書初めするのがええかのぅ」ということになりまして、結局 2 日遅れの 1 月 4 日にめでたく Python + Django にて書初めと相成りました。

それから 1 週間ちょい、ほぼ Python をメインにコードを書いておりました。今回はその奮闘記を題材にいたしとうございます。

まずは Python をインストールしなきゃ始まらない

まぁまずは肝心の Python をインストールしなきゃ始まらんわけです。

Python 3.6 リリース !

Welcome to Python.org

いつの間にか Python も 3.6 になってたんですね。というわけでダウンロードしてきました。インストール先は C:\Python\3.6 にしました。

Django、その前に

Django の前に、以前から興味のあった各種パッケージをインストールしていきます。

NumPy (NumPy + MKL)

Python数値計算するやつ。何か n 次元配列とか使えるみたい。Windows にインストールするときはちょい特殊で、下記のサイトから自分にあった whl ファイルを持ってきて pip install しないとダメっぽい。

Python Extension Packages for Windows - Christoph Gohlke

SciPy library

上記の NumPy もそうなのだが、SciPy プロジェクトのコアとなるパッケージの一つで、こいつのことを単に SciPy という人もいる。これも Windows では上記の配布サイトからやはり whl ファイルを持ってきてインストールする。先に NumPy + MKL を入れろと書いてあるので、NumPy + MKL → SciPy の順にインストール。

matplotlib

MATLAB っぽい感じでグラフとか表示できるらしい。Python 3.5 までは単に pip install matplotlib で行けたのだが、Python 3.6 用のは PyPI に転がってないのでやっぱり上記の非公式バイナリ配布サイトから持ってこないといけない。2.0.0 がリリースされて、Python 3.6 向けのパッケージも PyPI に置かれるようになりました。なので普通に pip install matplotlib で行けます。

ちなみに pip install すると依存するパッケージがゴロゴロと入ってくるが、それは pip が勝手に入れてくれるので問題なし。

SymPy

シンボリックに数式計算をしてくれるライブラリ。これも SciPy プロジェクトの一つ。これは普通に pip install sympy で大丈夫。

TensorFlow

Google 社が提供する Python 向けの機械学習ライブラリ。0.12 から Windows にも対応するようになった。matplotlib 同様、Python 3.5 までは普通に pip install tensorflow でオッケー。Python 3.6 については、非公式バイナリ配布サイトから持ってきてインストールする。一緒に wheel もインストールしてくれるので楽チン。

このあともまだまだいろいろとぶち込んでいきますが、続きはまた後ほど。

Apache Maven を使ってみよう(その 3)

Mavenプラグインについて

Mavenプラグインは主に以下のサイトで用意されている。
Maven – Available Plugins
Mojo – MojoHaus Maven Plugins Project

Exec Maven Plugin

前回の課題になっていた、Maven のビルドの実行の際に main を実行するためには、Mojo で用意されている Exec Maven Plugin を利用する。

pom.xml を修正する。

<project
  xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>jp.mydns.akanekodou</groupId>
  <artifactId>MavenSample</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>

  <name>MavenSample</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.4.0</version>
        <configuration>
          <mainClass>jp.mydns.akanekodou.App</mainClass>
        </configuration>
        <executions>
          <execution>
            <phase>test</phase>
            <goals>
              <goal>java</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

build 要素が新たに追加され、その直下に plugins 要素がある。Mavenプラグインにはビルドプラグインとレポーティングプラグインがあり、Exec Maven Plugin はビルドプラグインなので build 要素に追加することになる。

今回は mvn test を実行したら自動的に mvn test exec:java が実行されるように設定している。

mvn test を実行すると…

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running jp.mydns.akanekodou.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.148 sec

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- exec-maven-plugin:1.4.0:java (default) @ MavenSample ---
Hello World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.490 s
[INFO] Finished at: 2015-08-27T20:57:56+09:00
[INFO] Final Memory: 11M/212M
[INFO] ------------------------------------------------------------------------

確かに実行されている。

Apache Maven を使ってみよう(その 2)

Maven のビルドライフサイクル

Maven のビルドライフサイクルには多数のゴールが設定されている。ちなみにデフォルトのライフサイクルには何と

validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy

こんなにゴールが設定されている。

しかし、実際にはこれを全部使うことはない。以下、主だったものを説明する。

続きを読む

Apache Maven を使ってみよう(その 1)

当ブログではこれまで Apache Maven (以下、Maven) の話題は極力避けてきたが、昨今の開発事情を鑑みるに、最早 Maven なしでは開発がままならない状況になりつつある。Spring MVC では標準のビルドツールとして採用されるなど、Maven は避けては通れないものになっている。

Maven はなぜ便利なのか ?

ビルドライフサイクルの自動化

IDE を使っているとあまりピンと来ないかも知れないが、たくさんの Javaソースコードを一つ一つ手でコンパイルするのは大変な作業である。Maven でプロジェクトを管理しておけば、コマンド一つでコンパイルを含むビルドライフサイクルを全て自動化できる。

依存ライブラリの管理ができる

プロジェクトが依存するライブラリを一つ一つ探してくるのは大変な作業。しかし Maven なら、設定ファイルである pom.xml に記述しておけば Mavenリポジトリから勝手にダウンロードしてくれる。さらに、依存するライブラリが依存する別のライブラリがあれば、ほとんどのケースでそれらも勝手にダウンロードしてくれる。

プラグインによる拡張性

Maven には様々なプラグインがあり、それらを組み込むことで Maven をより使いやすいものに出来る。場合によっては自分でプラグインを作ることも出来る。

Scala や Groovy も O.K.

Maven さえあれば、Java VM 上で動く Scala や Groovy と言った言語での開発も可能。しかも Scala や Groovy を別途インストールする必要がない。

こういった理由により、Maven の使い方を覚えることは非常に有効であり、開発の手間を大いに省くことが可能になる。そこで今回からは Maven の基本的な使い方を連載していこうと思う。

続きを読む