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

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

誹謗中傷が機能しない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

元記事を表示

開発ツールに頼らず 様々な言語から WebAssembly(第6回)

WebAssembly は多くのプログラム言語からライブラリの様に呼び出す事が出来る。
WebAssembly のコードを書く方法は多くの記事で書かれているが、その使い方はフレームワーク等のツールに頼っている事が多い様だ。
本記事では、そのような便利ツールに出来るだけ頼らず JavaScript, Rust, Python, Ruby から WebAssembly を実行する方法を記載する。

WebAssembly は新しい技術である。
目先の最先端ツールに飛びつくのもよいが、その基礎を学んで長く使える知識を身に着けないか?

本記事はシリーズの第6回である。シリーズ記事の一覧は [第1回] の **#シリーズ記事一覧** に載せている。シリーズの記事を追加する時は [第1回] の一覧を更新して通知を行うので興味の有る人は [第1回] をストックして欲しい。

# 本記事の概要と過去記事の復習

[第5回] では 1 個のグローバル変数を複数のインスタンス間で共有する方法について紹介した。
今回は、外部プログラムから共有する関数を切り替える事で WebAssembly の挙動を変更

元記事を表示

フリーランス歴20年の強強エンジニアからのガチコードレビュー集

# はじめに
こんにちは、[まつけん](https://twitter.com/matsuken_web314)です。
早いもので、Webエンジニアになって、**10ヶ月**経とうとしています。
先月末、僕の職場に参画していたフリーランス歴20年の強強エンジニアCさんが卒業されました。(以降**Cさん**と称します)

Cさんには、いつも迅速かつ丁寧なレビューをしていただいてました。
たまに補助で僕のプルリクにコミットを積んでもらうことなどもあり、お世話になった記憶が大半です。

今回はそんなCさんから受けたコードレビューから、今後どう改善していくのかアウトプットして学びを深めたいため、こちらの記事を書きました。

ペアプロしている時の参考になったこともおまけで書いてます。

:::note info
**この記事が参考になりそうな読者**
– Rubyの「アンチパターン」から良いコードを学びたい人
– エンジニア1年目がどんなコードレビューを受けているのか知りたい人
:::

※こちらの記事に出てくるコードに関しては全て`Ruby`です。実務で学んだことなので、出てくるコードは

元記事を表示

RubyでAtCoder ABC233(A, B, C)を解いてみた

# はじめに
Webエンジニアを目指して、RubyやRailsをいじってます。
今回は、RubyでAtCoder ABC233のA, B, Cを解きました。備忘録として解き方をまとめていきたいと思います。

# A – 10yen Stamp
https://atcoder.jp/contests/abc233/tasks/abc233_a
“`ruby:a-233.rb
x, y = gets.split.map(&:to_i)
y -= x
if y < 0 puts 0 exit end ans = y / 10 puts y % 10 == 0 ? ans : ans + 1 ``` # B - A Reverse https://atcoder.jp/contests/abc233/tasks/abc233_b ```ruby:b-233.rb l, r = gets.split.map(&:to_i) l -= 1 r -= 1 s = gets.chomp s[l..r] = s[l..r].chars.reverse.join puts s ``` #

元記事を表示

Ruby 配列 ブロックについて

# はじめに
– Rubyの配列やブロックの復習用
– 学習したことの備忘録
– 今回は1問1問式

# 学習した内容
– 配列(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%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

元記事を表示

【Rails7】rails/request.jsでAjax制御する

表題通りです。RailsでAjax制御するには今まではjqueryを使ったりしてきました。Rails6になってからrails-ujsというライブラリが推奨され、それによってイベント発火して対応したのですが、このrails-ujsはRails7で非推奨となってしまいました。

代わりに実装された同期制御用のスクリプトturboですが、これはどうも不具合が多く、評判が今ひとつ芳しくない上にRansackとの相性もあまり良くありません。何よりテンプレートやコントローラーで色々書き換えが必要になるのが面倒です。そこで代わりの非同期通信手段を調べていたところ、**rails/request.js**というものも提供されたみたいで、これを使ってAjax制御できるみたいです。

Githubの公式マニュアル
– [rails/request.js](https://github.com/rails/request.js)
Qiita内に触れている記事
– [【Rails7】Ajaxリクエスト時にCSRF tokenを含める(おそらく)公式のやり方](https://qiita.com/gnattal

元記事を表示

開発ツールに頼らず 様々な言語から WebAssembly(第5回)

WebAssembly は多くのプログラム言語からライブラリの様に呼び出す事が出来る。
WebAssembly のコードを書く方法は多くの記事で書かれているが、その使い方はフレームワーク等のツールに頼っている事が多い様だ。
本記事では、そのような便利ツールに出来るだけ頼らず JavaScript, Rust, Python, Ruby から WebAssembly を実行する方法を記載する。

WebAssembly は新しい技術である。
目先の最先端ツールに飛びつくのもよいが、その基礎を学んで長く使える知識を身に着けないか?

本記事はシリーズの第3回である。シリーズ記事の一覧は [第1回] の **#シリーズ記事一覧** に載せている。シリーズの記事を追加する時は [第1回] の一覧を更新して通知を行うので興味の有る人は [第1回] をストックして欲しい。

# 本記事の概要と過去記事の復習

[第3回] と [第4回] は WebAssembly のコードに状態を持たせる方法について記載した。
今回は WebAssembly に「クラス変数」の様な物を追加するコードを紹介する。

元記事を表示

Railsで入力フォーム等にバリデーションを設定する

# そもそもバリデーションとは
入力フォームなどでユーザーが故意または過失のもと誤った情報を入力した際に、入力内容をそのまま登録するのではなく、エラーをかえすこと。
これにより、誤情報を未然に防ぐほか、攻撃者からのXSSなども防ぐことが可能になる。

# 実装例
RailsのModelに記述します。

– 空データを登録できないようにする
“`ruby:member.rb
class Member < ApplicationRecord validates :name, presence: true end ``` - 文字数を制限する。 ```ruby:member.rb class Member < ApplicationRecord #長さの上限を50文字に設定 validates :name, length: { maximum: 50 } #長さの下限を2文字に設定 validates :name, length: { minimum: 2 } #長さの範囲を2-50文字 validates :name, lengt

元記事を表示

rails7.2から`TestFixtures#fixture_path`が廃止されるためrails 7.1では`DEPRECATION WARNING: TestFixtures#fixture_path is deprecated`が発生する

# 発生する理由

`rspec_helper.rb`の中で以下のように`fixture_path`を指定してテストケースで参照している場合に`DEPRECATION WARNING`が発生します。

“`ruby:rspec_helper.rb
config.fixture_path = Rails.root.join(‘spec/fixtures’)
“`

“`ruby:spec/sample_spec.rb
Rack::Test::UploadedFile.new(“#{fixture_path}/test.txt”)
“`

### DEPRECATION WARNING

“`
DEPRECATION WARNING: TestFixtures#fixture_path is deprecated and will be removed in Rails 7.2. Use #fixture_paths instead. If multiple fixture paths have been configured with #fixture_paths, then

元記事を表示

OTHERカテゴリの最新記事