Ruby関連のことを調べてみた2020年04月14日

Ruby関連のことを調べてみた2020年04月14日

RailsアプリにCircleCI2.1でCI/CDを導入する設定ファイル【初心者向け】

こんにちは、[ペーパーエンジニアのよしこ](https://twitter.com/K2_Yoshiko)です。

自作RailsアプリにCircleCIを使ってCI/CDを導入してから数週間が経過して、導入当初と比較して動作が安定しました。

私の場合、[CircleCI公式ドキュメント](https://circleci.com/docs/ja/2.0/)を基本として自分の環境を構築しましたが、
当時はCircleCI version: 2.1の新機能※ に対応した他環境の設定ファイルを参考にしたいと思ってました。

> ※ CicleCI vertsion: 2.1の新機能
> orbs / commands / executors

> 機能の説明は次の連載記事が分かりやすかったです。
> [「エンジニアのためのCI/CD再入門」連載一覧](https://codezine.jp/article/corner/754)

そこで今回、CI/CDを導入したい初心者エンジニア向けに、CircleCI2.1に対応した設定ファイルを公開したいと思います。

# 環境

“`
R

元記事を表示

RiotとRRでテストケース書きたい

## はじめに
突然見たことも触ったこともないruby(フレームワークなし)を触らなければならなくなってしまい、
かつなかなかニッチなテストフレームワークを使ってテストが書いてあるので、お勉強しました。。。

しんどい。。。
そもそもrubyの文法まったく知らない。。。

## riot
http://thumblemonks.github.io/riot/#fn:1
https://github.com/thumblemonks/riot
(riotて暴動って意味ですよね・・・)
他のテストフレームワークより簡素に書けて早いのがウリなユニットテストフレームワークです。ですって

“`ruby:sample1.rb

context “An empty Array” do
setup { Array.new }
asserts(“it is empty”) { topic.empty? }
end # An Array
“`

・context
どんなテストをするのか説明を書きます

・setup
何をテスト対象とするのかを決めます
上記の場合だと{Array.new}で生

元記事を表示

【Rails】date_selectを使ってみた

#学習メモです
タスクに期限を設定したくてカレンダーだと面倒なので日付選択が簡単なdate_selectを使ってみた。
#型
html.slim

“`
= f.date_select(:カラム名,
use_month_numbers: true,
start_year: Date型で最初の日付,
end_year: Date型で終了の日付(interger型なので+5などでつければOK),
default: 何も入力しなかった場合の値,
date_separator: ‘区切りかた’)
“`
#実際に書いたコード
“`
= f.date_select(:start_at,
use_month_numbers: true,
star

元記事を表示

Ruby の右代入とエンドレスメソッド定義文を組み合わせるといろいろとつらいことがわかった

[ブログ記事](http://secret-garden.hatenablog.com/entry/2020/04/13/233925)からの転載です。

さてさて、先日 Ruby の開発版に右代入とエンドレスメソッド定義構文が入りました。
この構文については以下を参照してください。

* [Ruby の開発版に右代入演算子とエンドレスメソッド定義構文が入った](http://secret-garden.hatenablog.com/entry/2020/04/10/195207)

この2つの機能を組み合わせて使うといろいろとつらいことがわかってきたのでちょっとまとめてみました

## `def hoge(value) = value => @value`

アクセッサ的に引数をそのままインスタンス変数に代入するコードはよく記述すると思います。
それを右代入とエンドレスメソッド定義で書くと

“`ruby
def hoge(value) = value => @value
“`

のように記述する事ができます。
もうこの時点でよくわからん!!みたいなユーザがいる

元記事を表示

railsのversion確認でエラーが出た時

“`$gem install rails -v 5.2.3
“`
でinstallして

“`$rails -v
“`
でversion確認すると

“`
Rails is not currently installed on this system. To get the latest version, simply type:

$ sudo gem install rails
You can then rerun your “rails” command.
“`

んんんん、さっきインストールしたよな?
ま、この通りやってみるか

“`$sudo gem install rails
“`
実行

また同じエラーが出ました

#色々試してみました

https://qiita.com/arashida/items/ae982df5e534fd4bc97a

上を参考にさせてもらって試してみました

けど全く同じエラー

##そうだ、passを確認

元記事を表示

#Ruby gem install で過去のバージョンを指定するには -v オプションでバージョン指定 ( 例: gem install rubocop -v 0.77 )

# 方法

– -v でバージョン指定してインストールする
– 他のバージョンがインストールされている場合は gem uninstall で削除する

# 動作の例

バージョン指定してインストール

“`
$ gem install rubocop -v 0.77
Successfully installed rubocop-0.77.0
Parsing documentation for rubocop-0.77.0
Done installing documentation for rubocop after 6 seconds
1 gem installed
“`

バージョン確認
前に別バージョンもインストールしていたので、2個のバージョンが表示された

“`
$ gem list rubocop

*** LOCAL GEMS ***

rubocop (0.81.0, 0.77.0)
“`

複数バージョンがインストールされていると、新しいほうが使われそう?

“`
$ rubocop -v
0.81.0
“`

コマンド単位でのバージ

元記事を表示

2つの日付の月数の差分の計算

仕事で月数の差分を出す必要があったのですが、なかなかこれだっていうのが見つからなかったので書きました。

## 月数の差分を出す
baseを基準日として差分を出すための過去の日付をpastとし、どちらもDate型とします。
baseとpast共に年(year)に12を掛けて年月を月数に直してから減算し、最後に調整値を加算する。

“`Ruby
def diff_months(base, past)
adjusted_value = base.day >= past.day ? 1 : 0
((base.year * 12) + base.month) – ((past.year * 12) + past.month) + adjusted_value
end
“`

## 調整値について
1を足す基準が基準日の日にちが過去日の日にち以上というのは実際に例を出したほうがわかりやすいので例示します。

#### ex. 基準日を2020年3月15日、差分を出す過去日を2019年3月16日とする場合
この場合はちょうど丸1年です。なので差分は12ヶ月となってほしいです。
基準日の

元記事を表示

商品一覧ページ内のカートに入れるボタンの実装(非同期通信)

#はじめに
商品一覧ページ内の各商品に割り振られているカートに入れるボタンが押された際にuser_idとeffector_id(現在作成中のアプリケーションではエッフェクターが商品のため各所でeffectorを使用していく)にログイン中のuserのidとクリックされた商品のidを保存することを目指す。今回は非同期通信を使用したい。
#テーブル、コントローラー、APIの作成
##cartsテーブルの作成
“`:ターミナル
アプリケーションのディレクトリ$ rails g model cart
“`
cartモデルの作成

“`(migrateファイル)create_carts.rb
class CreateCarts < ActiveRecord::Migration[5.0] def change create_table :carts do |t| t.references :user, foreign_key: true t.references :effector, foreign_key: true t.timestamps

元記事を表示

返信機能実装時、工夫した点 -newアクション-

投稿に対する返信機能を作成する際に、newアクションの実装を少し工夫することで便利にすることができました。

#●実装コード
Q&Aサイトを実装しているため、投稿=Question 返信=Answerとなっています。

“`ruby:app/contorollers/answers_controlelr.rb
def new
@question = Question.find(params[:id])
@answer = @question.answers.build
end
“`
“`ruby:config/routes.rb
get “/answers/:id”, to: “answers#new”, as: :new_answer
resources :answers, except: %i(new)
“`

#●解説
###1.アソシエーションでquestionを取得することができる。
“`ruby:app/contorollers/answers_controlelr.rb
def new
@question = Que

元記事を表示

RailsでGoogleAnalyticsを設定する

Railsで作成したアプリにGoogleAnalyticsを設定することがたくさんあると思う。
[google-analytics-rails](https://github.com/bgarret/google-analytics-rails)という便利なgemがあるそうだが、PRを見てみると2017年10月で終わっている…
多分メンテナンスされていないし、gemを使うほどでもないので自分で設定することにしたが、RailsからJavascriptへの変数の渡し方に手間取ったので残しておく。

## Analyticsタグの設置
GoogleAnalyticsタグは`head`に書いていく。今回はログインしている場合は変数`current_user`をJavascriptに渡してあげて、ログインしていない場合は変数を渡さないという仕様にする。
この`current_user`をRailsからJavascriptに渡す時にかなり工夫した。

## コード
コードを書いていく。テンプレートエンジンはslimを使っている。

“`slim:app/views/layouts/applica

元記事を表示

[JavaScript]デジタル時計つくる desktop用

テクニカルテスト受けるまで基礎学中心!
個人アプリにはガッリ手を出せない。
でも、何かしら実装したい。。。
と思いプチアプリ作成をすることにしました。
(今回はデスクトップで見るようなので、webページに入れ込んだりできません。
ご了承くださいませ)

## 環境
Mac 10.14.6
Ruby 2.5.1p57
iTerm2 Build 3.3.7

## 制作時間
約3〜4時間(qiita書きつつ調べて画像集めつつなので思ったよりも時間がかかりました。
素材揃っていればもっと早く終わると思います)

## 作成手順
1から全部記述します。1~5は新規アプリ作成部分も含まれている
ので、不要な方は飛ばしてください。

### 1,任意のディレクトリにいどう(不要な場合はcdのみで○)
### 2,新規アプリ作成

“`ruby:ターミナル
$ rails new jsClock-simple -d mysql
“`

### 3, `cd jsClock-simple`で今作成したディレクトリへ移動
### 4,Gitの管理下に置く

“`ruby:ターミナル
$git in

元記事を表示

Kinx ライブラリ – Regex(正規表現)

# Regex

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。言語はライブラリが命。ということでライブラリの使い方編。

今回は Regex、つまり正規表現です。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。

正規表現も普通に入ってて欲しいライブラリのひとつ。[プログラム基礎・データ型](https://qiita.com/Kray-G/items/f1f891fe

元記事を表示

いろいろなコードの書き方

##return 〇〇 if n == 0(処理はn==0の条件を満たすまで継続)
####return 〇〇 if n == 0
`def factorial(n)
return 1 if n == 0
n * factorial(n – 1) # 関数の中で自身を呼び出している
end
p factorial(5) # => 120`

####別の書き方
`def factorial(n)
if n == 0
return 1
else
n * factorial(n – 1)
end
end
p factorial(5)`

##attr_accessorメソッド
####attr_accessor
class School
attr_accessor :name
end`

####別の書き方
`class School
def name=(value)
@name = value
end
def name
@name
end
end`

元記事を表示

Kaminariで、controllerでメソッドチェインできない時

## Kaminariで、メソッドチェインができない…

Kaminariを使って無限スクロールを実装していたところ、

“`controller.rb
def index
# コイツは普通に取得できるけど
@posts = current_user.posts.where(created_at: Date.today).page(params[:page]).per(8)

# sort_by, sort_by!, reverse!でつなげた時はエラーになる
@posts = current_user.posts.where(created_at: Date.today).sort_by {|f| f[:updated_at]}.reverse!.page(params[:page]).per(8)
end
“`
##解決策

上は、メソッドチェインで取得したのはインスタンスオブジェクトなのに対し、
下は、sortメソッドなどは、`Enumerable#sort`というRuby標準のメソッドで配列を返す。

###そもそも

元記事を表示

初めてのwebサービスとして、コロナウイルス感染症の支援情報検索サイトを作ってみた。

https://covid19supportinfo.herokuapp.com/
おそらく現在もっとも多くのデータから検索できるサイトだと思います。

#動機

支援の情報が行き渡っていないという声を何度か目にして、今無職だし人の役に立つことでもするかと思い開発しました。
検索してみたところすでに検索サイトがいくつか存在したが、不満点が複数あった。
Moneyforwordのは、自治体ごとのがメインで全国的に使えるものが少ない。(これがなぜなのかわからない。どこが情報元なのだろうか。)
個人向けの検索をできるサイトがない。
など不足している部分があったため制作を決めた。

#自己紹介

今年の1月からRailsの勉強をはじめたばかり。熊本在住。

#情報元
https://www.meti.go.jp/press/2019/03/20200323009/20200323009.html

#開発期間

2020-04-10~2020-04-13

#困ったこと

元データがめちゃくちゃで、どれが個人向けでどれが事業向けなのかを判別するのに苦労し、URLも別の場所に記述されていたりと混

元記事を表示

ハッシュについて(Ruby)

##ハッシュのイメージ
`{キー1: 値1, キー2: 値2, キー3: 値3}
member = {name: “Ryohei”, age: 24}`

##ハッシュの要素を取り出す
`member[:name]
=> Ryohei`

##ハッシュの追加方法
`member[:place] = “Okayama”
=> {name: “Ryohei”, age: 24, place: Okayama}`

##配列の中にハッシュがあり、取り出す場合
`blog = [{title: “今日は暑いな”, content: “でも頑張るぞ”},{title: “今日の仕事が終われば”, content: “明日から旅行だ”},{title: “明日から”, content: “プログラミングするぞ”}]
puts blog[0][:title]
=>明日から`

元記事を表示

【ruby】『ruby入門(メモ4)』恐竜配列を作ってみよう(windows10+ruby2.3.3)

####1.配列の追加
__ 配列名.push(配列の要素名)__
__ 配列名 << 配列の要素名__ ####2.配列の逆順ソート __ 配列名.reverse__ ####3.配列の重複削除 __ 配列名.uniq__ ####4.配列に特定の要素が含まれているか __ 配列名.include?(要素名)__ ####5.配列が空かを確認する(空の場合はtrue) __ 配列名.empty?__ ####6.メソッド! メソッドの結果を元の配列に反映する。 ####6.コード例 ```ruby:array_dinosor.rb =begin Tyrannosaurus:ティラノサウルス Velociraptor:ヴェロキラプトル Stegosaurus:ステゴサウルス Triceratops:トリケラトプス Brachiosaurus:ブラキオサウルス =end arr_dinosor=['Tyrannosaurus','Velociraptor','Stegosaurus'] puts arr_dinosor[0] puts arr_dinosor[1] p

元記事を表示

Railsでbootstrapが効かない、destroyが効かない

Ruby on Rails初心者です。

Ruby on Railsでログイン機能付きの本の感想を登録できるアプリケーションを作成しています。

ログインしているユーザーが投稿した本の内容を削除できるようにdestroyメソッドを実装したのですが、エラーが出ないのに削除できないという現象に陥ってしまい、詰まってしまったのでここにメモしておきます。

今回の不具合として、
・destroyアクションが効かない、destroyボタンを押すとshowページにいってしまう
・bootstrap,CSSが効かない
という2点がありました。

まずコントローラーですが、

“`books_controller.rb
def destroy
@book = Book.find(params[:id])
respond_to do |format|
if @book.destroy
format.html{redirect_to books_path, notice: “Book was successfully destroyed.”}

元記事を表示

コロナウイルスに伴う現金給付対象者かんたん測定ツールを作った話

#はじめに
**「30万円の現金給付の対象者ややこしすぎん?」**
ネットニュースを見ててそう思い、今回アプリケーションを作ることにしました!!
技術的な話ではないですが、リモートワークの息抜き程度に読んでみてください:raised_hand::raised_hand:

**「コロナウイルスに伴う現金給付対象者かんたん測定ツール」**
https://coronavirus-cash.herokuapp.com/

#アプリケーション概要
スクリーンショット 2020-04-12 22.06.19.png
スクリーンショット 2020-04-12 22.06.48.png②Dockerを初めて導入してRails sする (2020.4時点)

#1.これからDocker導入します、という方は、まず、こちらを見ていただけると幸いです。

**①Dockerを初めて導入して基本操作する (2020.4時点)
https://qiita.com/SakagamiKeisuke/items/4455631886b1c15a3b69**

本稿は、
**Dokerコンテナイメージを作成して、
コマンド「docker-compose up 」でRails s起動する**という流れです。

自分と同じように、
何していいかわからないゼロスタートの方になるべくわかるようにしたいと思っています。

#2.前提
Docker for Macアプリをインストールしている
Dockerサービスが起動している
DockerHubでサインインしている
VSCodeで編集
ターミナル使用
Sequelpro使用

<環境>
macOS : Catalina 10.15.3
Docker version : 19.03.8
ruby : 2.5.1
Rails : 5.2.4.1
MYSQL :5.6

<参考>
Dockerの感じというか、

元記事を表示

OTHERカテゴリの最新記事