Q1標準ライブラリ と 外部ライブラリ の違いとして、正しいものはどれですか?
標準ライブラリの分類 — どの場面でどれを使うか
Python の標準ライブラリを 7 カテゴリに分類して俯瞰します。日付処理・数値計算・データ入出力・並行処理など、どんな場面で何を import すれば良いかを整理します。
Python の 標準ライブラリ は、pip install 不要で import するだけで使える数百のモジュール群です。本記事では全体を 7 カテゴリに整理 します。
標準ライブラリとは — Python に同梱されているモジュール群
標準ライブラリ とは、Python をインストールした時点で 最初から使えるモジュール群 のことです。math や os、json のように、pip install を一切実行せず import するだけで呼び出せます。
pip install で別途インストールが必要。| 種類 | インストール | 代表例 |
|---|---|---|
| 標準ライブラリ | Python 本体に同梱(不要) | math / os / sys / json / datetime / re / asyncio |
| 外部ライブラリ | pip install で追加 | pandas / numpy / requests / fastapi |
標準ライブラリだけで足りない場面はありますが、まず標準で済まないか試す ほうが長期的には楽です。理由は以下の通りです。
- 追加インストール不要 で、どこの環境でも動く(社内サーバー、CI、Docker コンテナ、本シリーズが動くブラウザ実行環境も同じ)
- バージョン管理が楽 — Python 本体のバージョンが決まれば付属する標準ライブラリのバージョンも一意に決まる
- 枯れていて壊れにくい — 標準ライブラリは互換性を厳密に守りながら進化しているので、数年単位で書いたコードがそのまま動く
用途で見る 7 カテゴリ
標準ライブラリには数百のモジュールがありますが、用途で 7 つに分類 すると、どこに何があるかが整理しやすくなります。本シリーズもこの並びで、上から順に各カテゴリを掘り下げていきます。
| カテゴリ | 代表モジュール | 何ができるか |
|---|---|---|
| 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 / dataclasses | list や dict より便利なデータ構造に拡張する |
| F リソース管理・運用 | contextlib / logging | with の自作とログ出力で運用しやすいコードに |
| G 並行・並列処理 | asyncio / threading / multiprocessing | 並列に処理を動かす |
1 つのカテゴリに複数モジュールが並んでいるのは、目的が同じでも切り口が違う からです。たとえば B カテゴリの random と secrets は両方とも乱数を生成しますが、random はゲームやテストデータ向け、secrets はパスワードリセットトークンなど セキュリティ用途 に向いた強い乱数を返します。本シリーズではカテゴリごとに、こうした 似ているが違う モジュールの使い分けを整理していきます。
import の書き方 — 名前衝突を避ける慣習
標準ライブラリを呼び出す import には複数の書き方があります(前回の記事 でも詳しく扱っています)。それぞれにメリットと落とし穴があるので、用途に応じて使い分けます。代表的な 4 パターンを整理します。
| 書き方 | 呼び出し例 | 向いている場面 |
|---|---|---|
| import math | math.sqrt(2) | 原則これ。どこのコードに書いても読み手が迷わない |
| import json as J | J.dumps(data) | 1 ファイル内で短い別名を付けたいとき(np / pd など慣習化されたものも同じ) |
| from datetime import datetime | datetime(2024, 1, 1) | そのモジュールから 1〜2 個の名前しか使わないとき |
| from os import * | getcwd() | 原則使わない。名前衝突の温床になる |
import math 形式は どのモジュールから来たかが呼び出し側で見える ので、後でコードを読み返すときに迷いません。一方で from パッケージ import 関数 形式は モジュール名のプレフィックス(接頭辞、math.sqrt の math. のように関数名の前に付く部分)が消える ので、datetime(2024, 1, 1) のようにスッキリ書けます。
from x import スターは原則禁止
from os import * のように すべての名前を取り込む 書き方は、他のモジュールで定義された同名関数を上書き してしまうことがあります。たとえば os.open() と組み込みの open() は別物ですが、from os import * を書くと組み込みの open が os.open に置き換わって、ファイル読み書きが壊れます。自作モジュールでも標準ライブラリでも避ける のが安全です。
ブラウザで動かない標準ライブラリ — 本シリーズの扱い
本シリーズの演習はブラウザで動く Python ランタイム(MicroPython または Pyodide)の上で実行されます。ほとんどの標準ライブラリは問題なく動きますが、OS のスレッド・プロセスを必要とするもの だけは、ブラウザの仕組み上どうしても動かせません。また、sys.argv(コマンドライン引数を受け取る仕組み)も実機では動きますが、ブラウザ上では引数を渡す経路がないため動作しません。これらは図解で概念を整理し、実機で書く際にすぐ思い出せる形で残す方針にしています。
multiprocessing や subprocess のように 外側に何かを起動するライブラリ は動かない。本シリーズではこれらを図解だけで扱う。| 扱い | 対象モジュール | 理由 |
|---|---|---|
| ハンズオン | math / re / datetime / json / collections / asyncio など多数 | Pyodide / MicroPython でそのまま動く |
| 図解中心 + クイズ | threading / concurrent.futures | ブラウザでは実スレッドが動かないが、概念整理は実務で重要 |
| 図解のみ | multiprocessing / subprocess | OS プロセスがないため実演習が組めない |
なぜ図解だけでも扱うのか
実務では本物の OS で動かす場面が必ず来ます。そのときに threading と multiprocessing の使い分けや、subprocess でのコマンド実行を 概念として知っている かどうかで、最初の一歩の踏み出しやすさが大きく変わります。本シリーズでは「ブラウザで動かないから扱わない」ではなく、動かせない部分も図解で整理して、いざ書くときに思い出せる形で残す 方針にしています。
理解度チェック
まずは1問ずつ答えてみましょう。
Q2次のうち、原則として避けるべき import の書き方はどれですか?