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

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

【MinIO】RailsアプリケーションにS3互換ストレージ MinIO を導入してみる

# はじめに
プライベートでの共同開発において、「開発環境と本番環境の差異をできるだけ少なくしたい」という思いからローカルで動かせるS3互換ストレージを調べていました。業務で`fake-s3`というサービスを使用したことがありますが、MinIOというサービスも現場で使われている例を発見したのでそちらを導入してみました。

# MinIOについて
MinIOとはAWS S3互換のオブジェクトストレージのことです。

https://min.io/

* 導入するメリット
* ローカルに仮想的な S3 環境を構築できる
* ローカルの仮想環境なので不用意にAPIを叩いてもお金も掛からない

# シナリオ
簡単なアプリを作成した後、MinIOを導入し、投稿した画像がMinIOに格納されるかを確認してみます。

### 1. アプリの土台を作成する
以下の機能をもつ簡易的なブログアプリを作成する。

* 記事一覧機能
* 記事詳細機能
* 記事投稿機能

#### 動作確認
MinIOを用いない状態で画像を投稿し、storageフォルダにファイルが格納されることを確認する

#

元記事を表示

renderで部分テンプレートを呼び出す方法

#はじめに
 この記事はプログラミング学習の備忘録です。今回はrenderを使って指定のビューファイルを呼び出す方法についてまとめます。
#viewでrenderメソッドを使う
 まずviewでよく使われるrenderメソッドの用法は、部分テンプレートを呼び出す時です。部分テンプレートとは複数のviewファイルで使われるコードを切り出して、共通化するファイルのことです。
renderで部分テンプレートを呼び出すためには、まずは共通部分をまとめた部分テンプレートファイルを作ります。
この時に気をつけることは、ファイル名の先頭にアンダーバーをつけて
**「_tweet.html.erb」**のような形にすることです。

次に部分テンプレートを呼び出します。呼び出し方は主に、
①部分テンプレートをそのまま呼び出す場合
②変数を渡す場合
の2つがあります。順番に説明します。 
#部分テンプレートをそのまま呼び出す
例えばformを作る部分テンプレートには変数を渡さず、そのまま呼び出されます。
まずは「_form.html.erb」というファイルを作り、

“`new.html.erb
<

元記事を表示

stripメソッドとそれに関連するメソッドのまとめ

rubysilverを勉強するためのサイトのRexを勉強してわからなかったメソッドがあったので備忘録として残しておきます
https://rex.libertyfish.co.jp/

##Stripメソッド
stripという英語の意味は、「剥ぎ取る」という意味です
結論からいうと、文字列先頭と末尾の空白文字を全て取り除いた文字列を生成して返すメソッドなんです。
[ruby 公式ドキュメントより](https://docs.ruby-lang.org/ja/latest/method/String/i/strip.html)

このリファレンスに書いてあるのですが、「空白文字の定義は ” \t\r\n\f\v”」と書いてあるんです。
そこで思ったのが、「\\t\r\n\f\v」ってなに?って思ったんですよね。
(この文字列の中にスペースも入ってるのでご注意を)

ここで大事になるのが、正規表現についての知識が必要になるんですよね。
よく調べたら、これがrubyの[公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/spec=2freg

元記事を表示

AWS CodeDeployエージェントのサポートRubyバージョン

## CodeDeployエージェントとRuby
[AWS CodeDeployエージェントをインストール](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html)する上では前提条件としてRubyをインストールしろと記載されているが、そのバージョンは記載されていない。
Rubyのバージョンを3系などにアップデートして大丈夫なのか知りたかったけれど、ドキュメントには記載がなかった。
CodeDeployエージェント自体は[OSSとして公開されている](https://github.com/aws/aws-codedeploy-agent)が、READMEにもリリースノートにもRubyバージョンは記載がなかった。

## 実装の確認
最新のバージョン1.3.2における[エージェント起動スクリプト](https://github.com/aws/aws-codedeploy-agent/blob/1.3.2/bin/codedeploy-ag

元記事を表示

自作アプリをRails6から7にアップデートした際の手順。

12月にRails7がリリースされたので、1ヶ月ほど遅れましたが自作アプリをRails7にアップデートしてみました。

## まずやること
Gemを最新のバージョンに上げておきます。

“`
bundle update
“`
こんなエラーが出ました。

“`
Bundler could not find compatible versions for gem “actionview”:
In snapshot (Gemfile.lock):
actionview (>= 6.1.4.4)

In Gemfile:
actionview (~> 6.1.4.4)

rails (~> 7.0.0) was resolved to 7.0.0, which depends on
actionview (= 7.0.0)
“`
ログを見た感じ、railtiesのバージョンを上げればいいようです。
なのでGemfileを以下のように編集。
・変更前

“`
gem ‘actionview’, ‘~> 6.1.4.4’
“`
変更後

元記事を表示

【Ruby】任意の文字列を部分的に削除 slice!メソッド

※初心者向け
※アウトプット練習の為

開発環境
rails 6.0.4.4
ruby 2.6.5

**概要**
対象となる文字列から任意の文字を削除したのち、残った文字列を出力するプログラムを実装します。

##問題内容
以下の要件を満たすmissing_charメソッドを実装しましょう。

**・対象となる文字列からn番目の文字を削除すること**
**・削除された文字以外の文字列を出力すること**

**雛形**

“`ruby
def missing_char(str, n)
# 処理を記述
end

# 呼び出し例(1つ目の引数には対象となる文字列を、2つ目の引数には対象となる文字列から何番目の文字を削除するのかを指定しましょう)
missing_char(‘kitten’, 1)
“`

出力例:
missing_char(‘kitten’, 1) → ‘itten’
missing_char(‘kitten’, 2) → ‘ktten’
missing_char(‘kitten’, 4) → ‘kiten’

**ヒント**
slice!メソッドを使用しましょう。

元記事を表示

RSpecで孫モデルから親モデルの属性を指定することはできない

# 概要
has_one/belong_toの関係で構成された2段階のモデルがあった場合、孫モデルをcreateするときに親モデルの値を指定したかった。
[![Image from Gyazo](https://i.gyazo.com/d92b5d60a0a7ec13d5b57e6a988804d8.png)](https://gyazo.com/d92b5d60a0a7ec13d5b57e6a988804d8)

# 結論
できない

# じゃあどうするのか
一度子モデルを作って繰り返すしかない。以下例。

■RSpec

“`ruby
# 一番上の親モデルを作ります
oya = create(:親)

# 子モデルをcreate_listで作りながら、eachで孫モデルを作ります
create_list(:子, 3, 親: oya).each do |child|
create(:孫, 子: child)
end
“`

■子Factory

“`ruby
factory :子, class: ‘Child’ do
# associ

元記事を表示

銀座Rails#41企画の「Rubyで点字メーカープログラム」を作ってみました

# はじめに
はじめまして、シモカワと申します。
プログラミングスクールの[フィヨルドブートキャンプ](https://bootcamp.fjord.jp/)で学習6ヶ月目となり、今回がQiita初投稿です。

本記事は、Qiitaで開催中の「[Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-のカレンダー \| Advent Calendar 2021 \- Qiita](https://qiita.com/advent-calendar/2021/ruby-challenge)」の銀座Rails版の点字プログラムの問題を解いたときのお話です。

銀座Rails版Rubyプログラミング問題のGitHubのリポジトリは[こちら](https://github.com/JunichiIto/tenji-maker-challenge-for-ginza-rails)です。

# 動機
フィヨルドブートキャンプでメンターをされている伊藤淳一さんよりコミュニティ上で銀座Railsでの公開コードレビュー開催のご案内があり、面白そうだと思って参加することにしました。
本音は

元記事を表示

credentials.yml.encをRubyMineで編集する

# 前提環境

“`
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x64-mingw32]
$ rails -v
Rails 7.0.1
“`
OSはWindows10 64bitです。

# RubyMineの実行ファイルパスを取得する

スタートメニューなどからRubyMineのアイコンを探して、[ 右クリック->(その他)->ファイルの場所を開く ]を`rubymine64.exe`ファイルが出てくるまで行います。

そうしたら、ファイルをコピーしてエクスプローラーのアドレス欄に張り付けて、その文字列をコピーしてください。

# 環境変数を設定する

値の例: `”C:\…\rubymine64.exe –wait”`

– 一時的

“`
set EDITOR=先ほど取ってきたパス –wait
“`

– 恒久的

“`
setx EDITOR 先ほど取ってきたパス –wait
“`

# 編集

“`
rails credentials:edit
“`

元記事を表示

【Ruby】インスタンスの生成

※初心者向け
※アウトプット練習の為

開発環境
rails 6.0.4.4
ruby 2.6.5

##問題
クラスFruitを以下の仕様で定義してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2451862/b3e5911a-abf2-f0db-a2f0-a706d4bd1b9a.png)
実行結果は以下のようになります。

“`ruby
採れたて新鮮な果実です
リンゴは120円です
オレンジは200円です
イチゴは60円です
“`

雛形

“`ruby

class Fruit
def クラスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end

def initialize
# ここに処理を記入してください
end

def インスタンスメソッド
# 正しくメソッドを定義した上で、ここに処理を記入してください
end
end

# 3つのインスタンスを生成してください

# クラスメソッドを呼び出し、

元記事を表示

MVCモデルについて

###学習した理由
最近ポートフォリオを作成し終えた初学者になりますので、これを機にもう一度基本に戻り、プログラムの基礎を学ぶことを目的としてこの記事を作成しております。

###MVCモデルとは
MVCモデルとは「モデル(Model)」「ビュー(View)」「コントローラ(Controller)」の三つに分類し、コードを分けて記述する方法になります。

###「モデル(Model)」
「モデル(Model)」の役割は表示内容や入力に関係しない処理を担当する部分になります。
もっと詳しく説明すると、処理したデータをデータベースに反映することです。
担当する処理として、データの検索、データの検証、データの変換、データの紐付けなどになります。

###「ビュー(View)」
「ビュー(View)」の役割は実際に目に見えるページを表示することになります。
「ビュー(View)」に関してはユーザー側の処理が多く、入力内容の取り込みや、リクエストをコントローラーに渡す役目も果たしています。

###「コントローラ(Controller)」
「コントローラ(Controller)」の役割はView

元記事を表示

【RuboCop】特定の「ディレクトリ」をチェック対象外とする

# 概要
bundle exec rubocopを実行した際、ルール違反のファイルを指摘してくれるが、
その中で**特定のディレクトリ**をルール適用対象外とする方法についてメモ。

## 環境
ruby 3.0.2
rails 6.1.4
mysql 8.0.26
rubocop 1.23.0
rubocop-rails 2.12.4

### ルール違反の検出
前提:多数のカラムを持つSampleモデルをrails generateで作成した直後とする。

“`terminal:terminal
# チェックの実行
❯❯❯ bundle exec rubocop

# ルール違反箇所の検出
sample-app/.rubocop.yml: Warning: no department given for MethodLength.
Inspecting 63 files
…………………………………………………….C.

Offenses:

db/migrate/20220119115229_crea

元記事を表示

【備忘録】rbenvの導入(anyenv経由)

“`
# rbenvのインストール
$ anyenv install rbenv

# 初期化処理をzshrc記述
$ echo ‘eval “$(rbenv init -)”‘ >> ~/.zshrc

# インストールできるRubyの一覧表示
$ rbenv install -l

# 3.1.0をインストール
$ rbenv install 3.1.0

# ~/.rbenv/versions/*/bin/ 以下のファイルを ~/.rbenv/shims/ 以下にコピー
$ rbenv rehash

# グローバル指定
$ rbenv global 3.1.0

# バージョンの確認
$ ruby -v

“`

参考記事:https://mogulla3.tech/articles/2020-12-29-01

元記事を表示

プログラミング言語を簡単にまとめる

##Java
JavaとはC言語ベースに開発された汎用性の高いプログラミング言語。求人需要が多い
WEBサービスから業務システム、組み込み、など多岐に渡り開発現場で採用されている。
フレームワークはspring Framework

##Ruby
Rubyとはオブジェクト指向のプログラミング言語。コードはシンプルに書きやすく読みやすい。
WEBサービスやWEBアプリケーションができる。
フレームワークのRuby on Rails。クックパッドや食べログに使用されている

##PHP
PHPとは動的なWEBページを生成することができるサーバーサイドのスクリプト語。HTMLは静的WEBページ。
他のプログラミング言語と比べると文法が比較的容易なので取得しやすい。
フレームワークはLaravel

## C#
マイクロソフト社が開発したオブジェクト指向のプログラミング言語。Javaと似ている。
GUIアプリケーション、WEBアプリケーション、ゲーム開発ができる
フレームワークはASP.NET

元記事を表示

RailsでMissing helper file helpers/〜〜というエラーが出た時の解決策

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

Railsチュートリアル6版の学習中、14章の「14.2.4[Follow]ボタン(基本編)」の
`$ rails generate controller Relationships`
を実行後に
>Missing helper file helpers/relationships_helper.rb (AbstractController::Helpers::MissingHelperError)

というエラーが出て戸惑ったのですが、解決したため共有です。

# 結論
`$ spring stop`
コマンドで解決しました。

## springとは
「開発効率を上げるためにバックグラウンドで動いてくれているやつ」らしいです!

https://nyakanishi.work/lets-stop-spring-when-the-rails-command-does-not-work-properly/#toc1

## spring

元記事を表示

Rubyで解く射撃王

[問題解決力を鍛える!アルゴリズムとデータ構造](https://www.amazon.co.jp/%E5%95%8F%E9%A1%8C%E8%A7%A3%E6%B1%BA%E5%8A%9B%E3%82%92%E9%8D%9B%E3%81%88%E3%82%8B%EF%BC%81%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%A8%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0-%EF%BC%AB%EF%BC%B3%E6%83%85%E5%A0%B1%E7%A7%91%E5%AD%A6%E5%B0%82%E9%96%80%E6%9B%B8-%E5%A4%A7%E6%A7%BB%E5%85%BC%E8%B3%87-ebook/dp/B08PV83L3N/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=16M9DX8AQWUYQ&keywords=%E3%82%A2%E3%83%AB%E3%82%

元記事を表示

【RSpec】変数名を付けながら大量のデータ作成したとき

##instance_variable_set

テストで変数名を付けながら大量のデータを作成したいときに便利。

“`ruby
(Date.new(2022, 1, 1)..Date.new(2022, 1, 31)).each_with_index do |date, i|
instance_variable_set(“@date#{i+1}”, date)
end

@date1 #=> Sat, 01 Jan 2022
@date2 #=> Sun, 02 Jan 2022
@date3 #=> Mon, 03 Jan 2022

“`

##参考

https://docs.ruby-lang.org/ja/latest/method/Object/i/instance_variable_set.html

https://qiita.com/yosaprog/items/c008c709e851c9e7c717

元記事を表示

railsの環境構築

## はじめに
備忘録
PCはMac M1チップ
参考記事を読んでから実装するとわかりやすいと思います。

## 参考にした記事
[【Ruby】Rubyのインストール手順と動作確認](https://info-wcn.com/ruby-install-mac/)
[Ruby on Rails の環境構築構築](https://info-wcn.com/ruby-on-rails-environment-mac/)

[bundlerで非推奨になった –path –binstubs – Qiita](https://qiita.com/devzooiiooz/items/8babd82f780f01812f9d)
[bundle exec はもういやだ – Qiita](https://qiita.com/circled9/items/1a3c6c38ee40de4cf5e3)

## 特質事項
非推奨の`–path vendor/bundle –binstubs=vendor/bin`を使わない方法で実装する

rails 環境構築部の`bundle exec`を省略する設定

元記事を表示

[py2rb] 辞書の値が関数

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# 辞書の値が関数 (Python)
“`python
def a(k, v):
print(k, v)

def b(k, v):
print(k, v)

h = {‘func a’: a, ‘func b’: b}

h[‘func a’](‘A’, 1)
h[‘func b’](‘B’, 2)

# A 1
# B 2
“`
辞書の値に関数を入れておいて、引数を渡します。
動的プログラミングですねえ。
# 失敗 (Ruby)
“`ruby
def a(k, v)
p [k, v]
end

h = {‘func a’ => a}

main.rb:1:in `a’: wrong number of arguments (given 0, expected 2) (ArgumentError)
“`
ハッシュにメソッドを入れた時点でエラーになります。
# 成功 lambda (Ruby)
“`ruby
a = lambda { |k, v| p [k, v

元記事を表示

[py2rb] lambda

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# lambda (Python)
“`python
_identity = lambda x, **kw: x
“`
https://docs.python.org/ja/3.7/glossary.html#term-lambda

いわゆる無名関数ですね。
# lambda (Ruby)
“`ruby
_identity = ->(x, **kw) { x }
# or
_identity = lambda { |x, **kw| x }
“`
https://docs.ruby-lang.org/ja/latest/method/Kernel/m/lambda.html

`lambda`と`Proc`の違いの一つに引数の数が違っている場合があげられますが、可変長引数を使用するとエラーにならない様です。

“`ruby
identity2 = ->(x, **kw) { x }
puts identity2.call(2)

# 2

identity1

元記事を表示

OTHERカテゴリの最新記事