myrurema gem で CLI からRubyのリファレンス（るりま）を確認する

## 「るりま」とは？
Rubyの公式日本語リファレンスマニュアルです。

* [プログラミング言語 Ruby リファレンスマニュアル](https://docs.ruby-lang.org/ja/)

## myrurema とは？
myrurema は「るりま」のリファレンスをコマンドラインで利用するツールです。

## インストール・初期化
* インストール

```sh
$ gem install myrurema
$ rurema --version
myrurema version 0.3.5
```

* 初期化

```sh
$ rurema --init
```

## ヘルプ
```sh
$ rurema --help
Usage: rurema [options] <method name or class name>
        --init                       initialize rurema system
        --update                     update documents and database
        --server                     start web server
        --preview                    render a reference as HTML
        --list                       list all classes
        ---- (OPTIONS)
        --port=N                     port number of the web browser (only meaningful with --server)
        --browser                    open web browser (only meaningful with --server or --preview)
        --dry-run                    show commands only
        --no-ask                     do not ask keyboard input
        --ruremadir=PATH             specify rurema directory (default: /Users/hoge/.rurema)
        --rubyver=STR                specify Ruby version (default: 2.4.0)
        ----- (INFO)
        --version                    show version of myrurema
        --help                       show this message
```

## 機能
### list
```csh
$ rurema --list | head
ACL
ARGF
ARGF.class
Abbrev
Addrinfo
Arc
ArgumentError
Array
Base64
BasicObject
```

### method search
メソッド名のみで検索すると一致するメソッドを表示します。
結果が1件の場合は直接リファレンスが表示されます。  

結果が複数の場合は一致するメソッドが一覧表示されます。
対象番号を入力すると該当のリファレンスが表示されます。

#### 結果が1件の場合

```csh
$ rurema each_with_object
Enumerable#each_with_object
--- each_with_object(obj) -> Enumerator
--- each_with_object(obj) {|(*args), memo_obj| ... } -> object

与えられた任意のオブジェクトと要素をブロックに渡し繰り返し、最初に与えられたオブジェクトを返します。

ブロックを省略した場合は、上の繰り返しをして、最初に与えたオブジェクトを
最後に返す [[c:Enumerator]] を返します。

@param obj 任意のオブジェクトを指定します。

  evens = (1..10).each_with_object([]) {|i, a| a << i*2 }
  # => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

@see [[m:Enumerator#with_object]]
```

#### 結果が複数件の場合
```csh
$ rurema to_s
(1)ARGF.class#to_s (2)Addrinfo#to_s (3)Array#to_s (4)Benchmark::Tms#to_s
(5)BigDecimal#to_s (6)CGI::Cookie#to_s (7)CSV::Row#to_s (8)CSV::Table#to_s
# 中略
(99)WEBrick::HTTPUtils::FormData#to_s (100)WEBrick::HTTPVersion#to_s
(101)WIN32OLE_METHOD#to_s (102)WIN32OLE_PARAM#to_s (103)WIN32OLE_TYPE#to_s
(104)WIN32OLE_TYPELIB#to_s (105)WIN32OLE_VARIABLE#to_s (106)Win32::Registry#to_s
(107)main.to_s
which one? > 99
searching WEBrick::HTTPUtils::FormData#to_s

require 'webrick/httputils'
WEBrick::HTTPUtils::FormData#to_s
--- to_s      -> String

自身が表すフォームデータのうちのひとつを文字列として返します。
```

### class search
```sh
$ rurema Prime
require 'prime'

class Prime < Object

include Enumerable

素数全体を表します。

=== インスタンスを取得する方法

Prime クラスはシングルトンであると考えてください。Prime クラスはデフォルトのインスタンスを持っており、ユーザーはそのインスタンスを利用すべきです。 [[m:Prime.instance]] によってそのインスタンスを取得できます。

過去との互換性のために [[m:Prime.new]] も残っています。このメソッドは非推奨ですので、新しいプログラムでは利用しないでください。

なお、利便性のためにデフォルトインスタンスのメソッドをクラスメソッドとしても利用できます。

例:
 Prime.instance.prime?(2)  #=> true
 Prime.prime?(2)           #=> true
```

### class + method search
```sh
$ rurema Prime each
require 'prime'
Prime#each
--- each(upper_bound = nil, generator = EratosthenesGenerator.new){|prime| ... } -> object
--- each(upper_bound = nil, generator = EratosthenesGenerator.new)               -> Enumerator

全ての素数を順番に与えられたブロックに渡して評価します。

@param upper_bound 任意の正の整数を指定します。列挙の上界です。
                   nil が与えられた場合は無限に列挙し続けます。

@param generator 素数生成器のインスタンスを指定します。

@return ブロックの最後に評価された値を返します。
        ブロックが与えられなかった場合は、[[c:Enumerator]] と互換性のある外部イテレータを返します。

=== 例:
  Prime.each(6).each{|prime| prime }  # => 5
  Prime.each(7).each{|prime| prime }  # => 7
  Prime.each(10).each{|prime| prime } # => 7
  Prime.each(11).each{|prime| prime } # => 11

=== 例: 30以下の双子素数
  Prime.each(30).each_cons(2).select{|p,r| r-p == 2}
    #=> [[3, 5], [5, 7], [11, 13], [17, 19]]

=== 注
このメソッドに、真の素数列でない疑似素数を与えるべきではありません。

このメソッドは、素数列の外部イテレータを内部イテレータに変換してRubyらしいプログラミングを提供することが責務です。独自に素数性の保障するのはメソッドの責務ではありません。従って、次のように精度の低い素数生成器を与えると、真に素数とは限らない数列が発生します。
 Prime.each(50, Prime::Generator23.new) do |n|
   p n #=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49]
 end

@see [[c:Prime::EratosthenesGenerator]], [[c:Prime::TrialDivisionGenerator]], [[c:Prime::Generator23]]
```

## <i class="fa fa-book" style="font-size:1em;"></i> 外部資料
* [yhara/myrurema: A helper tool for rurema (The new Japanese Ruby reference manual)](https://github.com/yhara/myrurema)