Ruby on Rails

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 の流儀に沿います。

関連記事

資料請求

RELATED POSTS 関連記事