Python開発の変遷

Pythonプロフェッショナルプログラミングの

改訂の歴史から知る

Takanori Suzuki

TechRAMEN 2025 Conference

TechRAMEN 2025 Conference / 2025 Jul 26

Agenda / アジェンダ 📜

  • Pythonプロフェッショナルプログラミング(以下:PyPro)出版の歴史を紹介

  • 章ごと改訂の歴史を見る

Goal / ゴール 🥅

  • Pythonチーム開発の変遷を知る sore

  • 自身のプロジェクトの参考になる

    • なにか導入してみたくなる

  • (PyPro4を買いたくなる kamon

…が

2025年7月4日に出版社が破産 [1]

../_images/shuwa-hasan.png

Photos camera Tweets niwatori come-on

#techramen25conf / #shoyu / @takanory

slides.takanory.net

slides.takanory.net

Who am I? / お前誰よ 👤

takanory profile kuro-chan and kuri-chan

(たぶん)旭川 & TechRAMEN yatta

北海道

大雪地ビール館 hituji

大雪地ビール館

-Freehouse- THE YEAST beer

-Freehouse- THE YEAST

→ エスコン🍺 → 釧路 → 東京 travel

北海道
  • 釧路出身、釧路高専卒

PyCon JP Association 🐍

日本国内のPythonユーザのために、Pythonの普及及び開発支援を行うために、継続的にカンファレンス(PyCon)を開くことを目的とした非営利組織

www.pycon.jp

pycon jp logo

PyCon JP Associationの主な活動

PyCon JP 2025

PyCon JP 2025 logo

旭川の直行便はなかった… [2] komata

Flight to Hiroshima

BeProud Inc. 🏢

  • BeProud: Pythonシステム開発、コンサル

  • connpass: IT勉強会支援プラットフォーム

  • PyQ: Python独学プラットフォーム

  • TRACERY: システム開発ドキュメントサービス

BeProud logos

BeProudメンバー募集中 kamon

Pythno求人のQRコード カジュアル面談のQRコード

Pythonプロフェッショナル
プログラミング

  • ビープラウドが執筆した書籍

  • ビープラウドに新たに加わったメンバーが、プロジェクトに円滑に参加するためのガイド

    • Pythonで開発するチームに役立つはず

    • 当時の開発スタイルが見えてくる

PyPro出版の歴史 📚

PyPro出版の歴史 📚

略称

出版日

初版

PyPro

2012年3月27日

第2版

PyPro2

2015年2月27日

第3版

PyPro3

2018年6月12日

第4版

PyPro4

2024年2月16日

どれくらい間があいたのか

>>> from datetime import date
>>> pypro = date(2012, 3, 27)
>>> pypro2 = date(2015, 2, 27)
>>> pypro3 = date(2018, 6, 12)
>>> pypro4 = date(2024, 2, 16)
>>> (pypro2 - pypro).days / 365
2.9232876712328766
>>> (pypro3 - pypro2).days / 365
3.2904109589041095
>>> (pypro4 - pypro3).days / 365
5.684931506849315

PyPro(黒)

  • 発売日: 2012年3月27日

  • 464ページ

  • 本体: 2,800円+税

pypro1

PyPro著者

  • リーダー: 清水川貴之

  • 岡野真也、池田洋介、畠弥峰、drillbits、cactusman、東健太、tell-k、今川館、ナツ、文殊堂、aita、冨田洋祐

pypro1

2012年のできごと

PyPro2(黒+赤)

  • 発売日: 2015年2月27日

  • 472ページ

  • 本体: 2,800円+税

pypro2

PyPro2著者

  • リーダー: 清水川貴之

  • 岡野真也、drillbits、cactusman、東健太、tell-k、文殊堂、冨田洋祐、aodag鈴木たかのり清原弘貴

pypro2

2015年のできごと

PyPro3(黒+青)

  • 発売日: 2018年6月12日

  • 488ページ

  • 本体: 2,800円+税

pypro3

PyPro3著者

  • リーダー: 鈴木たかのり

  • 清水川貴之、tell-k、清原弘貴、James Van Dyne的場達矢吉田花春新木雅也altnight、川村愛美、石上晋

pypro3

2018年のできごと

PyPro4(黒+緑)

  • 発売日: 2024年2月16日

  • 468ページ

  • 本体: 3,000円+税

pypro4

PyPro4著者

  • リーダー: 石上晋

  • 鈴木駿、altnight、鈴木たかのり、Yukie荻野真志、吉田花春、降籏洋行、川村愛美、的場達矢

pypro4

2024年のできごと

  • Python 3.12.4Python 3.13(10月)

  • Django 5.1(8月)

  • Python 3.7以前はEOL、Django 3.2がEOL

  • Apple Vision Pro発売(アメリカ2月、日本6月)

  • 日本銀行券が刷新(7月)

  • パリオリンピック開催(7月)

PyPro出版の歴史のまとめ unun

  • 12年間4回出版

  • メンバー入れ替えながら

  • 執筆リーダー代わりながら

pypro1 pypro2 pypro3 pypro4

章ごと改訂の歴史を見る miru

1. Pythonのセットアップ hebi

PyPro3 → PyPro4

  • Python: Python 3.11

  • 開発環境: Docker / Docker Composeを採用

  • 便利なツール

    • Black: コード整形(2018年)

    • Ruff: Pythonリンター(2022年)

    • mypy: 型ヒントの静的型チェッカー

Black[3]: コード整形

../_images/black-logo.webp
  • 1行の文字数以外はほぼカスタマイズできない

  • Ruff(次で紹介)に置き換わりつつある

$ pip install black
$ black src/ hogehoge.py  # コードをフォーマット
$ black --check src/ hogehoge.py  # フォーマット対象があるかチェック

Ruff[4]: Pythonリンター

../_images/ruff-logo.svg
  • さまざまなルールでコードをチェック

  • Rust製で速い

  • フォーマッターも含まれている

$ pip install ruff
$ ruff check  # 全ファイルをチェック
$ ruff check --fix  # 可能なら自動で修正
$ ruff format  # 全ファイルをフォーマット

mypy[5]: Pythonの静的型チェッカー

../_images/mypy_logo.svg
  • 型ヒントを元にコードに問題がないか調べる

# 引数nはint、返り値はintのイテレーター
def fib(n: int) -> Iterator[int]:
    a, b = 0, 1
    while a < n:
        yield a
        a, b = b, a+b
		
fib("a")  # mypyでエラー

PyPro2 → PyPro3

  • Python: Python 3.6.4

  • 開発環境: VirtualBox / Vagrant 上のUbuntu

    • Pythonをソースからインストール

  • 仮想環境: venv (Python 3.3以降)

  • 便利なツール: Flake8: Pythonリンター

  • バージョン管理: Gitに変更

venv: Python仮想環境

  • Python 3.3から標準

  • プロジェクト毎の仮想環境を作成できる

$ python -m venv env
$ . env/bin/activate
(env) $ pip install django
  • 今後uvに変わるかも?

PyPro1 → PyPro2

  • Python: Python 2.7.6

    • Python 3系についても触れている

  • 仮想環境: virtualenvをインストール

  • バージョン管理: Mercurialを使用

    • サーバーも自前でたてていた

    • Bitbucketも軽く紹介

PyPro

  • get-pip.py

    • pip コマンドはPythonに含まれていない

    • get-pip.py をダウンロード→インストール

PyPro

$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py

2. Webアプリケーション badminton

PyPro3 → PyPro4

  • WebアプリケーションからWeb APIへ

    • DjangoでHTML生成ではなく、APIのみ提供

    • フロントはVue.js

    • FastAPIにも軽く触れている

Django[6]: Webフレームワーク

../_images/django-logo-positive.svg
  • 最新バージョン: 5.2.4

  • Webアプリーケーション開発に必要な機能が揃っている

  • セキュリティ対策もされている

  • 大規模サイトでも利用されている

FastAPI[7]: API構築用フレームワーク

../_images/fastapi1.png
  • 最新バージョン: 0.116.1

  • 高速に動作

  • インタラクティブなAPIドキュメントを生成

PyPro2 → PyPro3

  • Flaskで乗りログ

    • FlaskでWebアプリ構築

    • お題は乗りログ(電車の乗車記録)

Flask[8]: 軽量Webフレームワーク

../_images/flask-name.svg
  • 最新バージョン: 3.1.1

  • シンプルなフレームワーク

PyPro、PyPro2

  • Flaskでゲストブック

    • フレームワークはFlask

    • お題はゲストブック

3. データサイエンス work

PyPro3 → PyPro4

  • 機械学習からデータサイエンスへ

    • Jupyter NotebookからJupyterLab

    • 数理最適化 を紹介

JupyterLab[9]: ノートブック作成アプリ

../_images/jupyter-logo.svg
  • コードの実行結果が表示される

    • グラフ描画、画像表示等も可能

  • データ分析、機械学習等での試行に便利

PyPro3

  • 機械学習の章が初登場

  • 機械学習プロジェクトの進め方を紹介

4. チーム開発のためのツール naosu

PyPro3 → PyPro4

  • 複数の課題管理システムを紹介

    • Redmine、Backlog、JIRA、GitHub Projects

  • Slackの使いこなしを追加

  • ビデオ、音声会議を追加

  • Googleカレンダー1Passwordを追加

    • Dropbox、Dropbox Paperを削除

課題管理システム

  • 課題(タスク)の状況を管理するシステム

  • RedmineBacklogJIRAGitHub Projectsなど

  • いつ、誰がなにをしたか

  • 課題が完了したかどうか

  • 優先度、期日

1Password[10]: パスワードマネージャー

../_images/1password.png
  • アカウント、パスワード等を安全に管理

  • グループのメンバーで共有

  • 複数デバイスで利用可能

PyPro2 → PyPro3

  • 課題管理はRedmineのみ

    • Redmineのインストールはあっさり

PyPro → PyPro2

  • Redmineのインストールはしっかり

  • Mercurialとの連携

  • チャットシステムはSlack(2013年リリース)

PyPro

  • 課題管理はTrac

    • Python製、2023年9月まで開発

  • チャットシステムはSkype

5. 課題管理とレビュー issue-mada-nai

PyPro3 → PyPro4

  • Redmineの画面イメージを削除

    • 複数の課題管理システムに対応するため

  • Backlog、Jira、GitHubでのテンプレート設定

  • チケットテンプレート例がreST→markdown

PyPro → PyPro2

  • チケットテンプレートが追加

  • コードレビューにはrietveldを使用

    • App Engine上で動くレビューツール

    • 2018年まで開発

6. ソースコード管理 tako

PyPro3 → PyPro4

  • git swtich コマンドを紹介

  • GitのGUIクライアントの紹介を削除

    • VSCode、PyCharmのGit連携

    • GitHub CLIを紹介

GitHub CLI: コマンドラインツール

$ brew install github
$ gh issue list
$ gh pr create
$ gh pr merge

PyPro2 → PyPro3

  • Git/GitHubに変更

    • ブランチ作成

    • マージ、リベース

    • GitHub Flow

    • GitHubのTips

GitHub Flow: 軽量なワークフロー

  • ドキュメント: GitHub フロー

  • mainブランチと各機能を実装するfeatureブランチのみ

  • mainブランチにマージしてデプロイ

PyPro、PyPro2

  • Mercurialでのソースコード管理

    • サーバー上の管理と設定

    • フックの活用

    • BeProud Mercurial Workflow

7. 開発ドキュメント holiday2

PyPro3 → PyPro4

../_images/tracery_logo_color.svg

PyPro〜PyPro3

  • Sphinxでドキュメント作成

Sphinx[11]: ドキュメント作成ツール

../_images/sphinx-logo.png

8. 単体テスト test-mada-nai

PyPro3 → PyPro4

  • pytestと各種pytestプラグイン

  • Djangoのテストはpytest-django

  • pandasのテストとスナップショットテスト

    • 過去の実行結果を次回のテストで使う

pytest[12]: テスト用フレームワーク

  • デファクトスタンダード

  • assert文で検証

  • テストコードを自動検出

  • プラグイン機能と1300以上のプラグイン[13]

../_images/pytest1.webp

PyPro→PyPro2、PyPro3

PyPro

9. 継続的インテグレーション mawaru

PyPro3 → PyPro4

GitHub Actions: GitHub上のCI/CD

  • github.co.jp/features/actions

  • PRに対して自動テスト実行などで利用

  • mainにmergeすると自動デプロイなども可能

  • パブリックリポジトリは無料

  • プライベートでも2,000分/月無料

PyPro2 → PyPro3

  • CircleCIで継続的インテグレーション

    • ユニットテスト

    • 結果のSlack通知

    • Sphinxドキュメントのビルド

PyPro、PyPro2

  • Jenkinsで継続的インテグレーション

    • Jenkinsのインストール

    • ユニットテスト

    • Sphinxドキュメントのビルド

10. Pythonパッケージ itabasami

PyPro3 → PyPro4

  • pyproject.toml でパッケージング

    • PEP 518: 2016年提案、2020年Final

  • READMEがreSTからmarkdown

  • buildモジュールでビルド

    • python -m build コマンド

pyproject.toml: パッケージ設定

PyPro2 → PyPro3

PyPro → PyPro2

  • python setup.py register でPyPIにアップロード

  • wheel パッケージ

    • PEP 427: 2012年提案、2013年Accepted

PyPro

  • bdist_egg パッケージ

    • PEP 715: 2023年PyPIへアップロード不可

11. Webアプリの公開 banzai

PyPro3 → PyPro4

PyPro → PyPro2、PyPro3

  • インフラはサーバー構成のみ

  • Ansibleでのデプロイ

PyPro

12. テスト ok

PyPro3 → PyPro4

13. Webアプリの監視 miru

PyPro4 🆕

14. 追加開発 hueta

PyPro4 🆕

  • endoflife.date: Djangoのライフサイクル確認

  • pip list -o : 更新ライブラリ確認

  • pipdeptree: パッケージの依存関係確認

  • Dependabot: セキュリティ問題の警告

endoflife.date[14]: 製品のEOLを記録

  • Djangoは2年ごとにLTSリリース、3年サポート

Django Release Roadmap

消えた内容 🫥

消えた内容

まとめ mou-dounidemo-nare

  • 12年もあると色々と変わっている

    • 大きく変わらないものもある

  • 常により良い選択に挑戦している

  • 第5版 ではなにが入れ替わるのか、楽しみ

Thank You bow

slides.takanory.net

@takanory takanory takanory takanory

takanory profile kuro-chan and kuri-chan

使用ツール work