💎

Rubyチートシート(一部)

4 min read

※この記事は、Qiitaに投稿した記事を一部変更したものです。

https://qiita.com/kunosu/items/37a8222239f3c7f8d59a

徐々に増やしていく予定。

テンプレート

# coding: utf-8

BEGIN {
	puts("#{__FILE__} start\n")
}

END {
	puts("\nend...\n")
}

# コマンドラインオプションとして"-d"を追加すると$DEBUG=trueになる
puts("デバッグモード") if $DEBUG

# ------------------------------------
# main
# ------------------------------------

実行時の引数を取得

# 引数の数が2以外ならNG
if ARGV.size == 2
	folder_pass = ARGV[0].encode(Encoding::UTF_8).gsub("\\", "/")
	str = ARGV[1]
else
	puts "ruby #{__FILE__} フォルダパス 検索条件 の形式で実行"
	exit 1
end

長い式の途中で改行

\(円マーク)をつける

if hogehoge_flg == true && \
	hogehogehogehoge_flg == false
	# なんか処理
end

数値

奇数・偶数を判定

true/falseを返す

num.even?	# 偶数か判定
num.odd?	# 奇数か判定

データ構造

Array

# 新規作成
arr = Array.new

# 値を追加
arr.push(1)
arr.push(1)

ループ

arr.each do |value|
	p value
end

# ループする範囲を決める
arr[2...5].each do |value|
	p value
	# => arr[2] ~ arr[4]までの値を出力
end

Hash

# 新規作成
hash = Hash.new
hash = {:name => "hoge", :num => 1}

# 値を取得
puts hash[:name] # => hoge

文字列

文字列が含まれているか

真偽を返す

str.include?("r")

正規表現に一致するか

str =~ /<(\w+)>/

# 一致しない
str !~ /<(\w+)>/

一致した部分を置換

# "\"(円マーク)を"/"に変換
folder_pass = ARGV[0].gsub("\\", "/")

正規表現も可能

# 第2引数が "" の場合は、一致した部分の削除になる
str.gsub(/<(\w+)>/, "")

文字コード

文字コードの確認と変換

str = "あいう"

# 文字コードの確認
str.encoding
# => #<Encoding:Shift_JIS>

# 変換
str.encode(Encoding::UTF_8)
str.encoding
# => #<Encoding:UTF_8>

ruby test.rb|clipとかで実行結果をクリップボードに送信するときはShift_JISに変換

# 文字列でも指定可能
str.encode("Shift_JIS")

今日の日付

require 'date'

date = Date.today # 日付オブジェクト
p date.strftime("%Y/%m/%d")
# => 2020/05/07

環境変数を取得

ENVを使う

test.bat
set ACCESS_TOKEN=123456789
ruby test.rb
test.rb
access_token = ENV['ACCESS_TOKEN']
# => 123456789

環境変数が未設定の場合は nil を返す

test.rb
access_token = ENV['ACCESS_TOKEN_NIL']
# => nil

# 未設定かチェックする
str = 'ACCESS_TOKEN_NIL'
if !ENV.has_key?(str)
	raise ArgumentError, "環境変数 #{str} に値が設定されていません"
end

例外

例外の一覧はこちらの「例外クラス」参照
Ruby リファレンスマニュアル: https://docs.ruby-lang.org/ja/latest/library/_builtin.html

例外をキャッチする

begin
	# 例外が発生
rescue => error
	# ここで例外処理を行う
end

例外を発生させる

raise ArgumentError	# 引数エラー
raise ArgumentError, "xxxが存在しません" # メッセージもつけれる

ブロック

メソッドにブロックを渡す(ブロック引数)

ファイルを開くまでの処理を共通化したいとき

# 指定フォルダ配下にあるファイルを1つづつ開いて、blockに処理させる
def read_file(dir_pass, file_name, &block)
	dir_pass.each_child do |pass|
		# 正規表現に合わないファイル名は無視
		next if pass.to_s !~ Regexp.new(file_name)

		puts "Reading #{pass.basename}"

		pass.open(mode = "r", :external_encoding => "UTF-8") do |file|
			# ブロックにfileを渡す
			block.call(file)
		end
	end
end

# test_*.txtのファイルのみ読み込んで出力する
# ※通常のメソッドのように()で引数を囲わない
read_file dir_pass, ".+/test_\\w+\\.txt$" do |file|
	# ここに書いたことが、&blockとしてread_fileに渡される

	line.chomp!	# 改行削除
	next if (line == "")	# 空行を無視

	puts line
end

Class

アクセス権を制御する

C++と同じ名前でpublic, protected, privateの3つがある

class Hoge
	# デフォルトでは全部public
	def public_method
		puts "called public_method"
	end

	# 以降はprotectedになる
	protected
	def protected_method
		puts "called protected_method"
	end

	# 以降はprivateになる
	private
	def private_method
		puts "called private_method"
	end

	# 下記でも指定できる
	# private :private_method
end

hoge = Hoge.new
hoge.public_method #=> called public_method
hoge.protected_method #=> エラー
hoge.private_method #=> エラー
名前 公開範囲
public 全部
protected クラス内、同一パッケージ、サブクラス
private クラス内のみ

Discussion

ログインするとコメントできます