Ruby関連のことを調べてみた2021年12月21日

Ruby関連のことを調べてみた2021年12月21日

[py2rb] deque

# はじめに
移植やってます
# deque (Python)
“`python
cleavage_sites = deque([0], maxlen=ml)
“`
デックは分かるのですが、`maxlen`は曲者
> 長さが制限された deque がいっぱいになると、新しい要素を追加するときに追加した要素数分だけ追加したのと反対側から要素が捨てられます

https://docs.python.org/ja/3.7/library/collections.html#collections.deque
# どうする? (Ruby)
“`ruby
class Deque
attr_accessor :que
def initialize(*args)
@que = args[0]
@maxlen = args[1]
end

def push(args)
@que.push args
while @maxlen.nil?.! && @que.size > @maxlen
@que.shift
end
end

元記事を表示

rbenvで2.0.0-p648のインストール時にビルドに失敗する

## 現象

超久々にRubyを触っているんだが、
配備する環境に合わせて、Rubyの2.0.0-p648を利用しようとしたが、

“`shell
$ brew install rbenv
$ rbenv install -L | grep p648
2.0.0-p648
“`

ビルドでエラーになる。

“`shell
$ rbenv install 2.0.0-p648
Downloading openssl-1.0.2u.tar.gz…
-> https://dqw8nmjcqpjn7.cloudfront.net/ecd0c6ffb493dd06707d38b14bb4d8c2288bb7033735606569d8f90f89669d16
Installing openssl-1.0.2u…
Installed openssl-1.0.2u to /Users/mitsuaki1229/.rbenv/versions/2.0.0-p648

Downloading ruby-2.0.0-p648.tar.bz2…
-> https://cache.ruby-

元記事を表示

[py2rb] import

# はじめに
移植やってます
# import (Python)
“`utils.py
def parse(s):
return s.upper()
“`
“`main.py
import utils

print(utils.parse(‘abs’))

# ABS
“`
外部ファイルのモジュールを読み込みます。
しかし、この時点でかなりの違和感があります。
# require_relative (Ruby)
“`utils.rb
def parse(s)
s.upcase
end
“`
“`main.rb
require_relative ‘utils’

puts parse(‘abs’)
“`
`Ruby`で同様に書いた場合、いきなり関数名のみで呼び出します。
`Python`の場合、ファイル名+関数名での呼び出しになっています。

名前空間的には、関数名のみでの呼び出しはあまり喜ばしくないので、`Ruby`の場合、例えば次のようになります。

“`utils.rb
module Utils
def self.parse(s)
s.up

元記事を表示

AWS EC2の「No space left on device」エラーの解決方法

## はじめに
株式会社じげんのrkinseiです。
:airplane: 留学エージェント比較サービス 留学くらベーるの開発を担当しています。

今回はAWS EC2の「No space left on device」エラーの解決方法を紹介します!

苦戦しながら修正したものの、完璧な対応はまだできていないと思いますが、今回実際に試してみた対処法をまとめてみました。
これから同じエラーを解決したい方の参考になれば幸いです。:relaxed:

## エラーの概要
RailsアプリケーションをAWSのEC2インスタンスにデプロイした際に、「no space left on device」とエラーメッセージが表示されます:triumph:

“`
error An unexpected error occurred: “ENOSPC: no space left on device, copyfile ‘/home/ec2-user/.cache/yarn/XXXXXXXXX'”.
rake aborted!
“`

インスタンスにログインすると、以下のようにエラーメッセージが表示さ

元記事を表示

CloudWatchLogsでRailsアプリのログを表示してみた

## はじめに
Railsアプリケーションを運用しているEC2上のログを、CloudWatchで表示するまでの手順をまとめました。
公式ドキュメントをベースに細かい部分も説明していきます。

## CloudWatchLogsのメリット
* 複数のサーバーがあってもログを一箇所に集約して管理できる。一々複数のサーバーにssh接続する必要がない。
* EventBridgeなど他のAWSリソースとの連携が簡単。エラー発生したらSlackに通知することもできる。
* Logs Insightsを使って高度な検索ができる

![スクリーンショット 2021-12-20 15.48.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/603209/88f761bd-a0eb-f909-fe76-60314f3f7b8a.png)

## 前提
* AWSアカウント作成済み
* EC2インスタンス作成済み
* OS: CentOS 7.6.1810

## 手順の概要
1. ポリシーとロールを作成
1. EC2に

元記事を表示

ActiveRecordにおける楽観的ロックと悲観的ロックの使い方

# 環境

– Rails 7.0.0
– Ruby 2.7.5
– MySQL 5.7

# 楽観的ロック

`lock_version` というカラムを用意するだけで利用できます。

“`
$ rails g model user name:string lock_version:integer
$ bundle e rails b:migrate
$ bundle e rails c
“`

“`ruby
irb(main):001:0> User.create!(name: ‘Taro’)
(0.9ms) SELECT sqlite_version(*)
TRANSACTION (0.1ms) begin transaction
User Create (0.5ms) INSERT INTO “users” (“name”, “lock_version”, “created_at”, “updated_at”) VALUES (?, ?, ?, ?) [[“name”, “Taro”], [“lock_version”, 0], [“created

元記事を表示

Kinx Update 2021(パッケージ管理サポートなど)

# はじめに

この記事は「[言語実装 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/lang_dev)」 21日目の記事です。本記事は、2019 年末(GitHub への初コミットは 2019/11/28)頃から始めた [Kinx](https://github.com/Kray-G/kinx) という自作言語のアップデートの話題になります。

https://github.com/Kray-G/kinx

御多分に洩れず、本業の忙しさによりアップデートは細々と行っておりますが、太く短くではなく **細く長く** 続けていこうと思っておりますので、今後ともよろしくお願いいたします。話題としては以下の構成になります。

1. **Kinx 2021年総括**
* まずは Kinx 開発や主な活動に関して 2021 年を総括したいと思います。V1.0.0 を 3/16 にリリースし、Kinx パッケージをサポートした V1.1.0 をつい先日リリース([v1.1.0 Release](https://gith

元記事を表示

?Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-?

# PRへのリンク
https://github.com/JunichiIto/tenji-maker-challenge/pull/26

# ロジック
## 処理の流れ
大まかな流れは
1. テキストを1文字に分解
2. 文字を0,1で構成された配列に変換する
3. 配列で表された文字を出力しやすいように整形して出力する

となります?

## 文字を配列に変換する

### 文字をバイナリを要素とした配列で表現する

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1053396/25cb3316-dee1-b0cd-d950-2f412ed1ced7.png)

今回のチャレンジに出てくるひらがなは6箇所に●またはーを入れることで表現することができるので、長さ6の配列を使えば表現できそうです。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1053396/aad70ca5-5884-8b44-3da

元記事を表示

Rubyの関数と引数色々

忘れがちな使い方と存在確認方法をセットでお届け

## 名前付き引数
ユースケース:
引数を必須にしたい
引数の数が多い

“`ruby
# 引数がなくても許される
def greet(name, message)
p “Hi #{name}, #{message}”
end

greet(‘tom’) # “Hi tom, undefined”

# 引数がないと許されない
def greet(name:, message:)
p “Hi #{name}, #{message}”
end

# 名前も渡してね
greet(‘tom’) # expected kwargs (ArgumentError)
# 必須だよ
greet(name:’tom’) # missing keyword: message (ArgumentError)
# 正解
greet(name:’tom’, message: ‘how are you’) # “Hi tom, how are you”
“`
## 可変長引数
ユースケース:
汎用的な関数を作る
引数に渡すケース、わたさないケースがあ

元記事を表示

paizaの算術・代入演算メニューの演習問題のRubyでの模範解答

Paiza の算術・代入演算メニューの演習問題のRubyでの模範解答です。
簡単なので、いらないような気もしますが、ご参考までに。

STEP: 1 足し算
https://paiza.jp/works/mondai/arithmetic_substitution_op/arithmetic_substitution_op__arithmetic_step1

“`ruby:step1.rb
n = 1231 + 5178

puts n
“`

STEP: 2 引き算・掛け算
https://paiza.jp/works/mondai/arithmetic_substitution_op/arithmetic_substitution_op__arithmetic_step2

“`ruby:step2.rb
a,b = gets.split(‘ ‘).map(&:to_i)
d = a – b
p = a * b

puts “#{d} #{p}”
“`

STEP: 3 割り算
https://paiza.jp/works/mondai/arithmetic_substi

元記事を表示

RubyMineを使い続けている理由

## はじめに

[この記事はiCARE Dev Advent Calendar 2021(レーン2)の20日目の記事です。](https://qiita.com/advent-calendar/2021/icaredev)

弊社のサービス(Carely)ではサーバサイドの開発言語でRuby On Railsを使っています。
そこで私自身がRubyMineというIDEを使用しているのでRubyMineを使っている理由を記載したいと思います。

## 使い始めた理由
そもそも使い始めた理由ですが前前職で周りのエンジニアが使っておりオススメされたからです。
その時は会社でライセンスを購入してくれたというのも使うきっかけになりました。

## 使い続けている理由
前前職で使い始めて現在も使い続けている理由は以下の点で優秀だからです。

### 1. コードジャンプが強力
これは社内でRubyMineを使っている方に聞いた結果、まず最初に返ってきた理由です。自分もそうです、むしろこれだけにお金出しても良いレベルです。

コードジャンプが強力な点は**gemのソースまで追っていける(rubyの

元記事を表示

paizaの標準出力メニュー全問のRubyでの解答例

Paizaの標準出力メニュー全問のrubyでの解答例

PaizaのRuby言語の標準出力メニューの解答例を書いてみました。
一部正解にならないものもありますが、
その場合※で補足してあります。
初学者なのでかなり汚い部分、
プロから見ると慣例と外れている部分もあると思いますが、
お見逃しを。
あくまでもご参考までにお願いします。
STEP: 1 1 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step1

“`ruby:step1.rb
puts 813
“`

STEP: 2 2 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_primer__newline_digit_step2

“`ruby:step2.rb
puts 8
puts 13
“`

STEP: 3 3 行の出力
https://paiza.jp/works/mondai/stdout_primer/stdout_pr

元記事を表示

turbolinksとは

# 記事の対象者

・右も左もわからない初学者で、progateはやってますよくらいの方

# turbolinksとは

JSのライブラリ。なのでJavaScriptの話です。

rubyではgemになっている。rails4以降はデフォルトでついてくる。

aタグをクリックした時の画面遷移を高速化するためのもの。

リンクをクリックするときにターボして高速移動する、みたいなイメージ。

# どうやって処理を速くしているのか?

参考
[https://techtechmedia.com/turbolinks-rails/](https://techtechmedia.com/turbolinks-rails/) 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1766018/e753bd8e-18ea-6e8f-95dc-f319e19069a4.png)

headとbodyを見てほしい。

headタグは変更なしで、bodyだけ、遷移の前後で違う。

turbolinksを

元記事を表示

Rubyでnull文字を正規表現でひっかけたいとき

個人的に結構ハマってしまったのでメモ

“`
# null文字の定義
null_string = “\0”
=> “\u0000”

# null文字を引っ掛ける
null_string.match(/\0/)
=> #
“`

元記事を表示

RSpecの書き方

# はじめに
* Rspecを触る機会があったのでわかる範囲でまとめます
* 今回はとあるページにアクセス可能かをテストする想定で記載しています
* 初版:2021/12/20

# describe/context

“`request_spec.rb
describe ‘アクセス確認’ do
context ‘アクセス可能な場合’ do
# 正常にアクセスできること(200)
# “トップページ”の文言がサクセス先に含まれるか確認
# リダイレクトされるがアクセスできる(302)
end

context ‘アクセスできない場合’ do
# 権限がなくてアクセスできない(403)
# ページが存在しない(404)
end
end
“`
* describeでテストを大まかにグループ分け、さらにその中でcontextを使用してグループ内で細かく分けられる

# it/expect/eq/include

“`request_spec.rb
describe ‘アクセス確認’ do
context ‘アクセス可能な場合’

元記事を表示

[py2rb] extend

# はじめに
移植やってます
# extend (Python)
“`python
array.extend(other)

array += other
“`
リストとリストを結合します。

https://docs.python.org/ja/3.7/library/array.html#array.array.extend
# concat (Ruby)
“`ruby
self.concat(other)
“`
`ruby`の場合、文字の結合も`concat`ですね。

https://docs.ruby-lang.org/ja/latest/method/Array/i/concat.html
# メモ
+ Python の extend を学習した
+ 道のりは遠そう

元記事を表示

【Rails】フラッシュメッセージの設定(bootstrap)

##設定内容
・共通のファイルを作成し、application.html.erbで読み込みが出来るようにする
・コントローラーにflash内容を記載

##共通ファイル作成
views/shared配下に、_flash_message.html.erbを作成し、flash用の部分テンプレートを作る。

“`
<% flash.each do |message_type, message| %>
  

[py2rb] issubset

# はじめに
移植やってます
# issubset (Python)
“`python
set.issubset(other)
“`
`set`の全ての要素が`other`に含まれるか判定します。

https://docs.python.org/ja/3.7/library/stdtypes.html#frozenset.issubset
# subset? (Ruby)
“`ruby
self.subset?(set)
“`
`self`が集合`set`の部分集合である場合に true を返します。

https://docs.ruby-lang.org/ja/latest/method/Set/i/proper_subset=3f.html
# メモ
+ Python の issubset を学習した
+ 道のりは遠そう

元記事を表示

【Rails】マイグレーションのGeneratorから学ぶ命名規則

# はじめに

マグレーションファイルは以下のようにGeneratorで生成することができます。

`$ rails generate migration AddPartNumberToProducts`

参考: https://railsguides.jp/active_record_migrations.html

このGeneratorは特定のファイル名が与えられたとき、よしなにテンプレートファイルを出力します。
ここでは、Railsが用意しているパターンを調査し、マイグレーションファイルにどのような名前をつけるのがRails Wayに沿っているかを調査します。

## add_X_to_Y

カラムやインデックスなどを追加するマイグレーションファイルを生成します。

“`
$ rails g migration add_token_to_user auth_token:token
“`

“`ruby
class AddTokenToUser < ActiveRecord::Migration[7.0] def change add_column :u

元記事を表示

[py2rb] insert

# はじめに
移植やってます
# insert (Python)
“`python
parsed_sequence.insert(0, nterm)
“`
リストの0番目にntermを挿入します。
今回は先頭に追加の意味になります。

https://docs.python.org/ja/3.7/library/array.html#array.array.insert
# unshift (Ruby)
“`ruby
parsed_sequence.unshift(nterm)
“`
~~0番目以外だと大変でした。~~
**[追記]**
コメント欄にて教えていただいたのですが、`ruby`にも`insert`ありました。

“`ruby
parsed_sequence.insert(0, nterm)
“`
https://docs.ruby-lang.org/ja/latest/method/Array/i/insert.html

@obelisk68 さん、ありがとうございました。
# メモ
+ Python の insert を学習した
+ 道のりは遠そう

元記事を表示

OTHERカテゴリの最新記事