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

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

Flutter環境構築のためのCocoaPods・Rubyのダウンロード

Flutterでアプリを実際に動かしたいが、runしてもchromeアプリさえ表示されない。そのためにCocoaPodsというモジュールのインストールが必要だったのだが、2時間ほど手こずったのでメモを残しておく。

# cocoapodsのインストール、でもできない
公式サイトを参考に、CocoaPodsのダウンロードを試みる。

https://guides.cocoapods.org/using/getting-started.html

“`sh
sudo gem install cocoapods
“`

しかし、cocoapodsがインストールできない。
Rubyがダウンロードできていないとダメなようです。

## Rubyのインストール

[ruby install](https://gorails.com/setup/macos/14-sonoma)のサイトを参考にしながらRubyをインストール。

“`sh
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/H

元記事を表示

Ruby で解く AtCoder ABC 044 A – 高橋君とホテル (ARC 044 A)

# はじめに
– [AtCoder Problems](https://kenkoooo.com/atcoder/#/table) の ABC042 以降の問題を解いています
– 勉強のために Ruby で解いています
– 速度的な面で他の言語には劣りますが、あくまで勉強のためです

# お題
– 今回のお題は、 [ABC 044 A 高橋君とホテル](https://atcoder.jp/contests/abc044/tasks/abc044_a) という問題です
– K+1 日目から宿泊費が安くなるホテルに N 泊した際の合計宿泊費を求めます

# 考えたこと
– ホテルの値段が安くなる前に宿泊を終える場合がある
– 条件を使えば簡単にできるが、出力処理は1行でコンパクトにしたい

# コード
“`ruby
n = gets.to_i
k = gets.to_i
x = gets.to_i
y = gets.to_i

puts [n, k].min*x + [n-k, 0].max*y
“`

元記事を表示

【Rails】link_toとPrefixと引数と【初心者】

# link_toでprefixで繋ぐ時、引数を何を渡せばいいのか
link_to自体のやり方はこちら

https://qiita.com/junyawatanabe/items/327019369352c73d8ad1

どういうものを作っているかによって変わると思うのだが
link_toでindexとnewに行く時は引数を基本使わない。
indexとかから、edit、show、destroyに行く時は基本使う。
editに行くとしてproductモデルで@products.each do |product|で回してるなら、
edit_product_path(product)とかedit_product_path(product.id)とかで、
editに引数を使ってproduct.idを渡して、editのコントローラーの方で
@product = Product.find(params[:id])で情報を全て拾う。
destroyの時だけmethod: :deleteをlin_toに入れる。
<%= link_to '削除' , product_path(product), m

元記事を表示

Ruby On RailsにおけるjQuery初期設定

# Ruby On RailsにおけるjQuery初期設定
## 背景説明
現在のrailsに即したjQuery導入説明です。
私のような初学者にも伝わる日本語での説明を見つけられませんでした。英語での説明はあったのでこちらにメモしておきます。
ムダな記述が多いです。記述を省ける箇所や訂正箇所をコメントで教えてください。[^1]

[^1]:[参考文献](https://stackoverflow.com/questions/70921378/how-to-install-jquery-and-bootstrap-in-rails-7-app-using-esbuild-without-webpac)

## 初期設定
### アプリを作成します。
“`sh
rails new useJquery
“`
### 作成したフォルダーへ移動
“`sh
cd useJquery
“`
### コントローラーとビューを作成
“`sh
rails g controller tests index
“`
### ルーティング設定
“`ruby
Rails.applicatio

元記事を表示

【Ruby】<< をそのままメソッドの戻り値にするより、[*array, element] を使おう

## はじめに: `<<`をそのままメソッドの戻り値にする? コードレビューをしていると、ときどき以下のようなコードを見かけます。 ```ruby def do_something foo = [] # 処理があれこれ続く # ... # ... foo << 123 end bar = do_something puts bar ``` 注目してほしいのは `foo << 123` の行です。 ここは配列 `foo` に123を追加し、なおかつそのときの戻り値をこのメソッド(`do_something`メソッド)の戻り値にしています。 ```ruby def do_something foo = [] # 以下の1行は2つの意味を持つ # - fooに123を追加する # - 123を追加したfooをこのメソッドの戻り値とする foo << 123 end ``` たしかに配列に要素を追加する `<<` は戻り値としてその配列自身を返しますが、ふだん `<<` を使うときはあくまで要素を追加するだけで、`<<` の戻り値を利用すること

元記事を表示

ローカル環境で「rails assets:precompile」・「bin/importmap」・「rails s」をしないとCSSが読み込まれない件

## 前提条件
・ アプリケーション:Rails7
・ ローカル環境:MySQL
・ 本番環境:Render

## 現状
ローカル環境において、下記コマンドを実行した上でサーバー再起動をしないとCSSが反映しない状況。
“`shell
% rails assets:precompile
% bin/importmap
% rails s
“`

下記は、有識者の方にこの状況に問題があるか確認してみた結果の記録です。

## 結論 本番環境が問題なく動いていればいい
#### ローカル環境でCSSが反映されない原因
可能性の一つとして、`Rails7とJavaScriptの相性`が関係して起こっている事象
かもしれない。
ローカル環境で`「rails assets:precompile」・「bin/importmap」・「rails s」`を実行してCSSの変更内容が適用され、本番環境も反映できているなら、(問題がある可能性もあるけれど)問題はない。

#### 本番環境でデプロイ後にCSSが反映できている理由
そもそも本番環境では`bin/render-build.sh`に

元記事を表示

Ruby で解く AtCoder ABC 043 D – アンバランス (ARC 059 D)

# はじめに
– [AtCoder Problems](https://kenkoooo.com/atcoder/#/table) の ABC042 以降の問題を解いています
– 勉強のために Ruby で解いています
– 速度的な面で他の言語には劣りますが、あくまで勉強のためです
# お題
– 今回のお題は、 [ABC 043 Dのアンバランス](https://atcoder.jp/contests/abc043/tasks/arc059_b) という問題です
– 入力文字列の部分文字列がアンバランスかどうかを判定し、アンバランスなら具体的な区間を答えるというもの

# 考えたこと
– 何も考えずに作ろうとすると、時間計算量は$O(n^3)$になる
– 部分文字列の列挙で$O(n^2)$
– 判定で$O(n)$
– 位置を1つ示せば良い
– 答えは複数あるのだが、少なくとも1つのアンバランスな区間を示せれば良い
– アンバランスな文字列は以下のパターンのどちらかを含む
– 長さ2の”XX”というパターン
– 長さ3の”XYX”というパ

元記事を表示

RailsにおけるRSpecテストコードで生成されたデータがデータベースに保存されない仕組み

### RailsでRSpecなどのテストコードを実行すると、テストコード内で生成されたデータは通常、データベースに保存されません。これは、テストコードと本番環境を分離し、テストデータが本番データに混入することを防ぐためです。

# 仕組み

RSpecなどのテストフレームワークは、テストコードを実行する前に、以下の2つの重要な処理を行います。

1\. トランザクションの開始: テストコードの実行前に、データベースへのトランザクションを開始します。
2\. トランザクションのロールバック: テストコードの実行後に、トランザクションをロールバックします。

トランザクションのロールバックにより、テストコード内で生成されたすべてのデータ変更はデータベースにコミットされず、本番環境に影響を与えることはありません。

# 例外

一部のテストシナリオでは、テストデータをデータベースに保存する必要がある場合があります。そのような場合は、以下の方法で実現できます。

save! メソッドを使用する: モデルオブジェクトを保存する際に save! メソッドを使用すると、トランザクションのロールバッ

元記事を表示

[Rails]個人アプリでN+1問題を見つけて解消してみた

バックエンドエンジニアの実務では、N+1問題を見つけ、解決する場面がある、ということを聞きました。

そこで、クエリの適化を行う練習のためにも、自分のアプリを使って、N+1問題について勉強したことをまとめてみます!

# N+1問題は何が問題(悪影響)なのか?

N+1問題の何が問題かというと、
– 何度も(N回)テーブルにデータを取りに行くと、当然、処理が重くなる
– これが例えば、N=20回程度なら問題はないかもしれないが、N=50,000など大量のデータを処理する際には、負荷がかかる
– 結果、サービスの利便性が悪くなる。ビジネスに影響が出る

という認識です。

つまり、そこまで多くのデータを処理しないケースなら、あまり問題にはならないはずです。

私のアプリケーションもそれに該当するのかなと思います。

しかし、大量の処理を想定して、設計したらどうなるか、ということを実際にやって見ることは勉強になるので、試してみました。

# N+1問題の特定

私は以下の方法で、N+1問題が発生しているところを特定しようと思いました。

– gem’bullet’の活用
– 複数テーブル

元記事を表示

「あの赤い丸 ⛔️」を消せ!RubyMine (およびJetBrains系IDE、VS Code、Vim) でファイルの末尾に改行文字を自動的に付与する設定

## はじめに
GitHubでプルリクエストのコードレビューをしたりすると、たまにこんな赤い丸⛔️を見かけませんか?

![Screenshot 2024-04-13 at 11.23.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7465/7f5553c3-1fe6-67f7-a6b8-9ea61e058228.png)

これはファイルの末尾が改行文字で終わっていないことを示す警告マークです。

改行文字を `\n` で可視化するなら、本来は

“`
end\n
end\n
“`

こうなっているべきなのに、実際は

“`
end\n
end
“`

こうなって保存されている、ということです。

実際問題、ファイル末尾が改行文字で終わっていないからといってプログラムがおかしな動きをするということは滅多にありません。
ですが、[POSIX](https://ja.wikipedia.org/wiki/POSIX)[^1]の規格では「テキストファイルの末尾は改行文字で終わらないとい

元記事を表示

【Rails】レコードの中から、ある項目ごとの最新データを取得する方法

株式会社学びと成長しくみデザイン研究所の藤澤です。

## 前提
データベースに蓄積されたログから、特定の項目ごとの最新のデータを取得したいことがあるかと思います。

例えば、各タスクの実行状況を記録する TaskLog テーブルがあるとします。このテーブルには、タスクの識別コード(タスクコード)、ステータス、作成日時、更新日時が記録されています。
“`rb
TaskLog(id, task_code, status, created_at, updated_at)
“`

そして、テーブルには以下のようなデータが存在するとします。
“`sh
id | task_code | status | created_at | updated_at |
1 | “taskA” | “ok” | 2022/04/01 12:30:00 | 2022/04/01 12:30:00 |
2 | “taskB” | “ok” | 2022/04/02 12:30:00 | 2022/04/02 12:30:00 |
3 | “taskA

元記事を表示

【Rails】スキーマ情報が一目でわかるannotate_models

## はじめに

ファットコントローラーよりファットモデルの方が良い、という教えを守った結果、テーブル情報の確認しづらさを感じ調べてみました。

前回の記事でもアノテーションというものを取り上げた気がしているため、もう注釈おじさんと呼んでください🙇

:::note warn
ご覧いただきありがとうございます!
この記事の投稿者は主にRuby on Railsを学習している初学者です。
理解不足な点や内容に誤りがございましたらご指摘いただけますと幸いです。
:::

## 問題
テーブル・ルーティングの情報をできたら一目で確認したい。
ファイルを開いたときに毎回下までスクロールしないと全容がわからない・・・

## 解決方法
gemがありました🥹

https://github.com/ctran/annotate_models

Gemfileの`development`グループへ

“`ruby:Gemfile
gem ‘annotate’
“`
“`
bundle install
“`
ここからは固有のコマンドです.
実行すると`lib/tasks/auto_annota

元記事を表示

【RSpec】APIを使うメソッドのテストでVCRを使う【Youtube Data API】

# はじめに
この記事ではポートフォリオ作成中に学んだことを自分のために記録しています。
初学者のため理解が不十分なところがあるかもしれませんが、その場合はご指摘いただけると幸いです。

# やりたいこと
– VCRを使ってAPIを使用しているメソッドのテストを書く

YouTube Data API v3を使用して動画情報を検索するヘルパーメソッドのテストをRSpecで書いていきます。
実装の詳細は下記の記事でまとめているのでよければご覧ください。
[【Rails】Youtube APIを使ってIDで動画を検索する](https://qiita.com/mnmnm_37/items/315033fd8a63f8aad4e8)

# VCRとは?
テストでのHTTP通信を1回目で記録しておき、以降のテストではその記録(カセットと呼ばれるyamlファイル)を使用することで通信の結果を再現してくれるgem。
2回目以降のテストは実際のHTTP通信を行わないため処理が早くなります。
また、APIを使用するテストにおいては何度テストを実行しても割り当てを消費しないというメリットがあります。

元記事を表示

if文の条件部分で代入式があるけど?

# はじめに
[Railsチュートリアル](https://railstutorial.jp/ “Railsチュートリアル”) でRailsの学習をしている中で
気になった箇所があったので知識整理も兼ねて調べた内容をまとめます。

## if文の条件で代入してる
以下のコードにてif文の条件部分にてある変数に代入している箇所がありました。
元々は session[:user_id] が存在すれ真の判定、存在しなければ偽の判定でした。

“`ruby
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
elsif (user_id = cookies.encrypted[:user_id])
user = User.find_by(id: user_id)
:
end

# 元々は以下のコードだった
# if session[:user_id]
# @current_user ||= User.find_by(id: session[:user_id])
# elsif

元記事を表示

【Rails,AWS】SageMakerのエンドポイントをRailsで使用してみる

どうもこんにちは。

今回は、以下の記事でトレーニングしたBERTモデルをRailsアプリケーションで呼び出してみました。

https://qiita.com/PDC-Kurashinak/items/f55d5d9e534f59440313

# 前提条件

上の記事で手順12まで実行できていることを前提として進めます。

# SageMakerノートブックインスタンス側での設定

## 1. トレーニングしたモデルをデプロイ

SageMakerのノートブックインスタンス内で以下のコードを実行します。

“`python
predictor = huggingface_estimator.deploy(
initial_instance_count=1,
instance_type=’ml.g4dn.xlarge’,
endpoint_name=’endpoint-01′ # ここは任意の名前
)
“`

ここで発行したエンドポイントは、「リアルタイム推論」をするためのエンドポイントとなります。
「サーバレス推論」をするためのエンドポイントを発行する手

元記事を表示

【備忘録】久しぶりにRubyGoldの勉強をしてみた

どうもこんにちは。

半年前に受けて**落ちた**RubyGoldをまた受けようかなと思い、久々に[Rex](https://rex.libertyfish.co.jp/exam_histories)を使用して模擬問題を受けてみました。

https://qiita.com/PDC-Kurashinak/items/2a4279fae328bbc7937b

https://rex.libertyfish.co.jp

# 結果は…

70点…(合格点は75点)

![スクリーンショット 2024-04-04 23.04.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711491/a759ec71-e99f-a7a2-699f-db84302bd6b5.png)

# 解説

自分なりに解説してみました。ご指摘あったらコメントください。

## 1

`Singleton`モジュールは、「**あるモジュールのインスタンスがプログラム全体で1つしか存在しないことを保証する**」モジュールで

元記事を表示

There are no versions of nokogiri (~> 1.14) compatible with your Ruby & RubyGems.

Railsに挑戦しようと、かの有名な[Ruby on Railsチュートリアル](https://railstutorial.jp/)に挑戦することにした。
その際に、最初のRailsのインストールで表題のエラーで躓いたので、備忘録としてこちらを執筆。

まずは下記のコマンドでRailsをバージョン指定でインストールしろとのこと。

“`
gem install rails -v 7.0.4.3
“`

上記のコマンドを実行したが、下記のエラーに遭遇。

“`
Fetching nokogiri-1.16.4-x86_64-darwin.gem
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`

`sudo`をつけて回避しようと試みる。

“`
sudo gem install rails -v 7.0.4.3
“`

ところが、次は下記のエ

元記事を表示

古いruby(1.8.7)と新しいruby(3.3.0)でソート結果に違いが出る話(on Linux)

# はじめに
Linux環境において(他の環境は未検証)、古いruby(1.8.7など)と新しいruby(3.3.0など)で配列のソート結果に違いが出るという、現代を生きている方には特に役に立たない情報についての共有です。

# 検証コード
ruby1.8.7でもruby3.3.0でも同じコードが実行可能なように、古い書き方で記述しておきます。
“`ruby
[
{:name => ‘elm1’, :val => 1},
{:name => ‘elm2’, :val => 5},
{:name => ‘elm3’, :val => 3},
{:name => ‘elm4’, :val => 1},
{:name => ‘elm5’, :val => 2},
{:name => ‘elm6’, :val => 6},
{:name => ‘elm7’, :val => 2},
{:name => ‘elm8’, :val => 7},
{:name => ‘elm9’, :val => 4},
{:name => ‘elm10’, :val =>

元記事を表示

なんかRBENV_VERSIONが勝手に入ってるな。。と思ったらjetbrainsを疑う

SSIA(最近覚えたので使ってみる)

rbenvでは`.ruby-version`より`RBENV_VERSION`の値が優先される。

プロジェクトで`rbenv local 2.6.10`みたいな事をして2.6.10を使おうとしていたら、`ruby -v`で違うバージョンが出てびっくり、ということがあったので備忘録として残す。

# 結論

RubyMineを使っていたのだが、こいつが勝手に`RBENV_VERSION`に値を入れてくる模様。

`Ruby SDK and Gems`で変えられるので、ここを変えたら`RBENV_VERSION`も変えられる。

![スクリーンショット 2024-04-10 15.45.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/441085/f3fbcd03-f069-dc3f-1562-718236998eb9.png)

元記事を表示

DartとJavaScriptでPythonやRubyみたいに%書式(sprintf)を使えるようにしましょう

# はじめに

PythonとRubyを使っているみんなさん、いつも「%書式」を使っていますか?私はいつも使っています。これは元々C言語の機能で、printfとsprintfで文字列を出力する時に使われていたが、その後色んな言語で同じように搭載されています。

PHPやMATLABなどでは「sprintf」という関数の形で使えますが、文法の一部として扱えるPythonとRubyの方が直感的で便利です。

勿論、PythonとRubyは%書式以外に他の書式の機能がありますね。[前にもPythonで使える書式を比較する記事を書きました。](https://qiita.com/phyblas/items/0a122fe4a18a18a83050)それぞれ特徴があって違いがあります。**色んな言語共通で使える**のは%書式の長所です。

ただし残念ながらJavaScriptはこんな便利な機能を持っていません。関数という使いたいとしても追加パッケージをインストールする必要があります。

最初にJavaScriptを勉強した時に不便を感じて、ないなら自分で作ればいいよね、と思って結局頑張って実装し

元記事を表示

OTHERカテゴリの最新記事