Python開発の変遷

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

改訂の歴史 から知る

Takanori Suzuki

BPStudy #198 / 2024 Feb 28

Agenda / アジェンダ 📜

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

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

Goal / ゴール 🥅

  • Python 開発の変遷 を知る

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

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

  • (PyPro4を 買いたく なる)

Photos 📷 Tweets 🐦 👍

#bpstudy / @takanory

Slides / スライド 💻

slides.takanory.net

slides.takanory.net

Who am I? / お前 誰よ 👤

takanory profile kuro-chan and kuri-chan

PyCon JP Association 🐍

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

www.pycon.jp

pycon jp logo

PyCon JP 2024

BeProud Inc. 🏢

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

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

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

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

BeProud logos

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円+税

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年のできごと

PyPro出版の歴史のまとめ

  • 12年4回 出版

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

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

pypro1 pypro2 pypro3 pypro4

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

1. Pythonのセットアップ 🐍

PyPro3 → PyPro4

  • Python: Python 3.11

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

  • 便利なツール

    • Black: コード整形ツール(2018年リリース)

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

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

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

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

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

    • フロントはVue.js

    • FastAPIにも軽く触れている

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

  • 課題管理はTrac

  • チャットシステムはSkype

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

PyPro2 → PyPro3

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

    • ユニットテスト

    • 結果のSlack通知

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

PyPro、PyPro2

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

    • Jenkinsのインストール

    • ユニットテスト

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

10. Pythonパッケージ 📦

PyPro3 → PyPro4

PyPro2 → PyPro3

PyPro → PyPro2

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

  • wheel パッケージ

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

PyPro

  • bdist_egg パッケージ

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

11. Webアプリの公開 📢

PyPro3 → PyPro4

PyPro → PyPro2、PyPro3

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

  • Ansibleでのデプロイ

PyPro

12. テスト 💯

PyPro3 → PyPro4

13. Webアプリの監視 👀

PyPro4

14. 追加開発 🏗️

PyPro4

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

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

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

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

消えた内容 🫥

消えた内容

まとめ 📚

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

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

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

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

Thank You 🙏

slides.takanory.net

@takanory takanory takanory takanory

takanory profile kuro-chan and kuri-chan