テック

ITサービスの高可用性と耐障害性 (HA/DR) を向上させるには ― 楽天ペイ(オンライン決済)での取り組み② ―

今回は私たちが運営する「楽天ペイ」での高可用性/耐障害性 (以下、HA/DR)を向上させるための具体的な取り組みを紹介していこうと思います。 前回の記事では、私たちが第一弾として「楽天ペイ」という大規模サービスを運営・管理する中で培ってきたアプロー…

ITサービスの高可用性と耐障害性 (HA/DR) を向上させるには ― 楽天ペイ(オンライン決済)での取り組み① ―

今回から2記事に分けて、私たちが取り組んでいる高可用性/耐障害性 (以下、HA/DR) の仕組み作りについて紹介していきます。 今回の記事では、私たちがこれまで「楽天ペイ(オンライン決済)」という大規模サービスを運営・管理する中で培ってきたHA/DRを高め…

ラクマiOSアプリのフルSwift化を約4年かけてやり遂げた話

こんにちは。楽天ラクマ モバイルアプリケーショングループのdarquroです。 今回は「楽天ラクマ」iOSアプリのフルSwift化を、約4年かけてやり遂げた話を書きたいと思います。 ことの始まり 私は2018年10月1日に楽天グループに入社しました。 当時採用面接で…

ふりかえりの大切さ

みなさん、こんにちは。楽天大阪支社でお仕事させていただいているイデルと申します。今回は「ふりかえり」についてお話したいと思います。 数年前、私はソフトウェアエンジニアからプロジェクトマネージャーにキャリアパスを変更し、それから様々なフレーム…

サードパーティーのdependencyを最新に保ち、セキュリティーとメンテナビリティーを担保しよう

ラクマの亀井です。こちらの記事ではサードパーティーのdependencyを最新に保つことの重要性とどうやって最新に保っていくべきかを記載します。 サードパーティーdependencyはすぐに古くなる ほとんどのソフトウェアはサードパーティーdependencyを使います…

業務で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を試…

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

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

ラクマの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の仕組みを利用してログ出力を…

高速にPoCを実行する一手法の紹介

こんにちは、Tetsuです。 アプリ開発に従事している皆様は、日ごろ、上司やビジネス担当者の方々からユーザのニーズへの対応や競合サービスに先んじるために迅速なアプリ開発を求められることがあるかと思います。とりわけ昨今、新型コロナウイルス感染の拡…

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を利用してい…

変化を恐れない組織へ レジャープロダクトを引っ張るYasuの挑戦

レジャープロダクト部は楽天GORA、楽天競馬、楽天競輪、楽天Beauty、楽天totoなどいくつものサービスを抱えています。 それらを引っ張るYasuさんの挑戦とは!?これを読めばレジャープロダクト部についてがわかるはず!

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

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

すべてはビジネスに関わる人のために!CCBDの挑戦

今回はECマーケットプレイスビジネスサポート開発部(通称ECBD) 部長のKaneさんにインタビューをしてきました。楽天市場のビジネスを支えるECBDとはどんな部署なのかご紹介します。

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

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

今の世の中に何か貢献したい! 楽天トラベルのエンジニアたちの奮闘記

今回は、楽天としてコロナウイルスに対して何か世の中に貢献出来る事は無いかという熱い想いで自主的な取り組みを行った楽天トラベルのエンジニア達のレポートです。 彼らがたった数日という短い時間の中で挑戦したものは何だったのかぜひ御覧ください。

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

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

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

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

エンジニアキャリア、どう広げる? 社内転職制度について

皆さん、こんにちは。R-Hack編集室です。 会社に就職して、長く同じ部署に勤めていると「そろそろ他のことにもチャレンジしてみたいな」とか「あそこの部署の仕事に興味があるな」と思うこと、社会人なら誰でも一度はあるのではないでしょうか? 今回は社員…

物流がECの未来を変える! ECロジスティクス開発部

楽天コマーステックでは多くの部署で構成されていますが、今回は、ECロジスティックス開発部の部長Kさんにご自身の経歴や楽天の物流システムについて、どんな人に加わってほしいのかについて詳しくお話をお聞きしました。ぜひ楽天に興味のある方、物流システ…

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

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

楽天最大のお買い物イベント! 楽天スーパーセールの舞台裏

楽天市場の「楽天スーパーSALE」の裏側でエンジニアがどのように活躍しているのかをご紹介します。エンジニアにとっての「楽天スーパーSALE」とは国内最大級のトラフィックに耐えるために改善と挑戦を繰り返す場です。今日はその舞台裏を解説 !

データとチームが財産! データプラットフォームエンジニアって?

みなさんこんにちは、楽天福岡支社でお仕事させていただいているSasamonと申します。 楽天は福岡にも支社があり、そこでバリバリ活躍されているエンジニアがいるんです! 今回はその中の1人、データプラットフォームエンジニアとして活躍されているDaigoroさ…

Episode 03 私の楽天QAチームでの経験

コマースカンパニーでは 「楽天市場」をはじめ「ラクマ」や「楽天ブックス」「楽天ビューティ」「楽天GORA」など 非常に多様なサービスを展開をしており ユーザーの皆様に日々快適に御利用頂く為に、これらのサービスには非常に高い品質が求められます。 我…

Episode 02 圧倒的な成果を達成!MVPサクセスストーリー

コマースカンパニーでは 「楽天市場」をはじめ「ラクマ」や「楽天ブックス」「楽天ビューティ」「楽天GORA」など多様なサービスを展開をしておりユーザーの皆様に日々快適に御利用頂く為に、これらのサービスには非常に高い品質が求められます。我々はこの品…

Episode 01 「顧客不満足度ゼロ」を求め続ける

品質を担保する仕事をクオリティー・アシュアランス(Quality Assurance 以下、QA)と呼んでおり 「QAエンジニア」について 3回に渡って連載させていただきます。 第一回 コマースカンパニー レジャー・サービスプロダクト部 レジャーサービス開発課 サービ…