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

Ruby関連のことを調べてみた2021年11月28日
目次

Rails 6.0 + Docker + MySQL5x + devise-token-auth での環境構築

## この記事の概要
– RailsのAPIモードで認証周り作ったときに苦労したので、備忘録メモとして…。

## 成果物
– GitHub: [try-rails6-api-with-devise](https://github.com/Nunnally-Engr/try-rails6-api-with-devise)

## 各種バージョン

– Ruby 2.7
– Rails 6.0.0
– mysql 5.7.21

## 前提条件

– Dockerを使える環境が整っていること

## できること

– Rails 6.0 + Docker + MySQL5x + devise-token-auth での環境構築
– devise-token-authを使った、サインアップ、サインイン、サインアウトができる
– ユーザがサインインしていることを確認し、サインインしていたらuser情報を取得する

## できないこと(やらないこと)

– コピペで環境構築できるように作った記事なので、各項目の詳しい説明は割愛

## 環境構築

元記事を表示

【Ruby】早期return

##早期リターン
式の値を戻り値としてメソッドの実行を終了。式が省略された場合には nil を戻り値とする。
条件分岐のネストが深くなりすぎてコードを読みにくくなってしまうときに使用すると可読性が高まる。
「Guard Clause」「ガード節」「ガード条件」「ガード構文」と呼ばれることもある。

“`ruby
def invalid_permission?(user)
if user.present? #<= この例外処理はGuard Clauseで書き直せる case user.permission when 1,2,3 false else true end else true end end ``` ```ruby def invalid_permission?(user) return true if user.blank? #<= この1行で例外チェックをネストなしで完了できる case user.permission when 1,2,3 false else

元記事を表示

【Rails】global source linesとは何か

##global source lines 
Gemfileに記述されるgemに対してsource、git、pathのオプションを指定しなければ、Gemfileの一行目にある引数のサイトから取得される。

“`ruby
source “https://rubygems.org”
“`

このsourceメソッドの行はマニュアル内で global source lines と呼ばれる事がある。

###sourceオプション 
gemを検索するサイトを取得

“`ruby
gem “gem_name”, source: “url”

#全てのオプションで、ブロックを用いて一括で書ける
source ‘url’ do
gem ‘gem_name1’
gem ‘gem_name2’
end
“`

####pathオプション 
ファイルシステム内のパスを指定し、gemの取得先とする

“`ruby
gem “gem_name”, path: “url”
“`

###gitオプション 
作成されたgemのgitリポジトリから取得

“`ruby
gem “gem_nam

元記事を表示

webpackerによるStimulusのインストールでハマったこと

# はじめに
皆さん`Stimulus`を使っていますか?
`React`や`Vue`を使う程学べていないけど、`jQuery`は使いたくないって人におすすめのフレームワークです!
`JaveScript`の簡単なDOM操作ができる人なら学習コストはほぼゼロで使えます!

更に、`Webpacker`を導入している`Rails`ならコマンド一発でインストールできるのも魅力的です。

“`bash:ターミナル
rails webpacker:install:stimulus
“`
上記コマンドでインストールして[公式サイト](https://stimulus.hotwired.dev/)でサクッと勉強しながら皆さん良いStimulusライフを!

、、、としたかったのですが、インストールの際にエラーが発生して上手く動かなかったので修正点を備忘録として残しておきます。

# 前提
| 技術など | バージョン等 |
| —- | —- |
| ruby | 2.7.4 |
| Rails | 6.1.4 |

> 執筆時点の日時は2021/11/27です。

元記事を表示

Ruby silver合格までにやったこと

①チェリー本を改めて1周した
②RExを9割以上になるまでやる

  • https://rex.libertyfish.co.jp/
  • ③ネットにある問題はやっておく

  • https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0
  • http://www.minituku.net/courses/1049510743/contents/775230600.html
  • ④問題を解いている中でわからないORしらないものは片っ端からGoogle先生にお世話になる。&常にirbやエディタでコードを動かして挙動を確かめる。

    なんとなく気になるところを自分なりにまとめていたものです?

    – マジックコメント
    エンコーディングは`coding: エンコーディング名`の前後に任意の文字を入れても良い&大文字・小文字どちらでも可
    – `0x`でスタートする数値は**16進数リテラル**
    – `p [].size`は0になる。**nil**じゃない。
    – `p [].to_i(to_sも)`は0

    元記事を表示

    【Git】【Ruby】 Gemfile,Gemfile.lock変更後、git push後にエラー

    # 1. 概要

    Ruby on rails アプリ(開発環境の更新が本番環境に反映されるようGitHub Actions設定済み)
    にて、Gemfileに新機能を色々追加したり試したりした後
    git push後にエラー発生・・時に自分が解決したやり方を記載

    # 2.エラー内容/対処

    Githubのactionsから最新ワークフローを確認した際に
    Deploy時エラーが発生していた

    ![git.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2294345/8a5d743c-3ee5-6447-a203-cf7e5e38c6cd.png)

    以下がエラー内容詳細

    “`
    Run echo “$PRIVATE_KEY” > private_key && chmod 600 private_key
    Warning: Permanently added ‘***’ (ECDSA) to the list of known hosts.
    From github.com:syokaturyou/sangok

    元記事を表示

    M1でrails db:createが出来ない no suitable image found. Did find: (LoadError)諸々

    M1でのrailsアプリ環境構築方法については[こちら](https://higukkublog.org/rails-m1/)でまとめています。

    環境
    rbenv 1.2.0
    ruby 3.0.2
    Bundler 2.2.32
    yarn 1.22.17
    DBはpostgresql

    ##rails db:createが出来ない問題
    `rails db:create`をすると
    ![スクリーンショット 2021-11-26 21.10.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1573515/35b2e33f-61d1-09f1-50eb-cb2109d0c1ee.png)
    このようなエラーが大量発生してしまいました。

    `no suitable image found. Did find: (LoadError)`とあります。
    何かがないのでしょう。(かなり曖昧)

    ##対処法
    “`
    arch -arm64 gem install msgpack bootsnap bindex zeitw

    元記事を表示

    rbenv global を出力してもversionが切り替わらない!

    ##背景
    AWSへのデプロイ中に
    EDITOR=vim bin/rails credentials:editをしたらversionが古いと言われたので

    “`
    bundle install
    “`

    を実行すると

    “`
    ERROR: While executing gem … (Gem::FilePermissionError)
    You don’t have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
    “`

    訳: 許可がありません(ざっくり)
    と言われました。

    https://qiita.com/iron-smri/items/9300ccd5a59dc0fdf0ae

    ↑の記事を見ると、これが起こる原因はrbenvのversionがデフォルトのシステムを使っていて権限がないからエラーになると聞いたので、確かめてみるとシステムのversionを使っていました。

    そこでGemfileに記載されているrubyのversion3.0.2をセットしようと

    “`
    rbenv glo

    元記事を表示

    ruby on rails の環境設定をしたよ。

    railsの環境設定にかなり手こずったので、記録。
    これが初めての環境設定。

    Mac:11.2.2
    Ruby:3.0.0
    Rails:6.1.4.1
    rbenv:3.0.0

    まず 
    [progate](https://prog-8.com/docs/rails-env)

    に沿ってやろうとしたものの、ファイルを作る事ができず詰まる。

    rubyとrbenvのバージョンが合わないからではないかと仮説を立てた。

    https://qiita.com/hujuu/items/3d600f2b2384c145ad12

    この記事を参考にバージョンを合わせる。
    必要なgem(?)がないとエラーメッセージが出たので、指示に従う。
    合わせてエラーメッセージの読み取れなかった箇所を検索し、下記の記事に出会う。

    https://qiita.com/uasi/items/8be1490b1735dae05e6a

    私のrubyはバージョン3.0.0だったので、 

    [Ruby 3.0.0 リリース](https://www.ruby-lang.org/ja/news/2020/12/25/ru

    元記事を表示

    【rubyでcomet2を作る】④プログラムを実行する

    ### はじめに
    [【rubyでcomet2を作る】③CPUオブジェクト、メモリオブジェクトを定義する2](https://qiita.com/223yuta/items/dc5e95c6be7982e1f74f)の続きです。
    今回は、前回までに作成したCPUオブジェクト、メモリオブジェクトを使って、下記4つのプログラムを実行していきます。
    – 単純加算処理
    – 条件分岐処理
    – 繰返処理
    – サブルーチン処理

    普段簡単に書いているこのような処理をCPUではどのように処理しているのか見ていきたいと思います。

    [完成コード](https://github.com/223yu/virtual_pc)

    ###実行状況を見やすくする

    プログラムの実行状況を見やすくするために、下記変更を加えます。
    – 命令読出(フェッチ)後、実行する命令を表示する
    – 命令実行後、レジスタの状況を表示する

    “`ruby:cpu.rb
    # 命令の読み出し(フェッチ)
    ir = memory.send(“m#{pr}”)
    self.pr += 1

    # 実

    元記事を表示

    AWS SAM ローカルでいろんな角度からhello worldする

    ## やりたいこと
    サーバーレスな処理を実装するのに備えて、ひとまずSAMを使ってローカル環境にてブラウザやcurlコマンドでhello worldをしたいです。

    “`
    $ sam –version
    SAM CLI, version 1.22.0
    “`

    ## 実装!
    ### sam initする

    `sam init`して、プロジェクトを新規作成します。
    SAMからの質問に対して、下のように答えました。

    “`
    template: AWS Quick Start Templates
    package: type: Zip (artifact is a zip uploaded to S3)
    runtime: ruby2.7
    Project name [sam-app]: identify_user
    quick start application templates: Hello World Example
    “`

    ↓(参考)上記の詳細、質疑応答の全貌。

    “`
    $ sam init

    Which template source would you like to use?

    元記事を表示

    【rubyでcomet2を作る】③CPUオブジェクト、メモリオブジェクトを定義する2

    ### はじめに
    [【rubyでcomet2を作る】②CPUオブジェクト、メモリオブジェクトを定義する1](https://qiita.com/223yuta/items/926372c4ddab46d4d50b)の続きです。
    今回はCPUオブジェクトの演算部を定義していきます。本来2進数でビット計算が行われているところを、無理矢理10進数で表現しているため、厳密には計算が正しくないところがあります。だいたいこういうもの程度に見ていただけると嬉しいです。

    ### CPUオブジェクトを定義する
    前回の記事でCPUオブジェクトのプロパティ、制御部のメソッドの定義を行いました。今回はCPUの演算機能(各命令の処理)について定義していきます。

    #### CPUの演算機能
    COMET2では28個の命令セットが用意されていますので各命令を定義していきます。

    各命令の定義を行う前に、命令の中には汎用レジスタやメモリの値を変更するものがいくつかありますので、最初に汎用レジスタやメモリを更新するためのメソッドを作成します。

    “`ruby:cpu.rb
    # GRの更新
    def updat

    元記事を表示

    【rubyでcomet2を作る】②CPUオブジェクト、メモリオブジェクトを定義する1

    ### はじめに

    [【rubyでcomet2を作る】①概要](https://qiita.com/223yuta/items/bf3ce3882c7199f97230)の続きです。
    今回はCPUオブジェクト、メモリオブジェクトを定義していきたいと思います。

    ### CPUオブジェクトを定義する
    CPUクラスを作成し、プロパティとメソッドを定義していきます。

    “`ruby:cpu.rb
    class CPU
    # プロパティ

    # メソッド

    end
    “`

    #### 必要となるプロパティ
    前回の記事で説明した通りCOMET2のCPUは下記4種類のレジスタを持ちます。

    – プログラムレジスタ
    – スタックポインタ
    – フラグレジスタ
    – 8つの汎用レジスタ

    本来のCOMET2ではフラグレジスタのみ3ビット、それ以外は16ビットの容量を持ちます。
    命令によっては16ビット命令と32ビット命令がありますが、今回はビット数まで考えることはせず、全ての命令が16ビット命令(1語命令、1メモリ番地を使用する)という前提で話を進めます。そのためCPUについてもビット数は無視して

    元記事を表示

    Rails scaffoldを使ってRailsに入門する

    ## はじめに
    Railsのscaffoldを使用してCRUDのアプリケーションを生成してみます。
    また、生成されたコードを読み解いて処理の流れをざっくりと読み解いてみます。

    なお、本編の内容はRailsチュートリアルの2章を参考にしています。随時、参考になった文献を記載しています。

    [第2章 Toyアプリケーション – Railsチュートリアル](https://railstutorial.jp/chapters/toy_app?version=5.1#sec-demo_users_resource)

    ## Rails scaffoldとは

    – Railsの機能の一つで、コマンド1つでCRUDの雛形を作成することが出来る
    – scaffoldとは「足場」という意味を持ち、Railsアプリケーションの足場を作る機能と言える

    [What is Scaffolding in Ruby on Rails? – RubyGuides](https://www.rubyguides.com/2020/03/rails-scaffolding/)

    ## 使ってみる
    ### scaffo

    元記事を表示

    【Rails】ルーティングのまとめ

    ##概要
    railsのroutes.rbに記述するルーティングについてのまとめ。

    ##内容

    ####ルーティングとは
    受け取ったurlを認識し、適切なコントローラ内アクションやアプリケーションに割り当てる機能。

    ####構文
    “`
    httpメソッド ‘urlパターン’, to: ‘コントローラ#アクション’
    “`

    #####ex) 以下のhttpリクエストを受け取った場合、以下のようになる。
    “`
    GET /patients/17
    “`

    routes.rb

    “`
    get ‘/patients/:id’, to: ‘patients#show’
    “`

    ### HTTPメソッド

    クライアントから送られたリクエストの種別を表すもの。

    ####get 
    ページを表示する操作。

    ####post 
    データを登録する操作。

    ####put 
    データを変更する操作。

    ####delete 
    データを削除する操作。

    ###rootの設定 
    [http://localhost:3000 /](http://localhost:3000/%E3%80%8D) にアクセ

    元記事を表示

    投稿モデル単体テストコードの記述

    前回に続いて、サンプルアプリの投稿機能、Eatモデルの単体テストコードを実装します!

    #①.テストコードを記述するファイルを作成

    まず、Eatモデル単体テストコードを記述するための、ファイルを生成します!

    以下のコマンドを実行します!

    “`php:ターミナル
    % rails g rspec:model eat
    “`

    以下のように、テストコードを記述するためのファイルeat_spec.rbと、FactoryBotを記述するためのファイルeats.rbが生成されます!

    “`php
    spec
    L factories
    L eats.rb
    L users.rb

    models
    L eat_spec.rb
    L user_spec.rb
    “`

    #②.FactoryBotを準備

    続いて、Eatモデルのインスタンスを生成するFactoryBotを設定します!

    eats.rbに、以下のように記述します!

    “`php:spec/factories/eats.rb
    FactoryBot.define do
    fac

    元記事を表示

    Ruby の Array.pack(‘p’) で ‘can’t modify frozen String’ が出たら、バージョンを上げるか、解凍が必要

    Ruby で pack をしたら、 `can’t modify frozen String` が出たので、記録する。

    “`rb
    [47] pry(main)> str = ‘abc’
    => “abc”
    [48] pry(main)> str.freeze
    => “abc”
    [49] pry(main)> [str].pack(‘p*’)
    RuntimeError: can’t modify frozen String
    from (pry):48:in `pack’
    “`

    `pack` は変更(`modify`)ではない、エラーが出るのが不思議だった。
    そこで思いついたのは、「ポインタを渡すと、破壊できるから」という理由。

    本当にそうなのかを調べようと思ったが、 2.6.3 まではエラーだが、 2.7.3 からはエラーにならなくなっていることに気づいた。

    下記のコードを `tmp.rb` として保存し、手元にある version を切り替えながらテストした。

    “`rb
    # tmp.rb
    # frozen_string_literal: true

    puts RUBY_VE

    元記事を表示

    【環境構築】rbenvで指定バージョンのRubyにダウングレード【mac】

    Macでrbenvを使用して指定バージョンのrubyにダウングレードしようと思ったのでメモ:writing_hand_tone2:
    ちなみにHomebrewでrbenvは既にインストール済み。

    チュートリアルのバージョンと自分の開発環境のバージョンを一致させたくて今回のダウングレードを実施することにしました。

    (~~キャッチアップの際、色々エラーが出てきて、本来の主目的以外のところで時間をとられるのが面倒だなと思ってたので、「もうチュートリアルと一緒のバージョンに下げちゃえ」と思ったので、やむをえずダウングレードすることに~~)最善策ではないと思うので、良い子はマネしないでね:runner_tone5:

    # 実行環境
    * Homebrew 3.3.2
    * ruby 2.6.8 → 2.5.0 にダウングレード

    # 現在のRubyバージョンを確認
    “`
    $ ruby -v
    ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.x86_64-darwin21]
    “`

    # 指定バージョンをインストール
    “`
    $ rben

    元記事を表示

    Could not reach host index.rubygems.org. Check your network connection and try again. と言うエラーについて。

    ### Cloud9を使ってrailsチュートリアルを進めているのですが、`Could not reach host index.rubygems.org. Check your network connection and try again. `と言うエラーについて教えていただきたいです。

    ### 発生している問題・エラー

    “`
    $ bundle install
    $ bundle update
    “`
    などを叩くと

    “`
    Could not reach host index.rubygems.org.
    Check your network connection and try again.
    “`

    と表示されます。

    自分で試したことといえば数分時間をおいてから新しくディレクトリを作り直すことしかできず、(お手上げ)しかし、それでなぜかエラーが表示されなくなり、問題なく先ほどのコードを叩くとinstall されてupdate出来てしまいました。

    そこで、なぜ解決できたのか質問させてください。

    hostに行けないとエラーが出た場合(Could not reac

    元記事を表示

    ruby on rails tutorial3章を始めたら出てきたThere was insufficient space〜 というエラーの解決方法

    やっと3章に突入して意気揚々と進めていくと、

    “`ruby:qiita.rb

    There was an error while trying to write to
    `/tmp/xxxxxxxxxxxxxxxxxxxx/versions`. There was
    insufficient space remaining on the device.

    “`

    がこんにちは。

    どうやら何かの容量がないということらしい。

    そうこうしているうちに、awsのターミナルにコードを入力できなくなる。
    ![スクリーンショット 2021-11-23 10.30.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2144713/a365d842-4b6f-973f-26eb-5265ba55315b.png)
    ![スクリーンショット 2021-11-23 10.30.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214

    元記事を表示

    OTHERカテゴリの最新記事