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

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

Dockerを使ってRuby on Railsの環境構築をしてみた

# はじめに
DockerもRuby on Railsもどちらも扱ったことがなかったので、
まとめて学習できれば良いなと思ったのがきっかけです。
今回は簡単な画面表示までをやっていきます。
※Windows環境です

# 必要なファイルの用意
docker-sampleというディレクトリを作成し、この中で作業していきます。
まず、以下4つの空ファイルをディレクトリ直下に作成します。
Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
entrypoint.sh

““
docker-sample/
   ├─ Dockerfile
   ├─ docker-compose.yml
   ├─ Gemfile
   ├─ Gemfile.lock
   └─ entrypoint.shDockerfile
““
各ファイルの中身はこの後設定していきます。

# Dockerfileの設定
DockerfileとはDockerイメージを作成するための設計書のようなものです。
今回は以下の内容で作成します。

““
FROM ru

元記事を表示

sliceメソッドの使用方法

# sliceメソッドとは
sliceメソッドとは、配列や文字列から指定した要素を取り出すことができるメソッドです。

# 配列を作成します
array = [0,1,2,3,4,5,6]

# 配列から引数で指定した要素を取得します
ele1 = array.slice(1)
puts ele1
#=> 1

# 配列番号-4から4つ分の要素をsliceします
ele2 = array.slice(-4,4)
puts ele2
#=> 3, 4, 5, 6

# 配列はもとのままです
puts array
#=> [0,1,2,3,4,5,6]

元記事を表示

配列と文字列の変換

# 配列から文字列へ変換
“`rb
irb(main):017:0> [“1”, “2”, “3”, “4”].join(“,”)
=> “1,2,3,4”
“`
### 出典
https://docs.ruby-lang.org/ja/latest/method/Array/i/join.html

# 文字列から配列へ変換
“`rb
irb(main):018:0> “1,2,3,4”.split(“,”)
=> [“1”, “2”, “3”, “4”]
“`
### 出典
https://docs.ruby-lang.org/ja/latest/method/String/i/split.html

https://qiita.com/beanzou/items/a9253ee083aeac9fc608

# 感想
基本だけど忘れていた。
使い所が出てきてよかった。

元記事を表示

ハッシュから任意のキーのバリュー(値)を取得する方法

# はじめに
ハッシュから値を取得する方法について、曖昧に覚えていた部分があったので整理のためまとめます。
間違った解釈をしていたらご指摘ください。

## ハッシュの取り出し方
例えば以下のようなハッシュが存在するとする

user = {name: タロウ, age: 15, height}

userというハッシュ名から任意のキーのバリュー(値)を取り出すためには、

puts user[:name]
⇨”タロウ”

ここで少し落とし穴がある。
railsで開発を続けていると、ついついテーブルの値を取得する延長線上で

puts user.name

で値を取り出したくなるが、これでは「nameの変数が未定義ですよ」とエラーが出ます。

これはなぜ起きるのか・・・
ズバリ原因は、ゲッターセッターが定義できているかと、ActiveRecord::Baseの存在のせいです。

## ゲッター、セッターとは
以下の記事を参考にしました。

https://qiita.com/k-penguin-sato/items/5b75be386be4c55e3ab

元記事を表示

Redmine 2.5からRedmine 4.2へアップグレードする

社内からの要望でRedmineをアップグレードすることになりました。

使っていたのはRedmine 2.5。これを新しいものにアップグレードします。

# どうやってすればいいのか

Redmineのインストールには若干苦手意識があったのですが、調べてみるとRedmine 1からRedemine 4にアップグレードをしている人がいました。

【1.3.0 → 4.1.0.stable】Bitnami Redmineのサーバー移行&バージョンアップデート!【引っ越し】

言われてみればそうだなと思ったのですが、Railsで組まれているのでマイグレーションしていけば最新版になるはずです。
正直アップグレード方法はこれでOKですので、この通り進めます。
ということで、これをもとにRedemine 4とRedmine 5の試用環境を作って、どちらが良いかを社内の人に決めてもらうことにしました。
試用環境はアップグレード手順の検証にも使えるので添付ファイル以外は移行して操作感を比べてもらうことにしました。

# 構成

最終的にRedmine 4.2に移行することにしました。
理由はいくつかありますが、大きくは以下の3つです。

– Re

元記事を表示

Rubyのクラスのアクセサについて

Rubyのクラスについて、インスタンス変数の参照・代入とそれを可能にするattr_accessorをまとめます。

クラスの基本内容については[先日まとめた記事](https://qiita.com/bellmmm/items/a1292d5143d0f128c009)をご確認ください。
selfと@の違い、selfと()の省略については[こちらの記事](https://qiita.com/bellmmm/items/f309bcddb71db53da662)をご確認ください。
インスタンスメソッド、クラスメソッド、メソッドの呼び出し制限によるプライベートメソッドについては[こちらの記事](https://qiita.com/bellmmm/items/c06acf71aeed07b3cd7f)をご確認ください。

# インスタンス変数に対する読み取りと書き込み

## インスタンス変数は直接参照・代入できない
インスタンス変数は、クラスの中では参照(値を取り出す)・代入が可能ですが、クラスの外からは直接参照・代入はできません。
例) インスタンス変数を直接参照・代入するとエ

元記事を表示

Rubyのクラスのメソッドの種類について

Rubyのクラスについてインスタンスメソッド、クラスメソッド、メソッドの呼び出し制限によるプライベートメソッドをまとめます。

クラスの基本内容については[先日まとめた記事](https://qiita.com/bellmmm/items/a1292d5143d0f128c009)をご確認ください。
selfと@の違い、selfと()の省略については[こちらの記事](https://qiita.com/bellmmm/items/f309bcddb71db53da662)をご確認ください。

# インスタンスメソッド
## インスタンスメソッドとは
インスタンスメソッドはクラスのインスタンス(実体)に紐づけられるメソッドです。
## 使い方
クラスの中にメソッドを作成するとインスタンスメソッドになります。後述するクラスメソッドとは異なり、呼び出す際にはインスタンスの作成が必要です。`インスタンス名.メソッド名`で呼び出します。
## 例)Calculationクラスのインスタンスメソッド
“`ruby
class Calculation
def addition(a, b,

元記事を表示

Railsで検索機能実装

## 初めに
今回は実際にindexのページに検索機能を搭載していきたいと思います。

## routes.rbにsearchを設定

“`routes.rb
get ‘searches’ => ‘courses#search’
“`

## controllerに追加
“`app/controllers/courses_controller.rb
def search
@courses = Course.search(params[:keyword])
@keyword = params[:keyword]
render “index”
end
“`

## viewページに実際に記述

“`app/views/courses/index.html

  <%= form_with url: searches_path, method: :get, local: true do |f| %>
<%= f.text_field :keyword, v

元記事を表示

【Ruby】変数が定義されているかを確認

# defined?を使用する

Rubyでは変数が定義されているかを確認するために`defined?`を使用できます。
`defined?`は変数やメソッドが定義済みの場合、式の種類を表す文字列を戻り値として返します。
未定義の場合、`nil`を戻り値として返します。

– 変数に値が代入されていると`”local-variable”`が返ってきます。
“`ruby
> test = 111
=> 111
> defined? test
=> “local-variable”
“`

– nilが代入されていても`”local-variable”`が返ってきます。
“`ruby
> hoge = nil
=> nil
> defined? hoge
=> “local-variable”
“`

– 変数に値が代入されていないと`nil`が返ってきます。
“`ruby
> defined? foo
=> nil
“`

– グローバル変数に値が代入されていると`”global-variable”`が返ってきます。
“`ruby
> $global = 111
=> 11

元記事を表示

vender/bundleにgemが入ってしまってどうしようもなくなったとき

タイトルの通りなんですが、
“`ruby
budle install
“`
するときに、オプションで
“`ruby
bundle install –path vendor/bundle
“`
とつけると、何やら見慣れないファイルが・・・
そしてその中にはgemファイルがたくさん詰まっていて、Gitにプッシュするたびに大量のデータがいってしまい(私の時は6000個くらいありました)、Gitが止まって本当に困っていました。
そのときに見つけたのがこちらのサイトです。
https://techtechmedia.com/vender-bundle-solution/
本当にわかりやすく一発で解決したので、同じような事象でお困りの方はぜひ見てみてください。

元記事を表示

激安なDBの仕組み作りにチャレンジ 2回目

# はじめに

[この](https://qiita.com/hiroaqi/items/fac3267c1a6d6b8b7fcc)記事の続きになります。

今回は、前回作成した仕組みのクライアント側(SQLと結果を受け取る)を作成していきます。主な処理の流れは、Cloud Pub/SubにSQLを含んだメッセージを送信して、その結果が出力されているCloud Storageから結果を受け取ります。

# クライアント側のコード

クライアントもRubyで書いていきます。Gemfileには次の2つのgemを追加します。

“`ruby:Gemfile
gem “google-cloud-pubsub”
gem “google-cloud-storage”
“`

クライアント側のコードは次のようになります。

“`ruby:client.rb
require “google/cloud/pubsub”
require “google/cloud/storage”
require “json”
require “securerandom”

def execute(query)

元記事を表示

ページネーションレイアウト

## 初めに
前回はページネーションの実装について投稿しましたが今回はレイアウトについて投稿していきます。
すでに’kaminari’をGemfileに入れている方は 新たに’bootstrap4-kaminari-views’を入れてviewページの記述の所を見て貰って構いません。
まだ、’kaminari’をGemfileに入れていない場合は上から順にやって頂けたら幸いです。

## Gemfile
まずGemfileに
“`
gem ‘kaminari’,’~> 1.2.1′
“`
“`
gem ‘bootstrap4-kaminari-views’
“`
上記の記述を入れてあげます。
記述をしたら忘れずに

“`
bundle install
“`
をしましょう。
bundle installをしたら次にkaminariの設定ファイルを作成する為に下記のコマンドをターミナルに打ち込みます。
“`
$ rails g kaminari:config
“`
最後に、kaminariが利用するテンプレートを作成してあげます。
“`
$ rails g kami

元記事を表示

【Rails】Carrierwaveを用いてAWSのS3にPDFのアップロードとダウンロードを可能にする。

# はじめに

PDF投稿機能。cloudinaryではpdfに対応していないので、AWSのS3を使ってPDF投稿を実現しました。

# 開発環境
– Ruby 3.0.4
– Rails 6.1.7

# 前提
– tweetsコントローラーで投稿機能作成済み
– tweetsテーブルにはpdfカラムstringで用意
– [AWSアカウント登録済](https://aws.amazon.com/jp/free/?gclid=Cj0KCQjwqoibBhDUARIsAH2OpWjwD6i56zlT62LqzwhLLLs-Pwqdqo91PMZ_10Pre8KXy7wURDGgIOkaAuJXEALw_wcB&trk=94c18984-27d1-4395-8dae-cdbf523f1ae5&sc_channel=ps&s_kwcid=AL!4422!3!568105078079!e!!g!!aws&ef_id=Cj0KCQjwqoibBhDUARIsAH2OpWjwD6i56zlT62LqzwhLLLs-Pwqdqo91PMZ_10Pre8KXy7wURDGgIOkaAuJ

元記事を表示

激安なDBの仕組み作りにチャレンジ 1回目

# はじめに

AWS(Amazon Web Services)やGCP(Google Cloud Platform)、AzureなどでもなかなかDBのコストは高いため(AWSのサーバーレスのRDSは安いかもしれません)、利用頻度の低いケースやレスポンスが遅くても大丈夫な場合を前提としたなるべくコストの安いDBの仕組みを作ってみようという記事になります。

まず1回目は、SQLのクエリを受け付ける箇所について作成していこうと思います。また、Google Cloud Platfromで構築していきます。使用するサービスは、もちろんCloud SQLは今回は使用できないのでコストの安そうなサービスを使用していきます。

# 仕組み

どのようにして低コストの仕組みを作るのか考えてみましたが、作りやすさ(コード量の少なさなど)を重視して次のようなサービスを利用していきます。

– Cloud Functions
– Cloud Storage
– Pub/Sub

処理の流れは次の通りです。

1. SQLクエリの受付: Pub/Sub
1. Pub/Subに格納されたSQLを実行: Clo

元記事を表示

Ruby 麻雀 配牌のシャンテン数をカウントしたい①

# 現状の課題
麻雀牌全種類から無作為に14枚取り出す構造はできたため、そこから取り出された値を見て
シャンテン数をカウントしたい。
これがいくら考えてもいい方法が思いつかない。。。
ただまずは今の配列データのままでは面子の判断も難しいので、配牌の萬子、筒子、索子、字牌がそれぞれどれくらいあるかのカウンターを作ってこれをもとに判定する機能を設けようかと考えました。

# 作成コード

“`ruby:pia.rb
def shanten
mcounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
scounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
pcounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
zcounter = [0, 0, 0, 0, 0, 0, 0]
@haipai.each do |pai|
pai_num = pai.split(/\s*/)
val = pai_num[1].to_i – 1
case pai_num[0]

元記事を表示

紛らわしいRubyの@とselfについて

Rubyのクラスについて紛らわしい@とselfの違いを自分の備忘録としてまとめます。

クラスの基本内容については[先日まとめた記事](https://qiita.com/bellmmm/items/a1292d5143d0f128c009)をご確認ください。

# 紛らわしい@とself
クラス内でインスタンス変数を参照するのに、例えば`@name`と`self.name`のように、@が使われる場合とselfが使われていることがあります。この違いは何なんでしょうか?

# 前提知識

## インスタンス変数
`@name`のように最初に@が付いたものはインスタンス変数そのものを表しています。つまり、データの入れ物それ自体を表しています。

## インスタンスメソッド
一方、`self.name()`のように最初にselfが付いたものはインスタンスメソッドの呼び出しを表しています。下に例を示します。

“`ruby
class S
def calc
return 1+1
end

def call_calc
# クラス内でインスタンスメソッドを呼び出

元記事を表示

タグ機能をつけてみよう

# はじめに
この記事ではいわゆるタグをつけて投稿し、そのタグによって検索できる仕組みを実装しています。
前提としてTweetモデルにて投稿機能を扱う状態からタグ機能を追加していきます。

実装内容一覧
1. タグモデルの作成
2. モデルのアソシエーションの設定
3. デフォルトのタグをseedファイルで用意する
4. Tweet投稿の際、タグの投稿を可能にする
5. コントローラーでタグ配列を受け取れるようにする
6. 各Tweetにつけられたタグを表示する
7. 複数タグの検索をできるようにする
8. 新たなタグの追加をできるようにする
9. タグ機能に関するその他の記事

# 1. タグモデルの作成
まず、今回使用するモデルは以下の3つになります。

|Tweets|Tweet_tag_relations|Tags|
|—|—|—|
|id|id|id|
|title|tweet_id|name
|body|tag_id|

– Tweets
– 投稿テーブル
– Tags
– タグに関するテーブル
– Tweet_tag_relatio

元記事を表示

Railsで削除してしまったデータを復元する

# はじめに
最近3つあった案件が2つ急になくなってしまってピンチのフリーランスエンジニアの[藤井](https://twitter.com/YoshitsuguFujii)です。

えっ。不況?
最近は釣りばっかりしています。

ということで時間があったのでQiita初投稿です。


# 道具箱を持とう
さていきなりですがみなさん道具箱お持ちでしょうか?

道具箱というのは自分が開発、運用、調査などをする際に便利に使える自分専用のツール類(主にcliツール)のことです。


問題解決のためには、もちろんネットで探して既成のソフトを使ってもいいんですが、せっかく自分でコードを書けるのだから自分で作って自分の道具箱に追加しましょう。
特に新人の方はスキルも上達するのでおすすめです。
どこかから持ってきたコードを改造して使ったりしてみてもいいです。
日々使い続ける上で自分好みにカスタマイズしながら洗練させていきましょう。

# 心構え

自分しか見ないし使わないのでコードは汚くていいんです。可読性なんて考えなくていいです。まさかりも飛んできません。
なのでPRで辛辣なことかかれません

元記事を表示

6 Railsを用いた注文機能の作成方法

# 注文機能の流れ
###### 1 注文情報を入力
###### 2 注文情報を確認
###### 3 注文機能
###### 4 注文完了画面

# 前提条件
## orderモデル , order_detailモデル , カラム,アソシエーションをこのように定義しました

order.rb
“`Ruby
class Order < ApplicationRecord belongs_to :end_user has_many :order_details #enumによって、数字に意味を持たせることができる #今回の場合、0がcredit_card 1がtransferという意味。 #支払い方法 enum payment_method: {credit_card: 0, transfer: 1}  #注文ステータス enum order_status: {wait_payment: 0, confirm_payment: 1, making: 2, preparing_ship: 3, finish_prepare: 4} end ``

元記事を表示

1 Railsでエンドユーザーのサインアップとログイン機能、管理者のログイン機能を実装

## 1 Deviseの導入
#### (1)Gemfileに以下を追記する

“`
gem ‘devise’
“`
#### (2) bundle intallを実行する

## 2 顧客 , 管理者用のモデルを作成する

顧客のモデルを作成する
“`
rails g model devise Enduser
“`

管理者用のモデルを作成する
“`
rails g model Admin
“`

## 3 顧客 , 管理者用のテーブルを作成する
それぞれのマイグレーションファイルに以下を追記する

devise_create_end_users.rb
“`Ruby
t.string :first_name 名前 姓
t.string :katakana_first_name 名前 カナ 姓
t.string :last_name 名前 名
t.string :katakana_last_name 名前 カナ 名
t.string :postal_code 郵便番号
t.string :a

元記事を表示

OTHERカテゴリの最新記事