Rubyで開発をしていれば必ずお世話になるRubyGems、使いこなせれば強い味方になってくれる便利なシステムです。

–no-ri・–no-rdoc・–no-documentオプションについて聞いたことはあるでしょうか。

本記事ではこれらのオプションについて解説を行って参ります。

RubyGemsとは

RubyGemsはRubyのパッケージ管理システムです。

RubyGemsの実行コマンドは「gem」なので単にGemと呼ぶことも多く、またRubyGemsで管理しているライブラリのこともGemといいます。

Gemをまとめて管理するシステムがBundlerです。他の言語だとPHPのComposer・JavaScriptのnpmなどがこれに相当します。

Gemの機能はライブラリの検索や一覧の表示、Gemのインストール・更新・アンインストールなどの操作です。

今回の記事で取り上げるコマンドはライブラリのドキュメント管理機能に関するものになります。


GEM INSTALLとは

Gemをインストールするときに実行するコマンドが「gem install」です。

  1. $ gem install <GEMNAME>


gem installコマンドの使い方

Gemのインストールを行います。対となるgem uninstallコマンドでアンインストールです。

  1. $ gem install rubocop
  2. Fetching rubocop-0.82.0.gem(一部のみ記載)
  3. Building native extensions. This could take a while…
  4. Successfully installed rubocop-0.82.0(一部のみ記載)
  5. 8 gems installed
  6. $ gem uninstall rubocop
  7. Remove executables:
  8. rubocop
  9. in addition to the gem? [Yn] Y
  10. Removing rubocop

コマンドを打つとまず必要なライブラリのフェッチ、次にNative Extensionのビルドとインストールが行われます。


コマンドオプションの種類

コマンドのオプションの種類は以下です。

  • Options(–platform・–versionなど基本オプション)
  • Deprecated Options(非推奨オプション)
  • Install/Update Options(–vendor・–no-documentなどインストールと更新に使用するオプション)
  • Local/Remote Options(–local・–sourceなどストレージ関連オプション)
  • Common Options(–help・–config-fileなどの一般的なオプション)


–no-riオプションとは

まずこのオプションが何をするものか説明します。

以下に検証に使用した環境の情報を載せておくので、試したい方や上手く動かない方は参考にして下さい。

  1. $ ruby -v
  2. ruby 2.2.10p489 (2018-03-28 revision 63023) [x86_64-linux]
  3. $ gem -v
  4. 2.7.6


–no-riオプションの概要

riコマンドを使用するためのRIデータ生成をしないようにするコマンドです。RIデータのRIはRuby Interactiveの略になります。

  1. $ gem install rubocop -v 0.68.1 –no-ri

バージョンが古すぎてエラーになるので、お試しの際はバージョンを指定してインストールして下さい。


riコマンドとは

riコマンドはライブラリに関するドキュメントをCLI上から確認できるコマンドです。

riコマンドを使用するにはRIデータを生成した後、対象のクラス名やメソッド名を指定してコマンドを打ちます。

  1. $ ri -v
  2. ri 4.2.0
  3. $ gem rdoc rubocop –ri
  4. Parsing documentation for rubocop-0.68.1
  5. Installing ri documentation for rubocop-0.68.1
  6. (略)
  7. $ ri String
  8. = String < Object
  9. (略)


–no-rdocオプション

環境情報は–no-riオプションのときと同様です。


–no-rdocオプションの概要

RDoc HTMLの生成をしないようにするコマンドになります。

  1. $ gem install rubocop -v 0.68.1 –no-rdoc


RDocとは

RDoc(Ruby Documentation System)はRubyのソースコードから、ドキュメントを自動生成するライブラリです。

このライブラリによって生成されるHTMLにはアクセス性の高いサイドバーを表示したり、テンプレートによる装飾が施せます。

これも最近のライブラリはGithub Pagesや専用サイトで公開しているところがほとんどです。


deprecatedとObsolete

今後は以下の環境で検証を行います。

  1. $ ruby -v
  2. ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
  3. $ gem -v
  4. 3.1.2

既に–no-ri・–no-rdocオプションは役目を終え、バージョン3.0では無効なオプションとして使用できなくなりました。

  1. $ gem install rubocop –no-ri
  2. ERROR: While executing gem … (OptionParser::InvalidOption)
  3.     invalid option: –no-ri
  4. Did you mean? no-force
  5. $ gem install rubocop –no-rdoc
  6. ERROR: While executing gem … (OptionParser::InvalidOption)
  7.     invalid option: –no-rdoc
  8. Did you mean? no-force


RubyGemsの非推奨システム

詳細が気になる方はGitHubのIssueを見ると経緯が分かります。

rubygems/rubygems > Implement deprecations for CLI options/Issue #2573

実はこれらのオプションは2011年にはdeprecated扱いとなっており、バージョン3.0でようやく削除されました。

しかし周知方法がヘルプテキストのDeprecated optionsだけだったこともあり、ユーザー側の対応はあまり進んでいなかったようです。

今後は他の言語のように警告が表示されるようなので、Deprecated optionsはなるべく早めに対応し世代交代するようにしましょう。


deprecated(非推奨)とObsolete(廃止)

有名なライブラリであればあるほど利用者数は多く、互換性のない機能の修正や削除をする際には周知期間が必要になります。

deprecated(非推奨)は将来的に廃止される予定の機能に付けられるラベルのようなものです。

多くの言語ではビルドや実行の度に目立つ警告が出てくるでしょう。

ユーザーは移行期間中に代替メソッドへの差し替えなどを行い、次の大きなリリースに備えます。

一方obsolete(廃止)は既に痕跡だけの機能を指し、使おうとするとエラーが発生するようなものです。

もっともこれらを厳密に区別していないライブラリの方が多く、一般的にはobsoleteもdeprecatedと似たような使われ方をされます。


-N/–no-documentオプションとは

-N/–no-documentオプションはドキュメントの生成をしないようにするオプションです。

  1. $ gem install rubocop -N
  2. $ gem install rubocop –no-document

このオプションの対象はRIデータとRDoc HTMLの両方になります。

もしもRIデータのみをインストールしたい場合は以下のような指定方法を使用してください。

  1. $ gem install rubocop –document ri

このオプションの短縮形が大文字のNであることに注意して下さい。

小文字のnは-n/–bindirという別オプションで、これは実行可能ファイルが置かれているディレクトリを指定するものです。


オプションをデフォルトに設定する


Gemに関する設定は.gemrcファイルに記述します。以下のコマンドを打つとDescriptionに詳細が記載されているので活用下さい。

  1. $ gem help environment

デフォルトのコマンド引数やオプションをコマンドごとに指定できるようになっています。

  1. :verbose: false
  2. install: –no-wrappers
  3. :disable_default_gem_server: true


.gemrcファイルを作成する

Gemの設定ファイルは2種類です。

  • システム全体(/etc/gemrc)
  • ユーザーごと(~/.gemrc)

今回はユーザーごとの設定ファイルを作成します。ユーザーのホームディレクトリに.gemrcファイルを作成しましょう。

既に作成済みの方は対応不要です。


-N/–no-documentオプションを設定する

-N/–no-documentオプションをデフォルトに設定します。

–no-rdoc –no-riを指定してしている場合は削除して、以下のように–no-documentに差し替えて下さい。

  1. install: –no-document
  2. update: –no-document


-N/–no-documentオプションのメリット

各オプションが何をしているかが分かりました。デフォルトに設定する方法も把握できたと思います。

では何故このオプションを有効にした方が良いのでしょうか。


インストール速度が速くなる

これらのドキュメントはリモートからのダウンロードではなく、ローカルでの生成で用意されています。

スペックとインストール量によっては、かなりの時間がかかるでしょう。

オプションを有効にすればライブラリ本体のみをインストールするだけになるため実行速度が上がります。


容量を削減できる

利用している方にとっては利用価値の高いものかもしれませんが、大半の開発者はWeb上から公式サイトのドキュメントを見るのが普通です。

生成したRIデータにもそこそこ容量がありますので、全てのGemに対してRIデータを生成するとかなりの量になるでしょう。

必要な場合は後から生成できるコマンドが用意されています。


不要ファイルを生成しないで済む

今までローカルで生成したこれらのドキュメントを活用したことのある方はいるでしょうか。

活用するのは恐らく一部のオフラインで使用しなければならない場合や、こだわりを持って利用している人くらいかもしれません。

生成したRDoc HTMLやRIデータの容量を考えれば、使わないファイルはないに越したことはないでしょう。


不要なデータの削除

生成されたRDocやRIデータの場所は「gem env gemdir」コマンドで調べることができます。

  1. $ gem install rubocop –document ri,rdoc
  2. (略)
  3. $ gem environment gemdir
  4. /usr/local/bundle
  5. $ ls /usr/local/bundle/doc/rubocop-0.82.0/
  6. rdoc ri

上記の場合は「/usr/local/bundle/doc」が格納先のディレクトリです。

「rm -rf /usr/local/bundle/doc」などを使用してディレクトリ自体を削除すれば生成済みのデータを削除できます。


おわりに

一旦プロジェクトの初期開発が済んでしまうと、バージョンアップくらいでしかRubyGemsについて調べないこともあるでしょう。

ですが知っていれば便利な機能が他にも沢山存在します。本記事のオプションに至ってはインストールの速度が格段に向上するでしょう。

合間を見つけて少しずつでも使いこなせるようになりたいものです。