バックエンド

【SQL】階層図の出力結果をツリー構造に整形する

階層構造のデータをSQLだけでツリー構造に整形出力するマニアックなテクニックについてご紹介します。

CSV 内の改行コードが混在していると CSV::MalformedCSVError が発生する

こんにちは、ryohei515です。 弊社が提供している Re:lation では LINE 等のチャットの CSV エクスポート機能があります。 そこで CSV::MalformedCSVError というエラーが発生することがありました。 結論、掲題の通りの原因だったのですが、エラー調査時に…

synvert-rubyを使ってみる

こんにちは、tsuka05です。 synvert-ruby はRubyのコードを構文解析して、自動的に書き換えを行なってくれるツールです。 様々なsnippetが用意されていて、決まりきったコード書き換えが簡単にできます。 synvert-ruby -l で、snippetを一覧することができま…

【SQL】ウィンドウ関数で遊んでみる

ウィンドウ関数っていいよね!データ分析には欠かせない!

gsub における特殊変数の扱いとその回避策

完璧なソースコードなどといったものは存在しない、完璧な絶望が存在しないようにね。 こんにちは!ご無沙汰の hikaru-kimi です! みなさまは Ruby でどのように文字列置換を行っていますでしょうか? 最初に一致したもののみ置換する String#sub や、該当…

ActiveRecord の select メソッドで SQL 発行回数を減らす

こんにちは、ryohei515です。 Ruby on Rails で、ActiveRecord::QueryMethods の select メソッドがありますが、使ってますか? 私はあまり使ってませんでした。 というのも、大抵のケースで pluck を使うほうがパフォーマンス的にメリットが大きいと思い、…

has_oneを使って最もXXXのデータを取得する

has_manyの関係性にあるデータを特定の条件で一意に絞り込みたいケースがあると思います。 今回はhas_oneを使って1対多のデータを1対1に関連付けする内容について書きます。 扱うデータ 本の貸出を題材に、著者(Author)、図書(Book)、貸出履歴(Rental)…

【SQL】再帰クエリーで組織図を表現

何階層もある組織図をSQL 1回で取得する方法をご紹介します。再帰クエリー便利すぎ。

【SQL】ORDER BY で並び替える順序を指定したい

こんにちは ryohei515 です。 ORDER BY で項目を並び替えられることは皆さんご存知かと思いますが、この並び替えの順序を指定したいこともあるかと思います。 例えば、検索のテキストボックスで部分一致検索を実現したいとき、完全一致したものを最初に持っ…

url_for()が便利だった!

こんにちは!HaraShoです。 今回は Railsの url_for()が個人的に便利だった話について書きます。 url_for | Railsドキュメント どう便利だったかというと、任意のメソッドを共通でもつControllerが複数ある場合、Controllerを意識せずにURLを生成できる点が…

Ruby と JavaScript の falsy な値についてまとめてみた

みなさんこんにちは!バックエンドが嫌になるとすぐにフロントエンドに逃げようとする hikaru-kimi です! 私はバックエンド・フロントエンド双方を業務で日常的に実装しているのですが、バックエンドとフロントエンドとで文法や記法がごちゃまぜになってし…

PostgreSQL での出力結果を見やすくする方法

皆さんこんにちは!来年入社の新卒メンバーのメンターを任され日々奮闘中の hikaru-kimi です! 本日はちょっと毛色を変えて、PostgreSQL の出力結果を見やすくする方法について書きたいと思います! 弊社インゲージのサービス「Re:lation」では、DB に Post…

ECS のSidekiqワーカタスクをSidekiqのキュー内の滞留ジョブ数でオートスケールする

id:kizashi1122 です。お久しぶりです。 前提 弊社では Rails 製のサービスを運用しています。非同期ジョブの処理には Sidekiq を使っています。 そしてそのジョブを処理するワーカは AWS ECS で Fargate で動かしています。 ワーカは役割ごとにいくつかのEC…

Ruby Set を Hash で置き換える

こんにちは、masm11 です! みなさんは、Ruby で集合を表現する時に、何を使いますか? Set を使いますか? Set って内部的には Hash を使ってますよね。そう、Hash でも実現できます。 今回は、Set を Hash で置き換えた話をします。 Set とは Set とは、よ…

Ruby や Rails の Deprecation Warning を Slack に通知する

どうも @shutooike です! インゲージには "内部品質の担保/向上" をミッションとしたQAチーム *1 があります。 今回は Ruby や Rails のバージョンアップ対応で大事な Deprecation Warning を Slack に通知するようにした話です。 こんな感じで Slack に飛…

Rails の面白いコードやコメントを集めてみた

みなさんこんにちは! サーバとフロントと、いずれが本職か分からなくなってきた hikaru-kimi です! 最近 JavaScript 関連の記事が続きましたので、原点回帰ということで Rails についての記事を書くことにいたしました! 好評シリーズ「Rails のソースコー…

GitHub Actions で差分ファイルのみ RuboCop を実行する

こんにちは @shutooike です。 GitHub Actions は実行時間の従量課金です。 コスト削減のため Pull Requet の差分ファイルのみ RuboCop を実行するようにしました。 完成版 on: - pull_request env: GH_TOKEN: ${{ github.token }} GH_REPO: ${{ github.repo…

rubocop の --force-exclusion オプションは Exclude だけじゃなく Include も見てくれる

どうも @shutooike です。 結論はタイトルのままです。 --force-exclusion とは Force excluding files specified in the configuration Exclude even if they are explicitly passed as arguments. Basic Usage :: RuboCop Docs 引数として明示的に渡された…

Rails のソースコードを読んでみた

こんにちは!趣味と実益を兼ねてプログラマをしている hikaru-kimi です!! 普段、皆さんはどのようにプログラミング学習をされてますか? ご自身でアプリケーションを作成されたり、本を読んで知識を身に着けたり、人それぞれだと思います! かく言う私は…

in_batches では order できない!?

はじめまして!サーバサイドエンジニアと見せかけてフロントエンドエンジニアと思いきや、やっぱりサーバサイドエンジニアの hikaru-kimi です! 技術ブログ初投稿です!どうぞお見知りおきください! 今回のテーマは、Ruby on Rails の ActiveRecord::Batch…

nilガードについて

こんにちは!odaです! Rubyを使っていると、よく次のようなコードを見かけます。 foo ||= 10 これは「nilガード」と呼ばれるイディオムで、私自身は「fooにnilが入って欲しくないときは、こう書くと初期値が設定できるんだなー」ぐらいの認識で使っていまし…

数秘術の誕生数を SQL で分析(後編)

数秘術の誕生数を題材にSQLで統計を取ってみます(後編)。各誕生数の割合を算出するのがゴールです。せっかくなので年代別に統計を出しましょう。

キーワード引数と通常の引数の分離

こんにちは!oda@エンジニア1年目です! 先日、Ruby2.7からRuby3.0での変更点について調べていました。 今回は、その中でもバージョンアップ時にエラーを引き起こす原因となる「キーワード引数と通常の引数の分離」をテーマにしたいと思います。 バージョン…

FactoryBot内でDBに保存されているデータが使いたい

こんにちは!oda@エンジニア1年目です! 先日、FactoryBotでテストデータを作成する際にDBに保存されているデータを使いたかったのですが、方法がすぐにはわかりませんでした。 今回は、その方法について調べた内容を具体例とともにまとめました。 事前準備 …

数秘術の誕生数を SQL で分析(前編)

数秘術の誕生数を題材にSQLで統計を取ってみます。各誕生数の割合を算出するのがゴールです。せっかくなので年代別に統計を出しましょう。

protect_from_forgeryについて

こんにちは!oda@エンジニア1年目です! 以前の記事で、今後の課題としていたprotect_from_forgeryについて調べたので、今日はその内容について書きます。 調べる中で、コントローラーにprotect_from_forgeryを追加すればActionController::InvalidAuthentic…

Ruby の Enumerator を dis る

こんにちは、masm11 です。 Ruby には Enumerator というクラスがあります。 Rails で、 self.response_body = Enumerator.new { ... } とすると、response body をその場で生成するのでなく、 あとで Enumerator のブロックが呼び出され、そこで生成させて…

ActionController::InvalidAuthenticityTokenの解消

こんにちは!oda@エンジニア1年目です! 最近、インゲージ入社前に個人的に作成したRailsアプリを、業務で学んだことを活かして作り替えるということをやっていました。 今日は、その中で発生したエラーについて書きたいと思います。 どんなエラーが発生した…

`rbenv install` で BUILD FAILED

こんにちは、ryohei_515 です。 Ruby を扱う開発者であれば、rbenv を扱う機会があると思います。 今回ローカル作業用のプログラムを改善しようと思い、Ruby の 2.7 系の最新のバージョンをインストールしたのですが、 BUILD FAILED とエラーが出たので、対…

noneメソッドを通して学んだこと

こんにちは!oda@エンジニア1年目です! 先日、Railsで空のモデルオブジェクトを取得したいということがありました。 今日はその時に学んだことついて、書いてみようと思います。 事前準備 今回はBookモデルを例に進めていきます。 Bookモデルには、次のデー…