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

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

【Ruby】ハッシュを使って条件分岐をスッキリさせよう

## これは何?

目の前にいる海外からやってきた人にあいさつしたいとき、ありますよね?
どうせあいさつするならその方の国の言語であいさつしたいものです。

相手の国に合わせたあいさつをするときに便利なのが、条件分岐です。
この条件分岐をスッキリ書く方法を学んだので、アウトプットします。

## やってみよう

レベル別に段階を踏んでやっていきます。

### if文

“`ruby
if country == ‘Japan’
hello = ‘こんにちは’
elsif country == ‘USA’
hello = ‘Hello’
elsif country == ‘France’
hello = ‘Bonjour’
elsif country == ‘Spain’
hello = ‘Hola’
elsif country == ‘China’
hello = ‘你好’
else
hello = ‘Hello’ # デフォルトの挨拶
end
“`

もっとも地道に書く方法として、if文があります。
でも、いちいち`elsif country ==`、`

元記事を表示

20240406 日記 pipenvについて、githubのlockについて

### pipenvについて

Pipfileというのがあって、そこに環境ごとに使うpipモジュールを書いていく
そして、`pipenv install` (`–dev`とかつけるとその環境用の)とすると、Pipfileに書かれたモジュールが閉じられた仮想環境向けにインストールされる、という仕組みらしい

これだけ聞くとrubyのbundlerに似てる、と思った。けどbundlerはグローバルにgemをインストールしてくる(`–path vender/bundle`とかでグローバルに入れない方法もあるのは知ってるけど)
Rubyではグローバルに入れる使い方だけど、それで問題になったことはない
一方pythonはなんとなく仮想環境つかってグローバルを汚染しないようにする、という感覚だったけど、何が違うのだろう?

と不思議におもったのでまずBundlerで調べると、まさに自分が思った通りのことをまとめてくれている方がいた
参考:[bundle install時に–path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみよう #Ruby – Qiita

元記事を表示

【Ruby】じゃんけんプログラム

# 仕様
– ユーザーにじゃんけんの手を選んでもらう。(0:グー、1:チョキ、2:パー)
– プログラム側では、ユーザーと勝負するじゃんけんの手をランダムに選ぶ。
– 「ユーザーが選んだじゃんけんの手」と「プログラムがランダムに選んだじゃんけんの手」を表示する。
– ユーザーが勝った場合は「あなたの勝ちです。」と表示する。
– ユーザーが負けた場合は「あなたの負けです。」と表示する。
– あいこの場合は 「あいこで」と表示させたあともう一度じゃんけんをさせる。
– あいこが3回続いた場合は、「3回あいこが続きました。また挑戦してください。」と表示させたあとにプログラムを終了させる。

# 自分のコードとChatGPTのコードの比較
### 自分のコード
“`ruby:janken
# 配列とあいこカウント用変数の定義
janken_hands = [“グー”, “チョキ”, “パー”]
aiko_count = 0

puts “最初はグー、じゃんけん…”

# 3回ループさせる
while aiko_count < 3 if aiko_count > 0
puts

元記事を表示

今更、Rails 6.0.3でRuby 2.6.6の環境構築

 Ruby on Railsなるものを勉強してみようと『パーフェクトRuby on Rails【増補改訂版】』に手を出しました。

 数年前の書籍だから完全に同じ環境を構築する必要も無さそうだけど、出来るだけ同じ環境で勉強してみることにしました。意外と手間が掛かったので記録しておきます。

 書籍の「Appendix Railsの開発環境構築」に関しては特に問題は無かったので省略して、Railsのversion 6.0.3をインストールする部分を説明していきます。

 まず普通に`gem install rails -v 6.0.3`をすると下記のようにnokogiriライブラリに関するエラーが出ます。
“` console
$ gem install rails -v 6.0.3
(中略)
Successfully installed activesupport-6.0.3
Building native extensions. This could take a while…
/home/user/.rbenv/versions/2.6.6/lib/ruby/2.6.0/ru

元記事を表示

Railsでの命名の単数複数形使い分け

### モデル名

– **形式**: 単数形
– **例**: User, Product, Order
– **理由**: モデルは1つのオブジェクトを表すため
– **参考コマンド**: “`rails generate model Post content:text“`
(postsテーブルにtext型のcontentカラムを作成)

### コントローラー名

– **形式**: 複数形
– **例**: UsersController, ProductsController, OrdersController
– **理由**: コントローラーは複数のリソース(モデルのインスタンス)を扱うため
– **参考コマンド**: “`rails generate controller Posts home about“`
(home,aboutアクションを持つPostsコントローラーを作成)

### テーブル名

– **形式**: 複数形
– **例**: users, products, orders
– **理由**: 1つのテーブルには複数のレコー

元記事を表示

【Rails】Ferrumを使ってHTMLをPDFへ変換してみた(wicked_pdfからの移行)

HTMLからPDFを生成する処理が上手く動かなくなってしまったため、
PDF生成ライブラリを`wicked_pdf`から`Ferrum`へ移行しました。
まだまだRails初心者なので、何か間違い等あればご指摘いただけると幸いです!

## HTMLからPDFの変換処理に定番だった`wicked_pdf`

上記の通り、PDF生成機能の実装によく使われていたかと思います。

今回、私はRailsのバージョンを6から7へ引き上げて動作確認を行なった際に、
既存で実装されているPDF生成機能が動かなくなっていることに気がつきました。
なお、既存の実装内容は、viewテンプレート(hogehoge.html.erb形式のファイル)から
`wicked_pdf`を使用してPDFへ変換処理を行っていました。

`wicked_pdf`自体は現在もサポートされているgemですが、
このgemは`wkhtmltopdf`というHTMLをPDFに変換するCLIツールに依存しています。
そして、この`wkhtmltopdf`は、2023年1月にGitHub上からリポジトリがアーカイブされており、開発終了

元記事を表示

tailwind cssを導入しているプロジェクトにSystemSpecを導入・実行したらエラーが出る

– Rails 7.1.2
– tailwind css
上記を用いて開発しているプロジェクトにおいて、ModelSpecは実行できるが、SystemSpec実行時にエラーが出る。

config/environments/production.rb
に以下を追記したら解決した記載があり、試したが効果なし
“`
config.assets.css_compressor = nil
“`
## 環境
Gemfile

“`
group :development, :test do
gem “debug”, platforms: %i[ mri windows ]
gem ‘rspec-rails’
gem “capybara”
gem “selenium-webdriver”
gem “webdriver”
gem ‘factory_bot_rails’
gem ‘faker’
end
“`

spec/rails_helper.rb
“`
config.before(:each, type: :system) do
driven_b

元記事を表示

macOS で glib2 gem がインストールできなかった

# はじめに

Ruby で pango や poppler といった gem を使っているが,最新版(4.2.2)をインストールしようとしたらエラーが出てインストールできなかった。

エラーをよく見ると,これらが依存している **glib2** gem のインストールでコケているのだった。

**最終的には解決した**のでその記録。

環境は以下のとおり。

* macOS Sonoma 14.3.1
* ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin20]

なお,poppler などの gem と,それが依存している glib2 gem のバージョンは揃っている(例えば poppler 4.2.2 は glib2 4.2.2 を使う)。

# glib2 のインストール失敗

“`terminal
gem install glib2
“`

とやったら以下のように出て,インストールに失敗する。

“`
ERROR: Error installing glib2:
ERROR: Failed to bui

元記事を表示

[マイグレーション]Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON columnの原因と解決策

# エラー文
テーブル作成のため、モデルとともに作成されたマイグレーションファイルに、型とカラム名を書き、`rails db:migrate`を実行した。

するとターミナルが以下のようなエラーを吐き出した。
“`terminal
xxxxxx@yyyyyy testApp % rails db:migrate
== 20240404111608 DeviseCreateUsers: migrating ================================
— create_table(:users)
rails aborted!
StandardError: An error has occurred, all later migrations canceled: (StandardError)

Mysql2::Error: BLOB, TEXT, GEOMETRY or JSON column ‘profile’ can’t have a default value
/Users/code/Desktop/xxxxx/project_2.0/testApp/db/

元記事を表示

Rubyのバージョンをアップグレードする方法

# はじめに
Rubyのバージョンをアップグレードする方法を記述します。
使用しているOSはMacOSです。
今回はHomebrewのインストールから、rbebvをインストール、それを用いてRubyのバージョンをアップグレードします。

# Homebrewをインストール
“`
$ /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)”
“`
わたくしの場合はここで2つのコマンドを実行しろと言われたので実行しました。

“`
$ echo ‘eval “$(/opt/homebrew/bin/brew shellenv)”‘ >> /Users/◯◯◯/.zprofile
$ eval “$(/opt/homebrew/bin/brew shellenv)”
“`

brew -v で確認してみると、
“`
$ brew -v
Homebrew 4.2.16
“`
インストール完了。

お次はrbenvをインストール。

“`
$ b

元記事を表示

【個人開発】自分以外の「死ぬまでにやりたいことリスト」が見れるサービスを作りました

# はじめに

皆さま、こんにちは、すみ([@sumisumi2000](https://twitter.com/sumisumi2000308)) と申します。
2024 年 1 月 20 日より、オンラインプログラミングスクール RUNTEQ にて、Ruby on Rails を学習しています。

2024 年 3 月 30 日にリリースしたアプリの紹介と開発の振り返りをまとめました!
アプリについての記事は初めてなので、温かい目で見ていただけると幸いです。

# 目次

1. [作成経緯](#作成経緯)
2. [アプリの紹介](#アプリの紹介)
3. [技術構成](#技術構成)
4. [こだわったポイント](#こだわったポイント)
5. [開発の流れ](#開発の流れ)
6. [改善点](#改善点)
7. [開発を振り返って](#開発を振り返って)

# 作成経緯

通っているオンラインプログラミングスクールで受講生がアプリを出し合おう!というイベントがあります。
そこに向けて、カリキュラムで行っていた Rails の復習と、カリキュラムであまり触れない CSS の学習を兼ねてア

元記事を表示

AtCoder Beginner Contest 347参戦記録(A~C問題)

RubyでAtCoderに参戦した記録です。
AB2完で、C問題はコンテスト終了後に解説を見てからコードを書きました。もっとC問題解けるようになりたい…!

## [ABC347 A Divisible](https://atcoder.jp/contests/abc347/tasks/abc347_a)
長さNの配列Aと正整数Kが渡されます。配列Aの中からKの倍数のみを全て取り出し、それぞれをKで割ったものを昇順で出力する問題です。

“`Ruby
n,k=gets.split(” “).map(&:to_i)
array=gets.split(” “).map(&:to_i).sort
result = array.select{|num| num % k == 0}
puts result.map{|s| s / k}.join(” “)
“`
問題文の通りに実装したという感じですね。

## [ABC347 B Substring](https://atcoder.jp/contests/abc347/tasks/abc347_b)
文字列Sが与えられ、その中に含まれる部

元記事を表示

M2 MacでRubyのバージョンアップ

ruby on rails の環境構築をしようとした際に、
## BUILD FAILED (macOS 14.3 on arm64 using ruby-build )
エラーに当たった。

原因は結局不明のままですが、とりあえず動かしたい人向けに記事を残します。

“`bash

(base) % brew -v
Homebrew 4.2.16
(base) % rbenv
rbenv 1.2.0
Usage: rbenv []

Some useful rbenv commands are:
commands List all available rbenv commands
local Set or show the local application-specific Ruby version
global Set or show the global Ruby version
shell Set or show the shell-specific Ruby version

元記事を表示

【RSpec】単体テストを完全理解する

# この記事を読んでほしい人
– Ruby on railsのテストコードをこれから学ぼうとしている人
– 単体テストコードで躓いた人
– 単体テストコードを勉強したけど、振り返ってより理解したい人

# この記事のゴール
以下を理解することができます。
– Rspecが何をしているのか
– モデルファイルの重要性
– 単体テストコードを書くには何を見れば良いのか

# Rspecとは
Rspecは、Ruby言語用のテストフレームワークです。
プログラムが**期待通りに動作することを確認するため**のテストコードを書くために使用されます。

>Rspecは「ビヘイビア駆動開発」(Behavior-Driven Development, BDD)の原則に基づいており、開発者が人間が読める形式でテストを記述できるように設計されています。これにより、テストコードが仕様書のように機能し、プログラムの振る舞いについての明確なドキュメントを提供します。

# Rspec何をするのか
モデルの単体テストは、モデルに書いたバリデーションが正しく働いているかを確認します。

### バリデーションの復習

元記事を表示

【Rails】GMOあおぞらネット銀行指定形式CSVエクスポートの実装

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。
駆け出しエンジニアとして働き始めて約1ヶ月が経過しました🐣

## 概要
業務内で、GMOあおぞらネット銀行指定形式のCSVファイルをエクスポートする機能を実装する必要がありましたが、
なかなか想定する形式で出力できず苦労したためまとめました✏️

### 環境
– Ruby 3.2.3
– Rails 7.1.3
– Importmap
– Tailwindcss、daisyUI
– PostgreSQL

:::note warn
間違っている箇所や、紹介した方法よりも良い方法があるかもしれませんので、その際は教えて頂けると嬉しいです🙇
:::

## エクスポート・インポートとは?
改めて言葉の定義を確認しておきます。
#### エクスポートとは
> あるソフトウェアで作成・編集したデータを他のソフトが読み込める形式に変換したり、そのような形式でファイルに保存することを指す。[1)](#引用記事)
#### インポートとは
> あるソ

元記事を表示

現場で使えるRuby on Rails5速習実践ガイドを読んで

## はじめに
現場で使えるRuby on Rails5速習実践ガイドを読んだので、感想などをまとめてみました。

## 良かったところ
実際にアプリを作成しながら機能の実装についてしっかり解説してあるので、非常にわかりやすかったです。またチーム開発の流れも書いてあって、未経験の方は実務の流れがイメージしやすいので、とても良いと思いました。

## 学んだこと
#### MVC
Railsでは、アプリケーションの構造や名前付けを、M(モデル)、V(ビュー)、C(コントローラ)の3つの要素に従ってます。

**モデル**とは、データとデータに関わるビジネスロック(アプリケーション特有の処理)をオブジェクトとして実装したもです。データベースの保存や読み込みもモデルが担当する。

**ビュー**とは、ブラウザに表示する画面、HTMLなどのHTTPレスポンスの中身を実際に組み立てる部分です。必要に応じてコントローラからモデルのオブジェクトなどを受け取り、画面表示に利用します。

**コントローラ**は、ユーザーが操作するブラウザなどのクライアントからのリクエストを受け、適切なレスポンスを作成す

元記事を表示

Rails:Sqlite3のタイムゾーン変更について

# 前提
使用フレームワーク: Ruby on Rals

作成したもの: railsを使ったごく単純な掲示版風アプリ(今回詳細は省きます)

使用DBエンジン: SQLite3(新規アプリ立ち上げ時のデフォルトのまま)

やりたいこと: デフォルトではレコードの作成日時と更新日時がUTC表記になっているので、テーブル上の表記をJSTに変更したい。

以下が作成したDBのスキーマ(後述のオチを知る前に作成したもの)
“`
## Table:posts
| Column Name | Data Type | Nullable |
|————-|———–|———-|
| title | string | |
| content | text | |
| created_at | datetime | false |
| updated_at | datetime | false |

“`
画像だと判別できませんが、created_atとupdated_

元記事を表示

Ruby On Railsにおける基本コマンド

# Ruby On Railsにおける基本コマンド

## 背景説明
プログラミングスクールで学んだ**Ruby on Rails**の基本操作方法をまとめる。
メモとして使う予定。
## アプリ作成。
webアプリケーションを作成するコマンド。アプリを作成したいフォルダーで実行。[^1]

[^1]:アプリの名前は**appName**にしています。
### 基本
“`
rails new appName
“`
### よく使うオプション
バージョン7.0.0、データベースにmysqlを指定
“`
rails _7.0.0_ new first_app -d mysql
“`
## コントローラー作成

コントローラーを作成するコマンド。[^2]

[^2]:コントローラーの名前は**mails**にしています。名前を必ず**複数形**にすること
“`
rails g controller mails
“`

## モデル作成
モデル作成するコマンド。[^3]

[^3]:モデルの名前は**mail**にしています。
“`
rails g model mail
“`

元記事を表示

テストコードのコツと注意点

## はじめに

新卒入社、おめでとうございます
テストコードの初歩的なTipsについてまとめてみました

## Tips

※ コード例はRuby(RSpec)を使用しています

以下のようなBooleanを返す処理に対するテストコードを考えます
`is_xxx?`では、判定処理`check_a?`・`check_b?`両方が**true**の場合に**true**が返されます

“`:ruby
class Test
def is_xxx?
check_a? && check_b?
end
end
“`

この場合、テストコードはこんな感じになると思います
“`:ruby
describe Test do
describe ‘#is_xxx?’ do
subject { instance.is_xxx? }

let(:instance) { described_class.new }
let(:a) { true }
let(:b) { true }

before do
allow(instan

元記事を表示

【個人開発】自転車好きのための投稿サービスを開発しました

## サービス概要
### サービス名 : 「ChariLog(チャリログ)

自慢のカスタムや友人とのツーリングなどの思い出を写真・カスタムパーツ(アイテム)と共に発信できる、 **自転車というツールに特化した投稿サービス**です。

![charilog-introduction-image](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3745701/3753f69c-60f0-4f44-70d6-6801f83f30ae.jpeg)
【サービスURL】https://charilog.jp
【Githubリポジトリ】https://github.com/kiyosan0517/charilog

## なぜそのサービスを作ろうと思ったのか
– **自転車の楽しさを共有できる友人づくりに多少苦労した経験があったため**
=> アメリカやヨーロッパ圏などではBMXやロードレース等を中心とした自転車競技がメジャースポーツとして発展しているものの、日本においては健康志向の中年層がメインに

元記事を表示

OTHERカテゴリの最新記事