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

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

Windowsにてp “日本語”で”日本語”を表示させる方法

# Ruby on WindowsのFAQシリーズ
初学者からよく聞く

“`ruby:nihongo.rb
p “日本語”
p [“日本語”]
p “日本語”: :”日本語”
“`

“`
“\u65E5\u672C\u8A9E”
[“\u65E5\u672C\u8A9E”]
{:”\u65E5\u672C\u8A9E”=>:”\u65E5\u672C\u8A9E”}
“`

となる問題です。

## ちなみに脳筋回答
コンソールに日本語表示させる必要なんて無いんじゃない?
(割と真面目に、Rubyの`p`による日本語表示をwindowsでやる必要は無いと思ってます)

## 真面目回答
出力が**真の意味で文字化けする危険性がある**が
スクリプトの頭に

“`rb
Encoding.default_internal = __ENCODING__
“`

付けとけ

## p “日本語”とは?

[Kernel.#p](https://docs.ruby-lang.org/ja/latest/method/Kernel/m/p.html)
> 引数を人間に読みやす

元記事を表示

Railsを使ってチャットアプリを作る

#はじめに
Railsを使って簡単なチャットアプリを作ったので、その時の手順をまとめました。

![chat-app.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371652/c0946340-a331-a933-80d5-9740a67605d1.gif)

#環境
“`:
$ ruby -v
ruby 2.5.1p57 (2018-03-29 version 63029) [x86_64-darwin19]

$ bin/rails -v
Rails 5.2.3
“`

#参考
以下を参考にさせて頂きました。

[Action Cableでリアルタイムチャットアプリの作成方法 (Rails 5.1.4にて)(その1) herokuで動かす!](https://qiita.com/Hijiri-K/items/c3774c72a2cb68e1a720)

#ソースコード
チャットアプリのソースコードは以下で確認できます。
[Neufo/rails-sample-app/ChatApp](http

元記事を表示

【Rails】flashの使い方

flashを利用して、アクション実行後に簡単なメッセージを表示させることができます。
ログイン周りの処理において特に重宝されます。
(Sessionはモデルを持たない→ActiveRecordがエラーメッセージを吐かないから)

##使い方
`flash[:<キー>] = <メッセージ>`で登録し、`flash.each do |message_type, message|…`で出力します。

##`flash`と`flash.now`
flashの仲間に`flash.now`があり、
`flash`→次のアクションまでデータを保持する→`redirect_to`と一緒に使う
`flash.now`→次のアクションに移行した時点でデータが消える→`render`と一緒に使う
という使い分けが必要です。

##TODOアプリにflashを実装する
簡単なTODOアプリにflashを実装していきます。
・[Ruby on Railsで簡単なアプリを作成](https://qiita.com/d0ne1s/items/5e63dde992f20f25b8bb)
・[RailsアプリをHe

元記事を表示

Rails/アンチパターン: 一見すると存在しないアクション

何の変哲も無い(?)コントローラー。これはエクスポート処理関連の各種コントローラーの親クラス

“`ruby:controllers/export_controller.rb

class ExportController < ApplicationController def some_method やりたい処理 end end ``` そして、何もないHogeController。よく見るとExportControllerを継承している。これを見落とすとやばい ```ruby:controllers/hoge_controller.rb class HogeController < ExportController end ``` 最後にrouting。HogeControllerのsome_methodアクションにroutingしている ```ruby:routes.rb get '/hoge', to: 'hoge#some_method' ``` # 何が問題か * アクション=そのcontrollerに定義するという設計スタイルの

元記事を表示

何も分からないのに始めた。

はじめまして、ほやっとです。
何も分からないのにプログラミングの勉強をはじめました。

印刷物やWEBの仕事をしていました。
プログラミングってもっと遠いところにあると思ってたんです。

ぼんやり、
あんなシステムを作るのってどうやるんだろ~~??って思ってたけど、
WEBに最後繋がるんだ!というのに純粋に驚いた。

そりゃそうか・・・;笑

そう思ったら急に身近に感じてきた。

そしていつかスキルとして身につけたいと思って
何だか分からないけど、やってみよう精神で始めました。

Qiitaもなんだかよくわかってません!ごめんね!

元記事を表示

[Ruby] 継承可能なクラス属性を定義する

# やりたいこと

継承可能なクラス属性を定義したい。

“`rb
class A
self.x = :hoge
end

class B < A end class C < B self.x = :fuga end A.x #=> :hoge
B.x #=> :hoge (親の x を継承する。)
C.x #=> :fuga (再定義した場合はその値を使う。)
“`

# たったひとつの冴えたやり方

Active Support コア拡張の [Class#class_attribute](https://api.rubyonrails.org/classes/Class.html#method-i-class_attribute) を使う。

“`rb
require ‘active_support/core_ext/class/attribute’

class A
class_attribute 😡

self.x = :hoge
end

class B < A end class C < B self.x = :fuga end A.x

元記事を表示

ABC087B – Coins

AtCoderやれ!!!!!って言われたので
問題はこれ↓
https://atcoder.jp/contests/abs/tasks/abc087_b

# 問題
スクリーンショット 2019-11-25 18.06.05.png

# 1回目
まずは自力で
## 回答
“`ruby
A = gets.to_i
B = gets.to_i
C = gets.to_i
X = gets.to_i

count = 0
for a in 0..A do
for b in 0..B do
for c in 0..C do
if a * 500 + b * 100 + c * 50 == X then
count += 1
end
end
end
e

元記事を表示

\(._. \)わっしょいって感じの正規表現と向き合う

# はじめに
`\(._. \)`
正規表現がわからなすぎてちょっとイライラしていたところに友人からちょうどこの顔文字が送られてきたからイラッとした。
これも正規表現になりうるのだろうけど、読めない。。

正規表現なんて使用する場面になったらその都度調べればよいだろう。
どこかでそんな心構えでやってきたのですが、いざ使う場面に出くわすと、前提知識が無さすぎて中々しんどい。

とは言っても、一時的に大量に覚えたところですぐに忘れてしまうだろうから基礎の基礎から少しずつ試しに使っていくことにする。

# 超基本的な正規表現で電話番号を捉える
下記を例とする。電話番号の部分だけを抽出するにはどうするかを考えてみる。

“`
会社名: 株式会社XXX
住所: 東京都港区南麻布1-1-1
本社: 03(2345)6789
携帯番号: 080-1234-5678
フリーダイヤル: 0120(000)000
緊急: 01234-5-6789
“`

## 共通点や異なる点の確認
① 3つに区切れる
② 2〜5桁、1〜4桁、3〜4桁の構成
③ 区切りはカッコ、またはハイフン
④ 1文字目は0、2文

元記事を表示

【Rails】we’re sorry, but something went wrongでハマった話(2)

こんにちは!スージーです!
ローカル環境では問題なかったのに本番環境で発生した`we’re sorry, but something went wrong`の解決までを備忘録として

## we’re sorry, but something went wrong
このエラーは本番環境でちょいちょい見るので`production.log`でエラーログを確認する

“`terminal:ターミナル
[ec2-user@ip-~~]$ cd /var/www/app-name
[ec2-user@ip-~~]$ cd log
[ec2-user@ip-~~]$ cat production.log
D, [2019-11-18T07:06:44.834244 #5661] DEBUG — : hogehoge~~
D, [2019-11-18T07:06:44.834597 #5661] DEBUG — : hogehoge~~

・・
・・・
“`
この時は`production.log`にエラーログが無かった

## デバックを考える

– `タイポ`→×
開発環境でもエラー

元記事を表示

Rails6 のちょい足しな新機能を試す107(Digest::UUID編)

# はじめに

Rails 6 に追加された新機能を試す第107段。 今回は、 `Digest::UUID` 編です。
Rails 6 では、 `Digest::UUID` が require なしで使えるようになりました。

Ruby 2.6.5, Rails 6.0.0, Rails 5.2.3 で確認しました。

“`shell
$ rails –version
Rails 6.0.0
“`

今回は、簡単なスクリプトを作って確認します。

# Rails プロジェクトを作成する

“`shell
$ rails new rails_sandbox
$ cd rails_sandbox
“`

# スクリプトを作成する

`Digest::UUID` を使ったスクリプトを作成します。

“`ruby:scripts/uuid.rb
puts Digest::UUID.uuid_v3(Digest::UUID::DNS_NAMESPACE, ‘rubyonrails.org’)
puts Digest::UUID.uuid_v4
puts Digest::UUID.u

元記事を表示

[メモ]Rails超基礎 勉強して個人的に違いが分からなくなったメソッド

##redirect_toメソッド
「redirect_to(URL)」とすることで、そのページに転送することができます。
以下だとcreateアクションを実行すると「/posts/index」ページへ転送される。

“`
def create
redirect_to(“/posts/index”)
end
“`

##renderメソッド

別のアクションを経由せずに、直接ビューを表示することができます。
render(“フォルダ名/ファイル名”)のように表示したいビューを指定します。
renderメソッドを使うと、redirect_toメソッドを使った場合と違い、そのアクション内で定義した@変数をビューでそのまま使うことができます。
以下だとupdateアクションが実行された時、@postにid(例 id:1)を持つデータをデータベースから取り出す。
取り出したデータのcontentカラムデータだけ取り出し@post.contentに格納する。
最後に「posts/edit」というURLに@post.contentという変数をビューでそのまま使うことができる。

“`

元記事を表示

Rubyコーディング規約

#コーディング規約
ルールではなくマナー
僕が気をつけているポイントを紹介するよ!

#インデントは2つ
“`ruby
if num > 0
●●if num < 100 ●●●●puts "100より小さい正の数" ●●end end ``` #クラス内の各構成要素の区切りに空行を入れる ただし、最初と最後は空けない。 ```ruby:tweets_controller.rb class TweetsController < ApplicationController #最初は空けない before_action :move_to_index, except: :index #---ここ--- def index @tweets = Tweet.all end #---ここ--- def new @tweet = Tweet.new end #---ここ--- def create Tweet.create(tweet_params) end #---ここ--- private def tweet_params

元記事を表示

【Rails】RSpecで`visit`が`undefined method`と怒られたときの解決法

## はじめに
Rails+RSpec+Capybaraで書いたテストを実行しようとしたらタイトルのようなエラーが出た方に向けて解決法を残しておきます。

## この記事が役に立つ方
– タイトルのようなエラーで困っている方

## この記事のメリット
– エラー解決!

## 環境
– macOS Catalina 10.15.1
– zsh: 5.7.1
– Ruby: 2.6.5
– Rails: 5.2.3
– RSpec: 3.9.0
– Capybara: 3.29.0

## エラー内容

“`zsh
NoMethodError:
undefined method `visit’ for #
“`

なぜか`visit`が定義されていないことになっている。

## 原因
`Capybara`が読み込まれていないことが原因です。

`visit`は`Capybara`内で定義されているため読み込む必要があります。

## 解決法 その1
以下を追記します

元記事を表示

TataraというRubyで型を使えるライブラリを作ってみた

### はじめに

この記事は最近僕が作っているRubyで型を使えるライブラリの紹介記事です。

対象読者としては、Rubyで簡単に型のようなものを使ってみたい人、またはC++でのRuby拡張を作ってみたい人を想定しています。

Tataraの紹介をしつつ、簡単なC++でのRuby拡張実装についても触れていきます。

### 作ったもの

[Tatara](https://github.com/S-H-GAMELINKS/tatara)というRubyで簡単な型を使えるようにするRubyExtensionを作りました。RubyGemsにもリリースしており、[v0.2.0](https://rubygems.org/gems/tatara)が現在リリースされている最新バージョンになります。

v0.2.0までは[Rice](https://github.com/jasonroelofs/rice)というRubyExtensionを簡単にC++で使用していました。しかし、GCへの管理追加が少しややこしかったり、RiceでC++のコードをRuby向けにラップしているため処理が遅くなったりすると

元記事を表示

正規表現 アンカー

アンカーは幅0の文字列にマッチするメタ文字列です。 幅0とは文字と文字の間、文字列の先頭、文字列の末尾、 などを意味します。 ある特定の条件を満たす「位置」にマッチします。

^ 行頭にマッチします。行頭とは、文字列の先頭もしくは改行の次を 意味します。
$ 行末にマッチします。 行末とは文字列の末尾もしくは改行の手前を意味します。
\A 文字列の先頭にマッチします。
\Z 文字列の末尾にマッチします。 ただし文字列の最後の文字が改行ならばそれの手前にマッチします。
\z 文字列の末尾にマッチします。
\b 単語境界にマッチします。 単語を成す文字と単語を成さない文字の間にマッチします。 文字列の先頭の文字が単語成す文字であれば、文字列の先頭 の位置にマッチします。
\B 非単語境界にマッチします。 \bでマッチしない位置にマッチします。
# 文字列中の real にマッチする
/real/.match(“surrealist”) # => #< MatchData "real">
# 先頭に real とないとマッチしない
/\Areal/.match(“surrealist”)

元記事を表示

正規表現 キャプチャ

丸括弧 ( ) によってキャプチャをすることができます。 括弧に囲まれた部分正規表現にマッチした 前からn番目の開き括弧によって囲まれた部分式にマッチした 文字列を後で参照することができます。

正規表現内では \1, \2, … という記法で後方参照できます。 また、\k<1>, \k<2>, … や \k’1′, \k’2′, … という記法を使うこと もできます(10を越える数字を渡すことができます)。 また、Regexp#match で得られた MatchData からは MatchData#[ ]で取り出せます。

また、$1, $2, … という特殊変数によって n 番目の括弧にマッチした 部分文字列を参照できます。これらの特殊変数はマッチ処理が終わったあとで しか使えないことに注意してください。

 # (..) に at がマッチしたのを \1 で参照し、マッチが成功している。
m = /[csh](..) [csh]\1 in/.match(“The cat sat in the hat”)
 # => #< MatchData "cat sat in

元記事を表示

正規表現 繰り返し

以下のメタ文字列は繰り返しを表現します。 直前の部分式を何回繰り返すかを指定します。このような繰り返しを 表すメタ文字列を量指定子(quantifier)と呼びます。
 
* 0回以上
+ 1回以上
? 0回もしくは1回
{n} ちょうどn回(nは数字)
{n,} n回以上(nは数字)
{,m} m回以下(mは数字)
{n,m} n回以上m回以下(n,mは数字)
以下の例で、量指定子の基本的な使いかたを示しています。

 # 以下の正規表現は 最初に大文字が1文字以上(H)で、小文字が1文字以上(l)、
 # lが2文字(ll)の後ろにoが続く文字列にマッチします。
“Hello”.match(/[[:upper:]]+[[:lower:]]+l{2}o/) # => #< MatchData "Hello">
これらは「欲張り(greedy)」にマッチします。 マッチが成功する、最長の文字列にマッチしようとします。 そのため、これらの量指定子は特に最大量指定子(greedy quantifier) と呼ばれます。

最小量指定子(reluctant quantifier)
一方、以下

元記事を表示

正規表現 文字クラス

文字クラス(character class) とは角括弧 [ と ] で囲まれ、1個以上の文字を列挙したもので、 いずれかの1文字にマッチします。

/W[aeiou]rd/
は Ward, Werd, Wird, Word, Wurd のいずれかにマッチします。

文字クラス内のハイフン(-)は文字の範囲を表すメタ文字です。 例えば [abcd] という文字クラスは [a-d] と表すことができます。 複数の範囲指定をすることもできます。例えば [abcdpqrs] は [a-dp-s]と 表すこともできます。

文字クラスの [ の直後の文字がキャレット(^)である場合、列挙「されていない」 文字にマッチするようになります(これは否定文字クラスと呼ばれます)。

[^a-d]
はabcd以外の1文字にマッチします。

文字クラス内に別の文字クラスを含めることができます。 [a-z[0-9]] は [a-z0-9]と同じ意味を持ちます。これだけではあまり意味が ありませんが、文字クラスは && という、共通部分を取る演算をサポートして いるため、これと組合せることで意味を持ちます。

元記事を表示

正規表現 文字

正規表現内では、「\」の後に文字列を置くことで、 ある特定の文字を表現することができます。 これは、改行のように Ruby の文法で特別な意味を持つ文字を埋め込む ためなどに用いられます。 文字列リテラルの記法とほぼ同様(リテラル/バックスラッシュ記法)で、 以下の記法が利用可能です。

\t 水平タブ horizontal tab (0x09)
\v 垂直タブ vertical tab (0x0B)
\n 改行 newline (0x0A)
\r 復帰 return (0x0D)
\b バックスペース back space (0x08)
\f 改ページ form feed (0x0C)
\a ベル bell (

元記事を表示

正規表現 式展開

正規表現内では、#{式} という形式で式を評価した文字列を埋め込むことが できます。

place = “東京都”
/#{place}/.match(“Go to 東京都”) # => #< MatchData "東京都">
埋め込んだ文字列にメタ文字が含まれているならば、それは メタ文字として認識されます。

number = “(\\d+)”
operator = “(\\+|-|\\*|/)”
/#{number}#{operator}#{number}/.match(“43+291”) # => #< MatchData "43+291" 1:"43" 2:"+" 3:"291">
埋め込む文字列をリテラルとして認識させたい場合は Regexp.quote を 使います。

元記事を表示

OTHERカテゴリの最新記事