TECH PLAY

株式会社ユーザベース

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

476

こんにちは、 NewsPicks でソフトウェアエンジニアをしているガニエです。 2019年に NewsPicks に新卒入社してから現在に至るまで、基本的には toC サービスである NewsPicks の上に顧客組織内に閉じたコミュニティを作って NewsPicks をコミュニケーションに役立てることができる toB サービスの NewsPicks Enterprise を作るチームで開発をしています。 今回はそんな NewsPicks Enterprise の開発の過程で必要になった網羅的な影響範囲調査をできるかぎり系統的に行うためにしたことの話です。 背景 エンドポイントの網羅的調査 …
アバター
こんにちは。 NewsPicksエンジニアの美濃部です。 NewsPicksではAWSをインフラ基盤として利用しているのですが、この記事では実際に行ったSQSのコスト削減の話をしたいと思います。 結論から話すとタイトルにもありますが「SQSでメッセージを受信する時にはショートポーリングではなくロングポーリングにした方が大体においてコストが下がります」という内容です。 この話の発端はコスト削減の余地がないかを検討していてSQSのコストが高すぎないかと感じたところから調査が始まりました。SQSはAPIリクエスト数に応じた従量課金なのですがAPIリクエスト数を確認するとやはり多すぎると感じました。(…
アバター
みなさん、こんにちは。ユーザベースでTech推進をしております西脇です。 本日、Tech blog は Uzabase Tech としてユーザベースの技術情報を発信するポータルにリニューアルしました。 このポータルでは、ユーザベースのエンジニアやデザイナー、クリエイター等に向けた情報に集約して発信して参ります。いわゆるtechブログの記事コンテンツに始まり、イベント、事例紹介、各種メディアでの取り上げ事例、エンジニアの募集等になります。 このリニューアルには、私たちの強い意思を乗せています。 以下はWho we areのコンテンツから引用となります。 未知なるWow!を開発しよう 「経済情報で…
アバター
こんにちは。SaaS Product Team の old_horizon です。 Docker の登場により、Selenium によるクロスブラウザでの E2E テストが簡単になりました。 Linux で動作する主要ブラウザについては、Selenium 公式の Docker Hub 等から Docker イメージを取得するだけで環境構築が完了します。 一方 Internet Explorer 11 (以下 IE11) でのテストは、他のブラウザと比較すると非常に手間がかかります。 下記がその要因と言えるのではないでしょうか。 Windows 環境が必要 普段 Mac や Linux で開発し…
アバター
こんにちは。SaaS Product Team SREの八代です。 はじめに 弊社が開発しているSPEEDAでは、KubernetesとIstioを利用してサービスメッシュ基盤を構築しています。オンプレミス上に構築したK8s、GKE、Google Anthosなど10個以上のK8sクラスタを管理しており、その上でIstioが導入された数100個のPodが稼働しています。 今回は、Istioを導入しているPodのアクセス分析を行う上での課題を共有するとともに、それを改善するための仕組みを作り始めたので、それについて書きますので、同じような問題を抱えている方の参考になれば嬉しいです。 はじめに ロ…
アバター
こんにちは!SaaS Product Teamの成です。 出身は中国・上海です。学生のときからは国語が苦手でテストもよく落ちましたが、一応中国語は分かります。 最近Product開発で中国語文章の全文検索について調べたことがありましたので、ここでElasticsearchの中国語Analyzerについて紹介したいと思います。 もし皆さんも中国語の全文検索を対応するとき、中国語が分からなくても、この記事が多少参考になれるならば大変嬉しいです。 Elasticsearchで中国語の検索精度を高めるためには、中国語の文章を正しく形態素分析できるAnalyzerは不可欠だと思います。 Baiduで中国…
アバター
こんにちは。 NewsPicksエンジニアの鶴房です。 2020年1月に入社して、既に1年が経ちました! 今回は入社して最初に任せていただいた案件で、億件オーダーのデータ移行ツールの検証の際に、サンプリングを用いて効率的にテストをした話をさせてもらいます。 何がしたかったのか どんな課題があったのか どう解決したのか 終わってみて思ったこと おわりに 何がしたかったのか NewsPicksでは、AWSのRedshiftを用いて、アクセスログやユーザーの行動ログの蓄積と解析を行っています。 解析の結果は、マーケティングの指標や機械学習などに利用されています。 これらのログですが、生データは、RD…
アバター
こんにちは。このブログでは初めまして。2020年の2月にNewsPicksに入社した高山です。 今回は僕がNewsPicksのCTOになってからの1年でやったお仕事について書いていきます。 CTO最初のミッション DX Criteriaについて 「デプロイ回数」を定点観測 やってきたチャレンジ 1年経ってみて CTO最初のミッション NewsPicksは2013年に誕生し、5年ほどの壮大な創業期の間にたくさんの新しい領域に挑戦しており、僕が入社したときには既に事業面でもシステム面でも「それなりの複雑さ」という感じでした。 前任CTOの杉浦さん(今はグループ内でアメリカでの新規サービスの立ち上げ…
アバター
はじめに こんにちは、UZABASE SREの鈴木(@sshota0809)です。 今回は、Grafana の Backend plugin という仕組みを利用して、データソースを BigQuery とした監視設定を行う方法を紹介します。 はじめに TL;DR はじめに 現在のログ収集構成 やりたかったこと Grafana Backend plugin を利用した BigQuery ベースの監視設定 Grafana と Backend plugin Grafana Backend plugin BigQuery プラグイン プラグインのインストール グラフの描画 アラート設定 ハマったポイント…
アバター
はじめに こんにちは、SaaS Product Teamのヒロオカです。 SPEEDAではSpring Webfluxの採用が行われおり、一部リアクティブなシステムが動いています。 今回は、R2DBCという、リアクティブな非同期でRDBにするための仕様とSpring(Reactor Project) による実装およびサポートを利用して、APIの実装を試してみたいと思います。 はじめに R2DBとは リアクティブシステムにおけるJDBCの問題点 実際に使っていく 環境 事前準備 プロジェクトの作成 DBの起動 APIを実装していく 空ハンドラーの実装とルーティングの設定 リポジトリの実装 DBの…
アバター
今日は。 SPEEDA を開発している濱口です。 前回の続きです。 以下の通り、今回も設計の段階的な進化に沿った忠実な写経ができたと思います。 ダックを見逃す 問題を悪化させる ダックを見つける 概要としては、依存関係でがんじがらめになった設計を、ダックタイプを使って柔軟性のあるものに変える、というものです。 ハイライトだけ抜粋します。 ↓これが、 "依存しまくりの恐ろしい分岐" Trip >> prepare: preparers [ preparers do: [ :preparer | preparer class == Mechanic ifTrue: [ preparer prepa…
アバター
こんにちは、SaaS Product Team の Ryo33 です。 この記事では Rust でモックオブジェクトを作ることを通してRefCellやMutex、Rc、Arcの使い方やSendやSyncについて学びます。 この記事を読むことで Rust でモックオブジェクトを自作できるようになります。 サンプルプログラム テストを書いてみる モックオブジェクトをつくる RefCell 非同期 複数の所有権 最後に 参考文献 サンプルプログラム まず書いていきたいコードとして以下のようなcreate_user_with_nameというユースケースを考えます。 もし、名前が空文字でなければUser…
アバター
こんにちは。7月からSaaS Product Teamに参加している横山です。 Uzabaseにきて大体半年が経ちました。 SaaS Product Teamに来るまでは、比較的ウォーターフォールがメインの現場にいたのですが、 ここにきて驚いたことのうち3つを書いていきたいと思います。 SaaS Product Teamってどんな開発をしているのだろうというのが少しでも伝わればと思います。 仕様書のドキュメントがない 常にペアプロを行っている 触れる技術の幅が非常に広い 仕様書のドキュメントがない SaaS Product Teamでは、ドキュメントがほどんどありません。 アーキテクチャ図や、…
アバター
SaaS Product Team の野口です。 以前にもいくつかの記事で触れたように、SaaS Product Team では XP(エクストリーム・プログラミング)をベースとしたチーム開発に取り組んでおり、ほぼ全ての作業をペアで行っています。*1 かく言う私もこのチームに入ってから 1 年以上の間 *2、日々ペアプログラミングに取り組む中でわかってきたことがあるので、この記事で共有したいと思います。 XP はうまくいくことを極限(エクストリーム)まで推し進めることから生まれた ペアプログラミングは XP の 5 つの価値を極限まで推し進める 注記 コミュニケーション シンプリシティ フィー…
アバター
今日は。 SPEEDA を開発している濱口です。 前回の続きですが、この章にはコードが出てこないため、 前回までのようないわゆる写経にはなりませんでした。 そもそも、この章の趣旨のひとつとして、コードを書かずシーケンス図を用いることで かんたんにインタフェースの可能性を探索できる、というのもあります。 今回は、著者の主張とは逸れますが、 テストコードを書きながらインタフェースの可能性を探索する、ということを試しました。 そこで、少し Smalltalk のコードが出てきます。 すこしの Smalltalk あります 視点を変える パブリックインタフェースの見つけ方 ツール 視点 パブリックイン…
アバター
こんにちは! Saas Product Teamの板倉です。 今回は少し前にバージョン3がリリースされたVue.jsとComposition APIを使ってクリーンアーキテクチャをどう組むのかを書いてみたいと思います。 クリーンアーキテクチャについてはこちらを参照ください 今回のエントリーで使用したバージョンは以下の通りです。 Vue: 3.0.0 Typescript: 3.9.7 作成したコードはこちら 準備 始める前に そもそもComposition APIって何? 作っていきましょう モジュールを作る モジュールの準備 Componentから利用する 今回作ったアーキテクチャの処理の流…
アバター
こんにちは、SaaS Product Teamのとみたです。 今回は、WebComponentsについて調べてみたことを書きます。その1として、 カスタムエレメント に注目して書いています。ほかの項目については、また別の機会に書きます。 また、今回のサンプルコードと、デモです。 WebComponentsとは iframeとの違い 俺のカスタムエレメントを作ってみる 1. 時計 ※注意点 2. チャート ※注意点 3. Attributesが更新されたら再描画する まとめ サンプルコードの話 WebComponentsとは カスタムエレメント、ShadowDOM、HTMLTemplateといっ…
アバター
こんにちは、SaaS Productチームの比嘉です。 私たちSaaS Product チームは常日頃からペアプログラミングを行っています。 チームペアプロの細かい流れは過去に鈴木さんが紹介しています。 tech.uzabase.com そんな中、あるときエンジニアの友人から質問されました。 「ペアプログラミングではいつコードレビューするの?」 話を聞いてみると、その会社ではペアプロを導入し始めたのですが、従来から行なっているコードレビューと役割が重複していることに気づいたそうです。 そこで今回はペアプログラミングとコードレビュー*1について書いてみようと思います。 時世を鑑みてリモートペアプ…
アバター
こんにちは、ユーザベースのProductチームでSREをやっています阿南です。弊社ではKubebrnetes + Istioを利用してサービスメッシュの構築、マイクロサービスの運用を行っています。Istioでは sidecar proxyとしてEnvoyが利用されていますが、このEnvoyをFront Proxyとしても利用できないかと思い、よく使われる設定について調べてみました。下記目次です。 EnvoyをFront Proxyとして利用するメリット Envoyのバージョン Front ProxyのためのEnvoy Configuration 80(HTTP),443(HTTPS)でアクセス…
アバター
こんにちは。SPEEDA 開発チームの old_horizon です。 JVM アプリケーションの運用について回るのが、OutOfMemoryError (以下 OOM) への対処です。 しかし実際に発生した際に、適切なオペレーションを行うのは意外と難しいのではないでしょうか。 特に本番環境では、まず再起動して復旧を急ぐことも多いかと思います。しかし、ただそれを繰り返すばかりでは原因がいつまでも特定できません。 今回は Kubernetes で運用する JVM アプリケーションに対して、ダウンタイムを抑えつつ調査に役立つ情報を自動的に収集する仕組みを構築してみたいと思います。 環境構築 OOM…
アバター