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

Ruby関連のことを調べてみた2019年12月22日
目次

GCPでのロールをsuコマンドみたいに切り替える

## TL;DR

– Cloud Identityを有効にしてgroupで権限管理をする。
– プロジェクトは環境とサービス毎にいっぱい作る。共有VPC統一管理
– adminとviewerで権限を分ける。必要に応じてコマンドで切り替える
– 今回作ったgsuコマンドはこちら => https://github.com/koduki/gsu

## はじめに

最近、GCPというかクラウドに本格的に入門したのですがIAM便利ですね。
きめ細やかにアカウントが管理出来ますし、Cloud Identityのロールと紐付ければ個人では無くロールでアカウント管理が出来て非常に便利です。

ただし、少し不満を言えば権限のエスカレーション、つまりLinuxでいうsuコマンドのように特権アカウントの昇格への方法が無い事です。
大人数で運用するなら人毎にロールを設定して弱い権限の人と強い権限の人を分けれますが、少人数の場合は強い権限を持たざる得ません。というか規模によらず普段からProject Ownerみたいな特権アカウントで作業したくありません。オペミスが怖すぎる。。

というわけで、今回は中

元記事を表示

I18nのtranslateメソッドを調べてみた

この記事は [SmartHR Advent Calendar 2019 22日目](https://qiita.com/advent-calendar/2019/smarthr)の記事です。

こんにちは、SmartHRでサーバーサイドエンジニアをしているwakasaです。
SmartHRでは社会保険や雇用保険などの行政手続きを扱っており、各種手続きには様々な書類が必要になります。

その際に、 `I18n` を使って、項目を日本語化したりすることが多いのですが、 `I18n` を普段から何気なく使っているけど、どういう仕組みかを全く理解していないなと思ったので、ソースコードリーディングしてみました!

# 環境
Ruby: 2.6.5

# I18nの基本
I18nの機能は主に二つで、Railsガイドに記載があります。
[パブリックI18n API](https://railsguides.jp/i18n.html#%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AFi18n-api)

> translate # 訳文を参照する
localiz

元記事を表示

BOM 付き UTF-8 csv ファイルのカラムを RSpec で検証する時は BOM を取り除く必要があった

## はじめに

BOM 付き UTF-8 の csv ファイルのカラム名を RSpec で検証しようと思ったときにハマったので、備忘録を残しておきます。

## tl;dr

BOM 付き UTF-8 の csv ファイルのカラム名を RSpec で検証するときは、`CSV.parse` するときにBOM を取り除く必要がありました。

“`ruby
csv = CSV.parse(csv_content.sub(/^\xEF\xBB\xBF/, ”))
“`

## 背景

RSpec でアプリ側で作成した csv ファイルが適切に出力されていたか確認するために、csv のカラム名を検証しようとしていました。

サンプルは以下のような形です。

“`ruby
require ‘rails_helper’

RSpec.describe Sample do
describe ‘#method’ do
it ‘checks if csv columns is valid’ do
# Sample.csv_content が csv ファイルを出力するメ

元記事を表示

No route matches [GET] 〜 について

![スクリーンショット 2019-12-22 3.16.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555157/600044d9-29ca-b809-7214-6d2e063deb5c.png)

学習初期段階のこういったエラーは見るだけでやる気無くなりますよね…

というわけでこれまで筆者が経験で見つけたエラー原因を羅列します!

(筆者のようにあまり他人に聞けない性格の初学者の方に向けて記載しています。そんなの当たり前だなどのツッコミはご遠慮ください。)

①~/railsのファイル名/config/routes.rb
このファイルの中のroot to:’posts#index’が書かれていなかった
→下記のテンプレートを使ってください
Rails.application.routes.draw do
root to: ‘posts#index’
end

②~/railsのファイル名/assets/viwes/posts/index.html
このファイルがないまたは内容がないょ

元記事を表示

React+Railsでモダン()なTODOアプリを作ってみた 〜備忘録も兼ねて〜

[Opt Technologies Advent Calendar 2019](https://qiita.com/advent-calendar/2019/opt-technologies)の21日目の記事です。
# はじめに
2019年4月に株式会社オプトに入社したsh1okohと申します。
なんやかんやありまして、今はReact, Redux, Railsなどを使ったプロダクトで、日々奮闘しております。
今回は、お仕事中に出会った技術スタックを使ってモダン()なTODOアプリを作ってみたので、各種ライブラリの紹介をしつつ、Todoアプリの紹介をしていきたいと思います。(備忘録的な目的もあります)

ちなみに、今回のTODOアプリのソースコードは下記リンクにありますので、
興味のある方はみてみてください。

https://github.com/sh1okoh/adventcalendar

# 対象読者
今回は、テーマ的にも内容自体は広く浅くになっております。
各種ライブラリを使ったWEBアプリの全体像を把握したい方などを対象としており、各ライブラリを深く学びたいといった方は対象

元記事を表示

[Rails]特定のインスタンスに対して前後のレコードを取得したりランダムで取得したりするあれを試してみた

## はじめに
こんにちはどうも、pirikaraです。
髪の毛を切りました。

今回はこんなやつを実装しました。
スクリーンショット 2019-12-21 12.36.00.png

特定の投稿(今回はitemの出品)に関して、DBから前後のレコードを取得して表示させたりリンクを飛ばす感じのあれです。
あとDBからランダムにレコードを取得して表示させたりリンク飛ばしたりする感じのあれです。

まずは特定の投稿に関してDBから前後レコードを取得する奴から実装していきます。
Rails標準のAPIでは見つからなかったので、今回はmodelに対してメソッドを書き込んでいきます。

## いざ、実装
今回はItemクラスのインスタンスに関して、その前後レコードを取得するメソッドをmodels/item.rbに記述してい

元記事を表示

2019年フレームワークのトレンドが見れるサイトの紹介

# hotframeworks.com
URLはこちらになります。
http://hotframeworks.com/
![a.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282788/1b52681e-2325-a75b-d2cb-214d3c23e526.jpeg)

元記事を表示

Codeanywhereを使ってスマホでプログラミングをしよう!

# 前置き
こんにちは

通勤時間などのスキマ時間で、スマホでプログラミングの勉強が出来ないかと思いcodeanywhereというアプリを使ってみました。
課金が前提となりますが、結論としては**かなり使えます**

codeanywhereは、いわゆるクラウドIDEというもので、**ブラウザさえあればどんなマシンでもプログラミングができますよ**という代物です。
似たような製品にAWSのCloud9がありますが現時点でそちらはスマホ対応してないみたいです。

今回は、codeanywhereを使ってスマホのみでRubyのハロワをする手順を解説します。
(ちなみに、このQiitaの記事自体スマホから投稿してます。)

なおcodeanywhereのプランには無料のプランもあるのですが、7日間しか使えないので諦めて課金しましょう。
有料プランにも複数ありますが、僕はFreelancerを選択しました。
8ドルとの事ですが、日本円だと2019/12時点で1,116円でした。
BE560AD4-5052-4265-8858-189772492EB7</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Ruby</div>
<div class='tag-cloud-link'>スマホ</div>
<div class='tag-cloud-link'>codeanywhere</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/Auggie_2345/items/b34ea80b5da8b08acdf2'>元記事を表示</a></div>
<h3 id=[Ruby on Rails]slickの矢印の画像を変更する方法[JQuery]

# 実現したいこと
slickの画像(スライド)を次に送るための両側の矢印の画像を好きなものにする。

色々参考にしたがうまくいかなかったので、自分がうまくいったやり方を残しておきます。

# 前提
Ruby on Railsで開発を行っています。slickは導入できているものとします。
Rails 5.2.4
ruby 2.5.1
jquery-rails 4.3.5

# 手順
## 画像の用意
矢印にしたい画像をapp/asset/imagesフォルダに入れます。

## 矢印のデフォルト画像の変更
おそらく\2190と\2192の部分が、矢印のデフォルトの画像を指定している部分だと思います。なので、この部分を任意の矢印の画像に取り替えます。

“`javascript:slick-theme.scss
変更前
$slick-prev-character: “\2190” !default;
$slick-next-character: “\2192” !default;

変更後
$slick-prev-character: image-url(“left.png”) !d

元記事を表示

ランダムで”いい感じ”にグループ分けしてSlack通知するbotをRubyで開発してみた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110571/d735a4d1-0e93-8961-1f76-fdf6ad3c801c.png)
# はじめに
こちらは[Slack Advent Calendar 2019](https://qiita.com/advent-calendar/2019/slack)の21日目の記事となります。

今回は、仕事を通じて作成したグループ分けのbotについて詳しく書いていこうと思います。

当初は「**悪用厳禁! Slack活用における情報収集 黒魔術**」というタイトルで、Slackを導入している企業や組織での情報収集の小ネタについて書こうと思いましたが、転職して日が浅いのでブラックなジョークは止めておこう(※違法ではないです)という保守的思考が働いたのと、どうせならエンジニアらしいことを優先して書きたいと考えたためお蔵入りとなりました。

そちらの方も、今後機会があればコラム的な感じで書いていきたいと思います(リアクション頂ければ書くためのモ

元記事を表示

herokuにruby on railsアプリをmysqlを使用してデプロイする。deploy

## 前提条件
nodeとyarnは必ず最新にしておいてください。
それは書きません。

## プロジェクトの作成
noracorn-railsというプロジェクトで作成します

“`
ghq get https://github.com/noracorn/noracorn-rails.git
rails new noracorn-rails
cd noracorn-rails
“`

## scaffoldで、適当にサイトを作成

“`
rails generate scaffold person name:string age:integer
rake db:migrate
“`

トップページをいったんscaffoldで作成したものにする

“`noracorn-rails/config/routes.rb
Rails.application.routes.draw do
resources :people
root ‘people#index’
end
“`

## 立ち上がることを確認しましょう

以下のコマンドを打ってから、http://localhost

元記事を表示

Ruby on Railsでドメイン駆動設計をやってもいいじゃないか。

# 挨拶
松下と申します。[みんなの株式](https://minkabu.jp)を運営しています。

## ドメイン駆動設計の導入した動機
最初にドメイン駆動設計を導入しようとしたのは2017年の末頃でした。

ドメイン駆動設計を導入しようとした最初の動機はフレームワークやgemに依存しないPORO(Plain Old Ruby Object)なコードを増やす事によって、保守性(テスト容易性、理解容易性、変更容易性)を高めようとした事だったと思います。

10年近くRuby on Railsのアプリを無計画に実装を繰り返した結果、肥大したコントローラやモデルやヘルパー、改修する事による影響範囲が読めないライブラリや自作gemなどが散見され、テストのカバレッジも酷い状況でした。

最初はデザインパターンを部分的に導入してみたりもしてみましたが、レイヤードアーキテクチャを元にしたドメイン駆動設計をしっかりやろうという事になるまではそれほど時間はかかりませんでした。

現在ではバッチ処理や複雑なドメインは単体でのマイクロサービス化する事で本体アプリをスリムにする事を平行で行いつつ、クリーン

元記事を表示

マイグレーションファイルの作成、変更、削除まで

今回は、物件のファイルを作ることを想定します。

####流れ

マイグレファイル作成→カラムすべて間違い→もう一度入れ直したい

###1.マイグレファイルを作成する

“`
$ rails g migration CreateHomes

“`

###2.作成したマイグレファイルをエディターで編集する

“` create_homes.rb

class CreateHomes < ActiveRecord::Migration[5.2] def change create_table :homes do |t| t.string :"物件名" t.string :"賃料" t.string :"住所" t.text :"備考" end end end ``` ###3.マイグレーションをターミナル上で入力 ``` $ rails db:migrate ``` ###4.マイグレファイルを削除するため、削除用のファイルを作る ``` rails g migration RemoveCo

元記事を表示

Railsをherokuでデプロイする方法

herokuでのデプロイは、AWSに比べてめちゃめちゃ簡単だったので、まとめました!

(githubへのpush、会員登録、クレジットカード登録など完了後)

##herokuにログインする

デプロイしたいアプリに移動したら

“`

$ heroku login
“`

何かキーを押してくださいと言われるので、適当にエンターキーを押す。

herokuのページに推移する。

loginを押してターミナルに戻る

ログイン完了

##作ったアプリをherokuとリンクさせる

デプロイしたいアプリに移動したら

“`
$ heroku create アプリ名
“`

アプリ名がURLに入るのでしっかり考えましょう
すでにそのアプリ名がherokuで使われている場合はできません

##データベースを作成する

※データベースが必要な場合のみ

“`
ターミナル

$ heroku addons:create cleardb:ignite
“`

これでデータベース作成は完了しました。

##mysql2の環境変数を指定

初期設定だとmysql2の設定がで

元記事を表示

Ruby 2.7 rc1 の動作確認をdocker上で行う

以下のようにコマンドを実行する。

“`sh
% docker run –name ruby_2_7_0_rc1 -it ruby:2.7.0-rc1 /bin/bash
% irb
“`

元記事を表示

Minitest::Assersionsのassert系メソッドを全部試してみた

# はじめに
この記事は [Ruby Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ruby) 21日目の記事です。
今回はRubyのテストフレームワークであるMinitestのassert系メソッドを全部試してみました。
この記事がMinitestを使っている人に少しでも役立てばいいなと思います。
環境は以下のとおりです。

**Ruby**

“`
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
“`

**Minitest**

“`ruby
Minitest::VERSION #=> “5.13.0”
“`

それでは頑張っていきましょう。

# assert(test, msg = nil)
`test`が真(`nil`、`false`以外)の場合にアサーションが成功します。
`msg`を指定するとアサーション失敗時に指定したメッセージを表示します。
(これ以降紹介するメソッドでも`msg`を引数に取れるメソッドがありますが、

元記事を表示

Railsでerbをhamlに変換する方法

Hamlって便利ですよねー!
ただrailsの初期設定ではerbファイルとして、生成されてしまいます。

どうせならHamlに統一してコーディングしましょう。

##gemのインストール

“`
Gemfile

gem ‘haml-rails’
“`

を入れて

“`
ターミナル

$ bundle install
“`

“`

$ rails haml:erb2haml
“`

これで一括変換されます。

元記事を表示

Railsでアプリを作る簡単な流れ

一からアプリを立ち上げるとなると、意外と、何からしていいか分からない人もいると思うので、まとめました。

(アプリのダウンロードなど、環境構築などは完了していること)

##アプリを作成する

保存したい場所に移動して

私はデータベース名は、mysqlでやってます。
指定しなければ、SQLiteというものが入ります。

“`
ターミナル

$ rails new アプリ名 -d mysql(データベース名)
“`

##gemのインストール

“`
ターミナル

$ bundle install
“`

##コントローラーを作成する

投稿サイトを作る場合のコントローラーを作成します。
※コントローラー名は複数形にしましょう

“`
ターミナル

$ rails g controller posts(コントローラー名)
“`

“`posts.controller.rb

class PostsController < ApplicationController def index(アクション名) #空でいいので作成する end end

元記事を表示

railsでapplication.scssと同じディレクトリのscssファイルが読み込まれないときの対処法

#背景と対象
usersコントローラを作成したときに生成された、app/assets/users.scssに記述したscssが反映されない。つまりはアセットパイプラインの仕組みが適用されていない状況になってしまっている状況。全部app/assets/application.scssに書けばcssの適用は出来ますがめっちゃ見ずらいのでやめた方がいいです。このような状況でつまっている方の役に立てればと思い書きました。ちなみにアセットパイプラインについては以下のページがおすすめです!
https://diveintocode.jp/blogs/Technology/AssetPipeline

#解決方法
###とっても簡単です!

app/assets/application.scssのコメントアウトの最下部に*= require_selfとrequire_tree を以下のように追加してください。それぞれのコードの意味はコード内に書いてあります。ちなみにこれらの順番はどっちでもよく、require_selfを先に書けばapplication.scssが先に読み込まれます。後に書けばapp

元記事を表示

RubyVM::AbstractSyntaxTree を使って AASM の定義を抽出する

## はじめに
本記事は [STORES.jp Advent Calendar 2019](https://adventar.org/calendars/4549) 21日目の記事です。

Ruby2.6 から `RubyVM::AbstractSyntaxTree` という、 Ruby コードを抽象構文木に変換できる API を提供する module が使えるようになり、今年の RubyKaigi 2019 でも関連したセッションが行われていました。
これを使って何かできないものかと考えて思いついたのが、最近業務で利用している AASM という gem を使った、状態遷移の定義を取り出す…というものでした。

そこでこの記事では、 RubyVM::AbstractSyntaxTree を利用して AASM を使った状態遷移定義を取得するコードについて書きます。[^1]

## そもそも AASM とは?
[AASM](https://github.com/aasm/aasm) はオブジェクトの状態遷移を定義・管理する機能を提供する gem です。
class にステートの一覧や状

元記事を表示

OTHERカテゴリの最新記事