Uzabase Tech Blog

SPEEDA, NewsPicks, FORCASなどを開発するユーザベースの技術チームブログです。

Kubernetes で運用する JVM アプリケーションの OutOfMemoryError に備える

こんにちは。SPEEDA 開発チームの old_horizon です。 JVM アプリケーションの運用について回るのが、OutOfMemoryError (以下 OOM) への対処です。 しかし実際に発生した際に、適切なオペレーションを行うのは意外と難しいのではないでしょうか。 特に本番環…

Android Studioに入門しよう ~UI・レイアウト編~

こんにちは。SPEEDA開発チームの佐藤です。 今回はAndroid Studioに入門しようということで、 初心者向けに簡単な使い方から、今回は主にUI部品・レイアウトについて紹介したいと思います! Android Studioとは? JetBrains社のIntellJ IDEAをベースとしたAn…

Smalltalkで『オブジェクト指向設計実践ガイド』の「第3章 依存関係を管理する」をハンズオンしたら快適で楽しかった

今日は。 SPEEDA を開発している濱口です。 前回の続きです。趣旨も同じ。 『オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方』のサンプルコードを Ruby から Smalltalk に翻訳しながら読み進めることで、ただ…

フロントエンドのコンポーネント設計で気をつけているn個のこと

はじめまして、昨年の12月に入社しました根岸です。 UZABASEに入社する前はフロントエンドエンジニアとして働いており、ここ1年間くらいはReactとTypeScriptの開発ばかりやっていました。 今回はフロントエンドのコンポーネントを設計するときに気をつけてい…

Mockitoを使ってDartでのTDDを加速させよう

初めて会社のブログに書きます。SPEEDA事業でCTOをしている林です。 TDDをこよなく愛する身として今日はDartでTDD、そしてテストの独立性を担保していく上で欠かせないMockライブラリーのMockitoについて書こうと思います。 Mockitoとは Dart開発チームが作…

方法より原理 〜正規化ルールとリレーショナルモデルについて〜 【実践編】

RDB

今日は。 SPEEDA を開発している濱口です。 理屈編では、まずリレーショナルデータベース(以下、RDB)の論理設計やその後において、 正規化ルールを運用する難しさについて述べました。 主な要因として、 例えば正規化を一度完了したテーブルに対し SELECT …

Ktor で小さな API を作る

こんにちは。SPEEDA 開発チームの緒方です。 システムをマイクロサービスで構成するメリットのひとつに、採用する技術にバリエーションを持たせることができるという点が挙げられると思います。 実際、SPEEDA でも様々な言語・フレームワークを利用してマイ…

Sealed Secretsを利用したKubernetes Secretリソースのセキュアな管理

はじめに はじめまして、UZABASE SPEEDA SREの鈴木(@sshota0809)です。 今回は、Sealed Secretsを利用したKubernetesのSecretリソースをセキュアに管理する方法を紹介します。 目次 はじめに 目次 TL;DR Sealed Secretsとは 概要 アーキテクチャ インストー…

方法より原理 〜正規化ルールとリレーショナルモデルについて〜 【理屈編】

RDB

今日は。 SPEEDA を開発している濱口です。 アプリケーションデータの永続化を担うデータストアには様々な選択肢があります。 その1つとして、リレーショナルデータベース(以下、RDB)がありますが、 RDBを選択した場合、データの容れものとしてリレーショ…

GraalVMに入門する

はじめに はじめまして、2019年11月に入社しましたヒロオカ(@yuya_hirooka)です!! 先日、同僚との雑談の中でQuarkusのNative Image化が話題に挙がりました。その際に「そういえば、GraalVMとかNative Imageってよく聞くけどあまり知らないなぁ...」と思い…

Smalltalkで『オブジェクト指向設計実践ガイド』の「第2章 単一責任のクラスを設計する」をハンズオンしたら快適で楽しかった

今日は。 SPEEDA を開発している濱口です。 前回はテスト駆動開発(TDD)を習得するためのハンズオンを行いましたが、今回はオブジェクト指向設計(OOD)です。 SPEEDA は複雑なビジネスロジックから成っており、開発では複雑で多くのコミュニケーションが発…

ElixirライブラリのFlowを使ってAPIを優しく呼び出す

こんにちは。SPEEDA開発チームの上村です。 先日同僚が書いたElixirのコードを眺めていた際に、とあるバッチ処理内でback-pressureを用いてAPIサーバを優しく呼び出している処理を見かけました。 そのコード内で用いられていたライブラリを調べてみるとなか…

Smalltalkで『テスト駆動開発』の「第I部 多国通貨」をハンズオンしたら快適で楽しかった

今日は。 SPEEDAの開発をやっている濱口です。 SPEEDA開発チームではテスト駆動開発(TDD)、ペアプログラミングを徹底しています。 だからなのか、『テスト駆動開発』はすごく楽しく読めました。 今回ハンズオンを行った「第I部 多国通貨」でも、ペアプロをし…

Go言語でオブジェクト指向プログラミングの基本(型編)

こんにちは、SPEEDA開発チームの @tkitsunai です。 最近リリースされたプロダクションコードにようやくGo言語が採用されました。嬉しい。 今回はGo言語でオブジェクト指向プログラミングで型表現についてのテクニックや考え方の基礎を紹介します。もっとGop…

Kotlinを3ヶ月書いて感じたJavaとの違い

はじめに SPEEDA PDT歴3ヶ月の相川です 今回はJavaを2年くらい書いていた私が、3ヶ月間で感じたKotlinの特徴を列挙していこうと思います Kotlinの特徴 型推論 データクラス nullable 検査例外の話 returnを明示的に書かなくても良い 拡張関数 リスト操作の評…

Gaugeのsetupとteardownステップを用いて効率的に読みやすいテストを書く

こんにちは!SPEEDA開発チームの工藤です。 大分時間が開いてしまいましたが、Gaugeシリーズの第四回目です。 今回はe2eテスト書く際には必須であろうSet Up/Tear Down Stepsを、Gaugeではどのように実現できるのかをSPEEDA開発チームでの実例も交えてお伝え…

KotlinのCoroutineを用いた,外部API呼び出しの並列数を指定できるライブラリを作成した話

KotlinのCoroutineを用いた,外部API呼び出しの並列数を指定できるライブラリを作成した話 ユーザベースインターンの原田です.大学院で研究しながら京都でユーザベースのインターンをさせて頂いており,今回初めてブログを書かせて頂きます! 題名にある通…

ReactとReactHooksを使って、Flux的なアーキテクチャを実現する

こんにちは。SPEEDA開発チームの冨田です。 昨今のフロントエンドでは、Fluxというアーキテクチャが利用されることが多くなってきています。SPEEDAでもVueを使っている画面がありますが、そこではVuexというVue向けのFluxライブラリで状態管理をしています。…

pytest-mock使ってハマったこと

こんにちは。 SPEEDA開発チームの掛川です。 現在、私が参画しているプロジェクトではPythonを使ってサービスの開発を行なっています。 私自身、Pythonを書くのは今回が初めてなのですが、 テストを書く際にハマったことについて記事にしていきたいと思いま…

ペアプロと育休の取得しやすさの関係について

こんにちは。SPEEDA開発チームの鈴木です。 昨年一児(娘)の父になりまして、凄い勢いで変化していく様子に喜んだり困ったりしながら過ごしております。 色々できることが増えると嬉しいのですが、それは同時にいたずらの幅が広がることも意味するんですよ…

Ringアプリケーションで例外をいい感じにハンドリングする方法(Ductでの解説も含む)

こんにちは!こんにちは!SPEEDA開発チームのあやぴーです。 社内のClojureを使ったAPIにおいて、「例外をうまくハンドリングしたいんだけど…」という話が出てきたので、今回はRingアプリケーションにおける例外のハンドリング方法について解説します。また…

【kubernetes / Helm】大量のCronJobに悩む貴方に送るプラクティス

はじめに こんにちは! UZABASE SPEEDA SRE teamの生賀(@skikkh)です。 最近あった嬉しかったことは、自分が翻訳した日本語がkubernetesのCronJob - Kubernetesページに反映されていたことです。 閑話休題、弊社SPEEDAサービスでは大量のバッチジョブがHinem…

XP祭りの裏側 〜大規模イベントの運営ってどんなことやるの?〜

こんにちは!SPEEDA開発チームの斎藤です。 先月9月21(土)に開催された開発者向けイベント「XP祭り」は皆様ご存知でしょうか。 今回は運営メンバーとして「XP祭り」に関わり、思いきりお祭りを堪能した私の視点から 運営ってどんなことしてたの?(大変なの…

【Clojure】Ductで始めるWebAPI開発

こんにちは!!SPEEDA開発チームの岡村です!! 私たちの開発チームでは、先日チームメンバの野口が書いたこちらの記事に書かれているように、チームメンバーの入れ替えが頻繁に行われます。 かく言う私も一ヶ月前に行われたチームシャッフルで、ClojureでDu…

Rustで非同期リクエストでハマったこと

こんにちは!SPEEDAプロダクト開発チームの成です。 去年の秋ごろからRustを触り始め、徐々にRustの魅力に惚れられました。 最初は日々コンパイラーにボコボコにされていましたが、 The Book *1 を読みながら、Rustを少しずつ理解していくと、段々コンパイラ…

SPEEDA開発チームをブーストするふりかえりのカルチャー

こんにちは!SPEEDA開発チームの岩見です。 この記事では私たちSPEEDA開発チームの中でも特徴的な文化のひとつとなっている、ふりかえりについてご紹介します。 以下のような方々のお役に立つことを願っています。 自分たちのチームでもふりかえりをやってみ…

appiumを使ってモバイルアプリのテストを自動化する

こんにちは!SPEEDA プロダクト開発チームの板倉です。 前回は、テスト環境(appium + gauge + kotlin)のセットアップについて書きました。 appiumを使ってモバイルアプリのテストを自動化する ~環境構築まで~ - UZABASE Tech Blog 今回は、実際にアプリのテ…

appiumを使ってモバイルアプリのテストを自動化する ~環境構築まで~

こんにちは!SPEEDA プロダクト開発チームの板倉です。 前回書いた時はNewsPicksの開発をしていましたが、今はSPEEDAの開発をしてます。 SPEEDAのプロダクトチームでは、以下の記事のようにE2EをGaugeとKotlinを使って書くことが多いです。 Gauge Test Autom…

「ここではすべてが流れている!」SPEEDA の開発チームに入って驚いた 3 つのこと

7 月から SPEEDA 開発チームに参加しました、野口です! SPEEDA 開発チームでは、XP のプラクティスを大きく取り入れて日々の開発を進めています。 私は入社前から XP やスクラムのようなアジャイル開発手法とその考え方には慣れ親しんでいたのですが、SPEED…

Istioでマイクロサービスのテスタビリティを向上させる

SPEEDAの開発チームの石橋です。 最近ではマイクロサービスでプロダクトを開発することが多くなってきていると思います。 そういった状況の中でマイクロサービスのテスト、特に異常系のテストをするコストがやや高いという話を何度か耳にしました。 本記事で…