Madogiwa Blog

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

2021-01-01から1年間の記事一覧

2021年振り返り

今年も一年が終わるということで今年も振り返ってみる。 今年の振り返り アウトプット BLOG BLOGは、今年1年で51記事書いていて、1週間に1記事ぐらい書いてるので、そこそこ書いてた✍ (月間PV数は4300弱くらい) なぜか以下の記事が、ホットエントリーに取り…

Ruby on Rails: 個人のサービスをRails7にアップグレードしたのでやったこととかメモ📝

2021/12/15 Rails 7がリリースされました rubyonrails.org さっそく個人のサービスをRails 6.1.4.4 -> Rails 7にアップグレードしたのでやったこととかメモ Rails 7の主要な対応 Rails 7へのアップグレード手順 Rails以外のgemのバージョンアップ Railsのバ…

Ruby on Rails: 開発環境込みでcircleci/rubyからcimg/rubyに乗り換えるメモ

今までCircleCI及び開発環境でcircleci/rubyのnode-browserのイメージを利用していた*1のですが、下記ということでcimg/rubyに乗り換えることにしました。 プレフィックスが「 circleci / 」のレガシーイメージは、 2021 年 12 月 31 日に廃止されます。 ビ…

Ruby on Rails: Controllerのaction内に分岐を持たずにredirectと処理の続行を切り替える実装をしたいときのメモ

Controller内でaction内に分岐を持たずに特定条件でredirectと処理の続行を切り替えるみたいなことをやりたいときに、単純にredirect処理をprivate methodに移すみたいなやり方だと結局アクションに戻ってしまい上手いこと行かないので、ちょっと悩んだので…

Ruby on Rails: Capybaraを使ったシステムテストでHTTPリクエストを送信する方法

Capybaraを使ったシステムテストで何かしらHTTPリクエストを送信したいときに色々ハマったのでメモしておきます システムテストについてはこちら railsguides.jp リクエストを送る方法 以下を行うとシステムテスト内でリクエストを送信することができます。 …

今更ながらActiveStorageの仕組みとか使い方とかメモ📝

今更ながらActiveStrageの仕組みとか使い方とかを動かしながらちょっと勉強したのでメモ ActiveStorageとは Active Storageは、Amazon S3、Google Cloud Storage、Microsoft Azure Storageなどのクラウドストレージサービスへのファイルのアップロードや、フ…

Ruby: `standardrb`を最近使ったりしてるので使い感とかをメモ

RubyのLinterといえばrubocopだと思うのですが、個人のツールとかだと最近standardrbを使うことが多いので使い感とかをメモしておきます standardrbとは? github.com StandardJSインスパイのRubyのLinterです。 This gem is a spiritual port of StandardJS…

stylelintを13系から14系にアップデートしたのでメモ📝

個人で運用しているサービスのstylelintを13系から14系の上げたので、そのあたりでやったこととかをメモしておきます。 stylelint.io アップデート手順 公式で14系へのマイグレーションガイドが公開されているので、基本的にはそれをみてやっていきます。 st…

Ruby on Rails: js-routesを使ってフロントエンドでもRoute系のHelperを使用するMEMO

フロントエンド側から非同期でRails側にリクエストを投げたいときとかに今までは以下のような定数を集めたmoduleをフロントエンド側に用意してたりしていたのですが、 export const BLOG_API_ENDPOINT = "/api/blogs"; export const LIKE_API_ENDPOINT = "/a…

Ruby on Rails: passwordlessを使ってMagicLink的な認証機能を作る

Ruby on RailsでMagic Link的な認証を作ってみたく調べてたところpasswordlessというgemを見つけて色々触ってみたので使い方とかをメモしておきます github.com Magic Linkとは? サイトに用意された「マジックリンク」と名付けられたボタンを押します。する…

Ruby on Rails: webpack管理のフロントエンドまわりのファイルも含めてViewを作成するジェネレーターを作った

個人のサービスでwebpackでフロントエンド関連のファイルを管理していてsimpackerを使ってRailsで読み込むみたいなことを行なっているのですが。。。 新規のページをつくるときとかに手でエントリーのJSを用意してページ用のCSSファイルを作ってインポートし…

Ruby on Rails: `constraints`を使ってログイン必須等のRoutesに制約を掛けるMEMO

SidekiqのDashboard等をmountしたengineの画面をログイン必須にしたい時、特定のサブドメインのときだけアクセス可能にしたい等、Rails のルーティングのconstraintsを使うと実現できそうだったので、そのあたりをメモしておきます api.rubyonrails.org Rail…

Ruby on Rails: `rails secret`でセキュアな文字列を生成するMEMO

今までsecret_key_base等を設定するときにわざわざ以下のような感じでconsoleを起動してセキュアな文字列を取得していたのですが、 $ bin/rails console irb(main):010:0> SecureRandom.hex(64) => "ad56c1c986e397149281da99f6e268d4e3657d65a46600dcaeccd8…

Herokuの構成をTerraformで管理してみるMEMO📝

最近Herokuで動かしている個人のサービスの構成をTerraformで管理するようにしてみたので、そのあたりのTerraformの使い方とか移管方法とかを備忘がてらMEMOしておきます Terraformとは Write, Plan, Apply https://www.terraform.io/ 上述の通りオープンソ…

Ruby on Rails: コンソール使用時に特定のモデルを読み取り専用にするMEMO

APIから取得した結果を保存するModelやユーザー情報を扱うModel、中間結果を保存するテーブル等、直接更新してしまうと危険なのでコンソールから起動するときにはReadonlyにしたいなぁと思い色々やり方を考えてみたのでメモしておきます ※rails console -sも…

Ruby on Rails: 複数DB利用時のDeviseのActiveRecord::ReadOnlyErrorに対応するメモ

認証にDeviseを利用しているとロック解除等のメールに送信されたLinkをクリックといったGETリクエストでDBを更新するような処理実行時にRailsの複数DBを使っているとActiveRecord::ReadOnlyErrorが発生してしまうため、そのあたりの対応方法をメモ railsguid…

Rails 7から導入される予定のimportmap-railsを使ったフロントエンド環境を試してみる

Rails 7からimportmap-railsを使ったフロントエンド環境が提供される予定です。 Rails new時にimportmap-railsを使用するoptionも追加され試しやすかったので、軽く使ってみました。 利用方法とかメモしておきます github.com github.com import mapsとは 簡…

Ruby: RSpec::Retryで失敗したテストをRetryさせるMEMO

個人で作成しているライブラリでDBのDocker Imageのbuild直後だけ、たまにコネクションが作れなくてエラーになる事象が発生し以下のRspec::Retryを導入してリトライして解消したので導入方法をメモしておきます Rspec::Retryとは? RSpec::Retry adds a :ret…

.railsrcとRailsテンプレートを使ってRails new関連の作業をコードで管理する

最近、割とRails newする機会があり.railsrcとRailsテンプレートを使うといい感じにこのあたりの作業をコード管理して再現性と効率的に行えそうだったのでメモしておきます .railsrcとは Railsテンプレートとは railsrcとRailsテンプレートを使ってみる おわ…

`@vue/compiler-sfc`を3.2系にあげるときに`TypeError: vue_1.createElementVNode is not a function`が発生する

@vue/compiler-sfcを3.2系にあげたときにタイトルどおり以下のエラーが発生したのですが、 TypeError: vue_1.createElementVNode is not a function CHANGELOG等を見ても破壊的変更に記載されておらず、多少ハマったので対応方法をMEMOしておきます blog.vue…

Ruby: 対象の特徴を座標化し類似度を算出してレコメンド機能っぽいものを作ってみるMEMO

最近以下の本を読んで、なんかしらのデータの特徴をグラフにしてピタゴラスの定理を使って2点間の距離を算出すると、簡単なレコメンドシステムを作れることを勉強したので、実際にピュアなRubyのコードで作ってみました。自分の学びのためにも流れをメモして…

StorybookをGitHub Actionで自動的にGiHubPagesで公開するMEMO

StoryBookをGitHub Pagesで公開して見えるようにすると結構便利そうだったのでやり方をMEMO Storybookの導入方法については以下のエントリを参照してください madogiwa0124.hatenablog.com 今回は以前書いた以下のアクションにStorybookのbuildプロセスを追…

Ruby on Rails: 今後標準で使えるようになるかもしれないViewComponentを試してみる

ViewComponentとは? ViewComponentの使い方 ViewComponentをテストする おまけ:VueのSFCみたいなのは実現できるか? おわりに ViewComponentとは? 3rd Party製のコンポーネントフレームワークのためにレンダー済みのHTMLを返すrender_inが定義されているO…

Vue3系×Webpack5系の環境にStorybookを導入するMEMO📝

以下のような環境にStorybookを導入してみたので対応したこととかをメモしておきます。 package version vue 3.1.4 webpack 5.44.0 Storybookとは まずはStorybookについて簡単に説明します。 storybook.js.org Storybook is an open source tool for buildi…

個人のWebサービスをVue2からVue3系へのアップグレードしてみたのでMEMO

個人のWebサービスをVue2系からVue3系にアップグレードしてみたので、やったこととかメモしておきます 基本的な流れとしては以下の記事を参考にさせていただきました‍♂️ zenn.dev 事前準備 plugin:vue/vue3-recommendedを有効化する Vue本体のアップデート …

本当に見られたくない情報はレスポンスの検証もしたほうが良いというMEMO

タイトル通り、本当に見られたくない無い要素はrequest specでも検証したほうが良さそうに思ったので、自戒の意味も込めてメモしておきます 想定しているケース 実装イメージ 問題点 対応策 見せたくない情報はマスキングして渡す レスポンスを直接検証して…

OK Computerのヘルスチェックをブラウザで見やすくするGemを作りました💎

OK Computerのヘルスチェックをブラウザで見やすくするGemを作ったので、使い方とかをメモしておきます 作ったGem github.com モチベーション github.com OK Computerはヘルスチェックをしてくれる便利なGemなのですが、Viewがテキスト or JSONのみの用意と…

FactoryBotのinitialize_withを使って初期化時の挙動をfind_or_initialize等に差し替える方法MEMO

一意制約をかけつつ一定の範囲内にある値を扱いたいときにFactoryBotの単純なsequenceでは対応できなくて、いい感じのやり方無いかなと思って調べていたらinitialize_withを使うといい感じにfind_or_initializeに差し替えて一意制約を回避しつつ範囲内の値を…

個人のWebサービスにGA(Google Analytics)を導入して色々トラッキング出来るようにしたMEMO📝

個人のWebサービスでGAでトラッキング出来るようにしてみたので、やったこととか手順とか色々、MEMOしておきます GA(Google Analytics)とは? marketingplatform.google.com ユーザー像を把握。 ユーザー像を詳しく分析して理解を深めましょう。Google アナリ…

Ruby: JSON.parse時に任意のClassのオブジェクトとして取得する方法

JSON.parseの結果は基本的にはHashになると思うのですが、任意のClassのオブジェクトで取得したい場合に、JSON.parseの引数object_classを利用すると簡単に実現出来ることを知らなかったのでメモしておきます やり方は以下の通りでdef []=(key, value)を持つ…