Pythonを何年か書いていても、標準ライブラリの奥のほうって、意外と見ていないんですよね。「これは自作するしかない」と思って書いたものが、実は最初から入っていたりします。

今回は、知って「ほぉー」となったものを8つ集めました。その処理、自作しなくていいやつかもしれません。書き慣れている方ほど、刺さるやつを選んでいます。

① 依存関係の解決が、標準ライブラリに入っています

これを知ったときは、けっこう驚きました。

「AはBの後、BはCの後に実行する」みたいな依存関係を解いて、正しい順番を出したい。タスクの実行順、ビルドの順序、テーブルの作成順とか。自分でグラフを組んで、深さ優先探索を書いて……とやりがちですよね。標準に入っています。

from graphlib import TopologicalSorter

graph = {
    "デプロイ": {"テスト"},
    "テスト": {"ビルド"},
    "ビルド": {"依存解決"},
}

ts = TopologicalSorter(graph)
print(list(ts.static_order()))
# ['依存解決', 'ビルド', 'テスト', 'デプロイ']

しかも循環していたら、CycleError でちゃんと教えてくれます。自作すると地味に大変なやつが、3行で終わるんですよね。

② if isinstance の連打が、標準で消せます

型ごとに処理を分けたいとき、isinstance の分岐を並べていませんか。functoolsの singledispatch で、型ごとの実装に分割できます。

from functools import singledispatch

@singledispatch
def dump(v):
    return str(v)

@dump.register
def _(v: bool):
    return "はい" if v else "いいえ"

@dump.register
def _(v: list):
    return ", ".join(map(str, v))

print(dump(True))    # はい
print(dump([1, 2]))  # 1, 2

型注釈を見て、いちばん近い実装に振り分けてくれます。boolはintのサブクラスですが、より具体的な方が勝つのも賢いところです。分岐が増えるたびに、関数を1個足すだけ。ifの塊を育てなくて済むんですよね。

③ 「n個ずつに分割」が、ついに標準入りしました

API送信やDBのバルクインサートで、リストを500件ずつに割る処理。全員が一度は自作しているんじゃないでしょうか。Python 3.12から、itertoolsに入りました。

from itertools import batched

for chunk in batched(range(1, 8), 3):
    print(chunk)
# (1, 2, 3)
# (4, 5, 6)
# (7,)

端数のチャンクもちゃんと出ます。あのwhileとスライスの自作コード、もう書かなくていいんです。

④ 「隣同士のペア」も、標準で作れます

前日比、区間の差分、連続チェック。zip(a, a[1:]) と書いてきたやつです。3.10からは pairwise があります。

from itertools import pairwise

prices = [100, 130, 125, 160]
print([b - a for a, b in pairwise(prices)])
# [30, -5, 35]

スライスのコピーを作らないので、イテレータのままメモリに優しく回せます。読んだ人に意図が一発で伝わるのもいいんですよね。

⑤ try/except/pass は、1行になります

「無ければ無いでいい」削除処理、こう書いていませんか。

try:
    os.remove("tmp.lock")
except FileNotFoundError:
    pass

contextlibの suppress で、こうなります。

from contextlib import suppress

with suppress(FileNotFoundError):
    os.remove("tmp.lock")

行数が減るだけじゃなくて、「この例外は握りつぶす意図です」が名前で伝わるのが本領です。レビューでの会話が1往復減ります。

⑥ zipは、短い方に合わせて黙って打ち切ります

これは知らないとバグります。

names = ["田中", "佐藤", "鈴木"]
scores = [80, 90]

list(zip(names, scores))
# [('田中', 80), ('佐藤', 90)]  ← 鈴木さんが消えている

エラーにならないので、気づかないんですよね。Python 3.10からは、こう書けます。

list(zip(names, scores, strict=True))
# ValueError: zip() argument 2 is shorter than argument 1

データを突き合わせる処理では、必ず付けた方がいいと思います。

⑦ TOMLパーサが、標準に入っています

pyproject.tomlの時代なのに、TOMLを読むのに外部ライブラリを入れていませんか。3.11から tomllib が標準です。

import tomllib

with open("pyproject.toml", "rb") as f:
    cfg = tomllib.load(f)

「ほぉー」ポイントが2つあって、開くのはバイナリモード("rb")必須なこと。そして読み込み専用で、書き出しは入っていないことです。設定は読むもの、という割り切りなんですよね。

⑧ 全角と半角の揺れは、1行で吸収できます

最後は日本語を扱う方向けです。知っている方はおさらいで。「RJC」と「RJC」、「ガ」と「ガ」。見た目は同じでも、コンピュータには別物ですよね。

import unicodedata

s = "RJC ガイド 123"
print(unicodedata.normalize("NFKC", s))
# 'RJC ガイド 123'

全角英数は半角に、半角カナは全角に、濁点も1文字に統合。入力値を保存する前に、これを通すだけで、検索がヒットしない問題がかなり減るんです。

番外編:コマンドライン一発芸

覚えておくと便利なものを3つ。

importの遅い犯人を探す

python -X importtime -c "import json"

起動が遅いスクリプトの、どのimportに時間がかかっているかをツリーで出してくれます。

SQLiteの対話シェルを開く(3.12〜)

python -m sqlite3

sqlite3コマンドが入っていない環境でも、その場でSQLが叩けます。

カレンダーを出す

python -m calendar 2026

1年分のカレンダーがターミナルに出ます。日付の確認に地味に便利です。

RJCでも、Pythonを使っています

Techチームでは、過去のExcel設計書から指摘事項をPythonで抽出して、その結果をAIで構造化する、といった取り組みをしています。セルフレビュー用のチェック表を作って、レビューする側の負担を減らしたんですよね。

こういう「地味だけど時間がかかる作業」を減らす工夫を、みんなで持ち寄っています。

よくいただくご質問

Q. どれから使うのがいいですか?
A. ⑤のsuppressかなと思います。今日の業務コードからそのまま置き換えられて、レビューでも意図が伝わりやすくなります。

Q. バージョンの条件をまとめてもらえますか?
A. graphlibは3.9以降、pairwiseとzip(strict=True)は3.10以降、tomllibは3.11以降、batchedとpython -m sqlite3は3.12以降です。使う前にご確認ください。

Q. 標準ライブラリって、どうやって知るんですか?
A. 「これ自作するの面倒だな」と思ったときに、公式ドキュメントの目次を眺めるのがおすすめです。だいたい誰かが同じことを面倒だと思っていて、入っているんですよね。

Q. 業務コードは、どこまで標準に寄せるべきですか?
A. 迷ったら標準を先に確認、で十分だと思います。依存が1つ減るだけで、環境構築もアップデート追従も確実に楽になります。

「入っているかも」と疑う習慣

今日の8つに共通しているのは、自作する前に、標準を疑う価値があるということでした。Pythonの標準ライブラリは本当に厚いので、「これは書くしかない」と思ったときこそ、一度目次を見てみてください。

書かなかったコードは、バグらないんですよね。

みなさんの「これも標準に入ってるよ」も、よかったら教えてください。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?