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

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

Ruby on Railsで環境変数を設定する方法

## はじめに
railsで環境変数を導入する方法をまとめました。
環境変数はAWSのAccessKeyなどの機密情報をGithubに上げずにアプリで使用する際に必要になります。
Githubに機密情報をpushすると、悪用される危険性があるので、環境変数を使いこなし、AccessKeyなどの機密情報を適切に管理できるようになりましょう。

### 1 gemをインストールする。
“`php:Gemfile
gem ‘dotenv-rails’
“`

### 2 .envファイルを作成
環境変数を設定したいアプリケーションのGemfileなどが置いてあるルートディレクトリに .env ファイルを作成します。

“`php:|.env|
AWS_ACCESS_KEY=’***********’
API_KEY=’*********’
DATABASE_PASSWORD=’**********’
“`

### 3 .gitigonreに.envを追加
.gitignoreファイルの中に.envファイルを記述しないと、Githubにpushしたときに、.envファイルも

元記事を表示

Rubyによるデザインパターン(1)

# Rubyによるデザインパターン(1)
 本記事は初級エンジニアがRubyを使用したデザインパターンをアウトプットしたものになります。また、デザインパターンは種類が多いため、何回かに分けて掲載していきたいと思います。今回はIteratorパターンとAdapterパターンをご紹介します。なお、こちら記事は次のサイトを参考にしております。
[TECHSCORE](https://www.techscore.com/)
[酒と涙とRubyとRailsと](https://morizyun.github.io/)

## Iteratorパターン
 Iteratorパターンは要素(オブジェクト)の集まりを保有するオブジェクトの各要素(オブジェクト)に順番にアクセスする方法を提供するデザインパターンです。各オブジェクトの名前、または各オブジェクトのパラメータを利用するなど、各オブジェクトへのアクセス方法は異なります。つまり走査方法(アクセス方法)を与えるクラスを別に用意することで、より柔軟な設計をする事ができるようになります。
 イテレータには内部イテレータと外部イテレータがありますが、内部イ

元記事を表示

スクリプト言語 KINX/クラスとモジュール

# はじめに

「**見た目は JavaScript**、**頭脳(中身)は Ruby**、(**安定感は AC/DC**)」。見た目は JavaScript はおおむね達成していますが、中身は Ruby ってのはなんかイマイチか。。。もう少し考えよう。

* [スクリプト言語 KINX(https://github.com/Kray-G/kinx)](https://github.com/Kray-G/kinx)
* 宜しければ★をポチっと。
* (近況報告1)整数定数値を簡単に扱えるように `enum` をサポートした。
* (近況報告2)Markdown で仕様を書いたらそのままテスト実行できる仕組みを作った。
* 名付けて `SpecTest`。これもそのうち紹介したいな。
* 一応:https://github.com/Kray-G/kinx/tree/master/doc/spec

今回はオブジェクト指向の主役、クラスとモジュールです。

# クラスとモジュール

クラスはオブジェクト指向の中で最も重要な概念。一言

元記事を表示

Action Cable 本番使用時のNginxとCable.ymlの設定

##はじめに

Action CableはWebSocket通信技術を用い、リアルタイムなチャットなどの機能を実装できる機能です。
AWS本番環境でのNginxとCable.ymlの設定に関して詰まった箇所を共有します。

![chat.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/481058/2bae78db-49d1-fe42-804d-252e0ba769f5.gif)

##前提
– Rails 5.2.3
– Puma
– Nginx
– AWSでデプロイ
– **Https通信**

ローカルではWebsocket通信が正常に動いていることが前提です。

##Nginxの設定追加
**最後の一行ですが、Httpsの場合はこれがないとコンソール内に403エラーになるので注意してください。**

proxy_set_header X-Forwarded-Proto https;

“`nginx:/etc/nginx/conf.d/app_name.conf
location /c

元記事を表示

Rails6 のちょい足しな新機能を試す 123(Gemfile 編)

# はじめに

Rails 6 に追加された新機能を試す第123段。 今回は、`Gemfile` 編です。
Rails 6 では、 `rails new` するときに `–skip-test` などのオプションつきで、実行したときに、空行が2行にならないように修正されています。

Ruby 2.6.5, Rails 6.0.2.1, Rails 5.2.4.1 で確認しました。 (Rails 6.0.0 でこの修正が入っています。)

“`shell
$ rails –version
Rails 6.0.2.1
“`

今回は、 `rails new –skip-test` でGemfileを作成して中身を確認します。

# Rails プロジェクトを作る

Rails プロジェクトを新たに作成します。

“`shell
$ rails new –skip-test rails_sandbox
$ cd rails_sandbox
“`

# Gemfile を確認する

Gemfile を確認すると、 `:development` group の次の1行だけが空行にな

元記事を表示

Rails~ユーザー機能についての続き~

#ユーザー名の表示
session[:user_id]の値をもとに、ログイン中のユーザーの情報をデータベースから取得する。find_byメソッドを用いてusersテーブルからidカラムの値がsession[:user_id]と等しいユーザーを取得し、変数に代入する。
##view
“`
<% current_user=User.find_by(id:session[:user_id])%>

  • <%=link_to(current_user.name,"/user/#{current_user.id}")%>
  • “`
    リンクはユーザー詳細ページへつなげる用に処理してある。

    元記事を表示

    未経験エンジニア転職においてRubyは不利

    ## 近年のエンジニアバブル
    いたるところのネット広告では未経験からのプログラマーデビューを促すプログラミングスクールの広告で溢れている。
    その勢いは日に日にましており、一体どれほどのスクールがあるのだろうか。もはや比較しようにも数が多すぎている気もする。まさにこの勢いは「スクールバブル」と呼ぶにふさわしいだろう。

    ## スクールで習得できる言語
    スクールで教えている言語は大半が「Ruby」である。
    機械学習の期待度の高まりもあり「Python」を教えているスクールも存在するが、基本スクール=Rubyに感じられる。
    Rubyは記述量も少なく、シンプルな構文で書くことができる。また、フレームワークはRuby on Rails一択であるし
    型をいちいち指定してあげなくても良い。初学者がプログラミングを体系的に学ぶにはうってつけの言語だと思う。

    ## Rubyの市場価値
    スクールでRubyを学んで卒業した学生は次に転職活動をすると思う。
    ついに未経験エンジニアを目指して転生を試みるのだ、しかし実際に転職活動を始めた時に転職ポータルサイトなどでRuby、未経験などの募集を検索すると気づくの

    元記事を表示

    言語別AWS SDKのパフォーマンスの一検証

    # 背景
    ## タグについて
    AWSはリソースに[タグ](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/Using_Tags.html)の付与が可能です。AWSにおけるタグはリソースの管理や[コスト配分](http://blog.serverworks.co.jp/tech/2019/07/29/cost-alloc-tags-basic/)の用途で用いられ、タグの付与設計はAWSの運用において非常に重要なポイントとなります。
    特に大規模な環境や組織になるとリソースに付与するタグは非常に多くなる傾向があります。

    ## AWS SDK for Rubyのパフォーマンス
    [こちらの記事](https://qiita.com/kure/items/19b1c17a56d81e2bb955)でも言及したようにAWS SDK for Ruby では、リソースにタグが大量に付与されている場合、一度に大量のリソースを取得する場合に大幅に時間がかかることがあります。
    以下はEBSを例に、タグ付与のあり・なしとで、リソースの取得(d

    元記事を表示

    Rails初心者 始める前の『ざっくり用語集』

    # Rails初心者 始める前の『ざっくり用語集』

    ## この用語集について
     この用語集は、筆者が個人的に「む?」となったポイントを中心にまとめたものであり、気軽に振り返ることでスムーズに学習を進められるように、という想いから作成しているものです(※現在進行形)。

     ですので、少しでもプログラミングをしたことの方は、見たことのある内容の薄いペラペラな情報しか載っておりませんので、そっとブラウザを閉じていただければと思います。
     
     そういった背景から、用語の意味はあまり深く考えずに、とりあえず「コイツが何をやっているか?」を語ることを中心に構成しています。そのため、テーマとしては以下になります。

    – 『Rails初学者が学習で詰まったときなどにざっと目を通せる』ような内容
      

     (※個人的には、用語の詳しい理解 と 全体の概要の把握、どちらも大切だと思うので、あまりにもちんぷんかんぷんな用語は無理のない範囲で調べた方が 後に楽かなあとは思います。)

    ## はじめに
     筆者は、現在進行形でRailsの学習中ですが、ベースとしてはProgate様の(Ruby on Rails

    元記事を表示

    Railsチュートリアルメモ – 第10章

    [メモの目次記事はこちら](https://qiita.com/yokohama4580/items/dedfd5510080273dc2a0)

    [公式Railsチュートリアル第10章へのリンク](https://railstutorial.jp/chapters/updating_and_deleting_users?version=5.1#code-user_edit_view)

    ## サマリ
    – ユーザーの更新・表示・削除を行えるようにする
    – 認可モデル (Authorization Model)
    – 認証 (authentication) :サイトのユーザーを識別すること
    – 認可 (authorization) :そのユーザーが実行可能な操作を管理すること
    – beforeフィルター (before_action)
    – フレンドリーフォワーディング
    – seeds.rbを使ったデータ作成
    – ページネーション
    – Strong Parameters

    ## ポイント
    – Active R

    元記事を表示

    Rails ウィザード形式でユーザー登録機能を実装してみた

    railsを使って、フリマアプリのチーム開発をしています。
    自分が担当したユーザー機能(Gem devise周り)での実装でウィザード形式で進めた時に
    アソシエーションの組み方についての備忘録です。

    ## やりたいこと
    deviseをカスタマイズしてデータベース構造に沿って登録機能を実装する。
    1ページ目:ユーザー情報(メアドや名前、生年月日とか)
    2ページ目:住所関連(送付先とか)

    ユーザー情報をsessionで保ったまま2ページ目(住所入力)へNextボタンで遷移させたい。かつ、住所入力に使用するインスタンス生成も同時に実施する。

    ## テーブル設計、アソシエーション
    今回は
     userモデルにhas_many
     addressesモデルにbelongs_to でテーブル設計をしました。

    ## ハマったこと
    参考にしたアプリだとアソシエーションはuserテーブルは「has_one :address」だったため
    そのまま参照すると /user/registrations_controllerがうまく動かずcreateができない。
    エラー発生。

    ## 解決

    regist

    元記事を表示

    PG::GroupingError: ERROR: must appear in the GROUP BY clause or be used in an aggregate function

    herokuにデプロイした後にこのようなエラーが出ました。

    “`
    PG::GroupingError: ERROR: “accounts.date” must appear in the GROUP BY clause or be used in an aggregate function
    “`
    エラーが出た行

    “`ruby
    @income = current_user.accounts.where(pattern: 1).group_by_month(:date).sum(:money)
    “`
    sqliteではエラーにならなかったのですが、herokuのpostgresqlではエラーになりました。
    “accounts.date”はgroup byで使用されるか集計関数で使用される必要があるというエラー。
    上のコードだとgroup byもしてるし集計関数も使ってると思うんですが、いろいろ試したんですけどだめでした。
    最終的に次の記事に救われました。
    https://makandracards.com/bitcrowd/32883-pg-groupingerror-erro

    元記事を表示

    Seaquel ProでEC2のデータベースと接続する/ログインする方法

    ## 接続方法
    AWSのデータペースを確認するために、Seaquel Proで確認したいと思って調べて接続できたので、方法をまとめました

    ### Seaquel Proを開きます
    [![Image from Gyazo](https://i.gyazo.com/a33369241dc3be511bb20f7cb1343500.gif)](https://gyazo.com/a33369241dc3be511bb20f7cb1343500)

    名前:なんでも可能
    MySQL ホスト:127.0.0.1
    ユーザ名:root
    パスワード:ご自身で作成したMySQLのrootユーザのパスワード
    データベース:未記入
    ポート:未記入
    SSHホスト:EC2で設定した’Elastic IP’
    SSHユーザ:ec2-user
    SSH鍵:ご自身が保持しているEC2インスタンスの秘密鍵(○○.pem)を選択
    SSHポート:未記入
    SSLを使用して接続:チェック入れない

    ### EC2インスタンスの秘密鍵(○○.pem)を選択する方法
    まずは場所の確認

    “`:ターミナル
    $ cd ~/.

    元記事を表示

    開発環境と本番環境での、db:resetとdb:migrate

    railsで、作成したwebアプリをherokuへデプロイする際にdbがうまく反映されず、詰まったので簡単に備忘録(自戒)として残しておく。

    # 経緯

    開発環境でdbにカラムを追加する際に、一度作ったカラムと同じ名前のものを作成しようとしたことで、migrationが途中で中断され、中途半端なmigraionファイルが作成された。`db:rollback`して`db:migrate`するもエラーが出現して解決方法がわからず、ググると、`db:reset`して、`dn:migrate`する方法や`rails db:migrate:reset`などの方法が書かれていたが、resetコマンドに恐怖を感じたこと、開発環境では問題なく動作していたことで、「ま、いっか」と開発を続けてしまった。

    そのことを忘れて、herokuへデプロイしてしまい、createアクション時にエラーが出現して、そのことを思い出して、解決方法をググった。

    # 開発環境での解決

    初めは、`db:reset`して、`db:migrate`したが、同じカラムが存在しているというエラーが出現したため、半ば諦めつつも、

    元記事を表示

    deviseのTwitter認証での「Unauthorized 403 Forbidden」の対処法

    ローカルでのRailsの開発中に下記のエラーが出ました。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403521/72293ecd-4e3d-bec2-8728-130a16b9cc54.png)

    原因は[Twitter Developer](https://developer.twitter.com/)のcallbacksにローカルのURLを登録していないことが原因でした。

    該当アプリケーションのコールバックの設定で下記の様にローカルのURLを設定して下さい。また、本番環境でこの現象が起きたら本番のURLを設定して下さい。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403521/7eef1552-a5f2-9fb2-bbee-8fd93e8039f0.png)

    元記事を表示

    System Specでブラウザのダイアログを操作する方法

    どうもShota(@Mii4a2501)です。
    System SpecでDestroyアクションを行う際、ダイアログを操作しようとしたところ、はまってしまったので備忘録。

    alert_confirmとdismiss_confirm

    pageインスタンスには、

    **alert_confirm** => OKを押す用のメソッド
    **dismiss_confirm** => キャンセルを押す用のメソッド

    この二つの操作用メソッドが用意されています。
    (accept_alertというOKボタンのみダイアログ用の操作メソッドもあるようです)

    注意点

    上記メソッドを使う際、若干の工夫が必要です。

    “`ruby:qiita.rb
    expect{
    page.accept_confirm
    # expectブロック内に一つ以上のfind,expectが必要
    expect(page).to have_content “削除に成功しました”
    }.to change(School, :count).by(-1)
    “`

    このようにして、expectブロック内に一

    元記事を表示

    rbenv: no such command `install’ となってinstallできない時の対処

    # エラー内容
    rbenvで違うバージョンのrubyをインストールしようとしたら以下のメッセージが出た

    “`shell:
    $ rbenv install -l
    rbenv: no such command `install`

    $ rbenv install 2.5.1
    rbenv: no such command `install’
    “`

    # 解決

    `ruby-build`が必要でそれをcloneしたら解決

    “`shell:
    $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
    Cloning into ‘/root/.rbenv/plugins/ruby-build’…
    remote: Enumerating objects: 8, done.
    remote: Counting objects: 100% (8/8), done.
    remote: Compressing objects: 100% (8/8), done.
    remote: Tota

    元記事を表示

    Rails~ログイン機能について~

    #概要
    progateの内容に沿ってログイン機能について学んだことを忘れないように記載していく。

    ###ログインとは
    ログインとはサイトを操作しているユーザーが誰であるかが判別できる状態のこと。ログインしていることにより同じURLでもユーザーによって表示を変えることもできる。ログインするためにはログインページからメールアドレスやパスワードなどの情報をrailsに送信する。送信された情報を元に操作しているユーザーを特定しログイン状態とする。

    #ログインページの作成
    ##routes
    “`
    get “login”=>”users#login_form”
    “`

    ##controller
    “`
    def login_form
    “`

    ##view
    “`

    “`
    このpassewordコードによって入力内容が伏せ字になる

    ##パスワードカラムの追加
    ###ターミナル

    “`
    rails g migration add_password_to_users
    ”マイグレーションを変更後”
    rails db:migrate
    “`
    ##

    元記事を表示

    No Rails found in SDKのエラーが発生

    # `No Rails found in SDK`のエラーが発生

    今まで使えてたのに急にですよ。
    なになぜどうして。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533120/213f0525-c35f-efbf-e841-64f0e041e2b1.png)

    ## 解決策

    RubyMine > Preference > Language & Frameworks > Ruby SDK and Gems
    を見てみたら、右側のgem一覧が空っぽになってたんですよ。(画像は読み込み後なので出てるけど。。)
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533120/e75fbd8b-ad9d-6c10-82c8-c6f7ee8cb7fd.png)

    で画像にある「Synchronize gems and RubyMine helper」ボタンを押す。
    そして暫く待つ。
    無事起動。

    元記事を表示

    Rails ~画像ファイルの表示、保存~

    #概要
    Railsを使用したSNSなどで画像を表示する方法を学んでいく。
    progateのrails講座の内容に沿っています。

    #ファイル(ここでは登録するユーザ画像)を保存するカラムを追加する。
    ① マイグレーションファイルのみ作成
    ② マイグレーションファイルの内容をデータベースに反映させる。

    ①はマイグレーションのみを作成する。モデルはuserモデルを使用するため新たなモデル作成は不要。作成するコマンドについては

    “`
    rails g migration add_image_name_to_users
    “`
    にて作成。add~以降はファイル名である。

    ##マイグレーションファイル
    マイグレーションファイルのテーブルに変更を加えるためにマイグレーションファイルの中のchangeメソッドの中に変更内容を書く必要がある。

    “`
    class AddImageNameToUsers

    元記事を表示

    OTHERカテゴリの最新記事