- 1. Macでちょっと考えて好きなRubyを使う方法
- 2. Rubyで配列の変更を防ぐ:参照渡しとコピーについて
- 3. Macで何も考えずに最新の一番いいRubyを使う方法
- 4. Rubyで配列から複数の値を削除する
- 5. メール本文や件名から、必要な情報を抽出する
- 6. オリジナルアプリ(ウォンツ)の制作過程
- 7. Ruby 特異メソッドについて
- 8. 変数・値・参照・代入
- 9. 【Ruby】ハノイの塔 (paizaランク A 相当)をやってみた
- 10. 【Ruby】配列の結合方法について
- 11. Rubyにおけるモジュールとは
- 12. 【Rails】each, find_each, find_in_batches の違い
- 13. Rubyで発生した例外クラスをまとめてみた
- 14. [Rails] マークダウン形式でtext_areaに入力できるようにする
- 15. each_with_indexメソッド
- 16. 【Ruby】ハッシュについて改めて振り返ってみる
- 17. 翻訳ファイルの反映を確認するときはサーバーを再起動するのが基本だろ?
- 18. Railsにおけるエラーメッセージの日本語化
- 19. [Ruby]代表的な例外クラスとその説明を洗い出してみた
- 20. as_jsonとto_jsonの違いをまとめてみる
Macでちょっと考えて好きなRubyを使う方法
[Macで何も考えずに最新の一番いいRubyを使う方法](https://qiita.com/hana-da/items/b7afec4393440d74c17a) そうなんですよ。一番新しいのが一番いいやつなので、それを使っておくのがいいのですよ。。。
でもね、古風なのもよかったりするじゃないですか? 2.7.8 とか。
それ、できるよ。そう [rbenv](https://github.com/rbenv/rbenv) ならね。
# そもそも rbenv とは
[rbenv](https://github.com/rbenv/rbenv) とは様々なversionのRubyを共存(同時にインストール)させつつ、簡単にいい感じに切り替えて使えるようにするツールです。
そして [ruby-build](https://github.com/rbenv/ruby-build) とはrbenv環境用に様々なversionのRubyを簡単にインストールする仕組みです。なので流れとしては
1. rbenv 自体を整える
2. ruby-build を整える
3. ご希望のRuby
Rubyで配列の変更を防ぐ:参照渡しとコピーについて
今回はRubyでの配列の参照渡しとコピーについて、実際の問題とその解決方法を紹介します。この記事では、特に`dup`メソッドを使って元の配列が変更されるのを防ぐ方法に焦点を当てます。
## 問題の背景
Rubyでは、オブジェクトは参照渡しされるため、メソッドに渡された配列やハッシュなどのオブジェクトが直接変更される可能性があります。これは便利な場合もありますが、予期せぬ副作用を引き起こすことがあります。例えば、以下のコードを見てください。
“`ruby:example.rb
original_array = [“apple”, “grape”]
save_array = []
p save_array = original_array
original_array[0] = “banana”
p original_array
p save_array
“`
このコードを実行すると、`save_array`に`original_array`を保存したと思いましたが、実際には`original_array`の変更が`save_array`にも反映されてしまいます。“`te
Macで何も考えずに最新の一番いいRubyを使う方法
![Elshaddai_free_images056.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17434/02e12d6c-9ad8-6d58-0996-1933c6f7b090.jpeg)
**一番新しいRubyが一番速くて一番よいRuby**という事で最新のRubyを何も考えずに入れて使う方法です。
最新のRubyは年に数回(2ヶ月に1回)リリースされるので、それに追従して最新のRubyを入れつづけやすいように [rbenv](https://github.com/rbenv/rbenv) というツールを使います。
# 下ごしらえ
基本的には https://github.com/rbenv/rbenv#basic-git-checkout に書いてある事をそのままやるだけなのですが、この記事では `何も考えずに` がウリなので何も考えなくていいように、何も考えずに以下のコマンドをターミナルへコピペしてください。
## まず rbenv をインストール
ターミナルを起動して以下
Rubyで配列から複数の値を削除する
Rubyで配列から複数の値を削除する方法が分からなかったので調べました。
元となる配列base_listと削除したい文字が入っている配列delete_listは以下です。
“`
base_list = [1, 2, 2, 3, ‘hoge’, ‘fuga’, ‘piyo’] # 元の配列
# => [1, 2, 2, 3, “hoge”, “fuga”, “piyo”]delete_list = [2, ‘fuga’] # 削除したい文字の配列
# => [2, “fuga”]“`
## -(マイナス) 指定した配列の要素を取り除いた新しい配列を返す
「`-`」を使って、`元の配列 – 削除したい文字`とすることで、指定文字が削除された新しい配列が作成されます。
“`
new_list = base_list – delete_list
# => [1, 3, “hoge”, “piyo”]“`
元の配列には変化はありません。
“`
base_list
# => [1, 2, 3, “hoge”, “fuga”, “piyo”]“`
## *
メール本文や件名から、必要な情報を抽出する
# はじめに
ワークフローの完了通知など、システムからメールで通知が送られてくるケースは多いかと思います。通知の受信をトリガーにした場合、メール本文や件名に含まれる情報を抽出する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3444315/cbc9b95a-d96d-a366-c815-5c74866dab96.png)
Workatoを使って、これらの情報をどのように抽出すればよいでしょうか?
# 正規表現を使えばメール本文から情報が抽出可能
正規表現 (regular expression) というものを使うと、メール本文のテキストから条件に合う部分を抽出することが可能です。フォーミュラモード (formula mode) を使えば、簡単に正規表現を使うことが可能です。
### そもそも正規表現とは?
正規表現は、英語では regular expression と呼び、文字列のパターンを指定するための記述方法です。特定の文字列を検索、置換、抽出したりす
オリジナルアプリ(ウォンツ)の制作過程
こんにちは!この記事では、未経験からエンジニアを目指す初学者の私が、オリジナルアプリの制作過程を記録していきます。使用する言語はRubyとRailsです。これから(ほぼ)毎日の進捗や学びを投稿していきますので、アドバイスや指摘があればぜひ教えてください。
## 企画の練り方
まずは、アプリの企画を練ることから始めます。どんなアプリを作りたいのか、誰のためのアプリなのかを明確にすることが重要です。今日は具体的なユーザーペルソナを作成しました。
## 今日の進捗:ペルソナの作成
### ペルソナ: 田中 和也 (Kazuyuki Tanaka)
| 項目 | 詳細 |
|———————-|———————————————————————-|
| **一般情報** |
Ruby 特異メソッドについて
# はじめに
#### ※以下の内容には誤りが含まれる可能性があります
# 特異メソッドとは何か
Rubyにおける特異メソッドは、特定のオブジェクトだけが持つ独自のメソッドです。
要するに、そのメソッドは定義したオブジェクトに対してのみ使用可能で、他のオブジェクトでは使用できないということです。
# 特異メソッドの書き方
“`
str = “hello”
def str.greet
puts”Hello,world!”
endstr.greet #=> Hello,world!
“`
ここで”greet”メソッドは”str”オブジェクトに対してのみ定義されているので他の文字列オブジェクトではこのメソッドは使用できません。# まとめ
Rubyの特異メソッドは強力なツール。
ですが使用には慎重になるべきです。
特異メソッドは定義したオブジェクトに対してのみ存在し、他の同じクラスのオブジェクトには影響を与えない。
つまり、同じクラスの異なるオブジェクトに対して同じ動作を
期待する場合、それぞ
変数・値・参照・代入
# これは何?
変数ってなに? という話。
値なのか、参照なのか、代入したらどうなるのか、とか。そのあたり。# いくつかの言語の事例
いくつかの言語の事例を書いてみる。
## C言語の場合
C 言語の変数は(概念としては)型が付与された一連のメモリである。この文脈ではオブジェクトと言ってもいい。
変数の型が決まれば、バイト数が決まる。オブジェクトの正体は、構造体かもしれないし、ポインタかもしれない。
「概念としては」と書いたのは、コンパイルの結果その変数自体が消滅したり、いろいろあり得るから。
C言語では、同じ「一連のメモリ」を別の変数が直接指すということはできない。そうしたければポインタを使う。
あるいは `union` を使えば異なるメンバが同じ「一連のメモリ」を指すことが出来る。Pascal なんかも同じだと思う。
“`C:C
a=b;
“`という代入文は、暗黙の型変換が入らない場合「b が指す一連のメモリを a が指す一連のメモリにコピーする」という意味になる。
つまり、代入が行われても依然として a は b と別のもの(アドレスが異なる)であ
【Ruby】ハノイの塔 (paizaランク A 相当)をやってみた
“`ruby
# ハノイの塔の状態を追跡するクラス
class Hanoi
attr_accessor :rods# 初期化メソッド
def initialize(n)
@n = n
@rods = { “A” => (1..n).to_a.reverse, “B” => [], “C” => [] }
end# ディスクの移動メソッド
def move_disk(from, to)
disk = @rods[from].pop
@rods[to].push(disk)
end# ハノイの塔の再帰的な解法
def solve_hanoi(n, from, to, aux, t, move_count)
return move_count if move_count >= tif n == 1
move_disk(from, to)
move_count += 1
return move_count if move_count >= t
els
【Ruby】配列の結合方法について
## はじめに
簡単なトランプゲームを作りました。その際、配列の結合方法が分からず調べたのでまとめておきます。
本記事では、実際にコードを書く際に試した方法を紹介します。## Rubyでの配列の結合方法
### +演算子
+演算子を使って、2つの配列を結合することが出来ます。この方法では、新しい配列は作成され、元の配列は変更されません。
“`ruby
array1 = [1, 2, 3]
array2 = [4, 5, 6]
new_array = array1 + array2
puts new_array.inspect
#=> [1, 2, 3, 4, 5, 6]
“`
### concatメソッド
concatメソッドは、元の配列を変更して、指定した配列を末尾に追加します。
“`ruby
array1 = [1, 2, 3]
array2 = [4, 5, 6]
array1.concat(array2)
puts array1.inspect
#=> [1, 2, 3, 4, 5, 6]
puts array2.inspect
#=>[4, 5, 6]
“`
##
Rubyにおけるモジュールとは
<目次>
– [<Rubyリファレンスマニュアル – モジュール定義>](#rubyリファレンスマニュアル—モジュール定義)
– [<クラスとモジュールの共通点>](#クラスとモジュールの共通点)
– [1. モジュールの定義](#1-モジュールの定義)
– [2. 定数の定義](#2-定数の定義)
– [3. 例外処理](#3-例外処理)
– [<クラスにしかできないこと>](#クラスにしかできないこと)
– [1. インスタンスの生成](#1-インスタンスの生成)
– [2. 継承](#2-継承)
– [3. インスタンス変数とアクセサメソッド](#3-インスタンス変数とアクセサメソッド)
– [<モジュールにしかできないこと>](#モジュールにしかできないこと)
– [1. ミックスイン](#1-ミックスイン)
– [2. 名前空間の提供](#2-名前空間の提供)
– [<そもそも継承とは>](#そもそも継承とは)
– [<多重継承について>](#多重継承について)
– [多重継承のデメリット](#多重継承のデメリット)
– [<Ruby
【Rails】each, find_each, find_in_batches の違い
# 前提
– 環境
– Ruby:`2.5`
– Rails:`4.2`
– 少々古めのバージョンになります
– ただ、次世代のバージョンにおいても本記事が参考になれば幸いです
– 今回扱うデータ
– ***company.rb***
– `has_many :shops`
– ***shop.rb***
– `belongs_to :company`
– データ数
– 事前に取得する ***company*** の件数を`50`件としますつまり、下記コードで取得される***company***の件数が`50件`という前提で進めます。
“`rb
Company.joins(:shops).where(shops: { prefecture: ‘東京都’ }).distinct
“`# each
“`rb:メインの確認コード
companies.each.with_index(1) do |company, i|
puts “loop_count: #{i}, company_id: #{company.id}”
Rubyで発生した例外クラスをまとめてみた
# はじめに
Rubyでコードを書いていて発生したエラーを自分用にまとめてみました。# NameError
定義されていない変数や定数を呼び出そうとすると発生するエラー。
呼び出す変数の名前を間違ったりしてよく起こしました。“`ruby:変数名の間違い
name = “Taro”
#nameがnamaになっている
p nama
“`
“`:出力
undefined local variable or method ‘nama’ for …(NameError)
“`# NoMethodError
メソッド名を間違えた時や、呼び出せないメソッドを呼び出そうとしたときに発生するエラー。
個人的にはレシーバが想定に反してnilになっている場合が多かったです。“`ruby:メソッド名の間違い
a = [1, 2, 3]
#eachがeechになっている
a.eech do |n|
sum += n
end
“`
“`:出力
undefined method `eech’ for … (NoMethodError)
“`
“`ruby:privat
[Rails] マークダウン形式でtext_areaに入力できるようにする
# commonmarker
– `gem commonmaker`をインストール
“`
gem ‘commonmarker’
“`
– helperに下記を記述
“`module ApplicationHelper
def markdown_to_html(text)
html = Commonmarker.to_html(text)
raw(html)
end
end
“`
– 例)show.html.haml
“`
= markdown_to_html(“# CommonMarker”)
“`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/fd44edd2-6589-33c2-5658-d29cded00577.png)### 参考URL
https://github.com/gjtorikian/commonmarker思いのほかサクッと実装できました。
何かご指摘あればお願いします!
each_with_indexメソッド
each_with_indexメソッドを用いると、繰り返し処理の中で、配列の添え字も扱うことができる。
“`
animals = [“dog”, “cat”, “fox”]animals.each_with_index do |animal,index|
puts “#{index}:#{animal}”
end
“`これを実行すると、以下の結果になる。
“`
0:dog
1:cat
2:fox
“`スタートを1からにしたい場合はindex+1とすると1から始めることができる。
“`
animals = [“dog”, “cat”, “fox”]animals.each_with_index do |animal,index|
puts “#{index + 1}:#{animal}”
end
“`
“`
1:dog
2:cat
3:fox
“`
【Ruby】ハッシュについて改めて振り返ってみる
こんにちは。あがさんです!!
アプレンティスへの参加を機に定期的に記事を投稿していきます。
どうぞよろしくお願いいたします。
ただの感想文になるかも…## Rubyを学習していて
Rubyを学習をしていく中で、理解しているつもりでも全然理解していなかったところを記事にして再確認していきます。今回はハッシュについてです。
データの受け渡しに関わるコードを書いているとぶち当たる内容ですよね〜。このあと簡単なコードで仕組みや振る舞いを再確認していきたいと思います!!
## ハッシュってなに?
ハッシュはキー(key)と値(value)の組み合わせでデータを管理するオブジェクトのことです
“`ruby sample.rb
ash_sample = {}
hash_sample = {“key_a” => 1, “key_b” => 2, “key_c” => 3}p hash_sample # => {“key_a”=>1, “key_b”=>2, “key_c”=>3}
p hash_sample.class # => Hash ・・・ Hashというクラ
翻訳ファイルの反映を確認するときはサーバーを再起動するのが基本だろ?
新しく翻訳ファイルを追加したbranchを開いた際、viewに翻訳が反映されなかったので原因を4時間ほど探っていました。
– ファイルの場所
– ファイルの命名
– 設定の書き方
– ymlの書き方多くの可能性を探りました。
しかし、ある記事を見た際に
‘gemをインストールしたらサーバーを再起動するのは基本中の基本です。’
という文言を見かけました。今回の場合はgemをインストールしていたわけではないですが、以前取り組んだ教材に’翻訳ファイルに文言を追加した際はサーバーを再起動しよう!’みたいな文言があったことを思い出しました。
4時間という貴重な時間を割いた代償としてこの結論を得たのは不服ですが、解決したので今回は良しとしましょう。
Railsにおけるエラーメッセージの日本語化
# 【課題】
### エラーメッセージをわかりやすい日本語に設定したい
#### 英語表記ではユーザーが視覚的に判断しにくい
#### エラーメッセージが出現した際に、パッと見で何でエラーが起きで弾かれてるのかを判断しやすくしたい# 【実装】
①Gemファイルへの記述
“`ruby:Gemfile
gem ‘rails-i18n’
“`②gemを設定したのでここでbundle instalを行う
“`ruby:ターミナル
$ bundle install
“`
③config/application.rbのファイルを編集
“`ruby:config/application.rb
module BoardApp
class Application < Rails::Application config.time_zone = 'Tokyo' config.active_record.default_timezone = :local # デフォルトのlocaleを日本語(:ja)にする設定 config.i18n.default_
[Ruby]代表的な例外クラスとその説明を洗い出してみた
Rubyに定義されている例外クラスを調べてみました。
## Exception
https://docs.ruby-lang.org/ja/latest/class/Exception.html– 全ての例外の祖先のクラス
## StandardError
https://docs.ruby-lang.org/ja/latest/class/StandardError.html“`
継承リスト
StandardError < Exception ``` - 通常のプログラムで発生する可能性の高い例外クラスを束ねるためのクラス - StandardError とそのサブクラスは、 rescue 節でクラスを省略したときにも捕捉できる ### 主なStandardErrorのサブクラス #### ArgumentError https://docs.ruby-lang.org/ja/latest/class/ArgumentError.html - 引数の数があっていないときや、数は合っていて、期待される振る舞いを持ってはいるが、期待される値ではないときに発生 ```
as_jsonとto_jsonの違いをまとめてみる
## はじめに
ActiveRecordのオブジェクトをJSON形式に直すときはto_jsonを使ってJSON形式に直していると思います。
それとは別に、as_jsonといったものもあります。
初めて見たときは、似てるけど何が違うんだろうと思っていました。
今回は、頭の中を整理しながら、違いをまとめてみようと思います。## as_jsonとは
オブジェクトをハッシュや配列など、JSONエンコードが可能なオブジェクトに変換してくれます。特定の属性を含めたり除外したりできます。
とりあえず、どのような出力となるか試してみます。### 1レコードをas_jsonした場合
1レコードの場合はハッシュ形式で表示されます。
“`rb
@users = User.find(1)## puts @users.as_json
{“id”=>1, “name”=>”山田 太郎”, “email”=>”sample1@sample.com”, “created_at”=>”2024-07-20T13:46:10.150Z”, “updated_at”=>”2024-07-20T13:46:10