この記事は何
皆さんは ruby -runというコマンドを使ったことがあるでしょうか?
ruby -runを使うとcpやmvなど、Unixコマンドの一部をrubyスクリプト内で利用することができるようになるため、-eオプションと一緒に
ruby -run -e cp hoge.txt hoge2.txt
のように、利用することができます。
しかし、https://docs.ruby-lang.org/ja/latest/doc/spec=2frubycmd.html を見ても、-runオプションは
存在しません。この理由をこの記事では紹介します。
-rオプション
-runがオプションとして存在しない理由を探る前に、まず-rオプションを説明する必要があります。
https://docs.ruby-lang.org/ja/latest/doc/spec=2frubycmd.html
にある通り、-rオプションはスクリプト実行前に feature で指定されるライブラリを Kernel.#require するオプションです。
例えばcsvライブラリを使用したい場合は、以下のように使うことができます
ruby -rcsv -e 'CSV.read("hoge.csv")'
unライブラリについて
次にunライブラリについて説明します。
unライブラリは組み込みのライブラリで
にある通り、Unix の基本コマンドの代替となるユーティリティを提供します。
このライブラリをrequireすることで、以下のメソッドが利用できるようになります。
- Kernel#chmod
- Kernel#cp
- Kernel#help
- Kernel#httpd
- Kernel#install
- Kernel#ln
- Kernel#mkdir
- Kernel#mkmf
- Kernel#mv
- Kernel#rm
- Kernel#rmdir
- Kernel#touch
- Kernel#wait_writable
-runの正体
ここまでの説明で、気づいた方もいるのではないでしょうか?
そう、-runとはunライブラリを-rオプションでrequireしているだけなのです!
-runがrunと読めてしまうため、オプションと勘違いしやすいというTipsでした。