ABCABC Tech Catalog

意外と知らない人も多い?知っておいて損のないPythonのmオプション

知っておくと使えるときもある、Python の -m オプション

すっかり「あるとき」が多くなった Python

かつてPython 2系から3系への移行なんていうことがあったのも今は昔…

Pythonもすっかりメジャーなスクリプト言語として定着しましたね。

そういった背景もあり、今やPythonがプリインストールされている環境も非常に多いのではないでしょうか。

今回は環境にPythonが入っていればすぐに使える -m オプションについて紹介します。

mオプションとは

Python の -m オプションは、Pythonモジュールをスクリプトとして実行するためのコマンドラインオプションです。

このオプションを使うと、インストールされているパッケージやモジュールを直接実行できます。

具体的には、以下のような形式で使用します。

python -m module_name [arguments]

このコマンドは「module_nameというモジュールをメインプログラムとして実行する」という意味になります。

mオプションの便利な使用例

と、いうと、よくわからないかもしれませんが、ポイントとしては、 このオプションを使うとPythonに標準で含まれている便利なモジュールを簡単に利用できる ということです。

いくつかの代表的な例を見てみましょう。

簡易HTTPサーバーを立てられる http.server

まずはみんな大好きなローカルのHTTPサーバの立て方です。

python -m http.server 8080

これだけで、 現在のディレクトリをルートとする簡易HTTPサーバーを立ち上げることができます。

引数にはポート番号をとっていて、これだけでポート8000でHTTPサーバーが起動させられます。

つまり、 http://localhost:8080/ などで現在のディレクトリの内容をブラウザで閲覧できるようになります。

下記は 8821 番のポートでサーバを立ち上げたときの例です。

file1

index.html などを配置するともちろん静的なHTMLファイルを表示できたりもするので、 ファイル共有やちょっとしたテスト用のウェブサーバー としてとても便利です。

file2

(Claudeに適当に軽いHTMLを作ってくれといったら作ってきたHTMLファイルを表示した例)

JSONのパース等を行う json.tool

これも個人的にはたまに使うやつです。 JSONデータを整形・検証するのに便利なモジュールです。

python -m json.tool input.json > output.json

このコマンドは、input.jsonファイルを読み込んで整形し、output.jsonに保存します。

このように直接jsonファイルを読み込んでいくこともできますが、 主にはpipeで渡す形で使います。

echo '{"company": "ABC", "age": 74}' | python -m json.tool

これで、JSONの構文チェックや読みやすく整形することができます。

{
    "company": "ABC",
    "age": 74
}

特に curl 等で取得したデータをパースするのに便利です。

構文エラーが発生している場合はエラーが出ます(下記は } が余分についている例)

> echo '{"company": "ABC", "age": 74}}' | python -m json.tool
Extra data: line 1 column 30 (char 29)

ただし、日本語などは、 no-ensure-ascii オプションを指定しておく必要があります。

例えば、以下のように日本語のJSONをパースする場合、

echo '{"company": "朝日放送グループホールディングス", "area": "関西"}' | python -m json.tool

デフォルトでは日本語部分がエスケープされて表示されます。

{
    "company": "\u671d\u65e5\u653e\u9001\u30b0\u30eb\u30fc\u30d7\u30db\u30fc\u30eb\u30c7\u30a3\u30f3\u30b0\u30b9",
    "area": "\u95a2\u897f"
}

そこで、Python 3.9以降では、 no-ensure-ascii オプションを使って日本語をそのまま表示させることができます。

echo '{"company": "朝日放送グループホールディングス", "area": "関西"}' | python -m json.tool --no-ensure-ascii

これにより、下記のように日本語がそのまま表示されます。

{
    "company": "朝日放送グループホールディングス",
    "area": "関西"
}

とはいえ、 jq コマンドを使えばフィルタリングや目的の項目の抽出が出来るので、 jq コマンドが入っている場合はそちらを使ったほうがいいでしょう。

jq コマンドが入ってない環境に出くわしたときに、サッと使えるという意味では便利な知識かと思います。

ドキュメント情報を取得する pydoc

モジュールのドキュメントを閲覧するための便利なモジュールです。コマンドラインから特定のモジュールやパッケージの詳細なドキュメントを表示できます。

例えば、 requests パッケージのドキュメントを見たい場合は以下のように実行します。

python -m pydoc requests

すると、下記のようなレスポンスが得られます。

Help on package requests:

NAME
    requests

DESCRIPTION
    Requests HTTP Library
    ~~~~~~~~~~~~~~~~~~~~~

    Requests is an HTTP library, written in Python, for human beings.
    Basic GET usage:

       >>> import requests
       >>> r = requests.get('https://www.python.org')
       >>> r.status_code
       200
       >>> b'Python is a programming language' in r.content
       True

    ... or POST:

       >>> payload = dict(key1='value1', key2='value2')
       >>> r = requests.post('https://httpbin.org/post', data=payload)
       >>> print(r.text)
       {
         ...
         "form": {
           "key1": "value1",
           "key2": "value2"
         },
         ...
       }

    The other HTTP methods are supported - see `requests.api`. Full documentation
    is at <https://requests.readthedocs.io>.

特に、ドキュメントURLが記載されていることが多い点においては有用かと思います。

その他

あとは少しネタっぽいものですが… いくつか紹介します。

まず、カレンダーを表示する calendar です。

python -m calendar 2025 8

とすることで、2025年8月のカレンダーが表示されます。

August 2025
Mo Tu We Th Fr Sa Su
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

引数指定がない場合は年間のカレンダーを出してくれます。 -t html オプションでHTMLファイルにできたり、始まりの曜日を変更できたりなど、オプションが豊富だったりもします…

file3

上記はとりあえず生成したHTMLファイルを簡易サーバで立ち上げたときの例です。

あとは、 The Zen of Python を表示することもできます。

python -m this

お馴染みの(?)文章が表示されます。

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
...

胸に刻み込みたいですね…

まとめ

今回は、Python の -m オプションについて紹介しました。

今回紹介したように即席でHTTPサーバーを起動したりJSONを整形できたりする他にも、zipやbase64の取り扱いや実行時間計測での性能測定など様々な場面で活用できます。

意外と知らない人も多い印象ですが、知っておいて損のない知識かと思います。

AUTHOR

伴 拓也

朝日放送グループホールディングス株式会社 デジタル・アーキテック局 データ戦略チーム

アプリケーションからインフラ、ネットワーク、データエンジニアリングまで幅広い守備範囲が売り。最近はデータ基盤の構築まわりに力を入れて取り組む。 主な実績として、M-1グランプリ敗者復活戦投票システムのマルチクラウド化等。

WORK@ABC

技術力を培うための
環境と文化

ABCに昔から根付く「自分たちで開発する」文化を支える環境や取り組みをご紹介します
ABCについてもっと知る