patorashのブログ

方向性はまだない

Ruby

mutationでバルク処理をする場合のアプローチ

mutationでデータを更新するGraphQL APIを作りました。しかしそのAPIが時々しか呼ばれないならいいのですが、頻繁に何度も呼ばれるケースだとAPIのへのアクセスが複数回になり無駄が多いので、バルクアップデートみたいなことはできないか?と指摘を受けまし…

Mojaveでrailsを起動するとpgでセグメンテーション違反になる場合がある

開発マシンを新しいMBPに変えたと同時にMojaveになっていたのですが、そこで開発していると、時々Railsが全く起動しなくなりました。rails consoleとかは問題ないのですが、rails serverすると落ちる。しかもエラーメッセージがあまりにも長いので、標準エラ…

Herokuでpuma_worker_killerを適切に設定する

昨年、こんな記事を書いていました。 patorash.hatenablog.com これで設定できていたと思ったのですが、アクセスが集中したときにワーカーの再起動が起きず、スワップが発生してR14(メモリ関連のエラー)が頻発していました。このときに行った設定はどうも一…

RailsにPR送ったらマージされた

Railsに含まれているgem web-consoleに自分のPRが取り込まれた github.com 感動を残しておくためにブログに書いとく。 事の始まり 先日、Rails 6.0.0 rc1でrails newして、ごにょごにょと進めていたら、ログに以下のメッセージが出ていた。 Cannot render co…

RubyでUTF-8のCSVをExcelに変換するコマンドを作った

お客様や社内の他の部署のメンバーとファイルのやりとりをすることってあると思うのですが、いつも大変なのが、CSVファイル。HerokuのDataclipsがバージョンアップされてExcel形式でダウンロードできなくなったので、仕方なくCSVでダウンロードして、Excel起…

RubyKaigi2019に参加してきた

元号が令和になりました。GW楽しんでいますでしょうか? さて、10日以上過ぎてしまいましたが、4月18日~20日に福岡で開催されたRubyKaigi2019に参加してきましたのでそのことについて書こうと思います。 弊社からは私を含む3名が参加しまして、岡山から車で…

GraphQLでWebAPIを作っている

自分が担当のプロダクトのWebAPIを整理していかんとほんまヤバいなぁ〜と思いつつ、数年過ごしていましたが、ここ最近で急激にGraphQL熱が湧き上がり、今お試しで実装していってる最中です。 ビビッときたのは、@gfxさんの書かれたGraphQL徹底入門の記事から…

gemのCIをTravisCIからCircleCIに変更した

gem imyouのCIをTravisCIからCircleCIに変更した。 理由は単純で、普段からCircleCIを使っているので、CIの構築がやりやすいから。TravisCIは滅多に使わないのでわからなくなることが多く、それがストレスだった。他のgemもCircleCIに変更していこうと思うが…

Ruby2.6の関数合成で遊んでみた

Ruby 2.6が出て2ヶ月が経過しているものの、まだ触ってなかったので新機能を調べていたら、関数合成ができるようになっていたのを知った。 techlife.cookpad.com これを使えば多少の加工だったらmapを2周したりしなくて済むんじゃないか?と思って実験してみ…

1つのspecファイルをparallel_testsで並列処理する方法

parallel_testsでテストの並列化していくのが好きなのですが、まだまだ課題に思っていたことがありました。それは、テスト対象ファイルがCPUコア数より少ない場合、フルに並列化できないこと…。 つまり、CPUコア数が4つで、テスト対象ファイルが1つの場合、1…

CircleCIからテストが失敗したファイル一覧を取得するRails Runner作った

表題の通りですが、作りました。 CircleCIで失敗したテストをローカルで流したいのだけれど、わざわざCircleCIのページを見に行くのもあれだし、どうせならガバッと実行したいな〜と思ってCircleCI APIを叩いて取得できるんじゃないかな?と思って調査してみ…

ActiveJobのテスト周りの見直しで学んだことのメモ

最近テストが不安定になって、その修正をしていっていたらActiveJobが絡むあたりがまた不安定になったので原因を探ろうとしたのだけれど、ActiveJobのテストの設定周りなんて久々すぎて忘れまくっていたのでここで一旦整理しておく。 テストでActiveJobを同…

rake taskで実行確認をとるためにhighlineを使う

highlineという対話式のCLIを提供するgemがあります。 github.com rake taskで検証用データの自動生成を行いたかったのだけれど、検証用なので本番環境で実行されたら困ります。 そこで、本当に実行するか確認を取るようにしたかったので、今回はこれを使い…

配列に同じ要素が何個あるかを数える

先日、会社のチャットワークでそういう話題が出て、いろんな方法があることを知った。 1. array.count(item) l = [1,2,2,1,3] l.uniq.map{|item| [item, l.count(item)]}.to_h 配列の変数のcountメソッドの引数に値を渡したら同じ値をカウントしてくれるって…

ニックネームを管理するgem imyou(異名)をリリースした

仕事で使うためにgemを作ったったという話です。 自分が担当している製品は、情報を収集して、それを集計して…みたいなことをよくやるのですが、その時の課題が『表記揺れ』だったりします。よくありますよねー。ASUSのことをどう読むのか?みたいな問題。い…

ActiveRecordのscopeの使い方について後輩に説明した

この前、後輩のPRのレビューを行なっていたら、scopeの使い方に一貫性がなかったので、これは説明資料を作っておいたほうが後々にも使えていいなと思ったので、スライドを作っておきました。 docs.google.com ここ最近プレゼンテーションzenを読んでいたので…

CircleCIのworkflowを使ってbundle updateのPRを自動化する

以前にHerokuとCircleCIを使ってbundle updateのPRの生成を自動化していました。 qiita.com しかし、最近はCircleCIのworkflowを使えばHerokuを使わずともCircleCIのみで完結しそう!ということだったので調査してみました。 方法が公開されていた circleci-…

RubyKaigi2018に行ってきたので社内報告会を行った

今年は久々にRubyKaigiに参加しました。場所は仙台。参加費は会社から出してもらえるのでありがたい〜。とても刺激を受けた3日間でした。 戻ってきて早速、社内報告会を行いました。ただし、英語力が乏しいのと、Ruby自体の実装とかCの話とかは本当によくわ…

並列処理でActiveRecordの処理時間を短縮する

ここ最近は並列化による処理速度アップを色々試しています。 Railsプロジェクトのデータに少々不備があることに気づいたので、それを修正するために該当データを抽出しようと思って雑にループを回したら、データ量が多いせいか、全然終了しませんでした。業…