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

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

「heroku run rails db:migrate」コマンドとは・・・

##環境
– Ruby 2.6.5
– Rails 6.1.4.1

##調査の背景・目的
Herokuのデプロイ時のエラー文「We’re sorry, but something went wrong.」が出た際の対処法で、「heroku run rails db:migrate」コマンドを入力すると解消された。コマンドの詳細について記載する。

##そもそもmigrationとは・・・
– データベースの構造(テーブル、カラム)を変更するときに利用する機能

##migrationファイルとは・・・
– データベースを生成する際の設計図

##「rails db:migrate」コマンドで何をする?
– migrationファイルの内容をデータベースに反映する

##「heroku run rails db:migrate」コマンドで何をする?
– migrationファイルの内容を**herokuサーバのデータベース**に反映する

以上

元記事を表示

メモ: チェリー本の気づいたこと、印象に残ったことメモ 12/28

[プロを目指す人のためのRuby入門(通称チェリー本) 改訂2版](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-%E6%94%B9%E8%A8%822%E7%89%88-%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/dp/4297124378/ref=asc_df_4297124378/?tag=jpgo-22&linkCode=df0&hvadid=52952

元記事を表示

【Rails】定数の定義方法【上書きトラブル注意】freeze

皆さんは、定数ってよく使いますか?

「Rails」も別の言語と同様で、
どこか専用の場所に定義して使うんだろうなー…ってフワッとした認識だったのですが、調べてみると色々注意点が出てきました。

Railsの定数っていうのは「定数=定まった変数」と言いながら、
実はプログラム内で値を書き換えることが可能なのですね。

チーム開発においては、その辺特にバグの原因にもなり得る箇所かなーなんて思うので、
ぜひ皆さんの今後の開発トラブル回避に繋がるなら幸いだなーと思います!

注意点の前に、
まず、Railsの定数の定義方法について3つ共有します!

# 定数を定義する方法①【カンタン】

一番カンタンな方法がこちら。
「config/initializers/constants.rb」ファイルに定数を定義する方法です。これが、アプリケーションのどこからでも定数を呼び出せる一番カンタンな方法でした。

“`config/initializers/constants.rb
module Hoge
FUGA = [“これは定数です”]
end

p Hoge::FUGA
# => “これ

元記事を表示

RJBでハマったこと

## RJBとは

Ruby Java Bridge。
簡単に言うと「Ruby から Java のライブラリを使用する」もの。

## 開発環境

* WSL2(Ubuntu 20.04LTS)
* Docker
* Ruby 1.8.7
* Rails 2.1.0
* rjb-1.4.6
* JDK1.8.9

## ハマったこと

### クラスパスの記述方法

任意のクラスパスを読み込む。
今回はExcelを扱おうとしてるのでpoi等以下のような感じ。

“`ruby
Rjb::load(“#{RAILS_ROOT}/lib/poi-3.5-FINAL-20090928.jar;#{RAILS_ROOT}/lib/poi-ooxml-3.5-FINAL-20090928.jar;#{RAILS_ROOT}/lib/ooxml-schemas-1.0.jar;#{RAILS_ROOT}/lib/poi-scratchpad-3.5-FINAL-20090928.jar;#{RAILS_ROOT}/lib/dom4j-1.6.1.jar;#{RAILS_ROOT}/lib/ger

元記事を表示

Ruby の自己代入演算子 ||= について

“`
test ||= 200
“`

この謎の記号  `||= ` についてまとめてみました

##結論

“`
test ||= 200
“`

`test = test || 200`の省略形
変数testが存在しない(nil または false)場合、変数testに200を代入する
と言う意味になります

##具体例

“`
#変数testに値を代入していない場合(変数の中身がnilまたはfalse)
test ||= 200
=> 200

#変数testに値を代入している場合(変数の中身がtrue)
test = 10
test ||= 200
=> 10
“`

変数の中身が

– nilまたは、false → 右辺の値(200)を変数に代入する
– true → 左辺の変数に代入されている値(10)を返す

irbを用いることで自分で調べることもできます
![qiiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/893750/7f706866-671e-6f2

元記事を表示

[py2rb] numpy array copy=False

# はじめに
移植やってます。
# numpy (Python)
“`python
import numpy as np
x = np.array(x, copy=False)
“`
`False`を`false`に替えればいいんだよね。
# false (Ruby)
“`ruby
require ‘numpy’
x = Numpy.array(x, copy=false)

# Cannot interpret ‘False’ as a data type
“`
ぐぬぬ。
# False (Ruby)
“`ruby
x = Numpy.array(x, copy=False)

uninitialized constant False (NameError)
Did you mean? FALSE
“`
`FALSE`やないわい。
# nil (ruby)
“`ruby
x = Numpy.array(x, copy=nil)
“`
どうやら`nil`が正解らしい。
# メモ
+ Python の numpy を学習した
+ 道のりは遠そう

元記事を表示

[py2rb] matplotlib

# はじめに
移植やってます。
# matplotlib (Python)
“`python
plt.figure()
plt.hist([peptide[‘m/z’] for peptide in peptides],
bins = 2000,
range=(0,4000))
plt.xlabel(‘m/z, Th’)
plt.ylabel(‘# of peptides within 2 Th bin’)

plt.show()
“`
![20211227b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/538241/20710bc7-1c86-6528-b769-39c20e8b3503.png)
`range=(0,4000)`ここがタプルなので嫌な予感が。
# どうする? (Ruby)
“`ruby
require ‘matplotlib/pyplot’
plt = Matplotlib::Pyplot

plt.figure()
plt.hist(peptides.map

元記事を表示

[Rails]データベースへのアクセス負荷を軽減するために気をつけるべきこと 「3行で要約」

#3点にまとめる
“`
テーブルを正規化する
シンプルなSQLを心がけ
インデックスの張り忘れ、もしくは不正
“`
##テーブルの正規化とは
“`
データの冗長性を排除し、一貫性や効率性を保持するようなデータ形式になる形でテーブルを定義すること。
“`
##SQLとは
[SQLとは](https://hnavi.co.jp/knowledge/blog/sql/)
##インデックスとは
“`
「テーブルとは別に検索ように最適化された状態のデータ」
“`
##終わりに
アップデートしていきます。

元記事を表示

rails7から追加された`compact_blank`について

# 概要

例えば、Arrayにnilが入りうる可能性がある場合にnilを取り除きたいケースがあった場合に最小の行動で表すと`reject(&:blank?)`を使っていたがその処理のショートハンドができました。

“`ruby
> [1, 2, 3, nil].reject(&:blank?)
=> [1, 2, 3]

> [1,2,3,nil].compact_blank
=> [1, 2, 3]
“`

# 追加されたPR
https://github.com/rails/rails/pull/36412

元記事を表示

【Rails】一定期間でログファイルを削除【手動は卒業】

開発中ってログの容量食いますよね…。
みなさんは、どうしてますでしょうか?

適当なタイミングで削除はしてるのでしょうか?

実のところ私は、開発の際は、pryの方を使うことが多く、正直
ログに関してあまり理解していなかったんですよね…。

ただ、これを機に色々調査してみたので共有いたします!

# rails:ログを削除するコマンド
“`
$ rake log:clear
“`

コンソールで、上記コマンドを実行すればログファイルが消えるかと思います。

ただ、毎回毎回手動で削除するのってかなり面倒ですよね?
そこで、何かいい方法がないか調べてみました。

# ログローテーションとは?
>ログローテーションとは、システムが残す時系列の記録データ(ログ)が際限なく増えることを防ぐために、一定の容量や期間ごとに古いログを削除したり新しいログで上書きすること。また、そのような機能。
[IT用語辞典 e-Words](https://e-words.jp/w/%E3%83%AD%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%

元記事を表示

Minitestで「forkしたRubyのサブプロセスのIO」をテストする

## はじめに

この記事を書いている人も完全には理解していないが、一応解決したので、似たような状況で困っている人のヒントになるように記事を残す。

バインディングを作っている時に、「有る操作を行うと、バインディングのC側のグローバル変数みたいなものが変更されてしまうため、後続のテストに影響を与えないようにフォークしてテストを行いたい」というような面倒なケースがある。

Minitestには、`assert_output`という便利なメソッドがあり、stdoutやstderrのテストができる。しかし、これらはサブプロセスのIOまでは掌握してくれなかったりする。

かといって、spawn使って `bundle exec ruby -r minimap2 -e “hogefuga”` みたいなのを書くというのも嫌な感じがする。なにしろこの場合、bundlerを使わないとテストが成功しない。それはどうなのか。

## capture_subprocess_io を使う

うまい解決策はないだろうか? 実は Minitestの `assert_output` のドキュメントを見ると

> NO

元記事を表示

paizaラーニングの論理演算メニューのrubyの解答例

Paizaラーニングの論理演算メニューのrubyでの模範解答です。
答えだけですみません。
 
STEP: 1 論理積( AND )の基本
https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step1

“`ruby:step1.rb
a,b =gets.split(‘ ‘).map(&:to_i)

if a == 0 || b == 0
puts 0
else
puts 1
end
“`

STEP: 2 論理和( OR )の基本
https://paiza.jp/works/mondai/logical_operation/logical_operation__basic_step2

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

if a == 1 || b == 1
puts 1
else
puts 0
end
“`

STEP: 3 否定( NOT )の基本
https://paiza

元記事を表示

Windos11環境にて、ダブルクリック一発で7-Zipで解凍する(Lhaplus風味)

#####背景:
7-Zipは速くて好きだけど、zipファイルに関連付けしてもダブルクリックだけでは解凍されない。7-ZipのGUIが開くだけだ。
ダブルクリックで解凍してくれるのはLhaplusだが、7-Zipより遅いし、大きなファイルに弱い。
だから何とかして7-Zipによる解凍をダブルクリックで実行させたい。

#####やってみたこと(失敗):
ググってみた。
ダブルクリックで解凍させるにはレジストリをいじればいいらしい。
レジストリを書き換えてみたが、成果なし。
あいかわらず、7-ZipのGUIが開くだけだ。

#####やってみたこと(成功):
Rubyで7-Zipを呼び出して解凍させた。
Lhaplusのような快適な解凍ができた。

######以下の.rbファイルを作成した:

“`
pasu = ARGV[0]
file = pasu.split(“\\”)[-1]
name = file.split(‘.’)[0]
system(“mkdir \”C:\\Users\\ユーザー名\\Desktop\\opend7z\\#{name}\””)
system(“cal

元記事を表示

Railsのインスタンスメソッドとクラスメソッドの違い

## 概要
Ruby on Railsにおいて__インスタンスメソッド__と__クラスメソッド__についての知識が曖昧だったため
備忘録としてアウトプットします。

## インスタンスメソッドとは
####結論
インスタンスメソッドとは、あるクラスから生成されたインスタンスに対して呼び出すことのできるメソッドです。
#### 使用用途例
例えば、Userクラスにおいて生成されたuserが成年か未成年かを判定したい場合など。
#### コード例

“`ruby
class User
def adult # インスタンスメソッド
self.age >= 20 ? ‘成人’ : ‘未成年’ # 20歳以上なら’adult’, 20歳未満なら’child’を返す処理
end
end

user = User.new(name: ‘田中’, age: 23)
user.adult #=> ‘成人’
“`

## クラスメソッドとは
#### 結論
クラスメソッドとは、クラス全体に対して何か処理を行う場合に使用するメソッドです。
#### 使用用途例
例えば、Userクラ

元記事を表示

【Ruby】自己代入演算子「||=」

“`ruby
hoge ||= 5
“`

「||」演算子の自己代入演算子。**hogeが偽か未定義ならhogeに5を代入する。**
わかりやすく書き直すと↓

“`ruby
hoge = hoge || 5
“`

hogeが**false,nil以外** → 5を返す
hogeが**false** → hogeに5を代入する
hogeが**nil(未定義)** → hogeに5を代入する

##参考

https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#selfassign

元記事を表示

rails7で`to_s`の引数にシンボルでフォーマットを指定するとDEPRECATION WARNINGが発生する(`DEPRECATION WARNING: Integer#to_s(:currency) is deprecated. Please use Integer#to_formatted_s(:currency) instead.`)理由と対応

# 概要

rails7で`1000.to_s(:currency)`の様に、`to_s`の引数にシンボルでフォーマットを指定するとDEPRECATION WARNINGが発生するようになりました。

“`ruby
DEPRECATION WARNING: Integer#to_s(:currency) is deprecated. Please use Integer#to_formatted_s(:currency) instead.
“`

この変更はこちらのPRで追加されています。

https://github.com/rails/rails/pull/43772

# 理由
ruby3.1で`symbol`, `true`, `false`, `nil`, `0-9`への`to_s`メソッド使用時のパフォーマンスチューニングが行われました。

https://github.com/ruby/ruby/commit/b08dacfea39ad8da3f1fd7fdd0e4538cc892ec44

railsではactivesuportで複数クラスの`to_s`メソッドを

元記事を表示

【Ruby】クラスとモジュールの違いと使い分け

##クラスとモジュールの違い

– クラスはインスタンスが生成でき、モジュールはインスタンスが生成できない
– クラスは継承でき、モジュールは継承できない

##クラスとモジュールの使い分け

moduleをclassにincludeをして使用できるようにする、ミックスインでの例。
モジュールはクラス間でメソッドを共有することができる。
モジュールをクラスに組み込むことで、クラス定義にメソッドをコピー&ペーストしたのと同じようにモジュールのメソッドをクラスで利用できるようになる。
これは、特定のクラスで再利用したいメソッドがあり、かつ、それを一カ所に集めておきたい場合に便利。

“`ruby
module Cream
def cream?
true
end
end

class Cookie
include Cream
end

cookie = Cookie.new
p cookie.cream?
#=> true
“`

##参考

http://ruby-for-beginners.rubymonstas.org/advanced/modules.ht

元記事を表示

[Rails]Webアプリケーションしか作った事ない僕が、ネイティブアプリケーションを作りたい

#はじめに
初学者の私が、2ヶ月でRailsを学びWebアプリケーションを作れるようになりました。
IOSでリリースをするに至って
まずどのような知識が必要かをまとめる記事になっています。

##React Native

React Nativeは、iPhoneとAndroidどちらでも動かすことができる開発用フレームワークです。
JavaScriptで開発することができるため、JavaやSwiftが書けないエンジニアでも、React Nativeを使えばアプリ開発ができます。
React Nativeの開発言語は、JavaScriptです。そのため、JavaScriptのコードを書ければAndroidとiOSの両方で開発が可能になるフレームワーク

“`
Reactに慣れている人にとっては学習コストの低いReact Native
ネイティブエンジニアには、逆に学習コストが高くなると考えられます。
“`
##Flutter

FlutterはGoogleが作ったモバイルアプリ用のフレームワーク。
「Dart」という言語を使って開発をしていきます。

“`
モバイルアプリ開発

元記事を表示

FizzBuzz問題をRubyで遊ぶ

プログラミングの問題として有名な `FizzBuzz問題`。

普通の回答,ネタ回答,酷い回答など,いろいろな形式で回答してみました。

他にも面白い回答を思いついた方は是非コメント欄で教えていただけるとありがたいです。

# 1. 問題とヒント

この記事で初めて `FizzBuzz問題` を知った方,知っているけれど1度も挑戦していない方もおられるかもしれません。

そこで,「問題文」と「初学者向けのヒント」をはじめに記載いたします。

## 1.1 FizzBuzz問題

1 から 100 までの数値を出力するプログラムを書きなさい。ただし,

– `3の倍数` のときは `Fizz`
– `5の倍数` のときは `Buzz`
– `3と5の両方の倍数` のときは `FizzBuzz`

を数値の代わりに出力すること。

“`none:出力例
1
2
Fizz
4
Buzz
5
…(略)…
14
FizzBuzz
16
…(略)…
98
Fizz
Buzz
“`

## 1.2 ヒント1

`FizzBuzz問題` は大きく2つの要素に分かれます。

– 条件

元記事を表示

【Rails】画像アップロード機能の実装

##手順
①gem “carrierwave“と“mini_magick“をインストール
②uploaders/image_uploader.rbを作成
③uploadersとモデルの紐付けやデフォルト画像の設定、ファイル指定などの細かい設定
④モデルに新たなカラムを追加(例:Postモデルにpost_imageというカラムを新しく追加)
⑤viewの記入
⑥画像アップロードフォーム
⑦画像アップロードに関する日本語化の追加設定

##①gem “carrierwave“と“mini_magick“をインストール
###Carrierwaveとは
Carrierwaveとは、ファイルアップロード用のgem。
Ruby on Railsの画像投稿の仕組みで、よく使われるgemの1つ。

###MiniMagickとは
MiniMagickとは、画像処理ライブラリで、画像サイズ変更や画像反転などといった様々な画像処理を行うことができる。

前提として、 **MiniMagickを使うにはImageMagickというものをインストールする必要があるので注意。**

“`

元記事を表示

OTHERカテゴリの最新記事