- 0.1. RubyとRailsのバージョンアップで苦労したこと(Gem編)
- 0.2. 【Ruby】名鉄津島線の準急・急行・特急停車駅判定
- 0.3. プログラミング教材で作ったチャットアプリに機能追加してみた
- 0.4. Rubyの基本(ハッシュ)
- 0.5. Docker+IRuby(rubydata/datascience-notebook)にgemを追加して使う
- 0.6. Rubyの基本(配列 Part2)
- 0.7. RubyでGoogle Places APIをフル活用!簡単スタートガイド
- 0.8. Optparseの基本的な使い方について
- 0.9. Railsで特定のコールバックを条件付きでスキップする方法
- 0.10. Rubyのライブラリについて
- 0.11. form_withのlocal:trueに関して
- 1. prohibited this task from being saved:
RubyとRailsのバージョンアップで苦労したこと(Gem編)
依頼いただいて久しぶりに言語とFWのバージョンアップの対応を行ったので、苦労した点などを。
PHP(4->5)などのバージョンアップぐらいしか経験がなかったので不安でしたが、なんとかなりました。
### バージョン情報
#### 元のバージョン
– Ruby
– 2.7.4
– Rails
– 6.1.4#### アップしたバージョン
– Ruby
– 3.2.2
– Rails
– 7.1.3### やる前に想定していたこと
– 最近参画したプロダクトで知らない箇所しかないので苦労するだろうなぁ
– メジャーバージョンを上げるから、コードの書き方が変わる箇所も多々あるだろうなぁ
– メソッドとかのDeprecateのWarningとかもすごいだろうなぁ
– 設定とかも大きく変わるだろうから、精査しないといけないな
– Gemとかそのままだと動かないものがあるからバージョンアップ必要だろうなぁ
– Gemもそもそも更新止まっていて、更新できないものもあるんじゃないかなぁ
– リリース後にトラブルがあった時に戻す
【Ruby】名鉄津島線の準急・急行・特急停車駅判定
名鉄津島線の急行停車駅判定プログラムを作りました。
“`ruby
# 名鉄津島線の急行停車駅(準急・特急も同じ)駅名表示tsushima_line_data = [“須ヶ口”,”甚目寺”,”七宝”,”木田”,”青塚”,”勝幡”,”藤浪”,”津島”]
express_stop_data = [“須ヶ口”,”甚目寺”,”木田”,”勝幡”,”津島”]
station_num = tsushima_line_data.length
express_stop_num = express_stop_data.lengthfor i in 0…station_num do
station_info = tsushima_line_data[i]
express_stop_flag = express_stop_data.index(station_info)
# print(express_stop_flag)
if express_stop_flag == nil then
puts “#{station_info}駅は急行停車駅ではありません”
el
プログラミング教材で作ったチャットアプリに機能追加してみた
# はじめに
[こちら](https://www.techpit.jp/courses/195)の講座でチャットアプリを作成したので、追加のお勉強としてメッセージの削除機能を追加してみました。自分の備忘録を兼ねてやったことをメモ的に書いておきます。# 環境
“`
OS:MacOS 14.1.1(Sonoma)
Ruby:2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin23]
Vue.js:@vue/cli 5.0.8
“`# 仕様
* メッセージごとに削除ボタンを表示し、クリックすると該当メッセージが削除される
* 削除対象はチャットにログインしている本人が送信したメッセージのみ
* 他人のメッセージには削除ボタンを表示させない
* メッセージ削除に成功するとメッセージ一覧が再取得され、削除したメッセージは画面から消える# ルートを設定する
* メッセージ削除のルートを追加します
“`config/routes.rb
resources :messages, only: [‘index’, ‘d
Rubyの基本(ハッシュ)
# ハッシュの定義
キーと値(バリュー)の組み合わせが重要なデータはハッシュで管理する。
“`ruby:sample_01.rb
# ハッシュの定義
scores = {english: 80, math: 70}
p scores
# {:english=>80, :math=>70}# 特定のキーの値の更新
scores[:english] = 90
p scores[:english]
# 90# データの追加
scores[:physics] = 50
scores.delete(:math)
p scores
# {:english=>90, :physics=>50}
“`# ハッシュについて調べる
ハッシュについて調べる方法には以下のようなものがある。
“`ruby:sample_02.rb
scores = {english: 80, math: 70}# 文字数
p scores.length
# 2
p scores.size
# 2# キーや値の存在確認
p scores.has_key?(:physics)
# false
p scor
Docker+IRuby(rubydata/datascience-notebook)にgemを追加して使う
Docker イメージ [rubydata/datascience-notebook](https://hub.docker.com/r/rubydata/datascience-notebook) にはデータサイエンス関連の gem があらかじめインストール済みになっていますが、それ以外の gem を使いたい場合の手順です。
単に Dockerfile に追記すればいいだけなんですが、「Docker + IRuby 使ってみたいけどまだ Docker についてよく知らない」みたいな人もいるかなと思ってメモしてみます。
—
使いたい gem が追加されていない状態だとこうなりますね(素の `rubydata/datascience-notebook` を使った場合)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234055/812a515b-6122-85ea-886f-0824cf75b8ae.png)
今回は例として [svg-graph](https://ruby
Rubyの基本(配列 Part2)
# `map`による配列の操作
配列を操作する方法として、`each`メソッド以外に`map`メソッドを使う方法がある。
以下の例のように、配列の各値に5ずつ足すとき、`each`メソッドでは空の配列を用意してからその配列に追加するが、`map`メソッドでは新しい配列にそのまま代入できるため、`each`メソッドに比べより簡潔に書くことができる。
また、元の配列を直接更新することも可能。
“`ruby:sample_01.rb
scores = [70, 90, 80]# eachの場合
updated_scores_01 = []
scores.each do |score|
updated_scores_01 << score + 5 end p updated_scores_01 # 出力:[75, 95, 85] # mapの場合 updated_scores_02 = scores.map do |score| score + 5 end p updated_scores_02 # 出力:[75, 95, 85] # 元のデータを直接更新 scores.ma
RubyでGoogle Places APIをフル活用!簡単スタートガイド
# Google Places APIとは
Google Places APIは、Googleのデータベースを使いあらゆる場所や施設を検索し、取得することができるAPIです。
このAPIを使用することで、位置情報や検索クエリに基づいてスポットを検索したりすることができます。## Google Places APIキーの取得
Google Places APIを使用するには、APIキーが必要です。### 1.Google Cloudプロジェクトの作成
Google Cloud ConsoleでAPIキーを紐付けるためのプロジェクトを作成します。まずは以下の公式サイトにアクセスします。
https://console.cloud.google.com/
**プロジェクトを作成または選択**を選択します。
![create-or-select-project.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458297/743b11da-6c5c-c9f9-0411-6395d7ec0947.p
Optparseの基本的な使い方について
## はじめに
今回はOptparseとは何か、Optparseの基本的な使い方について記載していきます。## Optparseとは
Optparseとは`コマンドラインでのオプションを取り扱うためのライブラリ`です。
Optparseを使うことで、例えば入力されたオプションの引数を取得→取得した引数をどうこうするといったことができるようになります。
私が使用した例だと、コマンドラインの引数に指定された月のカレンダーを表示するというところでOptparseを使用しました。“`
# オプション・・・-m
# -mの引数・・・9
$ ruby calendar.rb -m 9
“`# 使い方
“`
# ①ライブラリ読み込み
require ‘optparse’# ②OptionParser オブジェクト opt を生成
opt = OptionParser.new# オプションを取り扱うブロックを opt に登録
# 引数が指定された時の処理をブロック{}で記載
opt.on(‘-a’) {|v| p v }
opt.on(‘-b’) {|v| p v }
Railsで特定のコールバックを条件付きでスキップする方法
## 事象
`Rails` アプリケーションにおいて、モデルの `save!` メソッドを使ってデータを生成または更新する際、`before_save` や `after_save` コールバックを用いてデータ更新前とデータ更新後の処理を定義することが一般的です。しかし、特定のビジネスロジックの要件により、`after_save` の処理を条件付きでスキップしたい場合があります。例えば、バッチ処理中には特定のデータ更新後の処理を行いたくない、または特定の条件下でのみ処理を実行したい場合などです。
## 対処法
このような特定の条件下でコールバックをスキップするには、`attr_accessor` を使用してフラグを設定し、そのフラグに基づいてコールバック内の処理を実行するかどうかを制御します。以下はその具体的な実装例です。
“`rb:custom_task.rake
namespace :custom_namespace do
desc ‘特定の処理を実行する’
task custom_task: :environment do
Model.find_each
Rubyのライブラリについて
## ライブラリとは?
ライブラリは、特定の機能を実現するためのプログラムを部品化し、再利用可能な形式にしたものです。ライブラリを活用することで、さまざまな機能を追加できるようになります。## ライブラリの種類
ライブラリは大きく3種類あります。– **組み込みライブラリ**
Ruby言語自体に最初から組み込まれているライブラリです。これらのライブラリはRubyの標準機能として提供され、追加の設定やインストールは不要です。<例>
– String
splitなど文字列の操作や処理を行うためのメソッドを提供します。– Array
push、popなど配列を操作するためのメソッドを提供します。– **標準ライブラリ**
Ruby言語には標準的なライブラリが含まれていますが、組み込みライブラリではないものです。これらのライブラリはRubyの標準インストールに含まれていますが、必要に応じて手動で読み込む必要があります。<例>
– Date
日付や時間を表現し、操作するためのクラスやメソッドを提供します。
– File
form_withのlocal:trueに関して
## はじめに
スクールの課題で、タスク管理アプリを作成しているときに、バリデーションが反映されない事象がありました。Railsのコンソールで、確認するとたしかにバリデーションのメッセージは出るのに、実際にブラウザ画面では出ませんでした。解決したのですが、備忘録として共有させていただきます。修正や追加等ありましたら、コメントいただけるとありがたいです。## 環境
・MacBookAir 13インチ M1(2020)
・OS:Sonoma 14.3
・メモリ:16GB
・Rails: version 6.1.7.6## エラーメッセージが出ない
“`Rails
<%= form_with(model: task) do |form| %>
<% if task.errors.any? %><%= pluralize(task.errors.count, "error") %> prohibited this task from being saved:
“`
taskの新規activerecord.ja.ymlファイルの便利さ
## はじめに
Railsで簡単な掲示板サイトを作っていた時に、ページ(今回はプロフィール画面)のカラムが期待通りに表示されておらず、なかなか原因が分からなかった事がありました。
## 環境
ruby 3.14
rails 7.0.3.1
## 目次
事例
activerecord.ja.ymlファイル
別の方法
まとめ## 事例
Railsで簡単な掲示板サイトを作っていた時に、profileページが期待通りに表示されませんでした。![qiita1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3726578/8a8764e4-651a-7673-9c44-ea758a58d44d.png)
メールアドレスや氏名がちゃんと表示されているにも関わらず、アバターだけがAvatarと英語表記になってしまっています。
profiles/edit.html.erb
“`<%= form.label :last_name %>
<%= form.Rubyの基本(配列 Part1)
# 配列の作成
順序が重要なデータは配列で管理する。
「puts」ならば値を順番に表示、「p」ならばリテラル表現で表示される。
「length」や「size」で格納されている値の個数を調べることができる。
“`ruby:sample_01.rb
scores = [70, 90, 80]# 値を順番に表示(改行付き)
puts scores
=begin
70
90
80
=end# リテラル表現
p scores # [70, 90, 80]# length も size も使用可能
p scores.length # 3
p scores.size # 3
“`# 配列の操作
配列に対しては、値の挿入、配列同士の連結、値の削除ができる。
“`ruby:sample_02.rb
# 値の挿入
scores = [70, 90, 80]
scores << 85 p scores # [70, 90, 80, 85] # 配列同士の連結 more_scores = [40, 50] scores += more_scores p scores # [70, 90【マイグレーションファイル】削除の方法【rails】
マイグレーションの削除で6時間ほどかかってしまったため今後の備忘録として。
DBeaver にテーブルが登録されないため
一度手動で消してしまったのが運の尽き。VSコードのマイグレーションは難なく消去できたがDBeaver 内は外部キーがあったせいで削除できず。:skull:
しかし解決策として
・マイグレーションファイルの順序を変更
・NO FILEの解消
が解決策として有効だと学んだマイグレーションファイルの順序として
**メイン、親となるものが先にくることが判明**例えば
“`ruby
class CreateOrders < ActiveRecord::Migration[7.0] def change create_table :orders do |t| t.references :item_id, null: false, foreign_key: true t.references :user_id, null: false, foreign_key: true t.timestamps eRspecでモックを使用してテストを書いてみた
## mocksを使用した経緯
テストしたいクラスが、S3バケットへの署名付きURLの発行やCSVの生成などのために複数のクラスとの依存関係にあり、単独でテストをする必要があったため使用しました。## 参考にした記事
https://qiita.com/k-o-u/items/e6f671a1fc0bf720932dhttps://zenn.dev/sa2knight/articles/2388ecadc82b98
## mocksの基本について
ほぼほぼ上記の記事と同じ内容ではありますが、
“`hoge_spec.rb
let(:class_a) { instance_double(ClassA) }
“`
これでClassAのテストダブル(影武者)のclass_aが作成できます。
しかし、このままではこのclass_aはメソッドなどは何も持っていないので情報を付与する必要があります。“`hoge_spec.rb
allow(ClassA).to receive(:new).and_return(class_a)
allow(class_a).to|| 論理演算子でこれを使う場合
“`ruby:
A || B
“`
の場合を考察「||」はプログラミングでは**または**を意味する
例
“`ruby:
Aが真 || Bが偽
“`
の場合はAが真のため条件全体はtrue“`ruby:
Aが偽 || Bが真
“`
こちらもBが真であるためtrueが返るA,Bどちらも真の場合はもちろんtrue
A,Bどちらも偽の場合はもちろんfalseこのように「||」は右辺か左辺のどちらかが真であれば条件全体が**true**となる
[Ruby]solid原則をポケモンで考えてみる
# はじめに
先日、チーム内で質問会を実施しました。私が担当したのは、「**SOLID原則について、それぞれの原則の考え方について解説して欲しい**」というものです。ポケモンでsolid原則を考えてみたので、それを紹介したいと思います。## いいコードとは
solid原則について解説したいとありますが、その前になぜsolid原則が必要になってくるのか考える必要があると思います。まず前提として、日々コードを書くうえで下記のようなコードになるように意識する必要があります。
– 保守性が高い
– 無駄な部分がない
– 拡張しやすい他にも色々あると思いますが、今回は省略します。どれも大切ですが、具体的にどうすれば上記の項目を意識してコードを書けるのか気になりますよね。そこでsolid原則が役に立ちます。
### そもそもsolid原則とは
ソフトウェアの拡張性や保守性を高めるためのもので、具体的には5個の原則の頭文字を取ってきたものです。
それぞれの原則を目次に乗っ取って**ざっくり**解説します。S(Single Responsibility) 単一責任の原則
O (Open-C【RuboCop】Rubyを用いたプロダクト開発で役立つ、RuboCop 運用改善方法【レベル別】
# はじめに
この記事は、Ruby を用いたプロダクト開発において、どのように RuboCop の運用のレベルを上げていくといいか、そのアイデアをレベル別に紹介する記事です。RuboCop を導入したけど莫大な `.rubocop_todo.yml` が減らずに困っている方や、これから RuboCop を導入しようと考えている方の役に立てば幸いです。
# RuboCopとは
![rubo-logo-horizontal-white.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/06ff0014-23d3-6f23-3699-7db6662e5e20.png)
https://github.com/rubocop/rubocop
RuboCop とは、 Ruby のコードを解析して、よくない書き方をしている場合に警告してくれるツールです。
Ruby は自由度が高い言語なので、同じ内容のプログラム様々な書き方で記述可能です。ですが、チーム開発などで複数人で Ruby を使った開発を
Rubyの基本(制御構造 Part2 と メソッド)
# for文による条件分岐(続き)
for文の中で処理を中断したり、次のループに移る処理を加えることができる。
“`ruby:sample_01.rb
money = 100
for year in 1..30
money *= 1.05
# 「money」の値が300を超えたら処理終了
break if money > 300
# 「money」の値が200未満の場合は次のループ文にスキップ
next if money < 200 puts "Year #{year}: #{money}" end ``` 以下に注意 break:反復処理全体を終了させる命令。 next:次の反復処理に移る命令。 # 三項演算子 Excelにおけるif文と似ており、構文としては、「条件 ? [trueの場合の処理] : [falseの場合の処理]」となる。 ```ruby:sample_02.rb score = gets.to_i result = score > 80 ? “A” : “B”
puts result
“`# メソッドの実装
Rubyのメソッドでは最rails db:migrate マイグレーションの種類とエラー
“`ruby
rails db:migrate
“`
データーベースを作るの意味“`ruby
rails db:rollback
“`
データーべースに作ったカラム(名前)などの追加や編集をしたい場合にロールバックをして1度戻す
その後再度rails db:migrate をするそして今回のエラーですが
db>migrate内にあるactiverecord内で
“`rubydef change
create_table :addresses do |t|
t.string :zip_code, null: false
t.references :region_of_shipping_origin_id, null: false
t.string :city, null: false
t.string :street_add関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた