【Bash / Ruby / Python3】オプション解析する方法の比較

前書き

自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。

本記事では、オプション解析する方法を比較します。比較では、実装例および実行例をそれぞれ示します。

Bashではなく、RubyやPython3を使った方が好ましい理由は、以下の記事に記載しています。この記事には、各プログラミング言語の様々な実装(ディレクトリ操作やファイル操作など)を比較した他記事へのリンクを一覧にまとめています。

Bash(Shell Script)からRubyやPythonに乗り換え!頻繁に使う処理を各言語で比較

                        

各言語のVersion

  • Bash:GNU bash, バージョン 5.0.3(1)-release
  • Ruby:ruby 2.5.5p157 (2019-03-15 revision 67260)
  • Python:Python 3.7.3

                                       

比較:オプション解析する方法

自動化Scriptでは、他のコマンドと同様に、オプションに応じて処理を変更する実装にする機会が多いです。例えば、ログ出力先をユーザがオプションで指定したディレクトリに変更したり、ログレベルを柔軟に変更したりする場合などが、オプションが必要な例として挙げられます。

以下に、各言語の実装例および実行例を示します。

Bashの場合

Bashのオプション解析には、getopts(bashビルトインコマンド)を用いた方法、getoptコマンド(外部コマンド)を用いた方法の二通りがあります。

getoptsによるオプション解析 と異なり、getoptはロングオプションも使用出来るメリットがあります。 ただし、デメリットとして、getoptはBSD実装(Mac、OpenBSD等)とGNU実装(Debian系、RedHas系)で差異があります。

BSD実装の場合はロングオプションが使用できず、引数の後にオプションを指定できないデメリットがあります。今回の例では、Linux環境を前提としているのでgetoptを使用した方法を示します。getoptsを使用した方法は、番外として、本記事の最後に示します。

Rubyの場合

Python3の場合

Bash、Ruby、Python3の実行例

Rubyは、ユーザが誤ったオプションの使い方をした場合に備えて、例外処理を作り込まないと「何が原因でエラーが発生したか」が分かりづらい印象を受けました。

                                  

番外:Bashでgetoptsを用いたオプション解析

実装

実行例

おすすめ