勝手に注釈「Python プログラミングのツボとコツがゼッタイにわかる本」

 この本「最初からそう教えてくれればいいのに!Pythonプログラミングのツボとコツがゼッタイにわかる本」は、私が受講したハロートレーニングの授業でPythonの基礎学習に使っていた書籍です。学校ではオンラインテキストで提供されていましたが、受講修了後は使えなくなるということで、自費で紙媒体のものを購入しました。古い本だということもあり、アマゾンの古本で100円+送料でした(笑)。授業ではこの本の2章までしか使っておらず、3章以降のWebプログラミングのところは、別途Django入門書を使って学習しました。折角購入したのに使い切らないのは気になるということもあり、3章以降も独習してみたので、その際に気になったことや躓いたところを勝手に注釈しちゃいます。学習書としては、参考書よりは教科書タイプの本なので、以下の点を踏まえて最新のソフトウェア環境で使えば、まだまだ利用価値のある本だと思います。ちょっと昔のPython本ということで発行数も多かったのかもしれませんが、きれいな古本がワンコインで手に入るのも魅力です。

 この本は2016年12月の発行ということもあり、対象としているソフトウェアのバージョンが以下のように古いです。

  • Python 3.5.2
  • Django 1.10

 Pythonの方はバージョン3なので問題なかったですが、Djangoは、この本で対象としているかなり古いバージョンの1.10をあえて指定して入れないと、うまく動作しないかと思います。私はというと、いまさらそんな古いバージョンを入れるのは気に入らないので、これも修行ということで、Djangoは現時点での最新バージョンである4.1.7でトライしてみました。そして案の定、そのままでは不都合なところがありました=^_^;=。ネットで調べたりドキュメントにあたってみたりして、なんとか3章と4章の学習を終えることができたので、その際に手を加えたり修正したりしたところを書いておこうと思います。

 この本では、2章まででPythonの基礎を学びながら、カードゲームの「ブラックジャック」を作っていく流れになっています。といっても、コンソール上で動作する味気ないものですが、基本のロジック部分はここで出来上がりです。続いて3章以降で、これをWeb上で動くように、Web開発フレームワークであるDjangoを使って組み上げていくことになります。2章までに作ったロジック部分は、そのまま関数として組み込んで使います。(※つまり、クラスではなく関数ベースでの構築となります。)このあたりは学習に無駄がなくていいです。まずは、Web上でといいながらも文字ベースで動作するものを作り、さらに進んでグラフィックを使ったものに差し替えるという流れです。最後は、見栄えもいいものが出来上がりました。まぁ、Djangoの説明部分はボリュームも限られていますので、DjangoはDjangoで別の専門の入門書を紐解いた方がいいかと思います。しかしながら、Djangoは別の本で学習した前提での話ですが、この本で扱うDjangoの部分も面白かったです。

 前述のとおりこの本のDjangoでは、処理のところは関数で書かれていて、クラスとかは使われていません。でも、そのせいでわかりやすいです。また、ロジック部分は、2章までで完成しているので、3章以降の関数は、主にWeb上で動作させるためのものが説明されており、理解しやすいと思いました。それと、モデルのところも、よく使われるSQLiteとかのデータベースは使われておらず、簡略なしくみのRedisというものが使われています。このRedisに興味をもったのも、私が3章以降にもトライしようと思った一因でした。一般のDjango本はデータベースで動かす前提で書かれているものが多いのではないでしょうか。このRedisは、キーバリュー型のインメモリでデータを保持する仕組みで、機敏に動くのではないかと思います。あくまで初心者の感想ですが、RDBと使い分けるのも面白いし、知っておいて損はないと思います。で、私が修正追加した事項は以下のとおりです。

  1. url.pyの記述書式が古いので書き換え
  2. setting.pyのredis関連の記述の追加
  3. プログラムリストの記述に間違いがあるので修正

バージョンの関係で、url.pyがurl形式で書かれていてエラーになったので、path形式に書き直しました。書き直したurl.pyの内容は以下のとおりです。

firstDjango配下のurl.py

from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('firstApp/', include('firstApp.urls')),
    path('BJ/', include('BJGame.urls')),
]

firstApp配下のurl.py

from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.hello),
    path('cards/', views.cards),
    path('random_cards/', views.random_cards),
    path('welcome/', views.welcome),
    path('form_test/', views.form_test),
    path('form_card/', views.form_card),
    path('login/', views.login),
]

BJGame配下のurl.py

from django.urls import path
from . import views

urlpatterns = [
    path('game/', views.game, name='game'),
    path('howto/', views.howto),
]

 redisについては、最初エラー(「no such tabledjango_session」) が出た内容でググると、migrateしろと出てきたのですが、それではredisではなく普通にSQLiteとかのデータベースを使っちゃうことになるんじゃないかと思い、さらに調べて以下の内容をsetting.pyに付け加えたところ、使えるようになりました。動かすだけなら、「python manage.py migrate」でSQLiteを使うのでもいいでしょうけど、redisを使うなら以下の方法をお薦めします。とはいえ、ここは私もよくわかってないので、ネットにあったものをそのまま流用してます=^^;=。それと、django-redis 5.3.0というパッケージをpipで追加インストールしています。

setting.pyに以下を追加

# Default primary key field type
# https://docs.djangoproject.com/en/4.1/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://localhost:6379/',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient'
        }
    }
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'

SESSION_EXPIRE_AT_BROWSER_CLOSE = True

 あと、P272に記載のあるソースコードの抜粋リスト6に誤植があります。「if ending :」の行のインデントがずれています。まぁ、Pythonあるあるで普通ならわかるのですが、この行の上が抜粋で端折られているので気づけなかったです。P287に改めて完成版のソースコード全体が記載されていて、こちらは合っていますのでこちらを参照されるといいかと思います。

 さて、一通り学習を終えた後の感想ですが、ブラックジャックという簡単なカードゲームのプログラム作りを軸として、Pythonの基礎からWebフレームワークでの実装まで無駄のない流れで説明されていて、教科書タイプの学習書としてよくできた本だと思います。後の章で、それ以前の章で扱った内容が必要となって混乱するってことがないので、とてもスムーズで学びやすいです。もちろん、この本だけでは学べる知識は限られていて、他の参考書的な本で補足して学ぶことは必須になります。しかし、初学者には挫折することなくたのしく学べて、学習プロセスと学習対象自体の見通しが良いことも必要だと思います。私は良書だと思いますが、この本の改訂版が出てないのが残念ですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です