Ruby関連のことを調べてみた2022年07月02日

Ruby関連のことを調べてみた2022年07月02日

わかりやすいプログラミング入門書だけで学ぶことの弊害

# わかりやすいプログラミング入門書だけで学ぶことの弊害

 わかりやすい入門書はすばらしい。私もそういう本を手にとって、プログラミング言語の全体像を大づかみにとらえる。こうした入門書だけでも、ある程度のものが作れるようになるくらい最近は良い本が多い。しかしここであえてこう言いたい。それらの入門書には共通した欠点がある。
 経験を積んでも、あるときエンジニアは壁にぶつかる。その壁を越えられるか越えられないかの差を生むのは、入門書が与えてくれた方便的説明のわかりやすさが覆い隠している、むき出しのプログラミング言語仕様の奥深さ、コンピュータの動作原理だ。いや、無論そのようなものを意識しなくてもある程度のシステムを不自由なく作っていく事はできる。しかし、それだけではエンジニアとしての成長はいつまでもそこで止まったままだ。

# わかりやすいプログラミング入門書のわかりやすい説明とは

 しかし、上の説明は抽象的すぎて具体的には何を言っているのか伝わらなかっただろう。大丈夫、今から具体例を挙げて説明を掘り下げていく。プログラミング入門書の方便的な説明とは、たとえばこういうことだ。
![変数a.

元記事を表示

【Rails】gemアップデート時の依存関係の調べ方(Bundler attempted to update GEMNAME but its version stayed the same)

## はじめに
未経験からエンジニアに転職して、3ヶ月ほど経つエンジニアです。

今回は業務でgemをアップデートするときに詰まった
**gemアップデート時の依存関係の調べ**をテーマに書きます。
↓の警告がでて、gemをアップデートできない場合のアプローチについてです。
~~~
Bundler attempted to update GEMNAME but its version stayed the same
~~~

## 結論
https://rubygems.org/

– ↑で該当のgemを探す
– 依存関係を調べる

## 依存関係の例

例として、faradayというgemの依存関係を見ていきます。

https://github.com/lostisland/faraday

~~~Gemfile.lock
faraday (1.10.0) # 最新の2.3.0にしたい
~~~

~~~
$ bundle update faraday
~~~

上記コマンドでgemをアップデートしようとするも、警告が出てアップデートできません。
~~~
Bundler atte

元記事を表示

RailsでのDB接続エラー

# エラー
AWS CodeBuild上でAurora(MySQL)に接続してrails db:migrateしようとすると、Access Denied。
この問題を解決するのにかなりの時間を費やしたので、メモ + 共有。

# 検証 + 解決方法
– そもそもDBは起動しているか。
– ネットワークとして、互いに接続できる状態か。(セキュリティグループ設定が正しいか)
– MySQLクライアントでDBに接続できるか。
“`bash
mysql -h <ホスト> -u –password=
“`
– DBホストを名前解決できているか。
“`bash
nsloolup <ホスト>
“`
– DBから応答はあるか。(CodeBuildで実行)
“`bash
mysqladmin ping -h <ホスト> -u –password=
“`

私の場合、以上に関しては問題が無かった。
そのため、Railsの設定のどこかが間違っているのだろうと当たりをつけることができた。

– Ra

元記事を表示

管理者ユーザー機能の実装[Ruby, Rails]

初めまして、プログラミング初学者”fujitacoma”です!

4月からプログラミングスクールで学習を始めておりましたが、
遅ればせながらのQiita初投稿です。

今回は、現在開発中のオリジナルアプリにて簡単な管理者機能を実装しましたので、
その流れを説明していきたいと思います!

# はじめに

今回使用するGemはdeviseのみです。
deviseのインストール及び、usersテーブル作成後から説明したいと思います。

# 管理者(admin)を追加する

まずはじめに、作成したusersテーブルに管理者(admin)を追加します。

“`

#ターミナル
rails g migration AddAdminToUsers

“`
この記述の命名規則は、キャメルケース、、でしたかね。
大文字と小文字ががラクダのコブのように続く=キャメルケース
って感じで覚えた気がします。

続いて、作成されたマイグレーションファイルにカラムの情報を追加していきます。
このとき、カラムの型はboolean型、デフォルトは0とします。

“`

#migrationファイル
class

元記事を表示

Rubyの実行

progateなどで書き方はわかったけど、実際どうやって実行するのか知らなかったので

## 1. Rubyのインストール
## 2. gemのインストール
## 3. .rbファイルの作成
## 4. 使用するgemを記述
“`
require ‘gem名’
“`
## 5. プログラムを記述
## 6. ターミナルから実行
“`
$ ruby ファイル名.rb
“`
Railsを使うまでもない簡単なプログラムはこれでおk

元記事を表示

未経験の新人でも1ヶ月で「使える」人材に育てる仮想プロジェクト型研修(後編)

## これまでのあらすじ

当社では開発未経験の新人さんが入ってくると、
研修の一環として仮想の開発プロジェクトを立ち上げて、
仕様決めからリリースまでの一連の開発作業を体験してもらっています。

計画する、コードを書く、ツールを使う、わからない事を調べる、周りに聞く、トラブルシューティングする、
といった開発における一連の流れを経験してもらいます。

ただ単に知識として理解するというよりも、
経験することでより深く理解してもらえると考えています。

前編では、仮想プロジェクトの入る前の準備や、プロジェクト始動時に、
新人達・先輩達がそれぞれどういったことを行うかを説明しました。

[前編はこちら](https://qiita.com/tatsumi_t2/items/7c5ceca6f354ba21c2eb)

## 後編では

仮想プロジェクトを日々どんな風に進めるのか、リリースまでの話しをしたいと思います。

# 日々の開発作業

## コーディング

新人さんたちの思うように自由に書いてもらいます。
質問されたり、コードを見せてもらった時に、良い書き方を教えることはありますが

元記事を表示

rails + postgresql + dockerでのコンテナ作成

初投稿のため、問題点、改善点などありましたら
是非ご連絡いただけると幸いです!

# 各ファイルコード
“`Dockerfile:Dockerfile
FROM ruby:3.0.1

# yarnパッケージ管理ツールをインストール
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && \
echo “deb https://dl.yarnpkg.com/debian/ stable main” | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn

RUN apt-get install -y nodejs npm && npm install n -g && n 14.19.1
RUN mkdir /app_name
WORKDI

元記事を表示

【Ruby】Minitestでスタブを使う(stub/stub_any_instance)

# はじめに

スタブ(stub)とは、テスト中で呼ばれるメソッド処理の代用品のようなものです。
テストで呼ばれるメソッドの処理を指定した処理で置き換えることができます。
「外部サービスの呼び出し処理などを置き換えることによって仮状態で動かして、本当にテストしたい部分へ簡易的に辿りつきたい」といったときによくスタブを使います。

以下では例として次のような`SampleService`のテストを作成することを考えます。

“`ruby
class SampleService
def initialize; end

def call
is_error1 = call_api1
is_error2 = CallApi2Service.new.call
return ‘error!’ if is_error1 || is_error2

‘success!’
end

private

def call_api1
# 外部API1の呼び出し処理
end
end
“`
“`ruby
class CallApi2Servic

元記事を表示

【Ruby】文字列を部分的に抽出・削除するメソッドまとめ

# String#[]

文字列の範囲を指定して部分文字列を取り出す。

“`ruby
str = ‘sample_string’
str[0] #=> “s”
str[1, 3] #=> “amp”
str[2..5] #=> “mple”
“`

**String#slice**も同様。

“`ruby
str = ‘sample_string’
str.slice(0) #=> “s”
str.slice(1, 3) #=> “amp”
str.slice(2..5) #=> “mple”
“`

正規表現による指定もできる。

“`ruby
str = ‘sample_string’
str[/a.+l/] #=> “ampl”
str.slice(/a.+l/) #=> “ampl”
“`

# String#match

指定した正規表現にマッチした部分を取得する。
**正規表現マッチを扱うクラス(MatchData)のインスタンスが返却される。**
第二引数によりマッチの開始位置を制御できる。

“`ruby
str = ‘sample_string’
st

元記事を表示

Rails 5.2系から6系へアップデートする際の落とし穴

## 内容
Rails 5.2系から6系へアップデートをした際に、`ActionView::Template::Error invalid base64` エラーが発生してしまう

## 結論
CSRFトークンのフォーマットの違いが原因で発生するエラー

Rails 5.2.5ではCSRFトークンのフォーマットにbase64_urlsafeを利用しているのですが、Rails 6.0系ではbase64_strictを利用している、この違いによってArgumentErrorが起きるようです

## 原因
Rails6.0系のアップデートで、フォーマット方式を変更できるオプションを用意しないまま、フォーマット方式が強制的に変わってしまった
それにより、base64_urlsafeをデコードできずに、エラーが発生してしまう

“`
rails: 5.2.5 -> 6.0.x
CSRF Token format: base64_urlsafe → base64_strict
“`

https://github.com/rails/rails/issues/41783

## 解決法

元記事を表示

Rubyで半角小文字カナを半角カナに変換

## はじめに
半角小文字カナから半角カナへ変換する必要があったので対応をメモとして残します

半角カナ→全角カナへの変換は色々と情報があったが、半角小文字カナ→半角カナへの変換はあまり情報がなかったので、同じような実装をする方の参考になればと思います

## 実装方法
gsub!メソッドのパターンマッチを使って変換機能を実装

https://docs.ruby-lang.org/ja/latest/method/String/i/gsub=21.html
> gsub!メソッドは、文字列中の pattern にマッチした部分をキーにしてhashを引いた値で置き換えすることができる

上記のhashを用いての変換を使用

## 実装例
“`rb
PATTERN = { “ァ” => “ア”, “ィ” => “イ”, “ゥ” => “ウ”, “ェ” => “エ”, “ォ” => “オ”, “ッ” => “ツ”, “ャ” => “ヤ”, “ュ” => “ユ”,
“ョ” => “ヨ”, “ー” => “-” }.freeze

## 半角小文字カナを設定
str = “ァィゥェォ”

元記事を表示

TracePointの不可能を可能にする裏技

# TracePointの弱点

Ruby組み込みのクラス`TracePoint`は非常に便利ですが、
**Cで定義されたメソッドはフックできない**という弱点があります。

“`rb
target = ::Class.instance_method(:attr_accessor)

TracePoint.new(:call) do |tp|
p tp
end.enable(target: target) do
class Foo
attr_accessor :foo
end
class Bar
attr_accessor :bar
end
end
#=> :212:in `enable’: specified target is not supported (ArgumentError)
“`

これは[ドキュメント](https://docs.ruby-lang.org/en/3.1/TracePoint.html#method-i-enable)にも記載があります。

> `target` sho

元記事を表示

statusがupのmigrationファイルはmigrateされない

railsでmodelを作成してmigrateして、、、を盲目的におこなっていたのでmigrationファイルのstatusについてまとめます。

# migration statusについて
“`$ rails db:migrate:status“`で確認することができます。
statusがupのものはmigration済でmigrateされません。逆にdownのものがmigrateされてschema.rbに反映されます。
schemaに反映されたものは以下の三箇所で使われる。

– ActiveRecord::Railtieのinitializer
– ActiveRecord::Tasks::DatabaseTasks
– active_record/railties/databases.rake

# 本番環境で躓いた
私自身、ローカルで盲目的にrails db:migrateしており、本番環境でtableが作成されないことがありました。
ここら辺は学ばないと確実に躓きそうなポイントだと思ったので記事にしました。

元記事を表示

[Rails]path指定してJSONを取得する方法

railsで開発をしていたときに
ローカルでは正しくJSONファイルを読み込めているが、本番環境でRoutingエラーになる事案が発生しました。

# やりたかったこと
ページの最初の挙動としてロゴをアニメーションで表示することでした。
“`
var title_animation = {
wrapper: title_dom,
animType: ‘svg’,
prerender: true,
loop: true,
autoplay: true,
path: ‘/logo_animation’
};
“`
jsファイル内でイベントの設定を記述。
ロゴアニメーションをJSONファイルに変換したものをpathで読み込んでいました。

# エラー内容
開発環境では正しく動いていたものの、GCP cloud runにデプロイした途端に問題発生。
devツールで確認したところ、JSONの取得が404エラーになっており、実際にURLを入力したところRoutingエラーでした。

![スクリーンショット 2022-06-30 11.00.23.png](https:

元記事を表示

Railsのpluckメソッドって便利だなーの話

#### はじめに
実務でcontrollerからviewへ値を渡すときに悩んでいたら先輩からpluckメソッドを使うといいよと言われました。
プログラミングスクール時代には学習しておらす、実際に使ってみて「あっ便利だ!」と思いましたので備忘録として残したいと思います。
なお、学習のためにcontrollerからviewへ値を渡す際にかなりまわりくどい書き方をしていますのでご了承ください。
おかしな点等は教えていただけるとありがたいです。

#### 環境
Ruby 2.6.5
Rails 6.0.5

#### pluckとは
pluckとは英語で「摘みとる」という意味らしいです。なんか残酷な・・・。
おそらくオブジェクトから値を摘み取っていくということなんでしょうね。
そんなことは置いといて調べてみると

>pluckメソッドとは、引数に指定したカラムの値を配列で返してくれるメソッドです。
>上記の様にmapメソッドに置き換える事が可能ですが、返り値を配列として取得する場合は、pluckメソッドを使った方がシンプルに記述することが出来ます。

と書かれています。うん、うんそういう

元記事を表示

?【メモ】Railsの基礎中の基礎の用語集②

# はじめに
前回に引き続き、今回も基礎的な用語のアウトプットを行います。

# 運用環境
運用環境とはシステムをどこで使用するか定められている環境のこと。3つの種類がある。
| 運用環境 | 通称 | 概要 |
|:-|:-|:-|
| development | 開発環境 | 主にアプリケーションを開発する際に使用する環境 |
| test | テスト環境 | アプリケーションの動作をテストする際に使用する環境 |
| production | 本番環境 | アプリケーションを実際にリリースする際に使用する環境 |

なぜこのように環境を分けるのかというと、環境ごとに必要な設定が多く存在するためである。
例えば、開発環境では「バグを探しやすいツール」を導入したほうが便利だが、本番環境ではアプリケーションのパフォーマンスを上げるために、余分なツールは使わないほうが適切である場合などがあるため。
Railsでは`database.yml`を編集することで、データベースの設定を運用環境ごとに変更できる。

# ライブラリ
他のプログラムと合わせて使用するために、複雑なプ

元記事を表示

Javaで実装されていたシステムをRubyに移行した話

https://tech.speee.jp/entry/java-to-ruby

元記事を表示

クラスメソッドとインスタンスメソッド

# クラスメソッドとインスタンスメソッドについての気づきたち
## クラスメソッドの定義方法
“`rb
class User
def self.greeting
puts “クラスメソッドへようこそ”
end
end
“`
– **メソッドの前に`self.`を指定**
## インスタンスメソッド
“`rb
class User
def greeting
puts “インスタンスメソッドへようこそ”
end
end
“`
## 使い分け
:::note info
クラスメソッド:クラス全体に関係する処理で使用する
:::
:::note warn
インスタンスメソッド:インスタンスに対して個別的に適用したい処理で使用する
:::

## ⚠️
クラスメソッド・インスタンスメソッドに関する知識は、ここに蓄積していくため、編集・追記が多くなると思いますが、ご容赦ください・・・・

元記事を表示

Rails APIのSerializerで、任意のキーを指定する方法

実務にあたっている中で、気になったので、備忘録的に示しておく。
思いつきで、つらつらと書いた。

### 大きくわけて3つある

### 1 key で指定する
“`ruby
class PostSerializer < ActiveModel::Serializer attributes :id, :title attribute :body, key: :post_body end ``` ### 2 メソッド ```ruby class PostSerializer < ActiveModel::Serializer attributes :id, :title   def post_body   object.body end end ``` ### 3 ブロック ```ruby class PostSerializer < ActiveModel::Serializer attributes :id, :title   attribute :post_body do object.body end end ``` ### cf

元記事を表示

Railsでデータをランダムに1つだけ取り出す方法

## はじめに
プログラミング初学者の自分用アウトプットです。
誤った知識や記述があれば教えていただけると幸いです。

## 開発環境
– ruby2.6.3
– rails6.1.4

## やりたいこと
データベースに投入したデータからランダムにデータを1つだけ取り出して表示したい。

## 試したこと

① RANDOM()を使用
“`posts_controller.rb
@post = Post.order(“RANDOM()”).first
“`
しかし上記では本番環境(MySQL)では動かない。
本番環境用にRANDOM()➡︎RAND()へ変更すると今度はローカル環境で動かない…

② shuffleを使用
“`posts_controller.rb
@post = Post.all.shuffle.first
“`
上記の記述でうまくいきました!

元記事を表示

OTHERカテゴリの最新記事