Ruby関連のことを調べてみた2022年06月23日

Ruby関連のことを調べてみた2022年06月23日

RubyプログラマがAtCoderの環境をatcoder-cliとonline-judge-toolsで快適にしてみた

# 0. はじめに
基礎力向上・アルゴリズム強化のために再度習慣化しよう!
どうせやるならコンテストにも参加したい!!
ということで[AtCoder](https://atcoder.jp/home)を始めることにしました
ビギナー向け、上級者向けなど色んなレベルのコンテストが**毎週開催**されてます

ただ実際に少しAtCoderをやってみて気づいたのですがウェブ上での操作性がイマイチ?
ちょっとコードを書いて事前テストするのもサンプルの入力例をコピペしなきゃいけない
そして欲を言うなら、コマンドラインですべて完結させたい
キーボードから手を離してマウスでボタンぽちぽちしなきゃいけないのは本当にナンセンス

調べてみたらありました(開発者様、本当にありがとうございます。みんなでスター送りましょう?)
– [atcoder-cli](https://github.com/Tatamo/atcoder-cli)
– [online-judge-tools](https://github.com/online-judge-tools/oj)

本記事は上記のツールを用いてRubyでAt

元記事を表示

Rubyの変数展開

シングルクォーテーション(”)は変数展開が行われない。

変数展開を行う理由は、自動で#to_sが働くから。
#to_sとは、文字列ではない値を文字列に変換するメソッド。

変数展開は、文字列連結と違い、数値 + 文字列の連結ができる。

元記事を表示

Railsでの一覧機能作成手順

# はじめに
初心者なりにまとめたものになりますので、諸先輩方からは何書いてんだおめえと感じる部分があると思います。
そう感じた際は、お手数ですが、コメント頂けると幸いです。

内容としては、 ***コントローラー作成からマイグレーション***になります。

## 目次
– ***一覧機能を実装する手順***
-routes.rbファイルの編集
-ルーティングの確認
-コントローラーの作成
-indexアクションの定義
-ビューファイル作成・編集
-ビューの実装確認
-モデルの作成
-マイグレーションファイルの編集
-マイグレーションの実行

## routes.rbファイルの編集
– ***app/config/routes.rbに存在するファイルの編集***
初期は
Rails —— do
~~
end
が存在し、~~の箇所へ下記のコードを入力
※作成したばかりの時は、~~の中身は削除する
#
get ‘posts’, to: ‘posts#index’
HTTPメソッド ‘URIパターン’, to: ‘コントローラー名#アクション名’

***解説*

元記事を表示

ruby のパターンマッチ使ってなかったので練習する

# これは何?

Python に 30年の時を超えて `switch` 〜 `case` のようなものが入ったという噂を聞いて。
そういえば ruby のパターンマッチ使ってなかったと思ったので、ちょっと触ってみる。

# 参考資料

* [Ruby3.0でのパターンマッチ機能の変更点](https://tech.medpeer.co.jp/entry/2021/01/12/100000)
* [NEWS for Ruby 2.7.0](https://docs.ruby-lang.org/ja/2.7.0/doc/news=2f2_7_0.html)
* [NEWS for Ruby 3.0.0](https://docs.ruby-lang.org/ja/3.1/doc/news=2f3_0_0.html)
* [NEWS for Ruby 3.1.0](https://docs.ruby-lang.org/ja/3.1/doc/news=2f3_1_0.html)

公式の普通のリファレンスマニュアルには書いてないので、わかりにくい。
こんなところに書くより貢献したほうがいいの

元記事を表示

レコード数が膨大のカラムにダウンタイムなしでindexを貼る方法

## はじめに
MySQLで、レコード数が膨大のカラムに index を貼ろうとすると、デプロイ時に落ちることがありました。
この記事では、実際に行ったダウンタイムなしで index 貼る方法を紹介します。

### 簡単なDB構成
今回は、User テーブルの point カラムに対して index を貼ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/833332/a5096689-3568-7e43-e4fa-c4f9da3778a1.png)

## 手順
– index を貼った point_new カラムを追加し、deploy
– point の値を point_new に移すスクリプトを流す
– rename する migration ファイルを作成し、deploy

### index を貼った point_new カラムを追加
User テーブルに、point_new というカラムを追加します。
カラムの追加に関しては、[こちらの記事](https://qiita

元記事を表示

問題を解いてRubyの知識を深ぼる。⑦

# はじめに
毎日行ってきたRubyの問題を解くアウトプットは今日で最後になります。

# Q31 条件演算子
3桁の正の整数を入力。その整数の「百の位・十の位・一の位の和」について、
10の倍数(0,10,20,30…)からの差が
– 2以内であるときは”True”
– それ以外は”10の倍数との差は○です”
と表示されるようにする。
出力例
near_ten(117)→True
near_ten(123)→10の倍数との差は4です
near_ten(111)→10の倍数との差は3です
0も10の倍数に含むものする。
百の位・十の位・一の位の和が6などの時に、「10の倍数との差は6です」と出力せずに、「10の倍数との差は4です」と10の倍数から近い方の差を出力する。
解答
“`
def near_ten(num)
total = (num/100) + (num/10 % 10) + (num % 10)
remainder = total % 10
if remainder <= 2 || remainder >= 8
puts “True”
elsi

元記事を表示

TypeError – no implicit conversion of nil into String エラーの解消

# エラーの状況
“`ruby
class XXX
def XXX
content = ”
content << @user.name return content end end ``` 空のstringクラスのcontentに、@user.nameで取得した値(今回の場合はnil)を結合して、そのcontentを返すメソッドをあるモデルに定義したが、`TypeError - no implicit conversion of nil into String` が発生した。nilからstringへの暗黙の変換はないとのこと。 # TypeErrorとは リファレンスから引用。 >メソッドの引数に期待される型ではないオブジェクトや、期待される振る舞いを持たないオブジェクトが渡された時に発生

contentのメソッド<<にnilが渡されていることが原因か? # Stringのインスタンスメソッド << ```ruby # 例 content = '' content << "tomato" p content # => “tomato”
“`
引数で与えられ

元記事を表示

パンくずリストの作成 breadcrumbs

# 導入
パンくずリストの導入にはgretelというgemが便利。
“`
gem ‘gretel’
“`
“`
% bundle install
“`
“`
% rails g gretel:install
“`
上記のコマンドで、configディレクトリ直下にbreadcrumbs.rbが作成される。

# パンくずリストの作成
例として、トップページ→投稿一覧→投稿詳細という階層のリストを作成する。
“`ruby
crumb :root do
link “Top”, root_path
end

crumb :post_index do
link “投稿一覧”, posts_path
parent :root
end

crumb :post_show |post| do
link “投稿詳細”, post_path(post)
parent :post_index
end
“`
対象のviewファイルに下記のように記載する。
“`erb
<% breadcrumb :post_index %>
<% breadcrumb :post_show, @po

元記事を表示

Rubyの条件分岐の使い分けについて

条件分岐を実装するシチュエーションがあり、使い分けの定義が曖昧だったのでいろいろ調べてまとめてみました。
基本的な内容です。

# 条件分岐とは
「〜な時〜な処理をする。」というものです。点数が80点以上であればgreat、60〜80点であればgood、60以下であればbadみたいな感じで結果に応じた処理を行うものです。
## if文
“`if 条件 then 処理 end“`のような感じで書きます。条件がtrueの時に処理が実装されます。
“`
if score >= 80
puts “Great”
elsif score >= 60
puts “Good”
else
puts “Bad”
end
“`

## unless文
“`unless 条件 then 処理 end“`のような感じで書きます。条件がfalseの時に処理が実装されます。ifの逆バージョンです。
“`
unless score >= 60
puts “合格”
else
puts “不合格”
end
“`

## case文
“`case 評価する式 when 条件 処理 en

元記事を表示

rubio-radio – Rubyで作るシンプルなGUIラジオアプリ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144608/e166db65-1b1b-0f8b-1684-62b97a4d6bf3.png)

## はじめに

Rubyを使ってシンプルなGUIのラジオアプリを作った。

https://github.com/kojix2/rubio-radio

[Glimmer-DSL-LibUI](https://github.com/AndyObtiva/glimmer-dsl-libui) を利用した。

https://github.com/AndyObtiva/glimmer-dsl-libui

## 概要

* [RadioBrowser](https://www.radio-browser.info)のTopVote500がテーブルに表示される。
* インプットボックスに打ち込むと、ラジオ局をインクリメンタルサーチできる(Glimmer-DSL-LibUIの機能)
* 再生ボタンを押すとコマンド(デフォルトでは[VLC](htt

元記事を表示

昨日までの投稿を削除するバッチ処理

## 記事の対象者
バッチ処理で投稿のデータを管理したい人

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 実装の流れ
**1、削除プログラムの作成
2、gem【whenever】の導入**

## 削除プログラムの作成
app/libの配下にbatchフォルダを作成します。
次に作成したbatchフォルダの中でdata_reset.rbファイルを作成して以下を記述して保存します。

“`php:app/lib/batch/data_reset.rb
class Batch::DataReset
def self.data_reset
@activity_points = ActivityPoint.all.where(“date <= ?", Date.yesterday) @activity_points.delete_all p "前日の活動拠点を全て削除しました" end end ``` コードの解説をします。 私は活動日が昨日になっているものを削除するプログラムを作成しました。 ActivityPointモデル内にある

元記事を表示

[RSpec] トップレベルに定義されたメソッドをモックする方法

## サンプルコード
トップレベルに定義した`hoge`メソッドをモックして、モックできたことの検証を行うテストです。
“`ruby:hoge_spec.rb
require ‘rspec/core’

def hoge
‘?’
end

RSpec.describe ‘トップレベルに定義されたメソッドをモックする’ do
it ‘モック前に?を返し、モック後に?を返す’ do
expect(hoge).to eq ‘?’

allow_any_instance_of(Object).to receive(:hoge).and_return(‘?’)

expect(hoge).to eq ‘?’
end
end
“`

上記のテストをRSpecで指定して実行すると、成功します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468458/fa32148e-399f-5a6d-ebe8-8fab79e9fbdc.png)

## なぜ成立するのか?

元記事を表示

Rubyの問題を解いて知識を深める。⑥

# はじめに
今日も引き続き問題を解いていきます!

# Q26 2つの文字列の末尾に対して一致・不一致を判断するプログラムの実装
以下の要件を満たすend_otherメソッドを実装。

– メソッドの引数に、任意の2つの文字列を指定する。
– 引数に指定された2つの文字列のうち、どちらかがもう一方の文字列の末尾にある場合は、Trueを出力する
– 上記を満たせていない場合は、Falseを出力する
– 入力された文字が大文字でも小文字でも、同一の文字として処理を行う
雛形
“`
def end_other(a, b)
# 処理を記述
end

# 呼び出し例
end_other(‘Hiabc’, ‘abc’)
“`
出力例
end_other(‘Hiabc’, ‘abc’) → True
end_other(‘AbC’, ‘HiaBc’) → True
end_other(‘abc’, ‘HaIoBc’) → False
解答
“`
def end_other(a, b)
a_down = a.downcase
b_down = b.downcase
a_len

元記事を表示

Railsでのアプリケーション新規作成手順

# はじめに
初心者なりにまとめたものになりますので、諸先輩方からは何書いてんだおめえと感じる部分があると思います。
そう感じた際は、お手数ですが、コメント頂けると幸いです。

内容としては、 ***フォルダ作成からSequel Proへのデータベース作成までの手順***になります。

## 目次
– ***アプリケーション新規作成手順***
-アプリ作成場所
-rails newの実行
-アプリ名のディレクトリにいることを確認
-データベースを作成

## アプリ作成場所
– ***作成したい場所へファイルを作成***
私は、ホームディレクトリに”projects”という名前のフォルダを作っている。

## rails newの実行
ターミナルを立ち上げ、ホームディレクトリにいることを確認(`pwd`を実行)した後、下記のコマンドを実行

#
rails バージョン名 new アプリ名 -d db管理システム名

例.
rails _6.0.0_ new first_app -d mysql

***解説***
– rails ~~~~ newの~~~~

元記事を表示

ソート機能実装で役に立つサイト

★ソート機能について記載されたQiita

https://qiita.com/kcl215/items/c0222befe4a6b270986a

https://qiita.com/aaaasahi_17/items/f99174efa1c26131797e

★Bookersにソート機能実装的な感じだったやつ!

https://techtechmedia.com/ransack-app-rails/

★ソート機能周辺で役に立ちそうな感じ♪

https://techblog.hubbit.io/2021/04/18/5ruby-on-rails-taskapp-4/

元記事を表示

FactoryBotメモ

# FactoryBotとは
テスト用のダミーデータを簡単に作成できるGem。

# 導入
“`
group :development, :test do
# 省略
gem ‘factory_bot_rails’
end
“`
“`
% bundle install
“`

# FactoryBotの設定
“`ruby
RSpec.configure do |config|
# 省略
config.include FactoryBot::Syntax::Methods
end
“`
system/spec_helper.rbに上記を記載することで、Factroy作成時にFactoryBotの記載を省略できる。

# factoriesの作成
“`
% rails g factory_bot:model user
“`
factroriesディレクトリ直下にusers.rbが作成される。

# サンプルデータの記載
## 雛形
“`ruby
FactoryBot.define do
factory :user do

end
end
“`
## 基本的

元記事を表示

星評価実装で役に立つサイト

★jQuery Raty – A Star Rating Plugin (current version: 1.4.3)

https://www.alpinestyle.co.il/media/vendor/jquery.raty-1.4.3/

★星評価実装

https://kodocode.net/design-js-raty/

★【Rails】raty.jsを使った評価機能を作る

https://qiita.com/d0ne1s/items/10c2c2c05449b73b099d

★【Rails】raty.jsを用いた星5レビュー機能の実装

https://qiita.com/kcl215/items/e226ac58d14360fd1b8e

AWSのCloudFrontを構築するスクリプトをRubyで作った

# 目的
CloudFrontでコンテンツを提供したいです。
ですが毎回コンソールで立ち上げるのはめんどうです。ある程度の雛形を作成しておいて、一部を書き換えることで簡単にデプロイするスクリプトを構築しました。
CloudFrontを構築したのちに、Route53にドメインを設定しています。

# コード
## CloudFront
まずベースとなるJSONを構築します。
以下のコマンドでゼロから雛形を生成できます。
```
aws cloudfront create-distribution-with-tags --generate-cli-skeleton
```
または既にあるCloudFrontから取得します。
```
aws cloudfront get-distribution --id xxxxxx
```
以下のようなJSONを用意します。
```json:cloud_front_base.json
{
"Tags": {
"Items": [
{
"Key": "Name",

元記事を表示

【Ruby】ハッシュとシンボルについて学んだこと

# はじめに
チェリー本を読んで、ハッシュとシンボルについて学んだので簡単にまとめました!

# 参考
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで

# ハッシュとは
キーと値の組み合わせでデータを管理するオブジェクトのこと

# ハッシュの書き方
キーが文字列かシンボルによって、書き方が変わります。

## キーをシンボルにする場合(一般的)
{キー:値}でハッシュを生成します。
```ruby:キーをシンボルにした場合のハッシュの書き方
profile = {name:'太郎'}
```
## キーを文字列にする場合
{キー=>値}でハッシュを生成します。
ただし、あまり一般的な方法ではないようです。
```ruby:キーを文字列にした場合のハッシュの書き方
profile = {'name' => '太郎'}
```
# 要素の追加・変更
追加・変更ともに、「ハッシュ[キー] = 値」で記述します。
上記で指定したキーが、
+ 存在しない場合は:追加
+ 存在する場合は:変更
と、挙動が変わります。

```ruby:要素の追加
profil

元記事を表示

メタプログラミングに触れてみた

# メタプログラミングとは

言語要素を実行時に操作するコードを記述すること

# 言語要素

- classやmethod、moduleなど、エディタ上で定義したままのプログラムの構成要素
- 通常、プログラムの実行時には言語要素は実体を失っているため、定義を変更することはできない

ただし、Rubyを除いては

# コードを書くコードを書く

## インスタンスメソッドを動的に生成する

```ruby
# frozen_string_literal: true

class Sample
def initialize(method_list)
method_list.each do |mathod_name|
Sample.define_new_method(mathod_name.to_sym)
end
end

def self.define_new_method(method_name)
define_method(method_name) do
p method_name.

元記事を表示

OTHERカテゴリの最新記事