Madogiwa Blog

主に技術系の学習メモに使っていきます。

Ruby

Ruby on Rails: Rails 6.1でroutes.rbを複数ファイルに分割する

以下のPRで導入されたRails 6.1から使える機能を使うといい感じでroutesを複数ファイルに分割できたのでやり方をメモしておきます github.com やり方 以下のようなroutesをnamespace毎に分割したいときには、 Rails.application.routes.draw do root to: 'bo…

Ruby: FactoryBot.lintでFactoryの壊れないようにチェックする

FactoryBotを利用してテストデータを管理していて、開発が進んでいくとデフォルトで作成したときにエラーになるようなFactoryが作られてしまったりします。 github.com そんなときにFactoryBot.lintを使うとFactoryが壊れたときに気づけて便利だったのでメモ…

Ruby on Rails: Rails 6で追加された`insert_all`の実行時にデフォルトでTimestampを付与するMEMO

Rails 6でbulk insertの機能が実現されました ※概要は以前紹介してるので興味のある方は参照してください。 madogiwa0124.hatenablog.com 非常に便利なのですが、記事でも記載した以下の通り、timestampが補完されずにcreate_at、updated_atにNOT NULL制約を…

Heroku:Free DynoでRailsアプリケーションとSidekiqを動かすMEMO📝

HerokuでRailsアプリケーションを運用しているのですが、Sidekiqを導入するときにredisを構築したり、sidekiqのプロセスを立ち上げたり、色々と調べることがあったので、そのあたりの内容をメモしておきます pumaからhookしてsidekiqのプロセスをwebのdynoの…

Ruby: RubyCriticでコードを静的解析して品質を計測するMEMO📝

個人で運用しているRuby on Rails製のWebサービスでRubyCriticを使ってCIで品質レポートを取得するようにしたので、そのあたりのやり方等をメモしておきます rubycriticとは? RubyCritic is a gem that wraps around static analysis gems such as Reek, Fl…

Ruby: Deviseで現在有効になっているOmniAuthのproviderのリストを取得する

Deviseで現在の環境で有効になっているproviderを確認して有効なものだけのログインボタンを出す(例:開発環境でだけdeveloperストラテジを有効化しているので開発環境でだけ導線を出したい) 等の場合に現在有効なproviderを取得したいときのやり方をMEMOし…

Ruby: FactoryBotでglobalに使えるtraitを定義するMEMO

以下の記事を追記するときにFactoryBotでfactory跨いで使いたいtraitを定義する方法調べていて見つけたのでMEMOしておきます madogiwa0124.hatenablog.com 検証したバージョンはfactory_bot 6.1.0です。 やりたいこと globalに使えるtraitを定義する おわり…

Ruby on Rails: BulletからRails標準のstrict loadingに乗り換えるMEMO📝

今までN+1の検知にBulletを使っていたのですが github.com Rails 6.1から導入された新機能strict loadingでも同じようなことが実現できそうだったので、個人のWebサービスをBulletからstrict loadingに載せ替える手順をメモしておきます strict_loadingをグ…

Ruby on Rails: ダイレクトルーティング(Direct routes)を使って外部サイトのURLをroutesで管理する

OAuthを利用した外部サイトへの認証時のリダイレクトやLPへの導線等、Webサービス内で外部サイトのURLを扱いたいときにRailsのダイレクトルーティング機能を使うとURLの管理をRoutesに統一できて便利だったのでMEMOしておきます ダイレクトルーティング機能…

個人のWebサービスをRuby 3.0アップデートしたので対応したこととかMEMO

2020/12/25にRuby 3.0.0がリリースされました✨ www.ruby-lang.org Ruby on Rails(6.1.1)製の個人のWebサービスを今更ながらRuby 3.0にアップデートしました。 update後に一部CI等が落ちて対応した点があったので対応したことをMEMOしておきます 対応したこと…

Deviseで内部でセキュアなパスワードを設定してアカウントを作成するMEMO

管理画面のアカウント等、管理者が生成して利用者にアカウントを配布するような運用はあると思うのですが、管理者がアカウントを作成する際にパスワードまで指定するようにしてしまうと、管理者によるなりすましの懸念があります。。。 そのためアカウント作…

Ruby on Rails: 6.1.0の新機能strict_loadingを使ってN+1を防ぐMEMO

Rails 6.1.0で導入されたstrict_loadingを使うと手軽にN+1のチェックが出来て便利そうなのでMEMO 基本的には以下のような形でActiveRecord::Releationを作るメソッドチェイン内でstrict_loadingを呼び出すようにすると、 def index @feeds = Feed.strict_loa…

クックパッドマートさんのエンジニア採用試験が公開されているみたいなのでやってみた🥞

以下のTweetを見かけて気になり、勉強がてら自分でも解いてみたので自分の回答がいい感じかはわからないですがメモしておきます クックパッドの長い歴史の中で、今回初めてクックパッドマートでは、エンジニアの採用試験問題を公開することになりました!こ…

OmniAuthのDeveloper Strategyを使って開発環境でOmniAuthを使った認証を試すMEMO

Twitter等の外部アカウントの認証を開発環境で試すのは秘匿情報を本番と開発環境で分けたり等、色々考慮することが多くて面倒だと思うのですが、OmniAuthのDeveloper Strategyを使うと簡単にOmniAuthを使った認証処理を試せそうなので使い方とかをMEMOしてお…

RubyonRails: WebpackerなRailsアプリケーションでSourceMapをRollbarにアップロードするMEMO

WebpackerでRailsアプリケーションでエラー管理にRollbarを使用しているときに、デフォルトだとエラーが発生してもminify等がされたjsにリンクされてしまい何が起きているのか、よくわかりません。。。 そんなときにSourceMapをRollbarにアップロードすると…

Ruby: camelCase🐫を使ってRubyを書くことは出来そうなのか?色々試してみたのでMEMO🤔

フロントエンドでJavaScriptを採用してバックエンドをRubyで書いていると、snake_caseとcamelCaseを行ったり来たりして、混乱したりするのでRubyでcamelCaseで書けたりしないのか、ちょっと試してみたのでMEMO やりたいこと method_missingを使って無理やり…

Ruby: `pdf-reader`gemを使ってPDFをパースしてゴニョゴニョする

国が公開している資料が割とPDFで公開されていることが多く、このようなデータをアプリケーション内で使いたいと思ったときにPDFを頑張ってゴニョゴニョする必要があると思うのですが。。。 そういうときにpdf-readergemがシンプルにつかえて便利だったので…

MarkdownからRspecにリアルタイムで変換するWebエディタを作った + ActionCableの使い方メモ📝

ActionCableと前に作ったMarkdown形式のテキストをRSpec形式のテキストに変換するgemを使ってリアルタイムに変換できるWebエディタを作りました https://markdown-to-rspec-web.herokuapp.com/ ↓Markdown形式のテキストをRSpec形式のテキストに変換するgemに…

Ruby: ActiveSupportコア拡張を使って任意の定数を持たない特定のクラスを継承したクラスを見つける

ライブラリのバージョンアップ等で親クラスが子クラスが持つ特定の定数に依存するようになりエラーが発生することがあり。。。 特定のクラスを継承したクラスの中で特定の定数を持たないクラスを探すコードを書いたのメモしておきます サンプルコード 任意の…

CircleCIのorbsを使って設定ファイルを整理するMEMO

CircleCIのorbsをあまり使ってことなかったのですが、使ってみるとだいぶ便利だったので使い方をMEMOしておきます CircleCI orbsとは? CircleCI Orbs は、ジョブ、コマンド、Executor などの構成要素をまとめた共有可能なパッケージです。 CircleCI では承…

Ruby on Rails: WebpackerからピュアなWebpack環境に置き換えるメモ📝

最近個人のRailsアプリケーションをWebpackerからSimpackerを使ったピュアなWebpack環境に切り替えたので、その手順をメモしておきます 今回はWebpackerを導入しときのデフォルトなjs/scssなbuild環境を削除して、Webpackで置き換えていきます。 Webpackerを…

Ruby on Rails: deviseが使用する項目とユーザー情報のモデルを分離して肥大化を抑制するMEMO

最近deviseをちょっと触ってて自分が特に何も考えずに使っていくとUserモデルがどんどん肥大化していってしまうなぁと思い、、、 deviseのために追加する項目(email, encrypted_password等)とプロフィール的な項目(nickname, birthday等)でモデルを分けると…

Markdown形式のテキストをRSpec形式に変換するGemを作りました💎

画面仕様書等、Markdownで整理していたものからRSpecを書き直すのが意外と手間と思うことがあったのでMarkdownで書いたものをRSpec形式のテキストに変換するGemを作りました。 github.com 使い方 個人的な技術Topic RDoc::Markdownを使ってマークダウンから…

Ruby: オレオレフレームワーク`makanai`を`v0.1.6`にアップデートしました🥳

先日、ほぼピュアなRubyで書いているオレオレフレームワークmakanaiをv0.1.6にバージョンアップしました github.com アップデートの主な内容は下記の通りです。 ✨ enabled to switch template engine Haml and ERB. github.com テンプレートエンジンが今まで…

Ruby on Rails: リクエストのformatによって実行するControllerを分岐させるroutesの設定方法MEMO

Ruby on Railsでエンドポイントを変えずにformatで実行するControllerを分ける方法でちょっと悩んだので解決方法をメモしておきます。 やりたかったこと 解決方法 おわりに 参考 やりたかったこと 個人のサービスでRSS用のXMLを表示するのと普通にHTMLを返却…

SimpleCovとCircleCIのArtifactsを使ってカバレッジ測定結果を確認するMEMO

rubyを使ったアプリケーションのテストコードのカバレッジ測定にはSimpleCovを使うことが多いと思いますが、CircleCIのArtifactsを使うと簡単にCircleCIの管理画面上でSimpleCovの結果を確認できたので、そのへんの手順をメモしておきます github.com Codeco…

Ruby on Rails: cssの管理をAssets PipelineからWebpakerに移行するときのメモ

個人のアプリケーションを今まではデフォルトのアセットまわり(CSS等)をSprockets、JavaScriptをWebpackerでビルドするような形にしてたのですが、 今回はstylesheetをWebpackerで管理するようにしたので、そのへんの手順をメモしておきます 対応したアプリ…

RuboCopに自分で定義した新しいルールを追加する方法のMEMO🤖

RuboCopは、Rubocop::Cop::Copを継承することで独自のルールを追加することできるようで、 レビューでよくコメントもらう内容等、RuboCopで検知できるようになったら便利だなと思い、 ルールを作成してみたので、そのへんの手順等をMEMOしておきます✍ 公式の…

Ruby(with ActiveSupport)で指定日が第何、何曜日かを取得するときのMEMO

第2、第4火曜日だけなんかしらの処理を実行したいとき等、指定日が第何火曜日を知りたいケースの場合に、RubyとかActiveSupportにこういう系のメソッドが無いかなと思ったんですが、 曜日判定は出来ても第何曜日の判定を行うようなメソッドは見当たらず、ち…

`dist: trusty`を使用するとTravis CIでchromeのversionが古くなる事象の対処法MEMO

下記のような設定ファイルで動かしていたTravis CI上でheadless chrome使うようなgemのテストが急に落ち始めて、テスト通るところまで直したので色々メモして残しておきます✍ --- dist: trusty language: ruby cache: bundler rvm: @@ -8,13 +7,6 @@ rvm: - …