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

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

macでmysql2がbundle installできない時

`bundle install`でmysql2をインストールしようとしたらエラーになったので解決策のメモ。

後にこの問題に関する記事はたくさん見つけられたのだが、自分なりに色々と調べたのでメモしておく。

# 各種バージョン
macOS Mojave 10.14.6
Ruby 2.6.2
bundler 1.17.2

# はじめに結論
下記のいずれかを実行を実行した後に`bundle install`で解決。

#### macOSが新しい場合(`macOS Mojave 10.14.6`で確認)は下記実行。

“`
bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl/lib”
“`

#### macOSのバージョンが古い場合はこっちでいけるらしい。

“`
bundle config –local build.mysql2 “–with-ldflags=-L/usr/local/opt/openssl/lib –with-cppflags=-I/usr/local/o

元記事を表示

Railsのvalidationの実行過程を調べる

# 環境
Ruby 2.6.5
Rails 6.0.1

# 事の発端
ある時、継承したモデルに対して、 `validation` を書こうとして問題は起きました…

例えば、下記のような `User` モデルが存在したとします。

“`ruby:user.rb
class User < ApplicationRecord validates :name, presence: true validates :email, presence: true validates :password, presence: true validates :card_num, presence: true end ``` クレカの番号をDBに生で持つなんて恐ろしいですが、サンプルなので今回は置いておきます。 元々、課金ユーザーのみが対象でしたが、ある時、無課金ユーザーを対象とするために、新しく無課金ユーザーのモデルを作成したとします。無課金ユーザーはクレカの番号を登録しなくても使えるように `:card_num` に対する `validation` を上書きしようと考えて下記の

元記事を表示

 Hamlの基本箇所についての復習②(=)

#はじめに
[前回の記事](https://qiita.com/Moon1126Snow/items/b87b0d7cfaa97ba6da6c)が想像以上に多くの方に読んでいただけたので、続きを書こうと思います。
今回は、***HamlにおけるRuby文の書き方***です。
#実行
Rubyのビューファイル(html.erb)では、Rubyを下記のように挿入していました。

“`ruby
移動する
“`

同じコードをHamlで書くと次のようになります。

“`haml
= link_to ‘移動する’, ‘http://****’
“`

一番大きな違いは“`<%= %>“`がなくなり、“`=“`だけになっているところです。
こうすればとてもスッキリしたコードになりますが、最初のうちは読みにくい事があるので練習が必要です。

#終わりに
Hamlに限らず、プログラミングの学習記事はとても多くの内容を盛り込んであることが多いです。
そのため、中級者になればありがたくなりますが、初学者にとっては「どれが必要な情報なのか

元記事を表示

過去のアドベントカレンダーの記事一覧をJSONに変換して取得する。

## 概要
今年も[Advent Calendar](https://qiita.com/advent-calendar/2019)の季節が近づいてきました。

毎年、興味のあるトピックのAdvent Calendarにちょいちょい参加させてもらっているのですが、時々「私が投稿しようとしている記事は過去に投稿されている内容とネタが被っているのでは…?」と考えてしまうことがあります。
そこで今回は、過去のアドベントカレンダーの記事一覧を取得するスクリプトを作成してみました。

## アドベントカレンダーの記事一覧取得

スクリプトは以下のGistに置いてあります。

* [furandon-pig/advcal_list.rb](https://gist.github.com/furandon-pig/f912bac44097fbcde2c9d86cfff53342)

RubyがインストールされているUNIX系OSの環境であれば、以下の手順で実行できます。

“`sh
$ curl -s -OL https://gist.githubusercontent.com/furan

元記事を表示

RubyでもまともにStackdriver Loggingを使いたい

RubyでStackdriver Loggingを使うためには、[google-cloud-logging ライブラリ](https://github.com/googleapis/google-cloud-ruby/tree/master/google-cloud-logging)を利用します。
しかし、このライブラリには実用上いくつかの問題が存在します。
本記事では、このライブラリを拡張することで、それらの問題を解決する方法を提示します。

なお、以下のコードはRuby 2.6.3で動作を確認しています。

# Stackdriver 公式Rubyライブラリの問題
以下、 [google-cloud-logging ライブラリ](https://github.com/googleapis/google-cloud-ruby/tree/master/google-cloud-logging)を `公式ライブラリ` と表記します。
実際に公式ライブラリを利用してみて、実用するには以下の難点があることがわかりました。

1. 構造化ログにしづらい
2. `httpRequest` の情報

元記事を表示

【Ruby】すぐ出来る!`tr`メソッドによる簡単リファクタリング

## はじめに
先日、[【Ruby】すぐ出来る!`&:`による簡単リファクタリング – Qiita](https://qiita.com/terufumi1122/items/7492bcf602e4657890e5)という記事を書かせて頂きました。

今回も知っていると大幅に行数削減が出来る`tr`メソッドを使用したリファクタリング事例を記載します。:blush:

## この記事が役に立つ方
– とりあえず動くプログラムは作れる
– でもシンプルなコードを書く引き出しを持っていない
– Ruby初心者

## この記事のメリット
– `tr`メソッドの有用性を理解し、置換が必要なシーンに活用出来るようになる。

## 環境
* Ruby 2.6.3

## `tr`メソッドとは
RubyのStringクラスに標準搭載されている**文字列を置換する**メソッド。

↓Rubyリファレンスマニュアルはこちら。
[instance method String#tr (Ruby 2.6.0)](https://docs.ruby-lang.org/ja/latest/method/Stri

元記事を表示

Bundlerの1系と2系って何が違うの?

Bundlerのバージョンの違いについて、本家の[Bundler 2.0のリリースアナウンス](https://bundler.io/blog/2019/01/03/announcing-bundler-2.html)をもとに簡単に調査してみた。

# Bundler2系の変更リスト

– Ruby2.3より前のバージョンのサポートを廃止
– RubyGem3.0.0より前のバージョンのサポートを廃止
– [こっち](https://bundler.io/guides/bundler_2_upgrade.html)だとRubyGems2.5.0以上でなければならないと書いてある…どっちだ?
– githubからgemのソースを取得する際に`https`でアクセスするように(1系は`http`だった模様)
– Errorとwarningが`STDERR`に出力されるように
– Bundlerバージョンの自動切り替え
– `bundle install`実行の際、アプリのGemfile.lockに書かれたBundlerのバージョン(`bundle install`した時に記録さ

元記事を表示

「gem update –system」と「gem update」の違い

– `gem update –system`
– RubyGems(gemコマンド)自体のバージョンアップをする
– `gem update`
– インストールされている各gemのバージョンアップをする
– `gem update [GEMNAME]`で特定のgemをバージョンアップすることもできる

こういうの意外と一発でググれなくて困る…

他にもプレリリース版のgemにアップデートしたりするオプションなど色々ある模様
https://guides.rubygems.org/command-reference/#gem-update

元記事を表示

学習用

#演算子の優先順位

上から順に優先度が高くなってくる(!の上にもまだ存在する)

“`
高い !
   &&
   ||
   not
   = (+=, -= …)
低い and or
“`

例)**!,not****||** の関係性
  **!** の方が **||** より優先度が高いので、3行目は **true** となる
  **||** の方が **not** より優先度が高いので、4行目は **false** となる

“`Ruby
a = true
b = false
!a || b #=> true
not a || b

元記事を表示

【rails】select_tagの使い方

セレクトボックスを設置して、paramsでデータをとるための処理の方法のまとめ。

## select_tagとは
railsに存在する、セレクトタグを表示するためのメソッド

ドキュメント
https://apidock.com/rails/ActionView/Helpers/FormTagHelper/select_tag

## 記法
ドキュメントには以下のように記載されている。

“`rb
select_tag(name, option_tags = nil, options = {})
“`

– nameはparams -> 値を拾うための文字列
– option_tag -> optionタグを用いてセレクトタグに表示する文字列、送る値を設定
– options -> 設定すれば、複数選択できるようにしたり、空欄を含めたりできる

また、option_tagsはoptions_for_selectを用いた方が、コードがわかりやすくなる。
## options_for_selectとは
ドキュメント
https://apidock.com/rails/ActionVi

元記事を表示

【ruby】n以上m以下の判定を範囲オブジェクトでやる

##n以上m未満の判定を範囲オブジェクトでやる

0以上100未満であれば「0以上100未満です」と出力したい

“`rb:
ef judge?(num)
if num >= 0 && num < 100 p "0以上100未満です" else p "0以上100未満じゃないです" end end judge? 4 judge? 1000 def judge2?(num) if (0..100).include? (num) p "0以上100未満です" else p "0以上100未満じゃないです" end end judge2? 3 judge2? 111 #=>
“0以上100未満です”
“0以上100未満じゃないです”
“0以上100未満です”
“0以上100未満じゃないです”

“`

元記事を表示

dbpediaの研究 その24

#概要

dbpediaが難解なので、手出してみる。
rubyで、取得してみた。

#サンプルコード

“`
require ‘net/http’
require ‘uri’

target_uri = “http://ja.dbpedia.org/sparql”
uri = URI.parse(target_uri)
req = Net::HTTP::Post.new(uri)
req.set_form_data({‘query’ => ‘SELECT DISTINCT * WHERE { dbpedia-ja:デ・トマソ dbpedia-owl:abstract ?abstract .}’})
response = Net::HTTP.start(uri.hostname, uri.port) do |http|
http.request(req)
end
print response.body
“`

#成果物

https://paiza.io/projects/ylWVWeOynLVGzob-DI7ajA

以上。

元記事を表示

エンジニア歴2ヶ月目で新規プロダクト開発を任された時にセットアップしたこと

[エンジニアとして自社開発企業に入社](https://qiita.com/kenzoukenzou104809/items/0c77af2e9695c3eb8466)して2ヶ月目で新規のプロダクト開発を任せてもらえることとなりました。その時に先輩に教えてもらいながら、セットアップしたことなどをまとめてみます。

## 対象

この記事はエンジニアになるために**現在ポートフォリオ作成中の方**などの参考になるかと思います。以下で書いている内容のセットアップを行えば、「ある程度綺麗なコード」を書けるからです。

## .editorconfigの設定

`EditorConfig`は複数の開発者が関与する時に、コーディングスタイルの一貫性維持に役立ちます。僕はVS Codeを使っているので、プラグインをインストールすることで対応しました。

– [EditorConfig](https://editorconfig.org/)
– [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName

元記事を表示

【AWS】CodePipelineから呼び出したLambdaがずっと進行中になっている問題と対応

## 問題

**ずっとインジケータがぐるぐるしている**

スクリーンショット 2019-11-08 23.47.25.png
(10分立ってもそのままで)もう気が狂う!!!

S3へのデプロイ完了後にCloudFrontのキャッシュを消すLambdaを呼びたいなーと思ったときに躓いたのでまとめ。

## 原因
**`codepipeline:PutJobSuccessResult(※)`を返却しないため**
※ 失敗の場合は`codepipeline:PutJobFailedResult`

### PutJobSuccessResultって?
> PutJobSuccessResult
> ジョブワーカーによってパイプラインに返されたジョブの成功をレポートするために必要です。

元記事を表示

Railsでポートフォリオを作ってみよう! vol.3 (RSpec・FactoryBot編 前編)

前回、データベースの作成とUsermodelの作成を行った。
また、Usermodelに入ってくる情報に対するバリデーションも作成したのが前回までのあらすじ。
今回はバリデーションという機能が正しく実装されたことを確認するために、「テスト」と呼ばれるものを作成していきたい。
#テストとは
>製作したアプリケーションが正常な動作を行なっているかの確認を行うこと

となっている。
テストを書くことによりバグやエラーを本番環境に落とす前に気づくことができる上に、リファクタリングの難易度も大きく下がることになる。
また、一言にテストと言っても、どういうタイミング(テスト駆動・一括テスト)で書いたほうが適しているか等、複雑な状況があるので詳しくはRailsTutorialの第3章の「テストから始める」を参照にしてみると良いかもしれない。
[RailsTutorial(テストから始める)](https://railstutorial.jp/chapters/static_pages?version=5.1#sec-getting_started_with_testing)

上記URLの通り、Ra

元記事を表示

Ruby | EOL Rubyがインストールできない!

EOL => End Of Life
つまり、2.4以下のバージョンのrubyのことです。
[Ruby Lifecycle (EOL)](https://endoflife.software/programming-languages/server-side-scripting/ruby)

2.3.5をrbenvでインストールをしようとしたら、 以下のエラーログとともに失敗してしまいました。
そこでこの記事ではその原因と解決方法を記載します。

あ、ちなみにMacです。

“`console
~ $ rbenv install 2.3.5
ruby-build: using openssl from homebrew
Downloading ruby-2.3.5.tar.bz2…
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.5.tar.bz2
Installing ruby-2.3.5…
ruby-build: using readline from homebrew

BUILD FAILED (OS X 10

元記事を表示

引数マスターになろう!(初級編)

###引数をマスターしよう!
引数使いこなせるようになると、とても強いです!!!
練習あるのみ、手と頭を動かして頑張りましょう!!!

〜全問題共通条件〜
・defを利用してメソッドを定義すること
・引数を利用すること

##問題①

ターミナルで入力したネタのお寿司を作ってください。

“`Ruby:ターミナルの出力結果
好きなネタを入力してね!
#たまご←ターミナルで入力
たまごのお寿司だよ!へいお待ち!
“`

問題①答え

“`ruby

def sushi(neta)
puts “#{neta}のお寿司だよ!へいお待ち!”
end

puts “好きなネタを入力してね!”
neta = gets.chomp
sushi(neta)
“`

##問題②

ターミナルで入力したネタのお寿司を作ってください(次は2貫だよ!)。

“`Ruby:ターミナルの出力結果
好きなネタを2つ入力してね!
#たまご←ターミナルで入力
#いくら←ターミナルで入力
たまごといくらのお寿

元記事を表示

正規表現について

# 正規表現
## 何なん?
よくある例として、登録フォームに電話番号を記入する欄があります。

Aさんはハイフンを付けて(080-1234-5678)入力しましたが、Bさんはハイフン無し(08012345678)で入力をしています。

そのままデータベースに保存すると、異なるフォーマットで保存されてしまい管理が大変です。
フォーマットを統一させるために、入力された電話番号にハイフンが入っていたら必要に応じて処理をしてあげます。
このように、文字列に特定の文字が含まれているかを確認することや、
特定の文字を取り除くなどの操作を行うための技術が正規表現と言います。

## メリット
正規表現は様々な言語で同じようなコードで表すことができるように設計されています。

そのため、ほとんどの記述をRubyやJavaScriptなどの別言語間でも共有することができる。

## 特徴
**①文字列の一部分を置換する**
最初の例で紹介した電話番号のように、ハイフンを空文字に置換することで異なるフォーマットの文字列を同一フォーマットに変換することができる。


**②文字列が制約を満たしているか調べ

元記事を表示

Railsのform_withのあれこれ【殴り描き】

# form_withのあれこれ
Rails5.1以降に登場した`form_with`の利用方法のメモ残す。
Rails5.1以前に利用されていた`form_for`と`form_tag`は非推奨になったので基本利用しないようにしましょう。

`form_with`ではモデルに関連するもの、関連づかないフォームのどちらでも利用可能になります。
(以前はモデルに関連するものを`form_for`、関連づかないフォームを`form_tag`と使い分けていた)

## モデルに関連するときの書き方

“` erb
<%= form_with model: @user do |f| %>
<%= f.text_field :name %>
<%= f.submit %>
<% end %>
“`
form_with引数のインスタンス(@user)が何も情報を持っていない場合、createアクションへ、
情報を持っている場合、updateアクションへ自動的に振り分けてくれます。

例えば、newの場合は自動でcreateアクションに振り分けられる。
既に情報を持っているcreateの

元記事を表示

【Tips】Ubuntuへのsqlite3 gemインストール時に発生しうるエラーへの対処

# 問題
## 入力
“`sh
gem install sqlite3 -v ‘1.4.1’
“`

## 出力
“`sh
Building native extensions. This could take a while…
/home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/2.6.0/rubygems/ext/builder.rb:76: warning: Insecure world writable dir /home/【ユーザー名】/.anyenv/envs/rbenv/versions in PATH, mode 040777
ERROR: Error installing sqlite3:
ERROR: Failed to build gem native extension.

current directory: /home/【ユーザー名】/.anyenv/envs/rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/sqlit

元記事を表示

OTHERカテゴリの最新記事