💎
Rubyのいろんなライブラリについて
これはなに
Rubyのライブラリについて概要をザッとまとめました。
ライブラリの種類
組み込みライブラリ
- 準備不要で使える
- Integer,String,Array,Hashなど
- 詳しくはるりま-組み込みライブラリ※1
標準添付ライブラリ
- requireメソッドを実行して準備が必要
- JSON,CSVなど
- 詳しくはるりま-ライブラリ一覧の組み込みライブラリ以下
Gem
- インストールが必要
- rubygems.orgにて利用可能な形で公開している
.
.
.
.
↓↓それぞれ詳しく見ていくよ👀
組み込みライブラリ
- 組み合わせると便利になるインスタンスメソッドがたくさんある
- Array, Hash, String, Enumerableのるりまを覚えておくといい LINK
Arrayクラス
- class Array
- 配列を持つクラス
- 配列は任意の Ruby オブジェクトを要素として持つことができる
- 一般的な配列の形は
[1,2,3]
- 配列に値を追加する
- push:順番に配列の末尾へ追加する
array = [1, 2, 3] array.push 4 array.push [5, 6] p array # => [1, 2, 3, 4, [5, 6]]
- push:順番に配列の末尾へ追加する
- <<:自身の末尾へ破壊的に追加する
ary = [1] ary << 2 ary << 3 << 4 << 5 p ary #=> [1, 2, 3, 4, 5]
- pop:末尾から要素を取り除いてそれを取得する
- shift:先頭から要素を取り除いてそれを取得する
- unshift:指定した引数の最後から順番に要素の最初へ追加する
arr = [1,2,3] arr.unshift 0 p arr #=> [0, 1, 2, 3] arr.unshift [0] p arr #=> [[0], 0, 1, 2, 3] arr.unshift 1, 2 p arr #=> [1, 2, [0], 0, 1, 2, 3]
- to_a:配列に変換してくれる
def join_arrays(a1,a2) a1.to_a + a2.to_a end array1 = [10,20,30] array2 = [40,50,60] p join_arrays(array1,array2) # => [10, 20, 30, 40, 50, 60]
Hashクラス
- class Hash
- keyとvalueのオブジェクトを持つクラス
- 更新不可ではない文字列をキーに与えた場合は文字列をコピーし、コピーを更新不可として設定する事Object#freezeが必要である
- ハッシュに含まれる要素の順序が保持されるようになった。追加順で列挙される。
- 簡単な操作
- 作成
animals = {"ねこ" => "3匹", "犬" => "4匹", "ハムスター" => "1匹"} puts animals["ねこ"] => 3匹
- 追加
animals = {"ねこ" => "3匹", "犬" => "4匹", "ハムスター" => "1匹"} animals["うさぎ"] = "5匹" puts animals => {"ねこ" => "3匹", "犬" => "4匹", "ハムスター" => "1匹", "うさぎ" => "5匹"}
- 更新
animals = {"ねこ" => "3匹", "犬" => "4匹", "ハムスター" => "1匹"} animals["ハムスター"] = "5匹" puts animals => {"ねこ" => "3匹", "犬" => "4匹", "ハムスター" => "5匹"}
- 削除
animals = {"ねこ" => "3匹", "犬" => "4匹", "ハムスター" => "1匹"} animals.delete["ねこ"] puts animals => {"犬" => "4匹", "ハムスター" => "5匹"}
- 作成
-
eachでキーと値を順番に取り出す
# 一発で出力 {:a=>1, :b=>2}.each {|a| p a} #=> [:a, 1] # [:b, 2] # ブロックで一つずつ出力 animals = {"ねこ" => "3匹", "犬" => "4匹", "ハムスター" => "1匹"} animals.each{ |name, count| p "#{name}は#{count}です。" }
- selectでkeyまたはvalueで真となるペアだけを含むハッシュを生成して返す
h = { "a" => 100, "b" => 200, "c" => 300 } h.select {|k,v| k > "a"} #=> {"b" => 200, "c" => 300} h.select {|k,v| v < 200} #=> {"a" => 100}
- Hashにもto_aが使える
human = {name: "pikawaka", age: e25} human.to_a => [[:name, "pikawaka"], [:age, 25]]
Stringクラス
- class String
- 文字列のクラス。ヌル文字を含む任意のバイト列を扱える。メモリ容量以外の制限はない。
- RubyのStringは文字列を破壊的に変更ができる
- 大文字に変える場合の例
# upcaseは破壊的。bにも波及する。 a = "string" b = a a.upcase! p a # => "STRING" p b # => "STRING" # upcaseは非破壊的。bには波及しない。 a = "string" b = a a = a.upcase p a # => "STRING" p b # => "string"
- エンコーディングはバイト単位ではなく文字単位
p "いろは".size #=> 3 p "漢字"[0] #=> "漢" p "ループ".reverse #=> "プール"(逆転する) s = "ruビー" s[0..1] = "ル" # 0~1文字を変える p s #=> "ルビー" e = "言語".encode("EUC-JP") u = "言語".encode("UTF-8") p e.encoding #=> Encoding::EUC_JP p u.encoding #=> Encoding::UTF_8
他にもいろいろよく使われるライブラリ
-
- オブジェクトの内容を凍結し、破壊的な操作を防ぐ
PERMIT_ID = ['0001', '0002', '1234'] PERMIT_ID.freeze PERMIT_ID.reject! { |id| id == '1234' } # => RuntimeError: can't modify frozen Array p PERMIT_ID # => ["0001", "0002", "1234"]
- 凍結の解除はできないがdupする事で同様のことは可能。
- frozenは凍結の有無を確認できる
a = [1].freeze p a.frozen? #=> true a[0] = "foo" p a # can't modify frozen Array (FrozenError) b = a.dup p b #=> [1] p b.frozen? #=> false
-
nil?
- Objectクラスに属する
- 一番上の階層に属するクラスのため、大体どんなものに対してもnil判定のために使用できる
-
empty?
- いろんなクラスから生えていて、クラスによって空である場所を見るところが若干変わる
- Arrayなら空配列、Stringなら空文字列とか。空の定義がクラスによって異なる。
- るりまサーチに出てくるものが該当する
- いろんなクラスから生えていて、クラスによって空である場所を見るところが若干変わる
-
blank? present?
- これはRailsの機能になる
- そのためフレームワークがRailsでない場合などは使えない
-
flashの使い分け
- Railsの機能、クラスメソッド
- 次のリクエストまで有効なデータ
- 表示する対象では
flash[:alert]
を使う - controllerで
redirect_to
を使う- リクエストを再取得してくれる
- エラー発生時、302コードをブラウザ返して、リクエストが終わる - 別のリクエストをブラウザが投げる - root - controller - view - ブラウザがhtmlを受け取って表示される
- 表示する対象では
- リクエスト中のみ有効な書き方
- 表示する対象では
flash.now[:alert]
を使う - controllerで
render
で次のviewを指示してくれる - ブラウザがhtmlを受け取って表示される。再リクエストはされない。
- 表示する対象では
- 正常系はrenderで異常系はredirect_to、みたいな書き方もできる
標準添付ライブラリ
CSVクラス
- RubyにおけるCSVファイルの取り扱い方法にて書いたCSVライブラリが標準添付ライブラリに該当する。ちなみにFileクラスは組み込みライブラリ。
Setクラス
- setライブラリ
- 重複のないオブジェクトの集まり
- Array の持つ演算機能と Hash の高速な検索機能を合わせ持つ
set1 = Set.new ["foo", "bar", "baz", "foo"] p set1 # => #<Set: {"foo", "bar", "baz"}>
TimeクラスとDate/DateTimeクラス
-
Timeクラス
# 時刻を表す文字列をTimeオブジェクトに変換 time = Time.parse('2021-05-14 12:34') #=> 2021-05-14 12:34:00 +9000 # 各種フォーマットで表現された文字列を返す time.iso8601 #=> "2021-05-14T12:34:00+09:00"
-
Dateクラス
# 年月日からDateオブジェクトを得る date = Date.new(2021, 5, 14) # 日付を指定した書式の文字列で表現 date.strftime('%Y年%m月%d日') #=> "2021年05月14日" # 妥当な日付か真偽値で確認 Date.valid_date?(2000, 1, 1) #=> false # うるう年か真偽値で確認 Date.leap?(2004)
Gem
- 例としてawesome_printを使う
- pメソッドをより見やすい形で表示するapメソッドを提供する
gem install
- コマンドプロンプト上で一つずつインストールする方法
# 標準 gem install Gem名 # 例 gem install awesome_print # 省略できる gem i awesome_print
- コマンド実行後、表示されるGem名の後ろにハイフンで続く数字はバージョン番号
- 実行した時の最新バージョンがインストールされる
- Gemのインストールは一回のみでOK
Bundlerを使ってインストールする
- 複数のGemをインストールしたい時に使う
- Bundlerはよく使用されるためRuby 2.6.0よりRubyと一緒にインストールされるようになった
- Bundlerの確認方法
# 確認方法その1 bundle -v # 確認方法その2 gem list # 上記で出力されない場合はインストールする gem install bundler
- bundlerもgemの一つである
使い方
- Gemfileを作成
- Gemをインストールするための発注書みたいなもの
# Gemfileの雛形を作成 bundle init
- Gemfileの最後の行に追記する
# 下記は削除してOK # gem "rails" # 追記する gem "awesome_print"
- コマンドの実行
bundle install
- Gemfile.lockが作成され、使われているGem名やバージョンが自動で記録される
- Gemfileが発注書ならば、Gemfile.lockは納品書みたいなもの
- Gemfile.lockが作成され、使われているGem名やバージョンが自動で記録される
バージョンアップの方法
- 新しいバージョンがリリースされバージョンアップしたい時に使う
- 古いバージョンのGemはアンインストールされないため、同じGemの複数のバージョンがインストールされた状態になる
- 通常は新しいバージョンが利用される
# まとめてバージョンアップ
bundle update
# 特定のGemと、そのGemが依存しているGemをまとめてバージョンアップ
bundle update awesome_print
指定したバージョンでGemを使用する
- Gemfile.lockに書かれたバージョンのGemを使って実行できる
# Gemfile.lockに書かれたバージョンのGemを使って、example.rbを実行する
bundle exec ruby example.rb
よく使われるGemの例
- また細かく見る機会に説明します
参考
- ゼロからわかる Ruby 超入門
- [Ruby]おすすめ標準添付ライブラリ!
- ※1 るりま:Rubyリファレンスマニュアルの略称
Discussion