Python開発の変遷
をPythonプロフェッショナルプログラミングの
改訂の歴史 から知る
Takanori Suzuki
BPStudy #198 / 2024 Feb 28
Agenda / アジェンダ 📜
Pythonプロフェッショナルプログラミング(以下: PyPro)出版の歴史 を紹介
章ごと 改訂 の歴史を見る
Goal / ゴール 🥅
Python 開発の変遷 を知る
自身の プロジェクトの参考 になる
なにか導入してみたくなる
(PyPro4を 買いたく なる)
Photos 📷 Tweets 🐦 👍
#bpstudy
/ @takanory
Slides / スライド 💻
Who am I? / お前 誰よ 👤
Takanori Suzuki / 鈴木 たかのり ( @takanory)
BeProud 取締役 / Python Climber
PyCon JP Association 代表理事
Python Boot Camp 講師、Python mini Hack-a-thon 主催、Pythonボルダリング部 部長
PyCon JP Association 🐍
日本国内のPythonユーザのために、Pythonの普及及び開発支援を行うために、継続的にカンファレンス(PyCon)を開くことを目的とした 非営利組織
PyCon JP 2024
9月 後半に 東京 で開催予定
3名の 共同座長(with 吉田さん、寺田さん)
主催メンバー 募集中
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
datetime.timedelta(days=1067)
>>> pypro3 - pypro2
datetime.timedelta(days=1201)
>>> pypro4 - pypro3
datetime.timedelta(days=2075)
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.2、Python 3.13(10月)
Apple Vision Pro発売開始(2月)
日本銀行券が刷新(7月)
パリオリンピック開催(7月)
PyPro出版の歴史のまとめ
12年 で 4回 出版
メンバー も 入れ替え ながら
執筆 リーダー も 代わり ながら
章ごと 改訂 の歴史を見る 🆙
1. Pythonのセットアップ 🐍
PyPro3 → PyPro4
PyPro2 → PyPro3
Python: Python 3.6.4
開発環境: VirtualBox / Vagrant 上のUbuntu
Pythonをソースからインストール
仮想環境: venv (Python 3.3以降)
便利なツール: Flake8: Pythonリンター
バージョン管理: Gitに変更
PyPro1 → PyPro2
Python: Python 2.7.6
Python 3系についても触れている
仮想環境: virtualenvをインストール
バージョン管理: Mercurialを使用
サーバーも自前でたてていた
Bitbucketも軽く紹介
PyPro
get-pip.py
pip
コマンドはPythonに含まれていないget-pip.py
をダウンロード→インストール
$ wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ sudo python get-pip.py
↑このURLは404 Not Found
2. Webアプリケーション 🕸️
PyPro3 → PyPro4
PyPro2 → PyPro3
Flaskで乗りログ
FlaskでWebアプリ構築
お題は乗りログ(電車の乗車記録)
PyPro、PyPro2
Flaskでゲストブック
フレームワークはFlask
お題はゲストブック
3. データサイエンス 📊
PyPro3 → PyPro4
機械学習からデータサイエンスへ
Jupyter NotebookからJupyterLabに
数理最適化 を紹介
PyPro3
機械学習の章が初登場
機械学習プロジェクトの進め方を紹介
4. チーム開発のためのツール 🛠️
PyPro3 → PyPro4
複数 の課題管理システムを紹介
Redmine、Backlog、JIRA、GitHub Projects
Slackの使いこなしを追加
ビデオ、音声会議 を追加
Googleカレンダー、1Password を追加
Dropbox、Dropbox Paperを削除
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上で動くレビューツール
6. ソースコード管理 🐙
PyPro3 → PyPro4
git swtich
コマンドを紹介GUIクライアントの紹介を削除
VSCode、PyCharmのGit連携
GitHub CLIを紹介
PyPro2 → PyPro3
Git/GitHubに変更
ブランチ作成
マージ、リベース
GitHub Flow
GitHubのTips
PyPro、PyPro2
Mercurialでのソースコード管理
サーバー上の管理と設定
フックの活用
BeProud Mercurial Workflow
7. 開発ドキュメント 📝
PyPro3 → PyPro4
PyPro〜PyPro3
Sphinxでドキュメント作成
8. 単体テスト ✅
PyPro3 → PyPro4
pytestと各種pytestプラグイン
Djangoのテストはpytest-django
pandasのテストとスナップショットテスト
過去の実行結果を次回のテストで使う
PyPro→PyPro2、PyPro3
PyPro
9. 継続的インテグレーション 🤵♂️
PyPro3 → PyPro4
GitHub Actionsに改訂 (2019年リリース)
チェックアウト、Docker、ユニットテスト、静的解析
結果のSlack通知
PyPro2 → PyPro3
CircleCIで継続的インテグレーション
ユニットテスト
結果のSlack通知
Sphinxドキュメントのビルド
PyPro、PyPro2
Jenkinsで継続的インテグレーション
Jenkinsのインストール
ユニットテスト
Sphinxドキュメントのビルド
10. Pythonパッケージ 📦
PyPro3 → PyPro4
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: セキュリティ問題の警告
消えた内容 🫥
消えた内容
PyPro2まで
PyProのみ
まとめ 📚
12年もあると 色々と変わって いる
大きく変わらないものもある
常に より良い選択 に挑戦している
PyPro5ではなにが入れ替わるのか、楽しみ
Thank You 🙏
@takanory takanory takanory takanory