Python開発の変遷
をPythonプロフェッショナルプログラミングの
改訂の歴史から知る
Takanori Suzuki
関西オープンフォーラム / 2024 Nov 9
Agenda / アジェンダ 📜
Pythonプロフェッショナルプログラミング(以下: PyPro)出版の歴史を紹介
章ごと改訂の歴史を見る
Goal / ゴール 🥅
Pythonチーム開発の変遷を知る
自身のプロジェクトの参考になる
なにか導入してみたくなる
(PyPro4を買いたくなる🤑)
Photos 📷 Tweets 🐦 👍
#kof2024
/ @takanory
slides.takanory.net
Who am I? / お前誰よ 👤
Takanori Suzuki / 鈴木 たかのり ( @takanory)
PyCon JP Association 代表理事
BeProud 取締役 / Python Climber
Python Boot Camp 講師、Python mini Hack-a-thon 主催、Pythonボルダリング部 部長
PyCon JP Association 🐍
日本国内のPythonユーザのために、Pythonの普及及び開発支援を行うために、継続的にカンファレンス(PyCon)を開くことを目的とした非営利組織
PyCon JP Associationの主な活動
PyCon JP: 年1の大規模カンファレンス
Python Boot Camp: 初心者向けチュートリアル
PyCon JP TV: YouTubeライブ
PyCon JP Association ブース
PyCon JP 2025
2025年9月26、27日に広島で開催予定
旅費の支援もあるよ
座長は西本卓也さん
BeProud Inc. 🏢
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円+税
PyPro著者
リーダー: 清水川貴之
岡野真也、池田洋介、畠弥峰、drillbits、cactusman、東健太、tell-k、今川館、ナツ、文殊堂、aita、冨田洋祐
2012年のできごと
渋谷ヒカリエ、東京スカイツリー開業
ロンドンオリンピック開催
Wii U発売
PyPro2(黒+赤)
発売日: 2015年2月27日
472ページ
本体: 2,800円+税
PyPro2著者
リーダー: 清水川貴之
岡野真也、drillbits、cactusman、東健太、tell-k、文殊堂、冨田洋祐、aodag、鈴木たかのり、清原弘貴
2015年のできごと
Windows 10リリース
マイナンバー法が施行
北陸新幹線が開業
Apple Watch発売
PyPro3(黒+青)
発売日: 2018年6月12日
488ページ
本体: 2,800円+税
PyPro3著者
リーダー: 鈴木たかのり
清水川貴之、tell-k、清原弘貴、James Van Dyne、的場達矢、吉田花春、新木雅也、altnight、川村愛美、石上晋
2018年のできごと
平昌冬季オリンピック
ロシアワールドカップ
ZOZOSUITがリリース
Google Home、Amazon Echo発売開始
PyPro4(黒+緑)
発売日: 2024年2月16日
468ページ
本体: 3,000円+税
PyPro4著者
リーダー: 石上晋
鈴木駿、altnight、鈴木たかのり、Yukie、荻野真志、吉田花春、降籏洋行、川村愛美、的場達矢
2024年のできごと
Python 3.12.4、Python 3.13(10月)
Apple Vision Pro発売(アメリカ2月、日本6月)
日本銀行券が刷新(7月)
パリオリンピック開催(7月)
PyPro出版の歴史のまとめ
12年間で4回出版
メンバーを入れ替えながら
執筆リーダーも代わりながら
章ごと改訂の歴史を見る 🆙
1. Pythonのセットアップ 🐍
PyPro3 → PyPro4
Black: コード整形
1行の文字数以外はほぼカスタマイズできない
$ pip install black
$ black src/ hogehoge.py # コードをフォーマット
$ black --check src/ hogehoge.py # フォーマット対象があるかチェック
Ruff(次で紹介)に置き換わりつつある
Ruff: Pythonリンター
さまざまなルールでコードをチェック
Rust製で速い
$ pip install ruff
$ ruff check # 全ファイルをチェック
$ ruff check --fix # 可能なら自動で修正
$ ruff format # 全ファイルをフォーマット
mypy: Pythonの静的型チェッカー
型ヒントを元にコードに問題がないか調べる
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
get-pip.pyはまだ有効
GitHub: pypa/get-pip
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
2. Webアプリケーション 🕸️
PyPro3 → PyPro4
Django: WebApplicationフレームワーク
最新バージョン: 5.1.2
Webアプリーケーション開発に必要な機能が揃っている
セキュリティ対策もされている
大規模サイトでも利用されている
FastAPI: API構築用フレームワーク
最新バージョン: 0.115.4
高速に動作
インタラクティブなAPIドキュメントを生成
PyPro2 → PyPro3
Flaskで乗りログ
FlaskでWebアプリ構築
お題は乗りログ(電車の乗車記録)
Flask: 軽量Webフレームワーク
最新バージョン: 3.0.3
シンプルなフレームワーク
PyPro、PyPro2
Flaskでゲストブック
フレームワークはFlask
お題はゲストブック
3. データサイエンス 📊
PyPro3 → PyPro4
機械学習からデータサイエンスへ
Jupyter NotebookからJupyterLabに
数理最適化 を紹介
JupyterLab: ノートブック作成アプリ
コードの実行結果が表示される
グラフ描画、画像表示等も可能
データ分析、機械学習等での試行に便利
PyPro3
機械学習の章が初登場
機械学習プロジェクトの進め方を紹介
4. チーム開発のためのツール 🛠️
PyPro3 → PyPro4
複数の課題管理システムを紹介
Redmine、Backlog、JIRA、GitHub Projects
Slackの使いこなしを追加
ビデオ、音声会議を追加
Googleカレンダー、1Passwordを追加
Dropbox、Dropbox Paperを削除
課題管理システム
課題(タスク)の状況を管理するシステム
いつ、誰がなにをしたか
課題が完了したかどうか
優先度、期日
1Password: パスワードマネージャー
アカウント、パスワード等を安全に管理
グループのメンバーで共有
複数デバイスで利用可能
PyPro2 → PyPro3
課題管理はRedmineのみ
Redmineのインストールはあっさり
PyPro → PyPro2
Redmineのインストールはしっかり
Mercurialとの連携
チャットシステムはSlack(2013年リリース)
PyPro
5. 課題管理とレビュー 🎫
PyPro3 → PyPro4
Redmineの画面イメージを削除
複数の課題管理システムに対応するため
Backlog、Jira、GitHubでのテンプレート設定
チケットテンプレート例がreST→markdown
PyPro → PyPro2
チケットテンプレートが追加
コードレビューにはrietveldを使用
App Engine上で動くレビューツール
2018年まで開発
6. ソースコード管理 🐙
PyPro3 → PyPro4
git swtich
コマンドを紹介GitのGUIクライアントの紹介を削除
VSCode、PyCharmのGit連携
GitHub CLIを紹介
GitHub CLI: コマンドラインツール
GitHub上の各種処理をコマンドで実行
$ 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. 開発ドキュメント 📝
PyPro3 → PyPro4
PyPro〜PyPro3
Sphinxでドキュメント作成
Sphinx: ドキュメンテーションツール
マークアップテキストからドキュメント生成
reStructuredText、Markdown等
HTML、ePub、LaTeX等
Python公式ドキュメントもSphinx製
この発表スライドもSphinx製
8. 単体テスト ✅
PyPro3 → PyPro4
pytestと各種pytestプラグイン
Djangoのテストはpytest-django
pandasのテストとスナップショットテスト
過去の実行結果を次回のテストで使う
pytest: テスト用フレームワーク
デファクトスタンダード
assert
文で検証テストコードを自動検出
プラグイン機能と1300以上のプラグイン
PyPro→PyPro2、PyPro3
PyPro
9. 継続的インテグレーション 🤵♂️
PyPro3 → PyPro4
GitHub Actionsに改訂 (2019年リリース)
チェックアウト、Docker、ユニットテスト、静的解析
結果のSlack通知
GitHub Actions: GitHub上のCI/CD
PRに対して自動テスト実行などで利用
mainにmergeすると自動デプロイなども可能
パブリックリポジトリは無料
プライベートでも2,000分/月無料
PyPro2 → PyPro3
CircleCIで継続的インテグレーション
ユニットテスト
結果のSlack通知
Sphinxドキュメントのビルド
PyPro、PyPro2
Jenkinsで継続的インテグレーション
Jenkinsのインストール
ユニットテスト
Sphinxドキュメントのビルド
10. Pythonパッケージ 📦
PyPro3 → PyPro4
pyproject.toml: パッケージ設定
各種ツールの設定ファイルとしても利用
Black: Configuration via a file
Ruff: Configuring Ruff
pytest: Configuration
PyPro2 → PyPro3
setup.py
でパッケージングtwineでPyPIにアップロード
PyPro → PyPro2
python setup.py register
でPyPIにアップロードwheel パッケージ
PEP 427: 2012年提案、2013年Accepted
PyPro
bdist_egg パッケージ
PEP 715: 2023年PyPIへアップロード不可
11. Webアプリの公開 📢
PyPro3 → PyPro4
インフラ: Amazon ECS、AWS Fargate、Amazon ECR
Dockerベースのインフラ
AWS CloudFormationで環境構築
GitHub Actionsでデプロイ
PyPro → PyPro2、PyPro3
インフラはサーバー構成のみ
Ansibleでのデプロイ
PyPro
12. テスト 💯
PyPro3 → PyPro4
13. Webアプリの監視 👀
PyPro4 🆕
死活監視: UptimeRobot
構造化ログ: structlog
エラー通知: Sentry
14. 追加開発 🏗️
PyPro4 🆕
endoflife.date: Djangoのライフサイクル確認
pip list -o
: 更新ライブラリ確認pipdeptree: パッケージの依存関係確認
Dependabot: セキュリティ問題の警告
endoflife.date: 製品のEOLを記録
Djangoは2年ごとにLTSリリース、3年サポート
消えた内容 🫥
消えた内容
PyPro2まで
PyProのみ
まとめ 📚
12年もあると色々と変わっている
大きく変わらないものもある
常により良い選択に挑戦している
第5版 ではなにが入れ替わるのか、楽しみ
Thank You 🙏
@takanory takanory takanory takanory