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

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

RailsアプリケーションでAWS Parameter Storeを使用する方法

AWS Parameter Storeは、アプリケーションの設定値や機密情報を安全に管理するための便利なサービスです。
この記事では、Railsアプリケーションのproduction環境設定でAWS Parameter Storeの値を使用する方法について説明します。

**前提条件**
– AWSアカウントがあること
– AWS CLIが設定されていること
– Railsプロジェクトがあること

# 1. AWS SDKのセットアップ
まず、AWS SDKをプロジェクトに追加します。Gemfileに以下を追加し、bundle installを実行します。
“`ruby
gem ‘aws-sdk-ssm’
“`

# 2. パラメータ取得用のヘルパーメソッド
次に、AWS Parameter Storeから値を取得するためのヘルパーメソッドを作成します。config/application.rbに以下のコードを追加します。
“`ruby
require ‘aws-sdk-ssm’

module ParameterStoreHelper
def fetch_parameter

元記事を表示

paiza「みんなでしりとり」をRubyで解いてみた

# 問題

あなたは友達たちと N 人でしりとりを行うことにしました。
1 人目、 2 人目、…、 N 人目、 1 人目、2 人目、… という順序で発言をします。ここで、それぞれの人は、次に挙げる 4 つのしりとりのルールを守って発言をする必要があります。

1. 発言は、単語リストにある K 個の単語のうちのいずれかの単語でなければならない。
2. 最初の人以外の発言の頭文字は、直前の人の発言の最後の文字と一緒でなければならない。
3. 今までに発言された単語を発言してはならない。
4. z で終わる単語を発言してはならない。

ここで、発言の途中で上のルールを破った場合、ルールを破った人はしりとりから外れます。
そして、その人を抜いて引き続きしりとりを続けていきます。このとき、後続の人は、ルール 2 を守る必要はありません。

N 人がしりとりを行ったログが M 行分与えられます。
このとき、M 回の発言が終わった後、しりとりから脱落せずに残っている人のリストを表示するプログラムを書いてください。

https://paiza.jp/works/mondai/b_rank_

元記事を表示

RailsのThreadの中でアクティブレコードのデータがとれない

# はじめに

Railsで並列処理をしたところ困ったことがあったのでまとめておきます

# 問題

以下のようにスレッドでfetch_dataをするような処理を書きました

“`rb
def self.where(ids:)
threads = []
results = []
mutex = Mutex.new

ids.each do |id|
threads << Thread.new do result = fetch_data(id) mutex.synchronize do results << result end end end threads.each(&:join) results end private_class_method def self.fetch_data(id) api_response = SomeAPI.get(id) record = SmapleActiveRecord.find(id) # ActiveRecordから取得

元記事を表示

プレビュー機能の実装

# プレビュー機能実装

## 概要
新規投稿、投稿編集時に選択した画像がプレビューとして表示される機能

## preview.js作成
プレンビュー機能実装のため、app/javascriptの直下にファイル名 “preview.js” を作成する。

## importmapの編集
configフォルダにあるimportmap.rbへ下記を追記する。
pin “preview”, to: “preview.js”

## application.jsの編集
app/javascript/application.jsへ下記を追記する。
import “preview”

## プレビュー機能の実装
取得した画像をブラウザへ表示するためにjavascript側で生成する。

// 画像を表示するためのdiv要素を生成
const previewWrapper = document.createElement(‘div’);
previewWrapper.setAttribute(‘class’, ‘preview’);

// 表示する画像を生成

元記事を表示

Ruby on Rails 7.2の主要な新機能・機能追加・変更点

## はじめに

Rubyを使用したOSSのWebアプリケーションフレームワーク、Ruby on Rails(以下Rails)の最新バージョンである7.2(以下Rails 7.2)が[2024年8月10日にリリースされました](https://rubyonrails.org/2024/8/10/Rails-7-2-0-has-been-released)。

Rails 7.2は、開発用のDockerコンテナの設定の生成、YJITのデフォルト化、RuboCop / Brackeman / GitHub CIの設定の生成など、主に、プロジェクトを開発、運用するに当たって必要な設定をあらかじめフレームワーク側で用意したリリースとなっています。

本記事では、[Railsの公式ブログ](https://rubyonrails.org/blog/)や[Railsガイド](https://guides.rubyonrails.org/v7.2/)、GitHubのRailsプロジェクトの[Issues](https://github.com/rails/rails/issues)や[Pull Re

元記事を表示

CodeMirror6を用いたHTMLエディターの導入

## 概要
Ruby on Railsをベースとしたアプリ制作時に、Codemirror6の導入で苦戦したため、導入方法をまとめました。

Codemirror6は公式マニュアルに`Getting Started`のセクションが無く、どこを見たらいいのか分からないので、初心者にはかなりとっつきにくい文献という印象でした。

結論として、以下の`Bundling Example`のセクションを見ながら進める事でEditor構築することが出来たので、こちらの流れに沿って説明します。

https://codemirror.net/examples/bundle/

また、今回の説明ではRuby on Railsを使用していますが、Codemirrorの実装は基本Javascriptしか触ってないので、本記事を読むために必要知識はJavascript(+ Node.js)となります。

## エディターの導入
### 1. CodeMirror&HTMLパッケージのインストール
公式文書ではJavascript用エディターを導入していますが、今回私はHTML用エディターを実装したいので、H

元記事を表示

LambdaのRubyでGitLabにリポジトリを作成、削除する

## ruby版
AIにシェルからlambda用に変換してもらったらあっさり動いた。
RubyでGitLabにリポジトリを作成、削除する機能です。

### リポジトリ作成
– https://github.com/tmoritoki0227/gitlab_project_create/blob/main/create_project.rb
– https://github.com/tmoritoki0227/gitlab_project_create/blob/main/projects_and_branches.txt

### リポジトリ削除
– https://github.com/tmoritoki0227/gitlab_project_create/blob/main/delete_project_all.rb

元記事を表示

Railsのincludesメソッドは非推奨!?これからはeager_loadとpreloadを使用すべき??

Active Recordにおいて、親子関係にあるテーブルのデータを取得する際に、N+1問題を解消するためにincludesをよく使いますが、使い方についてあまり理解できていなかったのでその学習をまとめます。

また調べていく中で多くの方が「eager_loadとpreloadを使用すべき」と言っています!
その理由も調べてまとめます!

## N+1問題とは?
N+1問題 とは、ループ処理の中で都度クエリを発行してしまい、大量のクエリが発行されてしまうことです。余計なクエリが発行されるということは、データの取得や参照に時間がかかってきてしまいパフォーマンスに影響が出ます。

コーディングなどで下記のような同じようなログが大量に出てきてしまうことはありませんか??
ループ処理の中で都度クエリを発行してしまい、大量のクエリが発行されてしまっています。

これがN+1問題です。
“`
↳ app/views/articles/index.html.slim:18
ColumnCategory Load (0.8ms) SELECT `column_categories`.* FRO

元記事を表示

rails 目次の自動生成機能

今回は業務の中で目次の自動生成メソッドを開発する機会があったのでその実装を記録として残しておきます。

## 背景
今回の実装に至った背景として、columnページのデザイン改修がありました。その過程で、記事に対して目次を表示し、クリックで該当箇所へジャンプする機能を追加する必要が生じました。この機能は、Qiitaのような目次機能を参考にしています。また、記事のHTMLはデータベースのカラムに直接埋め込まれている仕様となっているため、この仕様に沿った形で目次機能を実装することが求められました。

## 実装
今回はメソッド化して使いまわせて、かつスタイルも自由に変更できるようにする設定を心がけました。

色々調べるとgemを組み合わせて使用する方法もありましたが、今回はどのサービスでも決められた仕様の場合には使い回しができるよう設定をしました。

まずカラムの中身は下記のようになっています。
“`

実装する前にきちんとドキュメントを読んだ方が良い、という話

どうも、初めまして。
tokeと申します。

今回は自分の失敗談を話したい、と思います。

# 実装する前にドキュメントを読まないと、最後になってゴールに辿り着けない可能性がある

そういう経験をしたのでご紹介します。

例えば、自社で集めた顧客のデータを活用し、Marketoにデータ連携したいとします。

marketoのAPIドキュメントを調べると、顧客の情報を登録する手段では以下の2パターンがあります。

## `POST /rest/v1/leads.json`を使うパターン

以下のドキュメントにある`POST /rest/v1/leads.json`を使って、顧客のデータを送信し、連携する事ができます。
https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/lead-database/leads

[※Marketoで紹介されているサンプルデータになります]
![スクリーンショット 2024-08-10 13.16.34.png](https://qiita-image-store

元記事を表示

orderとpluckを併用する時には記述する順番に気をつけようというお話

あまり実用的なケースではないが、最新の一件のデータを取りたいがカラムはpluckしたい時に、クエリの呼び出し順に気をつけとかないと思うようなデータが取れないよというお話

# 試したコード
“`
last_tweet = User.pluck(:userName, :tweetContent).order(created_at: “DESC”).first
“`
※コードは実際に使ったものを改変しています

# 発生したエラー

“`
NoMethodError (undefined method `order’ for an instance of Array):
“`

# 解決策
“`
last_tweet = User.order(created_at: “DESC”).pluck(:userName, :tweetContent).first
“`

シンプルにorderで並び替えてからpluckすれば仕様を満たすことができる
pluckしてからorderしようとしても該当のカラム(created_at)がないので並び替えることができない

元記事を表示

【Ruby】レキシカルスコープと継承の定数探索の違い

### これは何?
RubyGoldの勉強をする中で定数探索について理解が浅く、レキシカルスコープと継承の違いを理解できていなかったため学んだことをまとめた記事になります。

### まずレキシカルスコープについて
クラスやメソッドなどの定義内にできるスコープのことで、見かけ上の静的なスコープ。”静的”というからには”動的”なスコープもあり、そちらはダイナミックスコープというものがある。(Wikipdeiaを参照するとLISPやEmacs Lispなどがダイナミックスコープにあたるらしい)

### 定数探索時、レキシカルスコープ内の定数を優先する
大前提として、定数探索はレキシカルスコープを優先して探索し、レキシカルスコープ内になければ後継承関係を辿って探索する。

### レキシカルスコープと名前空間は違う

下記の2つはどちらもクラス”M::C”を定義。
上のコードはモジュール”M”の中にネストしてクラス”C”を定義している。下のコードは名前空間としてモジュール”M”を定義したのちクラス”M::C”を定義。

まずこちらのコードはネスト定義の中、つまりレキシカルスコープ内にあたる

元記事を表示

【JavaScript】Ruby → JS はじめての基礎文法

はじめに

私は普段Railsチュートリアルで学習しており、Rubyしか基本的に触ったことがない。
しかし昨日までハッカソンに参加しており、TypeScript + React + Next.jsで開発を行うことになり、なんかフロントが楽しくなったので学習してみることにした。

変数と定数など

変数

JavaScriptの変数の定義はこのように書く
“`js
let hello = “Hello,world”;
“`
まず初めに`let`を置き、そのあとに変数名を書く
Rubyでは変数名からいきなり=でつなげて定義していた。
JSの場合はletを宣言する必要があるから、少し大変だね

変数というものは上書きできるので、letを省略し、この後に続けて書くと上書きをすることができた

Rubyと違い閉じタグをわすれないように!

`console.log(変数名);`とすることで、デベロッパーツールのconsoleの部分で見ることができる。rubyだと`puts`でやってたやつかな

定数

変数と似たようなもので定数というものがある。
“`js

元記事を表示

rails パンくずリストの作り方(gem ‘gretel’)

今回は業務の中で初めてパンくずリスト機能に触れたので、こちらについて勉強したことをまとめます。

## パンくずリストとは?
パンくずリスト(Breadcrumbs)は、Webサイトのナビゲーション要素の一つで、ユーザーが現在のページに至るまでの階層構造やパスを表示するためのものです。パンくずリストは、ユーザーが現在どの位置にいるのかを視覚的に示し、上位のページや関連するカテゴリーに簡単に戻れるようにするために利用されます。

## 実装方法
では実際にはどのように実装をするのか?

まず、下記のgemを使用します。
“`
gem ‘gretel’
“`
このgemの名前の由来は、グリム童話の「ヘンゼルとグレーテル(Hansel and Gretel)」に登場するキャラクター、グレーテル(Gretel)から来ています。

「ヘンゼルとグレーテル」は、グリム兄弟によって記録された有名なドイツの民話です。物語の中で、ヘンゼルとグレーテルは森の中に置き去りにされますが、パンくずを道しるべとして使って家に戻ろうとします。このパンくずが、「パンくずリスト」(Breadcrumbs)というナビ

元記事を表示

rails 簡易的な閲覧数カウント機能

今回は業務の中で簡易的なページ閲覧数をカウントする機能を作る必要があり、その時に実装した内容を記録として残します。

## 実装例
今回は簡易的なcolumnテーブルがあると仮定して実装を進めていきます。
“`
| id | title | content | created_at | updated_at |
|—–:|:———-|:———-|:——————–|:——————–|
| 1 | Article 1 | Content 1 | 2024-01-01 00:00:00 | 2024-01-10 00:00:00 |
| 2 | Article 2 | Content 2 | 2024-02-15 00:00:00 | 2024-02-20 00:00:00 |
| 3 | Article 3 | Content 3 | 2024-03-10 00:00:00 | 2024-03-15 00:00:00 |
| 4 |

元記事を表示

RailsのTimeクラスを覚えたい

# 概要
– 何度書いても忘れるのでメモ的な記事
– RailsはRubyのTimeクラスを拡張しているとのこと

# ドキュメント

ここみればいいと思います。

https://api.rubyonrails.org/classes/Time.html

# 今を取る

“`ruby
Time.current
=> Sat, 01 Jun 2024 10:24:15 JST +09:00
“`

`Time.now` でも取れるが、`Time.current`の場合、`Time.zone`または`config.time_zone`が設定されていれば、`Time.zone.now`を返してくれるのでお得(?)

# 今より前の時間を取りたい

色々ある

“`ruby
Time.current.ago(1.day)
=> Fri, 31 May 2024 10:25:03 JST +09:00
“`

intから`day`や`hour`を生やすことができる。複数形でも良い

“`ruby
[23] pry(main)> 3.day
=> 3 days
[24] pry(m

元記事を表示

RailsとReactのDocker環境を作ってみる

## Rails環境を作る

### Dockerfile
リポジトリのトップにbackendディレクトリを作成。
backendディレクトリにDockerfileを作成。
“`Dockerfile:Dockerfile
FROM ruby:3.1

WORKDIR /app
“`
dockerをビルド。
“`shell:
docker build .
“`
docker経由でrailsアプリケーションを作成。
Dockerfileがコンフリクト起こすけど、上書きはしない。
“`shell
docker run -it -v $(pwd):/app imageId bash -c “cd .. && gem install rails && rails new app -d postgresql –api”
“`
Dockerfileを書き換える。
“`Dockerfile:Dockerfile
FROM ruby:3.1

WORKDIR /app

COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfil

元記事を表示

【RSpec】Shoulda Matchersの書き方について

## はじめに
### [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers)とは
Railsのテストコードをより簡潔かつ読みやすくするためのRSpec用の拡張ライブラリです。

#### Q. 何が良いのか?
A. [特に複雑なテストケースを1行で記述できることが多く、テストコードの行数の大幅な削減が期待できます!](https://matchers.shoulda.io/docs/v6.3.0/)

#### 設定方法
以下のようにGemfileのテスト環境に“`shoulda-matchers“`を追加します。
(詳しくは[公式ドキュメント](https://github.com/thoughtbot/shoulda-matchers?tab=readme-ov-file#rspec)にてご確認ください🙇‍♂️)
“`.Gemfile
group :test do
gem ‘shoulda-matchers’, ‘~> 6.0’
end

元記事を表示

WSL 2とDockerを活用したRuby開発環境の構築

# はじめに
Windows上でネイティブのLinux環境を提供するWSL 2と、コンテナ技術であるDockerを組み合わせることで、軽量かつ効率的なRuby開発環境を構築できることを説明します。

Windows Subsystem for Linux (WSL) のセットアップはこちら

https://qiita.com/oharu121/items/9acaf1e700aea80323c1
# Ubuntuを起動する
Ubuntuを起動して、WSL環境が正しく動作していることを確認します。

1.Windowsの検索バーから「ターミナル」と入力して、ターミナルを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760374/4a6d5787-d1c9-4e57-b370-b5a3aa1856aa.png)

2.ドロップダウンメニューから「Ubuntu」を選択します。
![image.png](https://qiita-image-store.s3.ap-north

元記事を表示

MVCをレストランに例えてみた

# はじめに
今回はRubyonRailsなどで用いられているMVCというものについて解説していきたいと思います。Railsをはじめ、MVCを採用しているフレームワークは多くあると思います。RailsにおいてはRailsチュートリアルやProgateでも初めの方で解説していることからこの構造を理解しておくことは非常に重要です。今まであまり考えずに使用してきたのであれば、この際詳しく知っておくと良いでしょう。

## MVCとは
ソースコードをそれぞれ
**・モデル(Model)**
**・コントローラー(Controller)**
**・ビュー(View)**

の3つに分割して管理しようという考え方の1つです。それぞれの頭文字を取ってMVCとなっています。

*****
**モデル(Model)**
例えば投稿した人の名前や投稿したテキストなどを保存する際などにデータベースとのやりとりをします。データの登録・更新・削除などの処理を行います。

**コントローラー(Controller)**
モデルにデータ処理の指示を出したり、ビューに画面表示の指示を出したりする指示役です。

**

元記事を表示

OTHERカテゴリの最新記事