optparseとは?Python・Ruby・Rでの使い方とargparseとの違い【2026年最新】
「optparse」はコマンドライン引数を解析するモジュールの名前ですが、実体は言語ごとに別物です。Python・Ruby・R の3言語がそれぞれ optparse を持ち、書き方も立ち位置も異なります。とくに Python の optparse は長らく非推奨(deprecated)とされてきましたが、Python 3.13 でその非推奨が撤回されました。この記事では、どの言語の optparse かを最初に切り分けたうえで、Python を軸に基本構文・argparse との使い分け・Ruby・R での書き方を、公式ドキュメントの記述に沿って実コードで整理します。
まとめ:optparseは言語ごとに別物、Pythonは新規ならargparse
- optparse は Python・Ruby・R で同名の別モジュール。名前が同じでもクラス名・構文・依存関係は言語ごとに違う。
- Python:標準ライブラリ。主クラスは
OptionParser。3.2〜3.12 は「非推奨」表記だったが、3.13 で非推奨が撤回され現在は保守対象。ただし新規コードはargparseが公式推奨。 - Ruby:標準ライブラリ
optparse(クラスはOptionParser)。非推奨ではなく Ruby 標準の引数パーサ。 - R:CRAN パッケージ
optparse(v1.8.2)。Python の optparse に着想した別実装で、Rscript のシェバンスクリプト向け。 - 迷ったら:Python の新規開発は argparse、既存の optparse コードは無理に移行しない。Ruby・R は各言語の optparse をそのまま使う。
optparseとは:3つの言語で同名の別モジュール
optparse は「コマンドラインオプション(-f や --file のような引数)を解析する仕組み」を指す名前です。Python の optparse に始まり、R には Python 版に着想したパッケージが、Ruby には同名の標準ライブラリが存在します。名前は同じでも各実装は独立しており、直接の互換はありません。そのため「optparse」だけで検索すると、Python 公式ドキュメント・Ruby 公式リファレンス・R の CRAN ページが同時に上位に並びます。まず自分が使う言語を切り分けることが出発点です。
| 言語 | 実体 | 主なクラス/関数 | 読み込み | 立ち位置 |
|---|---|---|---|---|
| Python | 標準ライブラリ | OptionParser |
from optparse import OptionParser |
3.13で非推奨撤回・保守中/新規はargparse推奨 |
| Ruby | 標準ライブラリ | OptionParser |
require 'optparse' |
現役の標準パーサ |
| R | CRANパッケージ | OptionParser() / make_option() |
library("optparse") |
要インストール(v1.8.2) |
コマンドライン操作そのものや CLI と GUI の違いが曖昧な場合は、CLIとは?コマンドライン操作の仕組みとGUIとの使い分けを先に押さえておくと、以降のオプション解析の話が理解しやすくなります。
Python optparseの使い方と基本構文
Python の optparse は OptionParser クラスにオプションを登録し、parse_args() で解析結果を受け取ります。「python optionparser」「python option parser」で検索される OptionParser は、この optparse モジュールの主クラスの名称です(別モジュールではありません)。
OptionParserの基本コード
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-f", "--file", dest="filename",
help="読み込むファイル名", metavar="FILE")
parser.add_option("-v", "--verbose", action="store_true",
dest="verbose", default=False)
(options, args) = parser.parse_args()
print(options.filename, options.verbose)
parse_args() は「オプションをまとめた options」と「オプション以外の残り引数のリスト args」の2つを返します。この戻り値の形(タプル2要素)が、後述の argparse(単一の Namespace を返す)との一番の違いです。
主なオプション設定の引数
| 引数 | 役割 | 例 |
|---|---|---|
dest |
値を格納する属性名 | dest="filename" |
type |
値の型変換 | type="int" |
default |
未指定時の既定値 | default=False |
action |
解析時の動作 | action="store_true" |
help |
ヘルプ文 | help="..." |
未定義のオプションが渡された場合や型変換に失敗した場合、optparse は自動でエラーメッセージを表示して終了します。個別の try でエラーを握るより、parser.error("メッセージ") を使って統一した書式で異常終了させるのが定石です。
optparseは非推奨?argparseとの違いと使い分け
ここが誤解の多い点です。Python の optparse は 3.2 から 3.12 まで「Deprecated since version 3.2」と明記されていましたが、Python 3.13 の公式ドキュメントでこの非推奨表記が削除され、代わりに「Choosing an argument parsing library(引数解析ライブラリの選び方)」という節が追加されました。つまり現在の optparse は「非推奨で廃止予定」ではなく「保守されている選択肢の一つ」です。「optparse は削除された」という情報は誤りで、標準ライブラリに残っています。
非推奨ステータスの正確な経緯
| バージョン | 公式ドキュメントの扱い |
|---|---|
| 3.2〜3.12 | 「Deprecated since version 3.2」と明記 |
| 3.13以降 | 非推奨表記を削除。argparseを推奨としつつoptparseを代替として案内 |
argparseとの主な違い
| 観点 | optparse | argparse |
|---|---|---|
| 位置引数 | 自前処理(argsで受ける) |
add_argumentで宣言的に定義 |
| サブコマンド | 非対応 | add_subparsersで対応 |
| 可変長引数 | 非対応 | nargsで対応 |
| 戻り値 | (options, args)のタプル |
単一のNamespace |
| 公式の推奨 | 既存コード向けの代替 | 新規コードの推奨 |
移行のポイントと使い分けの結論
optparse から argparse への書き換えは、OptionParser() を ArgumentParser() に、add_option() を add_argument() に置き換えるのが基本です。戻り値がタプルから Namespace に変わるため、(options, args) = parser.parse_args() は args = parser.parse_args() に直し、以降は args.filename のように属性で参照します。
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename")
args = parser.parse_args()
print(args.filename)
判断としては明確です。新規に書くなら argparse を選ぶ——位置引数・サブコマンド・可変長引数を宣言的に扱え、ヘルプ出力も充実しているためです。一方ですでに optparse で動いているコードを、移行のためだけに書き換えるのは避けるのが妥当です。非推奨が撤回された以上、動作中のコードを触る積極的な理由はなく、細かな挙動差でデグレードを招くリスクの方が大きいためです。
Ruby optparse(OptionParser)のブロック定義とparse!
Ruby の optparse は標準ライブラリで、require 'optparse' で読み込みます。Python と違い非推奨ではなく、Ruby における標準的な引数パーサです。クラス名は Python と同じ OptionParser ですが、ブロックでオプションを定義する Ruby らしい書き方をします。
require 'optparse'
options = {}
OptionParser.new do |opt|
opt.on('-f', '--file FILE', 'ファイル名') { |v| options[:file] = v }
opt.on('-v', '--verbose', '詳細表示') { options[:verbose] = true }
end.parse!
p options
opt.on にオプションと説明、受け取り処理のブロックを渡し、最後に parse! で ARGV を解析します。--help は自動生成されます。Ruby 本体の最新動向は Ruby 4.0.1のリリース内容もあわせて確認できます。
R optparse パッケージのインストールとmake_option
R の optparse は標準ではなく CRAN パッケージ(最新は v1.8.2、2026年4月更新)で、install.packages("optparse") でインストールします。Python の optparse に着想した設計で、Rscript でシェバンスクリプトを書き、短い/長いオプションを受け取る用途に向きます。
library("optparse")
option_list <- list(
make_option(c("-n", "--number"), type = "integer", default = 5,
help = "繰り返し回数 [default %default]"),
make_option(c("-v", "--verbose"), action = "store_true", default = FALSE)
)
parser <- OptionParser(option_list = option_list)
opt <- parse_args(parser)
print(opt$number)
make_option() で1オプションずつ定義してリスト化し、OptionParser() に渡してから parse_args() で解析します。解析結果は名前付きリストとして返り、opt$number のように参照します。Python の type="int" にあたる指定を type = "integer" と書くなど、細部は R の流儀に合わせます。実行ファイルとして使う場合は、スクリプト先頭にシェバンを置きます。
#!/usr/bin/env Rscript
よくある質問
optparseとargparseはどちらを使うべきですか?
Python で新規に書くなら argparse を推奨します。位置引数・サブコマンド・可変長引数を宣言的に扱え、公式も新規コードの推奨としています。既存の optparse コードは、非推奨が撤回された現在、移行のためだけに書き換える必要はありません。
Pythonのoptparseは今も使えますか?非推奨は撤回されたのですか?
使えます。3.2〜3.12 は「非推奨」と明記されていましたが、Python 3.13 で非推奨表記が削除され、標準ライブラリの保守対象として残っています。「削除された」という情報は誤りです。
optparseとOptionParserの違いは何ですか?
別物ではありません。OptionParser は optparse モジュールの主クラス名です。Python では from optparse import OptionParser で読み込みます。Ruby でもクラス名は OptionParser です。
Rubyのoptparseは非推奨ですか?
いいえ。Ruby の optparse は標準ライブラリの現役の引数パーサで、非推奨ではありません。Python の optparse の非推奨・撤回の経緯は Python 固有の話で、Ruby には当てはまりません。
R の optparse は Python の optparse と同じですか?
設計は着想を得ていますが別実装です。R 版は CRAN の外部パッケージでインストールが必要で、make_option() でオプションを定義してから parse_args() で解析するなど、書き方も R の流儀に沿います。