標準ライブラリの分類 — どの場面でどれを使うか

Python の標準ライブラリを 7 カテゴリに分類して俯瞰します。日付処理・数値計算・データ入出力・並行処理など、どんな場面で何を import すれば良いかを整理します。

Python の 標準ライブラリ は、pip install 不要で import するだけで使える数百のモジュール群です。本記事では全体を 7 カテゴリに整理 します。

標準ライブラリとは — Python に同梱されているモジュール群

標準ライブラリ とは、Python をインストールした時点で 最初から使えるモジュール群 のことです。mathosjson のように、pip install を一切実行せず import するだけで呼び出せます。

標準ライブラリと外部ライブラリの違い
Python本体標準ライブラリmath / json / os…外部ライブラリpandas / requests…同梱pip install
標準ライブラリ は Python 本体と一緒に配布されるので追加インストール不要。外部ライブラリpip install で別途インストールが必要。
種類インストール代表例
標準ライブラリPython 本体に同梱(不要)math / os / sys / json / datetime / re / asyncio
外部ライブラリpip install で追加pandas / numpy / requests / fastapi

標準ライブラリだけで足りない場面はありますが、まず標準で済まないか試す ほうが長期的には楽です。理由は以下の通りです。

  • 追加インストール不要 で、どこの環境でも動く(社内サーバー、CI、Docker コンテナ、本シリーズが動くブラウザ実行環境も同じ)
  • バージョン管理が楽 — Python 本体のバージョンが決まれば付属する標準ライブラリのバージョンも一意に決まる
  • 枯れていて壊れにくい — 標準ライブラリは互換性を厳密に守りながら進化しているので、数年単位で書いたコードがそのまま動く

用途で見る 7 カテゴリ

標準ライブラリには数百のモジュールがありますが、用途で 7 つに分類 すると、どこに何があるかが整理しやすくなります。本シリーズもこの並びで、上から順に各カテゴリを掘り下げていきます。

標準ライブラリの 7 カテゴリ
標準ライブラリA 実行環境ファイルB 数値・日時乱数C 文字列テキストD データ入出力E データ構造の拡張F リソース管理・運用G 並行並列処理
中央の 標準ライブラリ を、用途別に 7 つのカテゴリに分けたもの。本シリーズはこの 7 カテゴリを A〜G の順に 1 つずつ扱う。G だけ色が違うのは、ブラウザ実行に制約があるため(次セクションで解説)。
カテゴリ代表モジュール何ができるか
A 実行環境とファイルsys / os / pathlib / shutil実行環境を覗く、ファイルとフォルダを操作する
B 数値・日時・乱数math / statistics / decimal / datetime / random数値計算、誤差の少ない金額計算、日付計算、乱数生成
C 文字列・テキストre / string / textwrap / pprint正規表現で抽出、テンプレ置換、折り返し、整形表示
D データ入出力json / csv / pickle / base64 / hashlibオブジェクトとテキスト/バイト列を相互変換する
E データ構造の拡張collections / itertools / functools / dataclasseslist や dict より便利なデータ構造に拡張する
F リソース管理・運用contextlib / loggingwith の自作とログ出力で運用しやすいコードに
G 並行・並列処理asyncio / threading / multiprocessing並列に処理を動かす

1 つのカテゴリに複数モジュールが並んでいるのは、目的が同じでも切り口が違う からです。たとえば B カテゴリの randomsecrets は両方とも乱数を生成しますが、random はゲームやテストデータ向け、secrets はパスワードリセットトークンなど セキュリティ用途 に向いた強い乱数を返します。本シリーズではカテゴリごとに、こうした 似ているが違う モジュールの使い分けを整理していきます。

import の書き方 — 名前衝突を避ける慣習

標準ライブラリを呼び出す import には複数の書き方があります(前回の記事 でも詳しく扱っています)。それぞれにメリットと落とし穴があるので、用途に応じて使い分けます。代表的な 4 パターンを整理します。

書き方呼び出し例向いている場面
import mathmath.sqrt(2)原則これ。どこのコードに書いても読み手が迷わない
import json as JJ.dumps(data)1 ファイル内で短い別名を付けたいとき(np / pd など慣習化されたものも同じ)
from datetime import datetimedatetime(2024, 1, 1)そのモジュールから 1〜2 個の名前しか使わないとき
from os import *getcwd()原則使わない。名前衝突の温床になる

import math 形式は どのモジュールから来たかが呼び出し側で見える ので、後でコードを読み返すときに迷いません。一方で from パッケージ import 関数 形式は モジュール名のプレフィックス(接頭辞、math.sqrtmath. のように関数名の前に付く部分)が消える ので、datetime(2024, 1, 1) のようにスッキリ書けます。

from x import スターは原則禁止

from os import * のように すべての名前を取り込む 書き方は、他のモジュールで定義された同名関数を上書き してしまうことがあります。たとえば os.open() と組み込みの open() は別物ですが、from os import * を書くと組み込みの openos.open に置き換わって、ファイル読み書きが壊れます。自作モジュールでも標準ライブラリでも避ける のが安全です。

ブラウザで動かない標準ライブラリ — 本シリーズの扱い

本シリーズの演習はブラウザで動く Python ランタイム(MicroPython または Pyodide)の上で実行されます。ほとんどの標準ライブラリは問題なく動きますが、OS のスレッド・プロセスを必要とするもの だけは、ブラウザの仕組み上どうしても動かせません。また、sys.argv(コマンドライン引数を受け取る仕組み)も実機では動きますが、ブラウザ上では引数を渡す経路がないため動作しません。これらは図解で概念を整理し、実機で書く際にすぐ思い出せる形で残す方針にしています。

ブラウザで動く範囲と動かない範囲
動くmath / json / redatetime / asyncio限定動作threading(実スレッド不可)動かないmultiprocessingsubprocess本シリーズの方針ハンズオン図解中心図解のみ
Pyodide / MicroPython は OS プロセスネットワークソケット を持たないので、multiprocessingsubprocess のように 外側に何かを起動するライブラリ は動かない。本シリーズではこれらを図解だけで扱う。
扱い対象モジュール理由
ハンズオンmath / re / datetime / json / collections / asyncio など多数Pyodide / MicroPython でそのまま動く
図解中心 + クイズthreading / concurrent.futuresブラウザでは実スレッドが動かないが、概念整理は実務で重要
図解のみmultiprocessing / subprocessOS プロセスがないため実演習が組めない

なぜ図解だけでも扱うのか

実務では本物の OS で動かす場面が必ず来ます。そのときに threadingmultiprocessing の使い分けや、subprocess でのコマンド実行を 概念として知っている かどうかで、最初の一歩の踏み出しやすさが大きく変わります。本シリーズでは「ブラウザで動かないから扱わない」ではなく、動かせない部分も図解で整理して、いざ書くときに思い出せる形で残す 方針にしています。

QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1標準ライブラリ外部ライブラリ の違いとして、正しいものはどれですか?

Q2次のうち、原則として避けるべき import の書き方はどれですか?