ボクココ

個人開発に関するテックブログ

Ruby on Rails

Rails でシンプルな無限スクロール実装

ども、@kimihom です。 久々に無限スクロールを実装する機会が 詠みラボで発生しました。そこで、振り返りがてら、こんな感じで実装するのが個人的に一番シンプルだったコードをご紹介します。 サーバー側実装 俳句(Haiku) をそれぞれ20句ごとに毎回取得し、…

Rails の form_with の submit 時に定義したいオプション

ども、@kimihom です。 Rails の form_with を使っているだろうか?だいぶ前から form 系はフロントエンド側の実装に任せるというのが一般的になりつつあるが、やはり form_with でささっと作れる便利さは大きい。 form_with サンプルコード ja: activerecor…

Rails での N+1 の見つけ方と dependent 指定の選択に関して

ども、@kimihom です。 Rails アプリを作っていて「遅くなったな」と感じる場合、真っ先に原因となりうるのが N+1 なコードを書いてしまっていることだろう。その時の理想の対応は何か、考える機会があったのでブログとしてまとめておく。 モデル例 まずわか…

慣れないインデックス貼り vol.2

ども、@kimihom です。 前回のインデックス貼り に続き、インデックス対応についての追記を記す。 外部キー のインデックスの効果 よく、関連する外部キーにインデックスをデフォルトで貼る書き方がある。 class CreateTweets < ActiveRecord::Migration[5.0…

Rails7 で jQuery をセットアップ

ども、@kimihom です。 Rails 7 がリリースされてから暫く経つが、基本的な部分がまだシェアされてないことが多い。本記事では Rails 7 注目のフロントエンドのセットアップについて記す。 追記 jQuery 自体はこれでインポートできたが、jQueryプラグインな…

0->1 サービス開発者の慣れないインデックス貼り

ども、@kimihom です。 本記事は、普段アプリケーションエンジニアとして 0->1 でのサービス開発をやってきて、クエリ処理が重くなってどうしたものかという状況へ達した際に考えたいことをまとめてみる。 インフラエンジニアか自分でやるか まず、サービス…

SQLの負荷分析と改善

ども、@kimihom です。 今回 SQL の負荷を分析して改善することをしたので、その実施を残しておこう。 パフォーマンス解析 基礎 何かしらサービスをローンチする時点で、パフォーマンス解析するようなサービスを導入することかと思う。 New Relic | パフォー…

ActionText を使う場合の ライブラリロード

ども、@kimihom です。 ActionText の実装をしていて、実際の利用でハマった点をまとめておく。今まで ActionText の記事として2つ書いてあるので、興味があれば読んでみていただけたらと思う。 www.bokukoko.info www.bokukoko.info Webpacker の利用が前提…

Rails でのシンプルな S3 ダイレクトアップロード実装

ども、@kimihom です。 今回はシンプルに S3 にファイルを上げる方法を案内しよう。 Rails 側でファイルアップロードを受ける課題 おそらく多くの Rails デベロッパーは、 画像のサイズ縮小や変換をするプログラムを実行したいがために、一度 Rails 側でファ…

Action Text での Amazon S3 アップロード

ども、@kimihom です。 前回に引き続き Action Text に関して調査を続けている。今回は Amazon S3 へアップロードしたものをテキストエリアの中に表示させてみよう。 Active Storage の設定 Action Text のファイルアップロードは、Active Storage の設定に…

Rails 6 の Action Text を利用してみる

ども、@kimihom です。 前回の Rails 6 の記事では、フロントエンド Webpacker 周りの調査結果を報告した。さて今回はいよいよ私の Rails 6 にしたいメイン目的である Action Text についての調査を報告しようと思う。 Action Text の特徴 Action Text を使…

Rails 6 における Webpacker デフォルト動作

ども、@kimihom です。 Rails 6 が公開されてしばらく経つ。私としては Rails 6 の中でもとりわけ Action Text でクールなテキストエリアを実現したいと思っていので、Rails 6 をゼロから学び始めている。 でも今回は Action Text とは全然関係なく、Rails 6…

Rails における Chrome80 の SameSite 対応

ども、@kimihom です。 明日、2020/02/04 に Chrome 80 のリリースが予定されている。そこで巷で話題になっている SameSite の部分で対応が必要になるケースがでてくる。 ウェブ上で調べても全然その対応方法が出てなかったので、記録として残しておこう。 …

Rails で大量のレコードを並列処理する

ども、@kimihom です。 今回、大量のレコードを一つずつ処理する実装をしたので、その実装方法をまとめておく。 コードの大枠 以下は全ユーザー(User)に紐づいているレコード(Record) に対して処理をするコードとなっている。 User.all.order("id").each do …

Rails Active Record における rewhere の使い所

ども、@kimihom です。 今回は ActiveRecord でもおそらくマイナーなメソッドであろう rewhere を使う機会があったのでメモとして残しておく。 今回の利用ケース とあるデータの取得条件でフィルタリングをして統計として表示するページを想像してみて欲しい…

外部サービスの API で取ってきたデータを一括でDB登録する

ども、@kimihom です。 最近はいろいろな企業が API を提供してくれるようになってきた。外部サービスの API で、例えば顧客情報などを一括で取り込みたいというケースはよくあることだろう。私はこうして実装したということで記事として起こしてみる。 バッ…

Rails コールバックによる S3 事故と対策

ども、@kimihom です。 Rails でコードを書いていたら、きっと一度は書いたことがあるだろう before_destroy で起こりうるリスクと対策について記す。 S3 のドメインが変わるお知らせ 先日、S3 の URL が変更されるとのお知らせが届いた。 dev.classmethod.j…

Ruby on Rails で自前トーストを作るサンプル

ども、@kimihom です。 Rails で開発をしていると、何かしらのメッセージをユーザーに掲示したい時がよく出てくる。 コンタクトを作成しました。 メンバーの招待に失敗しました。 アイテムを更新しました。 こういったときに flash っていう便利なメッセージ…

Ruby on Rails 5.1 から 5.2 へアップデートログ

ども、@kimihom です。 今回は Ruby と Ruby on Rails をそれぞれバージョンアップさせたので、そのログを記そうと思う。 アップデート概要 Ruby と Ruby on Rails をそれぞれアップデート。そろそろ Rails 6.0 も出そうなタイミングってこともあって、定期…

Ruby on Rails の魅力と思想

ども、@kimihom です。 私は Web フレームワークは Ruby on Rails を利用している。かれこれバージョン2.2 の頃から使い続けているので 7年以上になる。そこまでして私が Ruby on Rails を使い続ける魅力について個人的な想いを記していく。 Rails の作者 DH…

今更ながら Rails 5.1 にアップデートした話

ども、@kimihom です。 先日、ようやく Rails 5.1 にアップデートしたので、それについて簡単にまとめを書いていこうと思う。 アップデートの経緯 前までは Rails 4.2.x の最新をアップデートし続けている形で運用していた。 Rails 5 以降の新機能はチェック…

Rails アプリの国際化の実装と考察

ども、@kimihom です。2018年もどうぞよろしくお願いします。 さて、今回は Rails アプリを世界へ向けて展開したい人向けの記事を書いていこう。 基本的な参考資料 まずは Rails の I18Nドキュメント を読むことから始めよう。ここに基本的なことは全て書か…

rails-ujs と form_with の使い方

ども、@kimihom です。 Rails 5.0 までは jquery-rails を使ってフォームやリンクの Ajax 通信を可能にしていたけど、Rails 5.1 からは rails-ujs として切り出され、晴れて jQuery からの脱却を可能にした。 そこで、本記事ではこの rails-ujs と関連深い f…

SaaS における企業毎のデータ管理について

ども、@kimihom です。 SaaS において悩ましいのが、企業毎のデータをどうやって管理していくかという話がある。企業毎にデータは完全に独立しているので、URL やデータそのものも独立している方が望ましいとされる。では SaaS においてデータベースの設計を…

Rails 5.1 アプリを Heroku にデプロイする

ども、@kimihom です。 この記事は Heroku Advent Calendar 8日目の記事です。まだ3枠空きがありますので、Heroku ユーザーの方はぜひご登録を! Rails 5.1 から Yarn のサポートが入り、フロントエンドの JavaScript ライブラリの管理が容易になった。そこ…

Rails 5.1 の First Impression

ども、@kimihom です。 この連休はひたすらプログラミングやってた。そんな中で手をつけ始めた Rails 5.1 について感想を書いてみるとする。こういうちょっとしたことでも記事にできるのがブログのいいところよね。 Yarn マジ便利 JavaScript の パッケージ…

Heroku Addon 「Scout」 の紹介

ども、@kimihom です。 Heroku Addon の1つである Scout はRuby on Rails 専用のメトリクスサービスだ。一般的にこの類の Addon だと NewRelic が一般的だけども、重いしメモリも食うので Scout を使っている。今回はそんな Scout について簡単にご紹介しよ…

Rails 5.1 のフロントエンド周りの所感

ども、@kimihom です。 常に話題に上がってくる Rails のフロントエンド事情だけども、今回 Rails5.1 を色々みた中で自分が感じたことについて書いていく。予め断っておくと、自分もまだそこまでフロントエンドをマスターしている身ではないので間違った考え…

Elasticsearch と Rails のデータ同期方法

ども、@kimihom です。 全文検索の仕組みとして Elasticsearch を使ってサービスを運用している。Elasticsearch と Rails を使っている上で考慮しなきゃいけないデータ同期の方法について、それぞれのメリット/デメリットを紹介した上で最終的な提案まで記す…

Heroku Pipeline にステージング環境を乗せてみた

ども、@kimihom です。 今回はステージング環境と本番環境で Heroku アプリを分けていたものを、 Heroku Pipeline でまとめたのでその手順についてご紹介する。 今まで Heroku Pipeline を勘違いしていたんだけど、ステージング環境の Heroku アプリは Herok…