もふもふ技術部

IT技術系mofmofメディア

Rails

GraphQL RubyでバリデーションエラーをUnion Typeで返す

graphqlでエラーを返す方法はいくつかあり、それぞれメリデメありますが、Unionで返すのが好みです。 例えば、以下のようにmutationで実行時のバリデーションエラーを共通のフォーマットで返すことを考えてみました。 mutation createPost($input: CreatePos…

新規サービスを作るときに使う技術選定

mofmofでは新規サービスをゼロから開発することが多くあります。 その際にshwldがどのように技術選定をしているのかを書いてみます。 こちらの記事がとても参考になる内容で、私なりにも書いてみようと思いこの記事を書いています。 https://zenn.dev/moga/a…

ActionMailboxでRSpecのテストを書く

この記事の内容 ActionMailboxは、Railsアプリでメールを受け取ることができる機能です。 それを応用して、 Railsアプリにメールを送ることで投稿を作成することもできます。 先日ActionMailboxを利用した機能開発中、RSpecで ActionMailboxのテストを書くこ…

既存Railsアプリに後からReactとTypeScriptを導入する

react-rails gemを使う方法 react-rails gemを使わない方法 TypeScriptを導入する 今回は、弊社メンバーが研修時に実装した課題のアウトプットがちょうど良かったので、そこに後からReactとTypeScriptを導入していきます。 この課題は、万葉さんが公開してい…

【Rails】GraphQL爆速入門 サンプルアプリでgraphql-rubyのCRUDをちゃんと理解する

以前は純Railsで開発を行うことが多かったんですが、最近はgraphql-ruby + SPAを採用することも増えています。 フロントの表現力がやっぱり違いますね。最近はリッチな要望をいただくことも多く、うまいこと対応するには都合が良いです。あと作ってて楽しい…

RailsアプリケーションとKintoneを連携する

CMS(顧客管理システム)で一番有名なのはセールスフォースですが、国内製品だとサイボウズが提供する Kintone が有名です。 操作性もよく、個人的にはセールスフォースよりずっと使いやすいんじゃないかと思ってます。 今回は、業務で Rails アプリケーショ…

Payjpを導入したアプリのテストを書いていく

前回の記事ではPayjpを使った定期購入の実装について解説した。そこで今回は、Payjpを使った実装のテストについて書いてみたいと思う。 Payjpは外部APIなので、API呼び出し部分のモックを作ってテストを記述した方が良い。 対象となるアプリ 2つ前の記事で作…

Pay.jpで定期課金を実行する

前回の記事でPayjpを用いた単発決済の実装方法を解説した。 そこで今回は、Payjpで定期課金機能を実装してみたいと思う。 想定 有料会員登録としてカード登録をしないと、主要なサービスが使えないWebアプリを想定する。 以下のような仕様であるとする。 定…

Pay.jpで単発決済機能を実装する

Railsで決済機能を実装する際、決済サービスの候補としてあがるのはだいたいStripeかPay.jpだと思う。 業務で定期講読する商品を扱うことになりPay.jpを使って実装を行なったが、Payjpの定期購入について解説した記事が少なかったので解説してみたいと思う。…

Railsでモデル層からバリデーションを切り出して共通のバリデーションルールを定義する ActiveModel::Validator編

前回の記事では1つの属性に関するバリデーションルールを共通化出来るActiveModel::EachValidatorについて解説した。 そこで今回は、Railsのバリデーションを定義するためのもう一つの基底クラスである、ActiveModel::Validatorについて解説したいと思う。 A…

Railsでモデル層からバリデーションを切り出して共通のバリデーションルールを定義する ActiveModel::EachValidator編

アプリケーションを開発していると、電話番号やURL、カナなど複数のモデルで同じバリデーションを定義していることがある。 上記の例くらいなら、同じバリデーションルールを複数箇所で書いても良さそうだが、変更が生じた時やもう少し複雑なバリデーション…

create済みのモデルのIDをUUIDに変更してみた

Railsアプリへのuuidの適用方法 postgresqlのuuid拡張機能を有効化 initializers内でprimary keyのデフォルト値をuuid化 バージョン スキーマ users events event_participants マイグレーション まとめ Railsアプリへのuuidの適用方法 Railsアプリへのuuid…

Sidekiq実行したらエラーになったので調査して修正したこと

エラー sidkiqで実行した処理 設定確認 ログ確認 推測 対策 参考 エラー Railsでsidekiq使ってるときに以下のエラーが出ました。 could not obtain a database connection within 5.000 seconds これは、使用可能なコネクション数よりも多くの接続を使用しよ…

RailsプロジェクトでSlack通知を実装する

プロジェクトの開発中・リリース直後は想定外のエラーが多発するため、異常はすぐに検知出来た方が開発スピードが上がりますね。 今回はそういったケースでライトにSlackへの通知が出来る、slack-notifierのご紹介です。 gemインストール Gemfileにslack-not…

seed-fuを使って開発・テスト・本番それぞれの環境でのシードデータを作成する

Railsではrails db:seedという便利なコマンドがあり、db/seed.rbにシードデータを入れておけばコマンドを叩いたら勝手にシードデータを作成してくれます。 ただ、1度だけ使うシードデータを作成する場合はいいですが、例えばシードデータを編集して再度実行…

【Rails】Form Objectを使ってModelに依存しないFormを作成する

Railsを使って開発をしている時、1つのフォームで複数のモデルを操作したい場合やそのフォーム専用の処理が必要になることがあります。 Railsではフォームはモデルに依存しており、上記のようなケースが発生した場合通常のMVCだけでは処理が複雑になってしま…

【Railsの便利gem】スキーマ情報をModelファイルにコメントで書き出してくれるannotate

annotateとは バージョン 導入手順 gemインストール annotateの設定 annotateの実行 スキーマ情報 ルーティング情報 まとめ annotateとは アプリケーションの各モデルのスキーマ情報やルーティング情報を、ファイルの先頭にコメントで出力してくれるgemです…

モデルのIDにUUIDを使って玄人感を出す

バージョン UUIDとは何か なぜUUIDを使うのか 注意すべきポイント アプリにUUIDを適用してみる 拡張機能を有効化する デフォルトのキーをuuidにする設定を行う。 モデルの作成 おまけ:関連を付けたい場合 まとめ バージョン Ruby 2.6.3 Rails 6.0.3 Postgre…

MiniMagickで画像合成してみた

用意した画像 やったこと 結果 MiniMagickを使って、画像を生成してみました。 用意した画像 ベース画像 ユーザー画像 フォントファイル やったこと アイコン画像を丸く切り抜く Convertメソッドを使い、既存画像を読み込み加工をして出力します。 # ユーザ…

Heroku x Railsで動的にOGP画像生成してみる

Heroku上のRailsアプリケーションで、OGP画像を動的に生成するための方法をまとめました。 準備 ImageMagick MiniMagick CarrierWave 日本語フォントファイル 実装 やること まとめ 準備 ImageMagick 以前はherokuに別途buildpackを追加する必要があったよう…

RubyMine を快適に扱うためのショートカット30選

JetBrains 製 の RubyMine という高機能エディタを使用する上で特に便利なショートカットをまとめました。 ※ macOS 版に対応したものとなります。 動作確認時のバージョン RubyMine 2020.1.1 Build #RM-201.7223.94, built on April 30, 2020 macOS 10.15.4 …

passwordを後から設定させてアカウントを有効化する[devise]

言語、ライブラリのバージョン Confirmableを使えるようにする viewとcontrollerをカスタマイズする 確認リンクを踏んだ先をpasswordの登録にする passwordを登録させる画面の作成 Routesを独自アクションに対応させる 認証ロジックを入れる How To: Overrid…

メールアドレス以外でサインインできるようにする[devise]

deviseのHow To: Allow users to sign in with something other than their email address, emailアドレス以外でサインインを行う方法について翻訳しつつ実践していきます。 wiki 今回は公式wikiにあるように、usernameというfieldでサインインできるように…

devise sign_in/sign_outのデフォルトルーティングをカスタマイズしてlogin/logoutにする

deviseのwikiにあるHow To: Change the default sign_in and sign_out routes を翻訳、実際に動かしてみる。 通常、deviseを実装した段階では、生成されるルーティングはdeviseがデフォルトで提供してくれるものになります。例えばuserモデルのログインなど…

devise ユーザーのパスワードを自動生成してメールアドレスだけで会員登録できるようにする

deviseのwikiにあるHow To: Automatically generate password for users (simpler registration)をやってみる。 通常、deviseを使った会員登録ではemailとpasswordの入力が必須になりますが、「会員登録時にパスワードを設定しなくてはならない」という仕様…

devise の使い方(Validatable Recoverable Rememberable)

Deviseの使い方(各種オプション編2) devise gemはモジュールの概念に基づいて作成されています。 devise この性質のおかげで開発者は自分のアプリに本当に必要なものだけをピンポイントに導入することが可能です。使用していないコードをアプリに組み込ま…

devise の使い方(helpers, Database Authenticatable, Registerable)

Deviseの使い方(各種オプション編1) devise gemはモジュールの概念に基づいて作成されています。 この性質のおかげで開発者は自分のアプリに本当に必要なものだけをピンポイントに導入することが可能です。使用していないコードをアプリに組み込まずに済む…

devise の使い方(導入からログアウトまで)

deviseは、Webアプリケーションを作成する際にほぼ必ずと言っていいほど必要になる認証系の機能を網羅的に用意してくれるgemです。アカウントの登録やログイン、パスワードの再設定機能、アカウントロック機能等、豊富な機能が利用できます。各機能はモジュ…

Action Mailbox

前回の Action text に続き、今回は Action Mailbox を使ってなにか試してみようと思います。 Action Mailbox も Action text 同様、 Basecamp から移植した機能のようです。 かなりざっくり内容をまとめると、Action mailer では手間がかかったメールの受信…

Rails 6 と Action text を使ってみる

Rails 6 は Beta版に続き、rc1 が リリースされました。Rails 6 では action mailbox, multiple databases, parallel testing... など様々な新機能が実装されていますが、今回は action text を触ってみようと思います。 Action text は、ざっくり説明すると…