Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

Ruby gem 開発!中国語(簡体字・繁体字)と日本語を判別するgemを作ってみた(中編)

こんにちは、九兵衛です。前回の記事 (https://qiita.com/kyubey1228/items/e1ade213a04daad6713e) では、Ruby gemの基本的な構造と設定について説明しました。
今回は、実際にgemの中身を実装していく過程を共有したいと思います。
正直なところ、この過程は予想以上に複雑で、多くの発見と驚きがありました。

**1. データファイルの準備と驚きの発見**

まず最初に、中国語の文字を判別するためのデータファイルを用意しました。主に2つのファイルを使用しています:

1. `Unihan_Variants.txt`: Unicode consortiumが提供する中国語変体字のデータ
2. `traditional_chinese_list.txt`: 追加の繁体字リスト

これらのファイルを詳しく調べていく中で、私は中国語の文字の複雑さに圧倒されました。例えば、「門」という字は日本語でも使いますが、中国語では簡体字で「门」と書きます。しかし、「門」自体も繁体字として使われているのです。このような複雑な関係が無数にあることを知り、言語

元記事を表示

【update_attributesが使えない】NoMethodError in RegistrationsController#update【Rails】

## はじめに

Ruby on Railsにて、以下のエラーが発生しました。

“`ruby
NoMethodError in RegistrationsController#update
undefined method `update_attributes’ for #
“`

## TL;DR

update_attributesではなくupdateを使用することで解決しました。

Rails6からupdate_attributesは非推奨になっているようです。

## 参考

[https://railsguides.jp/6_0_release_notes.html#active-record-非推奨化](https://railsguides.jp/6_0_release_notes.html#active-record-%E9%9D%9E%E6%8E%A8%E5%A5%A8%E5%8C%96)

https://github.com/rails/rails/blob/v6.0.2.1/activerecord/lib

元記事を表示

複数の配列をまとめるArray#zip関数を使ってコードをスッキリさせる

# 悩み
以下のコードを見てください。
“`ruby
array_1 = [1, 2, 3, 4, 5]
array_2 = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
array_3 = [‘A’, ‘B’, ‘C’, ‘D’, ‘E’]
array_1.each_with_index do |v1, i|
v2 = array_2[i]
v3 = array_3[i]
pp “#{v1}, #{v2}, #{v3}”
end
“`
このコード、以下の部分がなんとなく嫌じゃないですか?
“`ruby
v2 = array_2[i]
v3 = array_3[i]
“`
なにかうまく書く方法がありそうな気がします。
今回はそんな悩みを解決する関数を見つけたので共有したいと思います。

# 結論
以下のように `Array#zip` を利用しようって話です。
※ただし、大容量の配列の場合はパフォーマンスが悪いので注意。
“`ruby
array_1 = [1, 2, 3, 4, 5]
array_2 = [‘a’, ‘b’, ‘c’, ‘d’, ‘e

元記事を表示

AWS Lambdaへのデプロイにマルチステージビルドのコンテナイメージを使う【Ruby】

# はじめに
AWS LambdaへRubyのコードをデプロイする時にマルチステージビルドのコンテナイメージを使ったので、そのサンプルを紹介します。

# やりたかったこと

– RubyのコードをAWS Lambdaにデプロイしたい
– Dockerコンテナイメージをアップロードしてデプロイしたい
– Gemネイティブエクステンションを使いたい

# エラーが出た

AWS Lambda向けに、AWSのRubyベースイメージを使ってbundleインストールしたらエラーが出た。

“`shell
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
“`
**Gemネイティブエクステンションのビルドに失敗**

# 解決方法

Dockerのマルチステージビルドを使います。

:::note info
Gemネイティブエクステンションを使わないのであればマルチステージビルドは不要
:::

# Gemネイティブエクステンションとは?
Gemのコードの中に、Rubyで書かれた部分と、CやC++などのネイテ

元記事を表示

休日に新しい言語に触れたい ~Ruby編 環境構築からHello Worldまで~

# はじめに

https://qiita.com/MichaelHashimoto/items/ee3f5e9a8f99c4fd0371

この第二弾として、Rubyを触ってみました。環境構築に時間がかかり、休日1日分ではHello Worldまでしか進められませんでしたが、そこまでを記事にします。

私はC#やPythonを仕事で使っているため、これらの知識をベースにして理解を広げます。同じような境遇の方の理解の助けになれば幸いです。

# 環境構築

## 環境

OS: Ubuntu22.04
エディタ: vs code

## rbenv, ruby-buildのインストール (Ubuntuの場合)

ここでは、rbenvというrubyのバージョン管理ツールを使ってrubyをインストールすることにしました。(Pythonのpyenv的なもの)
これにより、必要に応じて、rubyのバージョンを変えられるようになります。

rbenvとそのプラグインであるruby-buildをインストールしましょう。
rbenvのリポジトリのreadmeに従ってインストールすればOKです。htt

元記事を表示

【Rails初心者から中級者まで】scopeの基礎から完全解説

# はじめに

rails単体でのアプリケーションでは正直scopeというものは使わなかったですが、実務においてSPAだとかなり使う面があったので、今回記事にしました。

### scopeとは何か

https://railsguides.jp/active_record_querying.html#%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97:~:text=strict_loading%3A%20true%0Aend-,15%20%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%97,-%E3%82%88%E3%81%8F%E4%BD%BF%E3%81%86%E3%82%AF

Rails ガイドさん より

> よく使うクエリをスコープに設定すると、関連オブジェクトやモデルへのメソッド呼び出しとして参照できるようになります。スコープでは、where、joins、includesなど、これまでに登場したメソッドをすべて使えます。どのスコープメソッドも、常にActiveRecord::Relationオブジェクトを返します。スコープの本体

元記事を表示

[Ruby] if文とcase文の使い分け

社内勉強会でcase文の中でfindパターンができた話を聞いていたら、if文とcase文ってなんで別々に存在するのだろう、という疑問が湧いた。

なんとなく分岐が多い時に可読性をあげたりすることができるのかなと思っていたが、caseの優れたところがあったため、まとめてみた。

## `===`演算子の活用
そもそもRubyって`===`演算子があるの?というところから始まった。JavaScriptだとよく見かけるのだが…以下ブログがすごくわかりやすかった。

https://qiita.com/Siva0410/items/c0b6ed52017ffada8bf4

要するにゆるい`==`で、サブクラスの所属まで検知してくれるとのこと。
なので、オブジェクトや`..`を使った範囲内のものに属するかを検知することができる。

以下がその例である。

### 1. 数値の範囲
“` ruby
age = 25
case age
when 0..12
puts “子供”
when 13..19
puts “10代”
when 20..64
puts “大人”
else

元記事を表示

RubyでprivateメソッドをRspec等で呼び出す方法

# 結論 sendメソッドを使おう!

“`
class User
def greet(name)
“Hello, #{name}!”
end

private

def secret_method
“This is a secret!”
end
end

user = User.new
puts user.send(:greet, “Alice”) # => “Hello, Alice!”
puts user.send(:secret_method) # => “This is a secret!”
“`

元記事を表示

Rubyの配列とか、ハッシュとか、、、

## 始めに・・・
先日後輩のコードレビューをしていた際に「ハッシュがさぁ!ハッシュがさぁ!」と先輩ぶっていたが単純に配列だったという悲しいことを晒したので懺悔の意味も込めて、、、

## 配列とは、、、
配列とは複数のデータを纏めて格納できるオブジェクト
“`ruby
#空の配列
[]
#サンプル
[‘配列1′,’配列2′,’配列3’]
#クラスはArray
[].class #=> Array

#サンプル
irb(main):003> a = [‘配列1′,’配列2′,’配列3’]
=> [“配列1”, “配列2”, “配列3”]
irb(main):004> a[0]
=> “配列1”
“`

主にRailsだとeachで使う気がする
“`Ruby
numbers = [1,2,3,4,5]
irb(main):009> sum = 0
=> 0
irb(main):010* numbers.each do |n|
irb(main):011* sum += n
irb(main):012> end
=> [1, 2, 3, 4, 5]
irb(main):013>

元記事を表示

文字列をTrue or Falseに変換する

#### 環境

Ruby2.6
Rails4.0

#### Booleanの判断の仕方

RubyにはBooleanClassというは存在していません。その代わり、FalseClass、TrueClassというのが存在します。なぜ、そのような設計をしたのだろうか。他言語から移行した人からしてみれば訝しく思うのも無理はない。

Boolean型つまり、FalseClassかTrueClassかの判断は、このようなやり方で判断することになります。

“`sample.rb
if params.is_a?(FalseClass) or params.is_a?(TrueClass)
puts “いわゆるBoolean型です”
else
puts “いわゆるBoolean型ではありません”
end
“`

#### テスト結果

“`test.rb
params = true # いわゆるBoolean型です
params = True # エラーになります
params = TRUE # エラーにはならないがwarningになる(

元記事を表示

Gitでマジでしたらあかんこと

今回は、Git/Githubでマジでしたら終わることについて紹介したいと思います。(実務で自分が怒られたこと中心)
初心者向けの備忘録なので、初めたてじゃないよって人は読まなくていいかもです。

# master/mainブランチのまま変更する or masterにpushする
これまじやばいです。自分の変更がmasterと同期するってことなので、conflict発生したら詰みます。
あと破壊的な変更を戻せなくなります。
“`
git push origin master
“`
これだけは禁止!!!!!!!!!!!!!!!(一回やった)

# リモートの変更を反映しないままbranchを切る
“`
git pull origin master
git branch -c ブランチ名
“`
これらは二つでセットであることは覚えておきましょう

# メイン以外からブランチを切る
例えば、
“`
git branch -c feature/newbranch
“`
でブランチをメインから切り、変更してコミットしたのちに、別のissueに取り組みたくなって(or自分のプロジェクトな

元記事を表示

Linux Ruby 3.3.5 update メモ (rbenv)

# 環境
H/W : HP ENVY x360 Convertible 13-ar0xxx(CPU:Ryzen7 3700U Mem:16GB)
OS : Linux(Debian12 bookworm on WSL2)
Host OS : Windows11 Home 23H2

# はじめに
インストールの記事は書いてるけど、そういやrbenvを使ったバージョンアップについて書いてないので投稿したいと思います。

# 参考URL
[「gem update –system」と「gem update」の違い](https://qiita.com/tatama/items/4e9d6bb8bfa2d9556db7)
[LinuxでRuby 2.5.0 インストールメモ](https://qiita.com/edward999th/items/823ccb1fd88eabc93190)
[【Ruby】インストール済みのGemを確認する方法](https://qiita.com/tetusan/items/ac59833b0f91e92c623f)

# 前提
過去記事の[Linux Ru

元記事を表示

薬剤師がエンジニアになってまずやったこと

はじめまして。
和(かず)と申します。

2024年1月から薬局ベンチャーへ就職して
開発エンジニアをしながら薬剤師として働いています。

今回は私がエンジニアになって最初に行ったことを紹介したいと思います。

# まず何をすればいいのか
現役エンジニアの方々が口を揃えていうのは
『まずは何か作ってみるといい』

とは言われても何をすればいいのかわからない。
何かを作る前に私がまず行なったことは2つあります

***
### 開発環境を構築する

私はDockerを利用した開発環境の整え方について勉強しました。
Dockerとは「コンテナ型の仮想環境を作成、共有、実行するためのプラットフォーム」です。

なんのことやらとわからない方
Dockerについて知りたい方は他の方の記事ですが[こちら](https://qiita.com/S4nTo/items/977d28b0eac316915702)をご確認ください

導入と学習のメリットとしては
ローカル環境を汚さずに、従来の仮想環境に比べて軽量に起動が可能となります。

学び方は本を買うでもWebサイトから学ぶでもなんでもいいと思います

元記事を表示

長距離ドライブをサポートするアプリを作成しました

## はじめに
こんにちは!
[ジョニー](https://x.com/johnny1_ryo) と申します。
未経験からエンジニア転職を目指して、日々学習をしています。

この度、[kodora-co-driver](https://www.kodora-co-driver.com/) を開発しました。

## サービス名 : kodora-co-driver
Image from Gyazo

▼ サービスURL

https://www.kodora-co-driver.com/

▼ Githubリポジトリ

https://github.com/johnny23ryo/kodora-Co-Driver-

## アプリ名の由来

アプリ名「kodora-co-driver

元記事を表示

【初心者向け】mapメソッドって何?

mapメソッドとは何なのか、どう使えばいいのかを簡単に紹介していきます。

# 基本的な用途
例えば、以下のような配列があるとします。
“` ruby
numbers = [1, 2, 3]
“`
この配列に収められた数字を、それぞれ2倍にしてみましょう。
単純に考えれば、以下のようなコードが思い浮かぶかもしれません。
“` ruby
doubled_number = numbers * 2
pp doubled_number
“`
しかし、変数doubled_numberの返却値は以下の通りになります。
“` ruby
[1, 2, 3, 1, 2, 3]
“`
数字ではなく、配列の中身そのものが2倍になってしまいました。
それではどうすればいいのか……。

こういう時こそmapメソッドの出番です。
基本的な使い方は以下の通りになります。
“` ruby
‘配列’.map {|’配列内の個々の要素’| ‘指示したい処理内容’}
“`

それでは早速、配列numbersの中に収められた数字をそれぞれ2倍にしてみましょう。
“` ruby
doubled_nu

元記事を表示

【Rails7】button_toの挙動の変更の対応

## 問題
Rails6.1までは、button_toで生成されるHTMLはinputタグでしたが、Rails7からbutton_toでHTMLのbuttonタグが生成されるようになりました。
これにより、アップデート前に設定していたinputタグのCSSやJavaScriptが効かなくなります。

## 解決方法
CSSなどのinputタグをbuttonタグに変更することで対応できますが、以下の設定をconfig/application.rbに入れることで、button_toがRails6.1までの挙動に戻ります。
“`ruby
class Application < Rails::Application config.action_view.button_to_generates_button_tag = false end ``` ## 参考 https://blog.saeloun.com/2021/08/24/rails-7-button-to-rendering/

元記事を表示

Railsでプロジェクトルートディレクトリのパスから辿れるようにする

# 概要
– スクリプトを実行するときに外部ファイルが必要な場合が多々ある
– どこに置く?となると、`~/tmp/` が良いんじゃなかろうかと
– https://railsdoc.com/rails_base
– スクリプトからどうやって取得する?で教えてもらった話の備忘録

# 結論

`Rails.root.join` を利用しましょう

“`ruby
csv_path = Rails.root.join(‘tmp’, ‘file_name.csv’)
“`

コンソールでいじるとこんなオブジェクトが返ってきます(僕の環境下ではDocker利用しており、プロジェクトルートディレクトリが`/app`にしているので、`/app`が表示されています)

“`ruby
$ rails console
[1] pry(main)> Rails.root
=> #
[2] pry(main)> Rails.root.join
=> #
[3] pry(main)> Rails.root.join(‘tmp’)
=>

元記事を表示

【RubKaigi2024】チャットを活用した参加方法はおススメ!

# はじめに
RubyKaigi2024(2024年5月15-17日)に参加しました。RubyKaigiへの参加は今回で2回目でした。[前回](https://qiita.com/Takaharu_01/items/fac8829bebd59c441308)はオンライン参加、今回はリアル参加(先輩と二人)でした。今回はチャットを繋げた状態で講演を聞くスタイルを取り、そのスタイルがあまりにもよかったので紹介します。

https://rubykaigi.org/2024/

# チャットを活用した方法
**①チャットはラインを利用し、常に連絡できる状態にする。**
**②講演が始まったら発表内容に関するメッセを送りあったり、終わったら感想を送る。**
たったこれだけですが、効果としては、
**①構えることなく楽しく講演を聞くことができた**
**②他の講演がどんな感じだったのか迅速に共有できた**
です。

# おわりに
今回は二人でリアル参加し、チャットを活用した方法で講演を聞きました。その結果、楽しく講演を聞くことができました。また、公演は各会場で開催されるので、「あっちの講演どうた

元記事を表示

Paizaのすゝめ

## paizaとは
実行環境構築いらずでブラウザ上でプログラミング言語を実行できます
https://paiza.jp/guide/works

## (自分的に)Paizaでできること
Rubyには便利なメソッドがたくさんあります。
しかし私にとってはそれらをすぐに使いこなすことができませんでした。
そんな私にとってPaizaはメソッドを「知る」・「使う」きっかけになります。
またプログラミングの基礎(条件分岐, 繰り返し処理, 配列処理)も学ぶことができます

## なぜPaizaを使用しようと思ったか
主な理由は2つあります
### コードを書くのが遅い
### 「知っている」けど使いこなせないメソッドたち
Rubyには便利なメソッドが数多く存在しますが、それらを使いこなすことができませんでした
例えば、filterメソッド(配列の中に条件が一致するものがあれば、一致したもののみの配列を返却するメソッド)
1度は使ったことがありますが、なぜ使用したのかやメソッドの理解が足りないためコードを書いているときに使用することができないことが多々ありました
これら2つを改善するために、毎

元記事を表示

[Ruby on Rails]enumerize gemでoptionsを絞り込みたい場合

## enumerize gemについて

Ruby on Railsでenumを使いたい時に便利なGem
https://github.com/brainspec/enumerize

ざっくり使い方

“`ruby
class User
extend Enumerize

enumerize :role, in: [:user, :admin, :staff]
end
“`

## 本題: optionsを絞り込みたい場合

enumerizeのoptionsを使用してkey, valueの構造を取得する場合に任意の項目を除外または指定した項目だけを取得したい場合には以下のように指定します。

### 除外したい場合

“`ruby
User.status.options(except: [:admin])
# => user, staffが取れる
“`

### 指定した項目だけ取得したい場合

“`ruby
User.status.options(only: [:user])
# => userのみが取れる
“`

## まとめ

以上、雑ですが忘れそうなの

元記事を表示

OTHERカテゴリの最新記事