ラクマ

業務でSwiftUIを使って画面構築してみた話

業務の中でSwiftUIを使って画面構築出来る機会がありましたので、実際に構築し終えての所感をまとめておきたいと思います。 やったこと 昨年、アプリの対応バージョンがiOS13以上となったので、SwiftUIが導入できるようになりました。 ちょうどUITableViewCo…

Compositional Layoutsを使ってラクマのiOSアプリを改修した話

前書き 初めまして、ラクマのTsurutaです。 ラクマのアプリでは「保存した検索条件」の一覧が、ホームのタブから見られるようになったことをご存知でしょうか? この画面を構成するのにあたり、ラクマではiOS12以下のサポートを行っていないため、iOSの新し…

CameraXへの移行とその経緯

こんにちは、ラクマで主にAndroidを担当している@shin_nosakaです。 ラクマAndroidでは、v7.34.0でバーコード出品の機能で使用されるCamera APIをCameraXへの移行を行いました。 今回は、Android界隈では鬼門と言われる、ラクマでのカメラ機能の実装と、Came…

iOSのAPIリクエストのCombine実装

みなさんこんにちは。ラクマでiOSエンジニアをしているdarquroです。 ラクマは去年12月のリリースでサポートOSをiOS13以上にしました。 それに伴い、Combine Frameworkの利用もプロダクションコードに本格導入しました。 ラクマiOSアプリのアーキテクチャはM…

E2Eテスト: Selenium Gridを試す

はじめに こんにちは、ラクマの@itinaoです。 E2Eテストについて、概要からお手軽に試す方法までを全5編で記載しています。 E2Eテスト: 導入の必要性・何を導入するのか E2Eテスト: TestCafeを試す E2Eテスト: Github Actions上でTestCafeを試す(PCブラウザ…

E2Eテスト: Github Actions上でTestCafeを試す(モバイルブラウザ編)

はじめに こんにちは、ラクマの@itinaoです。 E2Eテストについて、概要からお手軽に試す方法までを全5編で記載しています。 E2Eテスト: 導入の必要性・何を導入するのか E2Eテスト: TestCafeを試す E2Eテスト: Github Actions上でTestCafeを試す(PCブラウザ…

E2Eテスト: Github Actions上でTestCafeを試す(PCブラウザ編)

はじめに こんにちは、ラクマの@itinaoです。 E2Eテストについて、概要からお手軽に試す方法までを全5編で記載しています。 E2Eテスト: 導入の必要性・何を導入するのか E2Eテスト: TestCafeを試す E2Eテスト: Github Actions上でTestCafeを試す(PCブラウザ…

E2Eテスト: TestCafeを試す

はじめに こんにちは、ラクマの@itinaoです。 E2Eテストについて、概要からお手軽に試す方法までを全5編で記載しています。 E2Eテスト: 導入の必要性・何を導入するのか E2Eテスト: TestCafeを試す ← 今回はココ E2Eテスト: Github Actions上でTestCafeを試…

E2Eテスト: 導入の必要性・何を導入するのか

はじめに こんにちは、ラクマの@itinaoです。 E2Eテストについて、概要からお手軽に試す方法までを全5編で記載しています。 E2Eテスト: 導入の必要性・何を導入するのか ← 今回はココ E2Eテスト: TestCafeを試す E2Eテスト: Github Actions上でTestCafeを試…

ラクマで2ヶ月間のインターンをしてきました!

(※この時だけマスク外して撮影しました) こんにちは。kagaffyです! 2021年1月 ~ 3月でラクマのiOSエンジニアとして働かせていただきました。実はラクマでは初めてのインターン生だったらしいのですが、みなさんの親切なご対応もあり、のびのびと開発に集中…

ラクマのAndroidアプリの検索オートコンプリート機能を改善した話

自己紹介 はじめまして。ラクマでAndroidエンジニアをしている者です。 趣味は筋肉トレーニングです 環境 Android Studio 4.1.1 記事の目的 ラクマAndoridは、2014年から続くサービスのため、レガシーなコードもいくつかありますが、基本的なアーキテクチャ…

RSpecの書き方で最近悩んだこと3つとその解決法について

こんにちは、冬になると首がつりやすくなるラクマの高橋です。 ラクマではRubyを主に使って開発しており、テストフレームワークはRSpecを採用しています。 RSpecの書き方について、最近躓いた3選を今回はお届けします。 検証環境 ruby: 2.6.5 rails: 6.0.3.…

Rails における gem へのモンキーパッチの方法をいくつか試した話

初めまして、ラクマでサーバサイドエンジニアをやっているtatsumiです。 普段は業務で Ruby on Railsを使っています。 業務で、サードパーティー製のgemのモンキーパッチを行ったのでいくつか方法を紹介しようと思います。 参考文献 この記事を作る上で、参…

Rails の複数バージョンで gem をテストするのに appraisal を導入した話

こんにちは。ラクマの豊永です。 ラクマでは複数のリポジトリに分けてソースコードを使っており、それぞれのリポジトリが共通して利用している社内gemがあります。 最近、Rails Upgrade のプロジェクトをやったのですが、そのとき困ったことがありました。 …

Rails環境にESlintとSaddlerでassets/javascriptsを自動でチェックさせる仕組みを作った話

こんにちは、ラクマのKeitaです。 Webアプリケーションでは実装初期にフロントエンド周りの設計やコーディングルールの取り決めをしなかったことによりレガシーとなってしまったJavaScript達に目を向けなければならない時があると思います。 今回はそんなレ…

Railsのfind_eachやfind_in_batchesでorderにid以外を指定したい場合の解決方法

はじめに はじめまして!ラクマの小田です。 大量のデータにアクセスして処理を行う場合、 メモリ不足で処理が中断されないよう、少しずつメモリに展開したい 途中で処理が中断されても問題ないよう、一定件数ごとにコミットをしたい と考えることがあると思…

iOSのセミモーダル/ハーフモーダルを最小限の機能で実装するには

みなさんこんにちは。ラクマでiOSエンジニアをしているdarquroです。 今回はiOSアプリの、セミモーダル/ハーフモーダル(以降セミモーダル)の実装について紹介したいと思います。 はじめに 昨今のアプリではセミモーダルを用いたUI/UXが主流となってきまし…

RailsのCurrentAttributesを使ってX-Request-IDでnginx(Webサーバ)とunicorn(アプリサーバ)のログを追えるようにする方法

動作確認したRailsのバージョン 6.0.3.4 よくある話として こんにちは、ラクマのshoです。 NginxなどのWebサーバのログとunicornやpumaなどのアプリサーバのログを同じIDで検索するため、X-Request-IDをアプリサーバのログに仕込んだりします。Railsに予め用…

Rails の cache ストレージで Active Record のオブジェクトを入れると事故りやすいと思う件

こんにちは。たびたび、Rails の cache に悩まされているラクマの豊永です。 今回、Rails のキャッシュ機構で、Active Record のオブジェクトを保存すると "色々、大変なことがあるぞ" ということについて書いていきたいと思います。 ちなみにここでいうキャ…

UIButtonのtitleLabelとimageViewを左右逆に配置する

はじめまして。ラクマでモバイルエンジニアをやっているkurapyです。 iOSアプリを作るうえでよく利用されるUIButtonのimageViewは左、titleLabelは右に配置されるのが一般的です。 その配置を逆にしようとした時に少し苦戦したので、どう対応したのかをお話…

サーバーサイドエンジニアがKubernetesに入門してみた

はじめに こんにちは。ラクマでサーバーサイドエンジニアをやっているYuです。 このあいだ半年ぶりに出社したら、強いノスタルジーを感じてしまいました。 業務時間の10%を委員会活動に使えるのですが、私は半年以上KubernetesなどのCNCFのプロジェクトを触…

RailsのLogSubscriberの仕組みを利用した不要なログ出力を止める方法

こんにちは、ラクマのshoです。 Ruby on Railsはデフォルトでいろいろなログを出力しています。Railsで作ったサービスを運用していると、出力を止めたいログも出てくることと思います。 本記事ではRuby on RailsのLogSubscriberの仕組みを利用してログ出力を…

Rspecの書き方についてディスカッションしました(nikotama.rb #11)

こんにちは、ラクマでサーバーサイドエンジニアをやっている岸です。 突然ですが、楽天ではひっそりとRubyコミュニティを開催しています。正しくは、楽天所有のコミュニティというよりは、社内で業務内/業務外限らずRubyを触っている人たちが集まって、社外…

actionがrenderするファイルを自動で分岐させる

こんにちは。ラクマの岸です。 ラクマでは、既存Webフロントエンドをよりモダンな技術にリプレースしようという動きが加速しており、サービスが発足した2012年から使われているjQueryベースのフロントエンドをVue.jsに置き換えようとしています。 www.wanted…

Redashを活用した見える化と検知自動化のすすめ

こんにちは。はじめまして。 ラクマでサーバーサイドエンジニアマネージャー的なことをしている iku です。 コロナ渦の環境で遠出もしづらい今日このごろ。 最近のブームは各地の名物グルメのお取り寄せ。牛タン・餃子に続いて今週は馬刺しがやってきます。 …

Auroraのフルスキャン検索をAthenaでサクッとやってみた

こんにちは、ラクマでサーバサイドエンジニアをやっている飯塚です。 最近は、バーピーチャレンジというダイエットトレーニングをやり始めました。1日たった4分の運動で済むと聞いてやり始めたのですが、、、自分にはかなり過酷です。ご興味ある方、是非やっ…

MySQL5.6のオンラインDDLでメタデータロックがかかった話

MySQLのオンラインDDLを実行する際にメタデータロックがかかってしまい困ったので、オンラインDDLとメタデータロックについて調べて手元で試したことをまとめました。 MySQLのバージョンは 5.6、ストレージエンジンは InnoDB です。

HubotをTypeScriptで書く

こんにちは、ラクマの岸です。 最近はマネージャ業の比率が多く、エンジニアリングの比率も下がってしまっているのでたまにこうしてひっそりと開発を楽しんでいます。 さて、ラクマではリリースオペレーションの一部にSlackとHubotによるChatOpsを利用してい…

小数計算で発生する誤差とRubyでの対応方法について

こんにちは。ラクマでサーバーサイドエンジニアをやっているYuです。 最近、久しぶりの外出で日焼け止めを忘れて肌が赤くなりました。 みなさんは気をつけてください。 今回は、小数点を含む計算で発生する誤差と、Rubyでの対応方法についてお話したいと思い…

ラクマはなぜR-Hackで連載することを決めたのか? 連載担当者に真相を聞いてきた

皆さん、こんにちは。R-Hack編集室です。 R-Hackでは2020年1月よりラクマの開発エンジニアによるテック記事の連載がスタートしています!他社のオウンドメディアでも、エンジニアが自社技術やその開発手法を開示しているものがありますが、様々な技術内容が…

データの一意性を保証するとき、データベース側で Unique 制約をつけた方が良さそうな件

こんにちは。競プロで壁に跳ね返され続けているラクマの豊永です。 みなさんは、どんなときにデータベースに Unique 制約をつけるでしょうか。 私は過去に先輩とこんなやりとりをしたことがあります。 開発で新規追加するテーブル設計のレビューを受けている…

rails x puma-dev x puma のサーバ環境について

こんにちは。 ラクマでサーバーサイドエンジニアをやっている zoe です。 最近はスニーカーを磨くのが趣味になっています。 今回は、rails x puma-dev x puma のサーバ環境について記載してみます 元々はローカルの、どうにも調子が悪い。 何かしらのタイミ…

MySQL で ON DUPLICATE KEY UPDATE を使ってたら、カンスト(カウンターストップ)した話

こんにちは。日焼けしやすいラクマの豊永です。 いきなりですが、MySQL の INSERT ... ON DUPLICATE KEY UPDATE 構文 をご存知でしょうか。 大量のデータを1度に INSERT, UPDATE するという構文です。 ラクマのあるシステムで、1件ずつの処理だと処理時間的…