TECH PLAY

株式会社ユーザベース

株式会社ユーザベース の技術ブログ

494

はじめまして、昨年の12月に入社しました根岸です。 UZABASEに入社する前はフロントエンドエンジニアとして働いており、ここ1年間くらいはReactとTypeScriptの開発ばかりやっていました。 今回はフロントエンドのコンポーネントを設計するときに気をつけていることについてまとめます。 対象読者 Propsの名前に一貫性をもたせる 標準DOM要素と同様の役割を持つコンポーネントのpropsは標準DOM要素に合わせる レイアウトをコンポーネントに切り出す インタラクティブな部分もコンポーネント切り出す 単一責任を意識してコンポーネントを作る propsを増やすことでコンポーネントのバリエー…
初めて会社のブログに書きます。SPEEDA事業でCTOをしている林です。 TDDをこよなく愛する身として今日はDartでTDD、そしてテストの独立性を担保していく上で欠かせないMockライブラリーのMockitoについて書こうと思います。 Mockitoとは 今回Mock化するクラス 事前準備 Mock用クラスを定義する 振る舞いを定義する 振る舞いを定義する(Future、Streamの場合) 検証する 検証する(回数チェック) 検証する(引数チェック) 検証する(呼び出し順序) Fakeクラス 出来ない事 まとめ Mockitoとは Dart開発チームが作成している公式Mockライブラリー…
今日は。 SPEEDA を開発している濱口です。 理屈編では、まずリレーショナルデータベース(以下、RDB)の論理設計やその後において、 正規化ルールを運用する難しさについて述べました。 主な要因として、 例えば正規化を一度完了したテーブルに対し SELECT した結果もまたテーブル*1、 つまりは正規形であることが求められるため、 SELECT するたびにいちいちその結果について、 「第 n 正規化についてクリアだな…次に第 n + 1 正規化についてはどうかな…」などと、 ルールに当てはめてチェックしなければならないことを挙げました。 リレーショナルモデルの世界で、常に正しい処理結果を得る…
こんにちは。SPEEDA 開発チームの緒方です。 システムをマイクロサービスで構成するメリットのひとつに、採用する技術にバリエーションを持たせることができるという点が挙げられると思います。 実際、SPEEDA でも様々な言語・フレームワークを利用してマイクロサービスを開発しています。 その中でも Kotlin はかなり多くのプロジェクトで採用されている言語です。 Kotlin で利用できるフレームワークと言えば Spring Boot など Spring 系のものが真っ先に思い付くと思うのですが、本当に小さな API を作りたい場合には少し大袈裟すぎる気もします。 今回はそういう場合に手軽に使…
はじめに はじめまして、UZABASE SPEEDA SREの鈴木(@sshota0809)です。 今回は、Sealed Secretsを利用したKubernetesのSecretリソースをセキュアに管理する方法を紹介します。 はじめに TL;DR Sealed Secretsとは 概要 アーキテクチャ インストール〜リソースデプロイ インストール Secretリソースのパース Kubernetesクラスタへのデプロイ おわりに TL;DR KubernetesのSecretリソースはBase64の形式にエンコードされるため、エンコードされた内容が確認できれば簡単にデコードできてしまいます。 …
今日は。 SPEEDA を開発している濱口です。 アプリケーションデータの永続化を担うデータストアには様々な選択肢があります。 その1つとして、リレーショナルデータベース(以下、RDB)がありますが、 RDBを選択した場合、データの容れものとしてリレーショナルモデルを選択した、という表明になります。 ひいては、このモデルを正しく使用することが生産性の観点から必要となります。 (明白な設計によるコミュニケーションや制約によるデータ不整合の回避など) その方法の1つとして正規化ルールがあります。 正規化ルール遵守は有効か 「あたりまえ」と軽視されがち 「設計時のみに発生するタスク」という誤解 正規…
はじめに はじめまして、2019年11月に入社しましたヒロオカ(@yuya_hirooka)です!! 先日、同僚との雑談の中でQuarkusのNative Image化が話題に挙がりました。その際に「そういえば、GraalVMとかNative Imageってよく聞くけどあまり知らないなぁ...」と思い色々と調べてみたのでまとめます。 この記事ではGraalVMの中核技術の概要を把握し、簡単にその機能を使ってみることをゴールとします。 はじめに 前提知識 GraalVMとは Polyglot Native GraalVMの中核技術 Graal Truffle GraalVM Native Ima…
今日は。 SPEEDA を開発している濱口です。 前回はテスト駆動開発(TDD)を習得するためのハンズオンを行いましたが、今回はオブジェクト指向設計(OOD)です。 SPEEDA は複雑なビジネスロジックから成っており、開発では複雑で多くのコミュニケーションが発生します。 開発チームでは gauge などのツールを使い e2e テストが仕様を語るようにしたり、ペアプロを徹底したり、すべてが流れるようにしたり...等々の様々な工夫を行っています。 コードや設計もコミュニケーションのひとつだと捉えると、実際に開発で発生するコニュニケーションの比重の中では大きな割合を占めるものだということを感じてい…
こんにちは。SPEEDA開発チームの上村です。 先日同僚が書いたElixirのコードを眺めていた際に、とあるバッチ処理内でback-pressureを用いてAPIサーバを優しく呼び出している処理を見かけました。 そのコード内で用いられていたライブラリを調べてみるとなかなかに面白かったので折角なので今回まとめてみました。 本エントリでは、APIサーバを優しく呼び出すことを「APIサーバが過負荷にならないくらいの負荷で呼び出す」と定義し、それを実現する方法の1つとしてElixir製のライブラリであるFlowを用いたback-pressureの手法について述べていきます。 Flowとは GenSta…
今日は。 SPEEDAの開発をやっている濱口です。 SPEEDA開発チームではテスト駆動開発(TDD)、ペアプログラミングを徹底しています。 だからなのか、『テスト駆動開発』はすごく楽しく読めました。 今回ハンズオンを行った「第I部 多国通貨」でも、ペアプロをしながら著者が語りかけてくるような感じで、 読者側も、著者の意図をひとつずつ理解しながら読み進めていけるようになっています。 有意義なハンズオンを、より有意義にしたい 古くてあたらしい言語(環境)、Smalltalkにふれたい Smalltalkでは、わりと忠実な写経が可能だった Javaのコンストラクタのような特別なメソッドが無い イン…
こんにちは、SPEEDA開発チームの @tkitsunai です。 最近リリースされたプロダクションコードにようやくGo言語が採用されました。嬉しい。 今回はGo言語でオブジェクト指向プログラミングで型表現についてのテクニックや考え方の基礎を紹介します。もっとGopherが増えて欲しい! 対象読者 型を定義する 型で厳格さを作り、その型を洗練させる 改良1: プリミティブ型をなくす 改良2: Unitの特性を型で表現する 型に厳格さを求める完全コンストラクタを活用する ファーストクラスコレクションと型定義によってメンバーに対する操作を制限する 列挙型で表現力を高める 構造体埋め込みで表現をする…
はじめに SPEEDA PDT歴3ヶ月の相川です 今回はJavaを2年くらい書いていた私が、3ヶ月間で感じたKotlinの特徴を列挙していこうと思います はじめに Kotlinの特徴 型推論について データクラスについて nullable 検査例外の話 returnを明示的に書かなくても良い 拡張関数と拡張プロパティ 拡張関数 拡張プロパティ リスト操作の評価について coroutineの話 まとめ Kotlinの特徴 型推論 データクラス nullable 検査例外の話 returnを明示的に書かなくても良い 拡張関数 リスト操作の評価について kotlin corutine 型推論について…
こんにちは!SPEEDA開発チームの工藤です。 大分時間が開いてしまいましたが、Gaugeシリーズの第四回目です。 今回はe2eテスト書く際には必須であろうSet Up/Tear Down Stepsを、Gaugeではどのように実現できるのかをSPEEDA開発チームでの実例も交えてお伝えできればと思います。 過去3回分の記事はこちらから↓ Gauge Test Automation Toolとアジャイル開発 GaugeのConceptを用いてテストシナリオをより仕様書のように記述する GaugeのParameterを使いこなす GaugeにおけるSet Up/Tear Down Stepsの実…
KotlinのCoroutineを用いた,外部API呼び出しの並列数を指定できるライブラリを作成した話 背景 本記事の内容 Coroutine Coroutineの作成方法 中断が可能な計算インスタンス [1] 特定のスレッドに束縛されない Channelとは ParallelExecutorについて まとめ KotlinのCoroutineを用いた,外部API呼び出しの並列数を指定できるライブラリを作成した話 ユーザベースインターンの原田です.大学院で研究しながら京都でユーザベースのインターンをさせて頂いており,今回初めてブログを書かせて頂きます! 題名にある通り,今回KotlinのCoro…
こんにちは。SPEEDA開発チームの冨田です。 昨今のフロントエンドでは、Fluxというアーキテクチャが利用されることが多くなってきています。SPEEDAでもVueを使っている画面がありますが、そこではVuexというVue向けのFluxライブラリで状態管理をしています。 Fluxではデータの流れを一方向にすることで見通しのよい設計が行えるようになります。 今回は、素のReactを使ってデータの流れを単一方向にする設計を紹介します。 今回作ってみるもの セットアップ 1. GettersとActionsをつくる 2. GettersとActionsをどこのコンポーネントからでもアクセスできるよう…
こちらの記事は以前にNewsPicks Tech Guideに投稿された記事をインポートしたものです。元の記事はid:yossiyossi923によって書かれました。 こんにちは! NewsPicksのデザイナーの吉川です。 9/26・27の2日間、ニューヨークで行われたAWWWARDSカンファレンスに参加しました。 前回は1日目の内容をご紹介しました。今回は2日目、特にメッセージが強く面白いと感じた「The NewYork Times」「InVision App」「Anton&Irena」「Mediamonks」「AREA17」、この5つのトークについてまとめました。 Scholastic(…
こんにちは。 SPEEDA開発チームの掛川です。 現在、私が参画しているプロジェクトではPythonを使ってサービスの開発を行なっています。 私自身、Pythonを書くのは今回が初めてなのですが、 テストを書く際にハマったことについて記事にしていきたいと思います。 環境といろいろ classメソッドをモックしたい時 引数に応じて返す値を変えたい時 mockerについて 終わりに 参考資料 環境といろいろ ・環境 OS Mac OS X 10.14.5 python 3.7.3 ・ライブラリ pytest 5.1.2 pytest-mock 1.11.1 私が今まで参画していたプロジェクトでは、…
こんにちは。SPEEDA開発チームの鈴木です。 昨年一児(娘)の父になりまして、凄い勢いで変化していく様子に喜んだり困ったりしながら過ごしております。 色々できることが増えると嬉しいのですが、それは同時にいたずらの幅が広がることも意味するんですよね。例えばものを引っ張ることを覚えたのは嬉しいのですが、私の髪の毛をひっぱってむしるのはやめていただきたい。そんな感じです。 髪をむしる娘の図。言葉は通じない。 今回はそんなうちの子が産まれたときに取得した育休の話をしたいと思います。 育休の話とはいっても育休をハックする話とか育児アプリとかの話ではなく、「育休を取得しやすい(と私は思う)SPEEDA開…
こんにちは!こんにちは!SPEEDA開発チームのあやぴーです。 社内のClojureを使ったAPIにおいて、「例外をうまくハンドリングしたいんだけど…」という話が出てきたので、今回はRingアプリケーションにおける例外のハンドリング方法について解説します。また、昨今Ductを使ってアプリケーションを作る機会が増えているので、それについては最後の方に解説をします。 また具体的なコードはGitHubにあるので、参考にしてみてください。 https://github.com/ayato-p/exception-handling この記事で解説する具体的な内容については以下の通り 例外のハンドリングに…
はじめに こんにちは! UZABASE SPEEDA SRE teamの生賀です。 最近あった嬉しかったことは、自分が翻訳した日本語がkubernetesのCronJob - Kubernetesページに反映されていたことです。 閑話休題、弊社SPEEDAサービスでは大量のバッチジョブがHinemosを起点としてVM上で動作しています。 SREチームではこのようなジョブ群を徐々にサーバから切り離して、コンテナライズを進めています。 そんな大量にあるジョブですが、環境変数だけが異なっているものも多数あり、実行環境 x 環境変数と環境が異なると掛け算式に増えていきます。 これをkubernetes…