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

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

Dotenv を導入したのに環境変数が読めない

rake restart

元記事を表示

[py2rb] slice の None

# はじめに
移植やってます
# None (Python)
“`python
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(a[2:])
print(a[2:-1])
print(a[2:None])

# [2, 3, 4, 5, 6, 7, 8, 9]
# [2, 3, 4, 5, 6, 7, 8]
# [2, 3, 4, 5, 6, 7, 8, 9]
“`
へぇー、`:None`だと末尾まで行くんだ。
# nil (Ruby)
“`ruby
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

p a[2..]
p a[2…]
p a[2..-1]
p a[2…-1]
p a[2..nil]
p a[2…nil]

# [2, 3, 4, 5, 6, 7, 8, 9]
# [2, 3, 4, 5, 6, 7, 8, 9]
# [2, 3, 4, 5, 6, 7, 8, 9]
# [2, 3, 4, 5, 6, 7, 8]
# [2, 3, 4, 5, 6, 7, 8, 9]
# [2, 3, 4,

元記事を表示

【Rails】seeds.rbファイルとは

##seedsファイルとは
初期データを生成してくれるファイルのことで、簡単にテストデータを作ったりできる。

##記入方法
“`
#通常の場合
User.create(name: “Taro”)
User.create(name: “Hanako”)

#配列の場合
users = User.create([{name: “Taro”}, {name: “Hanako”}])

#大量のテストデータの場合(この場合は100回繰り返す)
100.times do |n|
User.create(title: “test{n}人目”, content:”test!#{n}回目”)
end
“`
内容を記入し終わったら、“rails db:seed“のコマンドを実行。

##Faker
このFakerを使うと、実在しそうなデータを生成してくれるgemがあるのでその手順や記入法も記載しておく。

**Gemfile**

“`
gem ‘faker’

↑この文を追加後、bundle installを入力。
“`

**記入法**

“`
10.times do
Use

元記事を表示

点字メーカープログラムの動画レビュー Part 4 – Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-

## この記事は何?
Qiita Advent Calendar 2021「Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-」で投稿してもらったコードを出題者である僕、伊藤淳一が動画でコードレビューしてみました。この記事はその第3回です。

https://qiita.com/advent-calendar/2021/ruby-challenge

第1回〜第3回のレビュー動画はこちらです。

https://qiita.com/jnchito/items/26e8bd7c635e3d32e620

https://qiita.com/jnchito/items/d5f71c9ad90f2890647e

https://qiita.com/jnchito/items/60c0342971d93b174b6b

### アドベントカレンダー参加者のみなさんへ

ネタバレになってしまうので、自分の投稿が完了するまでこちらの記事(動画)は見ないようにお願いします〜 :pray:

### レビュー対象の記事はこちら!

今回レビューさせてもらったのは以下の16日目

元記事を表示

フリーターからエンジニアになってみて

今回、「エンジニアになったきっかけ」に関しての記事の作成依頼があったため、記事を書かせて頂こうと思います!
「自己紹介」
「エンジニアになろうと思ったきっかけ」
「エンジニアとして働いてみた感想」
「今後はどんなエンジニアを目指したいか」
という項目で記事を書かせてもらいます。

## 自己紹介
2019年3月に慶応義塾大学環境情報学部を卒業し、2019年4月からポテパンキャンプというプログラミングスクールで、RORを勉強し、2020年1月からWebエンジニアとして働いています。そのため、今はエンジニア2年目となります!

主な業務としては、ECの基幹システムの内製化や新規機能の要件定義・仕様策定・実装等を担当しています。
新しい人が入ってきた際は、育成等も担当したりしています。
また、ご縁があり、つい先日から副業も始めさせて頂きました!
副業の方は、まだjoinさせて頂いて1ヶ月も経たないような状態で、1日でも早く力にならなくてはと思い、日々開発させて頂いております!

## エンジニアになろうと思ったきっかけ
大学4年時に、企画から実装までを3人一組のメンバと共に実装するとい

元記事を表示

Ruby 3.1でJITを有効化したときにRailsアプリケーションは速くなるのか

## はじめに

[Qiita株式会社 Advent Calendar 2021](https://qiita.com/advent-calendar/2021/qiita)の22日目の担当は、Qiita株式会社CX向上グループの@kyntkです!

https://qiita.com/advent-calendar/2021/qiita

Ruby 3.1で新たなJITであるYJITがマージされました。3.0の時点ではJITを有効化するとRailsのパフォーマンスが低下するということをなんとなく聞いたことがあったのですが、3.1ではどうなるのかが気になったので色々と調べてみました。

## 結論

:::note warn
正直恥ずかしながら、まだ私自身きちんと理解できていないので、必ず添付してある発表内容等を確認してください
また、間違った情報があるかもしれないので、そこはコメントや編集リクエストでください!!!
:::

– Ruby 3.0でMJITを有効にすると、デフォルト設定ではRailsアプリケーションではパフォーマンスの低下が起きうる
– [Ruby 3.0.

元記事を表示

【初心者向け】Bootstrapのグリッドシステムで思い通りのレイアウトを作るコツ

#はじめに
こんにちは!DMM WEBCAMP Advent Calendar 2021 22日目を担当させていただきます??
DMMWEBCAMPメンターの@tone0623です!

**皆さん、[Bootstrap](https://getbootstrap.jp/)を正しく使えていますか?**
BootstrapはCSSフレームワークで、簡単な記述でレスポンシブなWebデザインができる優れものです。

しかし、メンター業務を通して、

– **お手本のページで検証ツール使えないんですけど、どうやってレイアウトを作ればいいですか?**
– **[Bootstrapのドキュメント](https://getbootstrap.jp/docs/5.0/getting-started/introduction/)を読んだのですが、どこからデザインをすればいいかわかりません。**
– **クラス名の.container/.raw/.columnの使い方がいまいちわかりません。**

など、Bootstrapの導入はしたものの、うまく使えない方

元記事を表示

Ruby の slice が便利になった

Python の

“`python:Python
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10][1:10:3] #=>[2, 5, 8]
“`

って便利ですよね。Ruby でこれをやろうとすると、ちょっと工夫が必要でした。

例えばこんな感じに。

“`ruby:Ruby
1.step(9, 3).map { [*1..10][_1] } #=>[2, 5, 8]
“`

しかし、これはいまでは(たぶん Ruby 3.0 から)こんな風に書けるようです。

“`ruby
s = (1…10).step(3)
s.class #=>Enumerator::ArithmeticSequence
[*1..10].slice(s) #=>[2, 5, 8]
“`

これの応用で、`%`を使ってさらに短く書けます。

“`ruby
[*1..10].slice((1…10) % 3) #=>[2, 5, 8]
[*1..10][(1…10) % 3] #=>[2, 5, 8]
“`

便利ですね。

元記事を表示

点字はプログラミングの良い題材だと知った

# プルリクエストのリンク

https://github.com/JunichiIto/tenji-maker-challenge/pull/28

# ロジックの解説

まず点字のしくみのページを見ました。
http://www.naiiv.net/braille/?tenji-sikumi

1文字は6つの部分(マス)で構成されていて点を打つか打たないかで文字を表現します。
50音を表す際、大部分は母音と子音がそれぞれ3マスずつ使って組み合わせて表現しているようです。

ですので、母音と子音の点を打つ場所をテーブルとして持たせて変換する形としました。
できる限り、ページの説明通りにテーブルを作るようにして以下のようにしました。

“`ruby:点を打つ位置のテーブル
TABLE = {
A: [1],
I: [1, 2],
U: [1, 4],
E: [1, 2, 4],
O: [2, 4],
K_: [6],
S_: [5, 6],
T_: [3, 5],
N_: [3],
H_: [3,

元記事を表示

PC使用時の猫背を矯正するクソアプリ

[クソアプリアドベントカレンダー](https://qiita.com/advent-calendar/2021/kuso-app)に空きがあったので投稿してみようと思いました
Qiita初投稿なので至らぬところなどがあるかもしれませんがよろしくお願いします

### 前置き(呼び飛ばしてもらって構いません)
毎年Qiitaのアドベントカレンダーを楽しませて頂いております、@takuminmin0718です
プログラミングを本格的に学習し始めてから3年間、ほとんど公の場に成果物などを晒すことがありませんでした
でもそろそろチャレンジしてもいいかな、と思って今年の[クソアプリアドベントカレンダー](https://qiita.com/advent-calendar/2021/kuso-app)用にこのアプリを作ってみましたが、作ったはいいものの記事を書く自信はなかったり忙しかったりして、しばらく放置してしまいました

ですが最近になって記事を書く余裕が出てきて、カレンダーにも空きがあったので、チャレンジしてみようと思います

# きっかけ
みなさん、猫背にお悩みではありませんか?

元記事を表示

1回の送信で複数のレコードを作成したい

### 前提
タイトル参照。
冷蔵庫の在庫管理をするオリジナルアプリを作成中です。
食材は名前、賞味期限、数量、値段を入力(バリデーションはまだ設けてないです)
これらをカテゴリーごとに表示、保存できるように試行錯誤中。

この「保存」の処理が、プログラミングを学び始めて4ヶ月の初心者にはとても難しく…

Ruby on Rails2.6.5を使用していると思います。(.ruby-versionというファイルにそう書いてあったので)

### テーブル名
**Categoriesテーブル**
c_name
user(外部キー)

**Itemsテーブル**
name
category(外部キー)

他にもテーブルやカラムはありますが、試作段階で使用しているのはこれだけです。

### 最終的に落ち着いたコード
フォーム部分

“`erb
<%= form_with model: @item_information, url: items_path, local: true do |f| %>

<% @categories.each do |category

元記事を表示

[py2rb] re.finditer 2

# はじめに
移植やってます
# re.finditer (Python)
“`python
import re

rule = r'([KR](?=[^P]))|((?<=W)K(?=P))|((?<=M)R(?=P))' sequence = "MRGETGVSIKNPRPSRPFSCFWRKGDVENIRKSDIGNEKKIDAKFNRLQYNLYYKPLSHHKAGLLYKELFFRSCFSYTTCSLDFQGKRHQVERKAVDIVL" print([x.end() for x in re.finditer(rule, sequence)]) # [2, 10, 23, 24, 31, 32, 39, 40, 44, 47, 61, 67, 72, 87, 88, 93, 94] ``` # どうする? (Ruby) ```NG.rb rule = /([KR](?=[^P]))|((?<=W)K(?=P))|((?<=M)R(?=P))/ sequence = "MRGETGVSIKNPRPSRPFSCFWRKGDVENIRKSDIGNEKKIDAKFNRLQYNL

元記事を表示

[py2rb] self.extend

# はじめに
移植やってます
# self.extend (Python)
“`python
class xlist (list):
def add(self, *args):
self.extend(args)

class xint (int):
def add(self, value):
self += value

x = xlist([1,2,3])
print (x)
x.add (4, 5, 6)
print (x)

x = xint(10)
print (x)
x.add (2)
print (x)

# [1, 2, 3]
# [1, 2, 3, 4, 5, 6]
# 10
# 10
“`
`self`に直接`extend`や`+`ってできるんですね。
# どうする? (Ruby)
“`ruby
class Xlist < Array def initialize(*args) args.each do |x| self << x end end def add(*arg

元記事を表示

RubyのC拡張でint32_tをRubyのNumericに変換したいときはどうすればいいのか?

RubyのC拡張を作成する時、`int` や `long` に関しては `INT2NUM` `NUM2INT` `LONG2NUM` `NUM2LONG` などの便利なマクロが用意されているが、`int32_t` `uint32_t` などの型と相互に変換するマクロは用意されていない。intやlongなどの型のサイズはシステムによって変わる可能性もゼロではない。そこで、ruby-jpで質問したところ、

マクロを使用すればいいという回答を頂いた。すこし厄介だが、こんな感じになると思います。

“`c
#define SIZEOF_INT32 4
#define SIZEOF_INT64 8
“`

“`c
#if SIZEOF_SHORT == SIZEOF_INT32
#define NUM2UINT32 NUM2USHORT
#define NUM2INT32 NUM2SHORT
#define UINT32_2NUM USHORT2NUM
#define INT32_2NUM SHORT2NUM
#elif SIZEOF_INT == SIZEOF_INT32
#defin

元記事を表示

Untangled_pasta_trees How_to_use

[Untangled_pasta_trees](https://untangled-pasta-trees.herokuapp.com/)
[Untangled_pasta_trees、仕様、技術、詳細](https://qiita.com/yoshidashota0328/items/43ac07100e1b06ff435a)

# サイト概要
### ツリー構造でカテゴリー分けできるマークダウン形式のノートです。
### ユーザー登録すればツリーが作成できます。
### 登録しなくても公開されたツリーはAll_treesから閲覧することが出来ます。
### ツリーの内容はデフォルトで非公開設定ですが、必要であれば公開することもできます。
# 用語解説
### tree = 1画面に表示されたツリー構造のノート全体を指す言葉。
### leaf = マークダウン入力ができる1要素。ツリー構造の葉っぱ1枚を指す。
### leaf_ID = leafの頭についている番号。
### All_trees = 公開されたtreeが一覧表示されるページ。トップページにある。
### paren

元記事を表示

Rails Instrumentation API へのアクセスを少しだけ簡単にする

先日、 [Kaigi on Rails 2021](https://kaigionrails.org/2021/) というイベントで[登壇をする機会](https://kaigionrails.org/2021/talks/yykamei/)をいただきました。緊張しましたがいい体験になりました。

このイベントで Rails の Instrumentation API について触れました。

ActiveSupport::Notifications?【初学者必見】 HerokuとAWS S3を連携して投稿画像を保持する方法

Rails初学者なら必ずと言っていいほどデプロイで使用するHeroku
**? 実は作成したアプリからHerokuに投稿した画像は保持されず、一定期間経つと消えてしまいます?**
今回はRailsアプリ(CarrierWave)から投稿した画像をS3に保存して消えないようにする方法を超丁寧に解説します!

## やりたいこと
Herokuにデプロイした画像投稿機能付き掲示板アプリで、ユーザーが投稿した画像をAWS S3に保存して、一定時間経過しても画像が消えないようにしたい。

## 開発環境 & 前提条件
Ruby 3.0.1
Rails 6.1.4.1
CarrierWaveで画像投稿機能実装済み
Heroku登録済み
サンプルアプリ:[【投票制】マンガ・アニメランキング](https://anime-manga-ranking.herokuapp.com/)

## おおまかな手順
1. AWS関係の設定
1. CarrierWaveの設定
1. Herokuの設定

こちらを超丁

元記事を表示

[py2rb] itertools.chain

# はじめに
移植やってます
# itertools.chain (Python)
“`python
import itertools

for i in itertools.chain([x.end() for x in re.finditer(rule, sequence)], [None]):
“`
`extend`と似ていますが、こちらは平坦化も行っています。

https://docs.python.org/ja/3.7/library/itertools.html?highlight=chain#itertools.chain
# flatten (Ruby)
“`ruby
[sequence.scan(rule).map { sequence.index(_1) + _1.size } + [nil]].flatten.each do |i|
end
“`
平坦化といえば`flatten`

https://docs.ruby-lang.org/ja/latest/method/Array/i/flatten.html
# メモ
+ Python の iterto

元記事を表示

[py2rb] re.finditer

# はじめに
移植やってます
# re.finditer (Python)
“`python
import re

text = “He was carefully disguised but captured quickly by police.”
for m in re.finditer(r”\w+ly”, text):
print(‘%02d-%02d: %s’ % (m.start(), m.end(), m.group(0)))

# 07-16: carefully
# 40-47: quickly
“`
https://docs.python.org/ja/3.7/library/re.html#re.finditer

https://qiita.com/tma15/items/b038a0ade22ba104f293

公式ドキュメントより、こちらの記事のほうが分かりやすい。
# scan (Ruby)
“`ruby
text = “He was carefully disguised but captured quickly by police.”

元記事を表示

[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

元記事を表示

OTHERカテゴリの最新記事