---
title: "optparseとは？Python・Ruby・Rでの使い方とargparseとの違い【2026年最新】"
url: "https://www.issoh.co.jp/tech/details/2911/"
published: 2024-07-03
updated: 2026-07-21
categories: ["Ruby on Rails"]
publisher: "株式会社一創"
---

# 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との使い分け](https://www.issoh.co.jp/tech/details/13574/)を先に押さえておくと、以降のオプション解析の話が理解しやすくなります。

## 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のリリース内容](https://www.issoh.co.jp/tech/details/10592/)もあわせて確認できます。

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

## 関連記事

- [CLIとは？コマンドライン操作の仕組みとGUIとの使い分けを実装視点で解説](https://www.issoh.co.jp/tech/details/13574/)
- [Python statisticsモジュールの使い方｜平均・中央値・最頻値・分散・標準偏差をコードで](https://www.issoh.co.jp/tech/details/3369/)
- [Ruby 4.0.1がリリースされました – 新機能満載のRuby 4系に初の安定版パッチが登場しました](https://www.issoh.co.jp/tech/details/10592/)

---

出典: [optparseとは？Python・Ruby・Rでの使い方とargparseとの違い【2026年最新】](<https://www.issoh.co.jp/tech/details/2911/>)（株式会社一創）
