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

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

【個人開発】断捨離アプリ「steteco」を未経験者が開発しました(Rails7)

## はじめに
初めまして。この度、初めて断捨離アプリである個人アプリ「steteco」をリリースいたしました。
まだまだプログラミング学習中の未経験エンジニアであり、技術的な内容などは誤りを含む可能性があります。
そのため、おかしな記述などがあればコメント等で教えていただけたら幸いです!
## stetecoについて
今回のアプリは、不用品の整理をしている際に「もったいないから」「フリマアプリで売れるかもしれないから」と考えてしまい、捨てる決断ができない優柔不断な方向けの、断捨離を後押しするサービスです。

私は、部屋の整理をして不用品が出るたびに、「フリマアプリで売れるかも」と思い、結局物置部屋のものが増えるだけという悪循環を繰り返していました。
同様に優柔不断な性格で整理ができない人が多いと気づき、断捨離を後押ししてくれるツールがあれば便利なのではと考え、「steteco」を作成しました。
– 作成期間: 約3ヶ月
– URL:https://steteco-dansyari.com/
– GitHub:https://github.com/ayaikg/sort_unwante

元記事を表示

Rubyで開発していた際にRuboCopで怒られた内容を纏める

## はじめに
rubyの静的解析ツールで有名なRuboCopとvscodeに以下の拡張機能を導入し、
rubyのコードを書いているときに出現したメッセージと必要な対応についてまとめます。
[ruby-rubocop-revived](https://marketplace.visualstudio.com/items?itemName=LoranKloeze.ruby-rubocop-revived)
### 想定読者
RuboCopで発生したメッセージ内容と対処法を探している方

## メッセージ一覧
### Missing frozen string literal comment.(Style/FrozenStringLiteralComment)

文字列リテラルを最初からfreezeした状態で生成してくれる、以下のマジックコメントが記載されてないときに出現します。

文字列リテラルを非破壊的にするメリットはそんなにあるのか?
については以下の記事が詳しく説明されておりました。
https://qiita.com/universato/items/1dd8943df07f24

元記事を表示

【GraphQL Ruby】値が空文字の場合に null が返るように

# 結論

“`ruby
class NilIfEmpty < GraphQL::Schema::FieldExtension def after_resolve(value:, **_rest) value.presence end end ``` ```ruby class Types::BaseField < GraphQL::Schema::Field def initialize(*args, **kwargs, &block) super # NOTE: unwrap を使うと、String! のような null: false のフィールドでも if の中を通せる if type.unwrap == GraphQL::Types::String extension(NilIfEmpty) end end end ``` # 背景など Rails × GraphQL Ruby で GraphQL サーバーを実装していて、非必須な String 型のデータのためにDBレベルでカラムに空文字のデフォル

元記事を表示

authorizeメソッドについて

## authorizeメソッドとは

authorizeメソッドとは、`Pundit`というgemを導入することにより、Rubyで使用できるメソッドのこと。

### 役割
引数のオブジェクトの認可を確認するメソッドとして、よく使用される。

例えば、下記の`authorize(current_site)`の場合、
authorizeメソッドの引数である`(current_site)`が、認可されているかどうかを確認するメソッドとして、`authorize`メソッドが使用されている。

(`current_site`サイトにログインしているユーザーがadminかそれ以外かの認可の確認を行っている。)

#### authorizeメソッドの呼び出し元であるコントローラー
“`Ruby:app/controllers/admin/site/attachments_controller.rb
class Admin::Site::AttachmentsController < ApplicationController def destroy authorize(curre

元記事を表示

Rubyの基本(文法)

# Rubyにおける定数
Rubyでは変数だけでなく定数を定義することができる。
名前をすべて大文字で書くことにより定数となる。
簡単に更新したくないものは定数として定義すると良い。
“`ruby:sample_01.rb
name = “変数のMito” # 変数
NAME = “定数のMito” # 定数
“`
しかし、これらは値を更新しないように注意を促すにすぎず、値自体は更新できる。
実行時にWarningが表示される。

# 複数行のコメントアウト方法は以下の3つ
“`ruby:sample_02.rb
# ① 1行ずつ「#」でコメントアウト(範囲選択後、「Command + /」)
# ここがコメントになる

# ② 「=begin」と「=end」で囲む
=begin
ここがコメントになる
=end

# ③ 「__END__」(以下すべてコメントアウト)
__END__
以下すべてコメントになる
!!!俺もコメント!!!
!!!私もコメント!!!
“`

# 入力の受け取りについて
「gets」で入力を受け取ることができる。
単に「gets」としても受け取り可能だ

元記事を表示

順位のつけ方

## はじめに
私はプログラミング学習を初めて1か月の初心者です。

学習する際、順位を作成するプログラムに思いのほか苦戦しました。自分の学習のメモとして記事を作成しました。

## コード
“`ruby
score = [2, 4, 3, 4, 5, 4, 1, 5, 2, 3]

score_order = score.sort.reverse

for i in 0..9 do
print “#{score_order[i]}点が#{i+1-score_order.slice(0,i).count(score_order[i])}位。”
end

#出力 5点が1位。5点が1位。4点が3位。4点が3位。4点が3位。3点が6位。3点が6位。2点が8位。2点が8位。1点が10位。
“`
## 解説
5点満点のテストを10人で行ったとき、各点数に対する順位を考えます。

点数は一つの配列にまとめられているとします。

最初にscore.sort.reverseで、点数を降順に並べ替えた配列を作成します。

そして、並べ替えた配列を利用して順位を考えます。配列番号の前に同じ値

元記事を表示

Macで以前できなかった Ruby+Rails環境構築に再トライ

## 以前できなかったこと
### 1.  rbenvを利用してのruby version up
Ruby Version UpしたのにVersionが変わってない!
“`
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin23]
“`

この時は諦めてrbenvをアンインストールしてHomebrewからインストールしなおしました。universalと表示されているのは一度アンインストールしたのでMacデフォルトのRubyバージョンが表示されています。

### 2.  rbenvを使用してのrails install

Railsインストールしたのになんで???
“`
$ rails -v
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails

You can then rerun your

元記事を表示

【Ruby】sampleメソッドについて

## はじめに
Rubyのsampleメソッドについてまとめました。

## sampleメソッドとは
– 対象となる配列から無作為に要素を取得し、戻り値として返します。
引数なしだと1つ、引数有(数値)だと指定した数だけ要素を取得します。
– 引数を指定して要素を取得した場合、取得元の要素が重複していなければ、取得した要素が重複することはありません。
– インスタンスメソッドです。newしたオブジェクトに対して実行します。

## 使い方
“`ruby:Ruby
a = (1..10).to_a
p a.sample #=> 9
p a.sample #=> 10 ランダムに値を取得するため、前回の実行と結果が異なる
p a.sample(3) #=> [1, 9, 3]
p a #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
“`

引数にはrandomオブジェクトを指定することもできます。

“`ruby:Ruby
a.sample(Rand(2..4)) #=> [4, 7]
`

元記事を表示

【Ruby】optparseの使い方について

## はじめに
Rubyのプログラムを作成する中でoptperseを用いたため、使い方をまとめました。

## optparseとは?
> コマンドラインのオプションを取り扱うためのライブラリです。

## 使い方
以下のコードのように使用します。

“`ruby:Ruby
# optparseのライブラリ読み込み
require ‘optparse’
# オブジェクトの作成
opt = OptionParser.new

# オプションの登録
opt.on(‘-a’) {|v| p v } #引数なし
opt.on(‘-b VAL’) {|v| p v } #引数あり(必須)
opt.on(‘-c [VAL]’) {|v| p v } #引数あり(任意)

#入力コマンドの解析
opt.parse!(ARGV)
p ARGV
“`
– Rubyの初期状態ではオプションは利用できないため、
コマンドラインでオプションを利用するためのライブラリを読み込みます。
– `on`メソッドを使用することで、任意のオプションを登録できます。
ブロックの中身は引数が渡されたときの処理を記

元記事を表示

【Rails】SprocketsによってコンパイルされたCSSを文字列として取得する方法

Railsでは通常、layoutファイルで`stylesheet_link_tag`メソッドを使ってSprocketsによってコンパイルされたCSS(元々`app/assets/stylesheets/application.css`等に書いていたCSS)を参照します。

“`erb:app/views/layouts/application.html.erb




<%= stylesheet_link_tag "application" %>

“`

背景を説明すると長くなるので省略しますが、とある事情でこのコンパイルされたCSSを文字列として取得する必要が出てきました。(簡単にいうと、``でcssファイルにリンクするのではなく、HTMLに直接スタイルシートのコードを埋め込む必要があった)

いろいろ調べた結果、以下のようなコードで取得できることがわかりました。

“`ruby
Sprockets::Railtie
.b

元記事を表示

Redux-sagaを使ってReactからRubyで作成したAPIに接続する

# やりたいこと
– Redux-sagaを使ってReactからRubyで作成したAPIに接続する
– Redux、Redux-sagaの使い方については下記記事参照
[Reac初心者でも読めば必ずわかるReactのRedux講座 | アールエフェクト](https://reffect.co.jp/react/react-redux-for-beginner/)
[redux-sagaとは何なのか? – Qiita](https://qiita.com/souhei-etou/items/2dce0a1dc8f24e9c2668)
# 前提
– ruby: 2.7 + Rails: 6
– react: 16.8.6
# ファイル構成
“`
app
├── controller
│ └── forms_controller.rb
└── javascript
├── app
│ ├── containers
│ │ └── Form.js
│ └── redux
│ ├── actions

元記事を表示

railsでjava scriptやcssを使用するには?

Railsでjava scriptやCSSファイルを使用する場合、一般的には2つの方法があるそうです。(どっちを使えばいいの?と思いますが、初学者にはまだわかりません、、、)

## 1. CDNからの読み込み
外部のライブラリやフレームワークを使用する場合、そのファイルをCDNから直接読み込むことができます。これにより、アプリケーションのレスポンスタイムが改善され、ライブラリのバージョン管理や更新が簡素化されます。
※「CDN」はContent Delivery Networkの略で、**インターネット経由でファイルを配信する仕組み**のことです。

###  例 jQueryやBootstrapを読み込む場合
“`html


  
    sample
    
    
    
   

元記事を表示

Ruby シンボルとキーについて

## Rubyにおけるシンボルとキーについての関係性について

Railsでストロングパラメータの設定を行う際に、シンボルとキーの理解が整理できていないことに気がついたので、こちらでまとめておこうと思います。

“`ruby
def site_params
params.require(:site).permit(:name, :subtitle, :description, :favicon, :og_image, main_images: [] )
end
“`
私が気になった点は、`:subtitle`と`main_images: []`の書き方の違い(:の位置)です。

`:subtitle`
単一のデータを所有するカラムの記載の仕方。

`main_images: []`
複数のデータを所有するカラムの記載の仕方。
ストロングパラメータに追加する際は、**末尾に追加**する。
そうでないと、Railsの規約に従っていないらしく、エラーが出る。

今回の話題は、この`:subtitle`、`main_images:`の部分について。

### キーの種類

元記事を表示

プロを目指す人のためのRuby入門[改訂2版]を読んで

プロを目指す人のためのRuby入門[改訂2版]を読んでの感想

## 良かったところ

### 説明が丁寧
まず、本書のイントロダクションにも書いてあったのですが、まったくプログラムを書いたことのない完全なプログミング初心者には少し難易度が高い印象でした。
ですが、サンプルコードがたくさん書かれているのでわかりやすかったです。

### 基礎から応用まで
中級者〜上級者用ではあるのですが、基礎を理解できる章からそれを使った応用の章までと網羅されていました。

### 例題とリファクタリング作業
章ごとに例題があり、動いた後にどのようにリファクタリングできるかを説明してあります。シンプルでわかりやすい構文での書き方を学べます。

## 学んだこと

プログラマの三代美徳は「怠惰・短気・傲慢」

### 基本構文について
* メソッドの戻り値の指定にreturnは使わない。returnはメソッドを途中で脱出する際に使われることが多く最後に評価された式がメソッドの戻り値になる。
* エイリアスメソッドが多くある。
* メソッド定義も式になっている。メソッド名をシンボルとして返す。

###

元記事を表示

discardで論理削除する

# はじめに
先日、業務でdiscardを使用して論理削除の実装をしました。
discardは初めて使用したのですが、とても簡単に論理削除の実装ができたため、備忘録として記事にしたいと思います。

私自身、まだまだ未熟な経験の浅いエンジニアですので、誤った解釈をしている可能性もあります。もしそういった場合がありましたら、ぜひコメントでご指摘いただければ幸いです。

# 論理削除とは

論理削除は、データベースのレコードを物理的には削除せずに、削除されたかのように扱う方法です。
レコードに「削除された」という状態を示すマークやフラグを設定することによって、レコードはデータベースに残り続けますが、アプリケーションの動作上では「存在しない」または「アクセス不可能」な状態にできます。

# discard とは

discard は、Ruby on Rails で論理削除を簡単に実装するための Gem です。
discard では、論理削除に関連するカスタムロジックを書く必要がなくなり、一貫した方法でデータを扱うことができます。

# 環境設定

### Gem のインストール

Gemfi

元記事を表示

Rails Server が正常に終了しない場合の対処法

## 事象

`Rails Server` を使用している際、通常は `Ctrl + C` を使用して終了しますが、サーバーが正常に終了しない場合があります。再度 `bin/rails s` コマンドで `Rails Server` を起動しようとすると、以下のようなエラーが発生することがあります。

“`sh
% bin/rails s
=> Booting Puma
=> Rails 7.0.4.3 application starting in development
=> Run `bin/rails server –help` for more startup options
A server is already running. Check /path/to/your/project/tmp/pids/server.pid
Exiting
“`

こちらのエラーメッセージは `Rails Server` が既に実行中であることを示しており、正常に終了していない、或いは異常終了して `プ

元記事を表示

button_to に思った通りの CSS が効かない問題の対処法

## 事象

`button_to` という `Rails` のヘルパーメソッドを使って送信ボタンを実装するときに下記のように実装すると `button_to` に思った通りの `CSS` が効きませんでした。今回はその原因と対処法を共有いたします。

“`ruby
<%= button_to '送信', 任意の_path, method: :post, params: { key: 'value' }, class: 'custom-class' %>
“`

## 原因

この問題の根本原因は `button_to` ヘルパーが生成する `HTML` 構造にあります。具体的には、指定した `class (custom-class)` が `form` 要素ではなく、内部の `input` 要素に適用されてしまうためです。`Rails` は `button_to` を使用すると、以下のような `HTML` を生成します。

“`ruby:before

元記事を表示

EOFの意味は?

なぜecs[EOF]がある?

https://allabout.co.jp/gm/gc/471930/

なぜ、「;」を採用している?

元記事を表示

RuboCop-airbnbの導入方法

## 環境構築の手順
### ①Gemの追加
“`:Gemfile
group :development, :test do

# 以下追加
gem “rubocop-airbnb”
end
“`

### ②rubocop-airbnb の設定
ルートディレクトリに以下の2ファイルを作成する
“`:.rubocop.yml
inherit_from:
– .rubocop_airbnb.yml

# Rails用に最適化
Rails:
Enabled: true

# 文字数の上限を80文字から変更
LineLength:
Max: 130

# rubocopで検証したくないフォルダを指定
AllCops:
Exclude:
– ‘db/**/*’
– ‘config/**/*’
– ‘bin/*’
– ‘**/Gemfile’
– ‘vendor/**/*’
– ‘.git/**/*’
“`
“`:.rubocop_airbnb.yml
require:
– rubocop-a

元記事を表示

【VSCode+WSLからの移行者向け】RubyMineとWSLを接続、Remote Interpreterとして使ってみる

RubyMineの設定のついでに書き残しておきます。筆者の実行環境は以下の通りです。
* [RubyMine IDE:](https://www.jetbrains.com/ruby/) Version 2023.3
* [Ruby](https://www.ruby-lang.org/ja/): 3.2.3 (2024-01-18 revision 52bb2ac0a6) [x86_64-linux]
* [Rbenv](https://github.com/rbenv/rbenv): 1.2.0-87-ge8b7a27
* [WSL](https://learn.microsoft.com/ja-jp/windows/wsl/): 2.0.9.0
* [Ubuntu](https://jp.ubuntu.com/): 22.04.3 LTS

# 1. 動機
筆者は最初VSCodeでRubyを書いていたんですが、最近Rubyの一番標準的な拡張機能が非推奨化して、Shopify社製のRubyLSPを使うようにと公式から勧告がありました。しかし、その安定性の低さに発狂し学生特権を行使し

元記事を表示

OTHERカテゴリの最新記事