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

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

【Rails API】エラーハンドリング処理をJSON形式で返す

Rails APIについて学習しています。
今回は、Railsアプリケーションを使い、をAPIによる例外処理(エラーハンドリング)を実装していきます。

# 今回やること

– apiのエラーハンドリング処理を実装する。
– 404, 500のレスポンスを返す処理を実装する。
– apiのエラーをjson形式で返す処理を実装する。

# base_controller.rbに追記する

“`ruby:app/controllers/api/v1/base_controller.rb
module Api
module V1
class BaseController < ApplicationController include Api::ExceptionHandler end end end ``` # このコードの解説 - このコードでは、Ruby on Railsのアプリケーションにおけるコントローラの基底クラス`BaseController`を定義している。 - `module Api` `module V1`の部分で、「Api」

元記事を表示

AtCoder ABC310 解法(A ~ E) Ruby & Kotlin

# 解法

## [A – Order Something Else](https://atcoder.jp/contests/abc310/tasks/abc310_a)

|[公式解説](https://atcoder.jp/contests/abc310/tasks/abc310_a/editorial)|
|-|

| Difficulty | Solve Prob | Solve Time |
| :—: | :—: | :—: |
| 23 | > 99 % | 4 mins |

### Ruby

“`ruby:abc310_a.rb
N, P, Q = gets.split.map(&:to_i)
D = gets.split.map(&:to_i)
puts [D.min + Q, P].min
“`

### Kotlin

“`kotlin:abc310_a.kt
fun main() {
val (N, P, Q) = readLine()!!.split(” “).map(String::toInt)
val D = readLin

元記事を表示

共同開発 model作成 カラム追加

モデルの作成は 先頭大文字の単数形で作成します。
### :shamrock:モデルの作成とカラムの追加

“`
【顧客用】
$ rails g devise Customer
【管理者用】
$ rails g devise Admin
“`
“`
rails db:migrate
“`
Deviseというユーザー認証システム用のCustomerモデルが生成されます。モデルファイル、ビューファイル、データベースマイグレーションなど、Deviseを使うために必要なファイルが自動的に作成されます。

:star: cusutomers (顧客)ファイル
“`diff_ruby
create_table :customers do |t|
t.string :last_name, null: false
t.string :first_name, null: false
t.string :kana_last_name, null: false
t.string :kana_first_name, null: false

元記事を表示

Ruby 配列 ブロックについて 3

# はじめに
– Rubyの配列やブロックの復習用(3回目)
– 学習したことの備忘録
– 「[Ruby 配列 ブロックについて 2](https://qiita.com/takayuki91/items/ad9098a258c7927e1f98)」の続き

# 学習内容
#### ブロック
– with_indexメソッド
– each_with_indexメソッド

# 参考にした教材
– [プロを目指す人のためのRuby入門]( https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%

元記事を表示

Next.jsとRuby on Railsを使ってアプリを作成してみた【フルスタックブログ】

## 参考サイト
[Next.jsとRuby on Railsを使ってフルスタックブログ開発を体験してみよう](https://www.youtube.com/watch?v=XQtkP8it9Ag&t=1657s)

元記事を表示

RubyのPolarsでデータフレームのすべての行を表示する

## はじめに

:::note warn
この記事は2023年7月16日時点の記事であり、半年後や1年後にはあまり役に立たない可能性が高いです。あくまで現時点での回避策だと思ってください。
:::

みなさん、[Polars](https://github.com/pola-rs/polars)はご存じですか?

Pandasを置き換えるかもしれないと言われている、Rustで実装された新しい高速なデータフレームライブラリです。PolarsにはRubyのバインディングもあって、Ankaneさんが開発・メンテナンスを行っています。

https://github.com/ankane/polars-ruby

このPolarsでCSVファイルを読み込むと次のようになります。

“`ruby
require “csv”

df = Polars.read_csv(“iris.csv”)
“`

“`
=>
shape: (150, 5)
┌──────────────┬─────────────┬──────────────┬─────────────┬───────────┐

元記事を表示

いいコード悪いコードまとめ4章不変の活用

変数の値を変更することができることを可変(ミュータブル)と呼び、その反対を不変(イミュータブル)と呼ぶ。

変数がミュータブルだとこの値になるはずと意図して実装したにも関わらず、意図しないうちに値が変わってしまうという事態につながってしまう。

# 再代入
以下のようにイミュータブルにしていないと上書きができてしまう。
“`
x = 10
y = 20

x = y

puts x # 20
puts y # 20
“`

# 不変と可変の取り扱い方針
## デフォルトは不変に
定数の意味が変化しなくなるので混乱を避けられる
挙動が安定し、結果を予測しやすくなる
コードの影響範囲が限定的になり保守が容易になる

## 可変にしてもよいとき
不変が望ましくない場合は
* パフォーマンスに問題が生じるケース
例えば大量のデータの高速処理や画像処理リソース制約の厳しい組み込みソフトウェアなどで可変が必要なこともある。

* スコープが局所的なケース
ループ処理のスコープでしか使われないことが確実がローカル変数ならば可変にしてもよい

# まとめ
基本的に変数は不変にすること。ただし、一部

元記事を表示

【Rails】人間が読める形式でメールの件名と本文をログに出力する方法 (Beta)

## 困っていること

ActionMailerからメールを送信すると、ログにメールの送信内容が出力されます。しかし、件名(Subject)や本文はエンコードされていて、内容が確認できません。

“`
Devise::Mailer#reset_password_instructions: processed outbound mail in 11.8ms
Delivered mail 64b379aa26c5c_60f3440c-546@jit-m1.local.mail (3.4ms)
Date: Sun, 16 Jul 2023 14:01:30 +0900
From: please-change-me-at-config-initializers-devise@example.com
Reply-To: please-change-me-at-config-initializers-devise@example.com
To: foo@example.com
Message-ID: <64b379aa26c5c_60f3440c-546@jit-m1.local.mail>
S

元記事を表示

誹謗中傷が機能しないSNSを個人開発してみました!「紹介編」| Rails7 x TailwindCSS x Render.com

注:本記事はzennの記事からの転載です。
## 概要
昨今、SNSを通じた誹謗中傷が起こっていますが、それらをどうにか起こさないSNSができないものかと思い自分なりに考え、業務未経験ですが作ってみました!今回は、その簡単な紹介記事です。良ければ読んでみて、そして遊んでみてください!また、意見ももらえるととても嬉しいです!

## 使用技術
– Ruby 3.1.2
– Rails 7.0.6
– 各種Gem (ログインなど)
– Tailwind CSS (デザイン周り)
– PostgreSQL (DB)
– Render.com (デプロイ先)

## 作ったもの
![コトノハ 手紙制作画面](https://storage.googleapis.com/zenn-user-upload/06cc60b20874-20230715.png)

https://gen3-kotonoha.onrender.com/
“コトノハ”というwebアプリを作りました。

## 特徴
未熟な私ではありますが、コトノハでは主に機能面で差別化を測っています。既存のアプリ・サービスとは違う点を、表

元記事を表示

【Rails】DecoratorとHelperの特徴・違い

# Decoratorとは?

– デザインパターンの一つである。
– デザインパターンとは、汎用的な設計パターンのことで、いろんなプログラムで再利用できるのが特徴。
– Decoratorはインスタンスに対して動作するため、各インスタンスに固有の挙動を持たせることができる。
– draperというgem(ライブラリ)やActive_Decoratorを用いることで使用できる。

# Decoratorの使用例

– モデルとビュー、どちらにも記述できるロジックがある場合に、あいだにDecoratorを定義する事で、モデルをスリムにできる。
– つまり、Fatモデルの解消などの効果がある。
– 例えば、日付フォーマットを変更するロジックを実装する際などに利用できる。
– モデル・ビュー、どちらにも記述することは可能だが、Decoratorを間に定義し、役割を分散させることでコードをスッキリできる。

詳しいコードはこちらの記事が参考になります。
【Rails入門】ViewとModelの間にDecor

元記事を表示

「プロを目指す人のためのRuby入門」を読んだので。

[プロを目指す人のためのRuby入門](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976) を読んだので、個人的に気になったことなどをまとめてます。

## 学んだこと
### 式展開(`#{}`)を使った時は、自

元記事を表示

Rubymineの2023.1.xでdebugできない問題の対応

## 背景
Rubymineのバージョンを2023.1.xに上げて、Rubymin上でデバッグを実行しようとすると、debug用gemが入っていないというエラーが繰り返し表示される。
指示に従いインストールしても何もおきない。
既にリリースされてから、数ヶ月経っていますが、日本語での情報があまりなかったので、書いてみました。

## 環境
macOS 13.4(intel, m1)
ubuntu 22.04LTS
docker


Gemfileにdebaseとruby-debug-ideが入っている

## 原因
Gemfileにdebaseとruby-debug-ideを記載していると起きる模様
直接的な原因は深く調べきれていないのでご容赦ください。

## 対応策

### その1
rubymineのバージョンを旧バージョンに戻す
元も子もないですが、以前のバージョンで動いていた方は、旧バージョンに戻したら問題ないです。

https://www.jetbrains.com/ja-jp/ruby/download/other

元記事を表示

いいコード悪いコードまとめ3章クラス設計

原則:クラスが単体で正常動作するよう設計する
これはSOLID原則のSingleResponsibilityの考え方かな?

https://qiita.com/YokoYokoko/items/347101166fb81d301c45

「クラス設計とはインスタンス変数を不正状態に陥らせないための仕組みづくり」である。

クラスをインスタンス化して、それを他のクラスに初期化してもらったり、データの入力をチェックしてもらうようではいけないわけで、クラスは必ず自分の身は自分で守ると言う自己防衛責務を全てのクラスがそなえるわけです。

## コンストラクタで確実に正常値を設定する
これを避けるために2章でも出てきましたが、コンストラクタで初期化することが大切です。

例えば、`Money`クラスを作成するときの基本形は以下のような形ですが、これは問題があります。
なぜなら、引数に不正な値が渡ってきてもエラーが発生しないからです。
“`
class Money
attr_accessor :mount, :currency

def initialize(mount, cur

元記事を表示

いいコード悪いコードまとめ2章設計の初歩

## 省略せずに意図が伝わる名前を設計
“`
player #pとか書いちゃうと自分は分かるかもしないが、他の人は分からない。
damage #dも同様

状況によってはplayerやdamageだけでは分からないので、読み手が理解しやすい配慮をする。
“`

## 変数を使い回さない、目的ごとの変数を用意する
以下のように`damage`という変数を使い回して、再代入するのはNG
“`
damage = player_attack
damage = damage – something
“`

## 意味のあるまとまりでメソッド化する
以下のような記述が1つのメソッドに混在していると可読性や保守性においてよろしくない。
したがって、意味のあるまとまりでメソッド化することが重要
“`
プレイヤーの攻撃力を合算する
敵の防御力を合算する
ダメージ量を評価する
“`

## 関係しあうデータとロジックをクラスにまとめる
いろいろなところにメソッドを書いていると可読性が落ちてしまう。そのため、関連し合うデータやロジックは1つのクラスにまとめること。

また、クラス化するときに重要

元記事を表示

Railsのクエリ文字とparams

今まで漠然と理解していたが整理のため記載

クエリパラメーター

“`ruby
http://example.com/line/latest_message?user_list=U2525
“`

paramsのkeyであるuser_listにはU2525が入る

“`ruby
class Line::LatestMessageController < ApplicationController def index params[:user_list]) #params[:user_list] == U2525 end end ``` またinputタグのname属性の文字がURLのqueryのkeyになる ```html
“`

元記事を表示

Railsアプリ作成の上で大まかな進め方

# DBの構造を考える

1.DBの基盤となるテーブルを考える
 どんなテーブル構造にするか?また、そのためにはどんなカラムの追加が必要か?(例:name,emailなど)
 内容がまとまったら、まず`rails db:create`でデータベース自体を作成します。ただし、この段階ではまだテーブルは作成されていません。

2.モデルを作る(命名規則は***最初の文字が大文字の単数形***)
 基本構文は以下の通りです。
 `rails g model モデル名 カラム名:データ型`
 例えば以下のようになります。
 `rails g model Content name:string email:string`
 rails g modelを実行するとモデルと同時にマイグレーションファイルも生成されます。なのでrails g migrationは実行不要です。もし、先にマイグレーションファイルを作成してしまったら
`rails g model モデル名 –skip-migration`でmodelだけを作成し、マイグレーションファイルは作成しないようにしてください

3.rai

元記事を表示

コミットの直前にrubocopを自動実行する

Railsアプリケーションの開発において、「よしできた、git push!」したあと、GithubでPRをみるとCIでバツマークがついていた。チェック結果をみたらrubocopでフォーマットエラーを吐いていた・・なんて経験はありませんか? 私はあります。

これを解決する方法が実はありました。

## 前提とする読者
– Railsでアプリケーションを開発している人
– CI環境が整っていて、rubocopを使っている人

## 簡単な方法
gitコマンドでは、フックという仕組みがあり、git commitコマンドの直前に自前のプログラムを実行させることができます。開発中のディレクトリの中に、`.git/hooks` というディレクトリがあるはずです。
`.git/hooks/pre-commit` というファイルを準備して、そのなかで

“`
bundle exec rubocop -a
“`

を書いておきます。
(コミットの前に `.git/hooks/pre-commit` ファイルがそのまま実行されるので、`chmod +x .git/hooks/pre-commit`

元記事を表示

Ubuntuで「Ruby on Railsチュートリアル」の実行環境を作る

# はじめに
Ubuntuに「[Ruby on Railsチュートリアル](https://railstutorial.jp/ “Ruby on Railsチュートリアル”)」の実行環境を整えます。
普通にクラウドで提供されてるものを使ってもいいのですがやはり使い慣れた環境で学習したいためこの記事を作成しました。

# 実行環境
OS:Ubuntu22.04.2 LTS
Ruby on Railsチュートリアル:第7版
Ruby:3.1.2(Ruby on Railsチュートリアルに合わせてます)
Rails:7.0.4(Ruby on Railsチュートリアルに合わせてます)
Bundler:2.3.14(Ruby on Railsチュートリアルに合わせてます)

# インストール
## 必要なツールをダウンロード
参考:[(Ubuntu)Ruby on rails 6.0 環境構築](https://qiita.com/Gushi_maru/items/f3b5cc43e135e678085f)
ほぼ上の記事通りです。
バージョンとインストールするものが若干異なるだけです。

元記事を表示

Sorbetを使ってRubyでAbstract Classを使う

RubyKaigiで以下のセッションでRBIとRBSの比較がいろいろ紹介されていました。
その中で、RBIの機能としてAbstract classの説明があり、面白そうだったので使ってみました。

https://rubykaigi.org/2023/presentations/Morriar.html#day3

## Abstract Classについて

Abstract Class, Abstract Moduleは1つ以上のAbstract Methodを持つクラス、モジュールです。

以下のように定義します。

“`diff_ruby:base_engineer.rb
# typed: true

class BaseEngineer
extend T::Helpers
extend T::Sig

+ abstract!

def initialize(name:)
@name = name
end
end
“`

すると、このAbstract Classのインスタンスを作成しようとすると、型エラーを発生させます。

“`rb
# type

元記事を表示

Ruby 配列 ブロックについて 2

# はじめに
– Rubyの配列やブロックの復習用(2日目)
– 学習したことの備忘録
– 「[Ruby 配列 ブロックについて](https://qiita.com/takayuki91/items/8842c3ac481528097251)」の続き

# 学習内容
##### 配列(Arrayクラス)
– 要素の選択や追加
– 集合

# 参考にした教材
– [プロを目指す人のためのRuby入門]( https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%8

元記事を表示

OTHERカテゴリの最新記事