High Link テックブログ
https://tech.high-link.co.jp/
High Link テックブログ
フィード
RSpecに慣れたエンジニアがJestを始めてみた話
High Link テックブログ
対象読者 RSpecをそれなりに書いたことがあるがフロントエンドテストは未経験なエンジニア カラリアの開発に興味があるエンジニア 香りで世界を彩ることに興味があるエンジニア もし、私たちの開発チームに興味を持った方がいましたら、 ぜひカジュアル面談からお話しましょう!! はじめに こんにちは、ハイリンクでプロダクト開発エンジニアをやっていますタイガです。 この記事では、フロントエンドのテストに初めて挑戦した感想をお伝えしたいと思います。 正直なところ、新しいテストフレームワークを学ぶことには少し抵抗というか腰が重いという気持ちがありました。 新しい構文を覚えたり、テストの書き方を一から学んだり…
19日前
エラー監視の仕組みを強化した話
High Link テックブログ
ハイリンク開発エンジニアの梶山(@h__kajiyama)です。今回は大切なエラートラッキングの改善についてのおはなしです はじめに サービス運営において、本番環境でのエラーは避けられません。入念に自動テストや動作確認を行なったとしても、予期せぬ障害は発生します。起きてしまったとき、エラートラッキングを適切に行うことで、問題の早期発見や迅速な原因特定を行えます。障害の被害を最小限に抑えるうえで適切で迅速な対処が最も大切です。 エラートラッキングはツールを導入するケースが多いと思いますが、導入しても適切な利用をしないと問題の早期発見や迅速な原因特定に寄与しません。 この記事では私たちのチームが実…
2ヶ月前
E2E Testを導入した話
High Link テックブログ
こんにちは。プロダクト開発エンジニアのプリン(@プリン)です。High Linkでは主にフロントエンドを担当しています。最近は趣味でプログラミング言語のZigを触っています。 本題ですが、カラリアの開発でE2E Testを始めたのでその取り組みを紹介させていただきます。 前提条件 弊社では「カラリア 香りの定期便」を開発しています。 カラリアのバックエンドがRuby on Railsで実装されているのに対し、フロントエンドはReact(Next.js)で実装されています。なので以下はReactを前提にお話しさせていただきます。 カラリアフロントエンドの課題 バックエンドはテストが拡充されていま…
3ヶ月前
カラリアを支える「同梱」の仕組みを統一した話
High Link テックブログ
こんにちは。ロジスティクス開発のかんたろうです。 この記事では、カラリアを支えている多様な同梱の仕組みを、物流管理システム側で統一的に扱えるようにした事例を紹介します。 既存の仕組みを統合するためにRubyのメタプログラミングなどの柔軟性を活用しているので、興味がある方はご一読ください。 カラリアにおける多様な「同梱」 カラリアにはいくつかの同梱の仕組みがあり、それらが最終的にお客様にお届けする物を決定しています。 参考までに、カラリアの香りの定期便で発送されるものをFAQから引用します。 香りの定期便新規ご注文の場合 【香水のアトマイザーをご注文の場合】 ご注文商品のアトマイザー(香水が入っ…
4ヶ月前
巨大なデータ負債を作らないための取り組み
High Link テックブログ
こんにちは、株式会社High Link CTOの nogaken(@nogaken1107)です。 プロダクト開発企業にとって、データ負債は大敵です。 要件に合わないデータ構造、過去データの欠損、不整合データの存在、etc。 これらデータに関する負債は、開発スピードの悪化や分析業務の阻害などを通じて事業に大きな悪影響を及ぼします。 弊社で開発している香り商品ECのプラットフォームである Coloria (https://coloria.jp)は、サービス提供開始から5年が経過しています。その中で、多くのデータ負債を生み、そしてそれらを返済しながらサービスを運営してきました。(そしていまも、現在…
5ヶ月前
RubyKaigi 2024参加レポート
High Link テックブログ
はじめに こんにちは、ハイリンクでプロダクト開発エンジニアをやっていますタイガです。 先日行われたRubyKaigi 2024に参加した感想をハイリンクのメンバー全員で振り返ったので、それぞれが感じた印象や体験についてレポートしたいと思います。 RubyKaigiは世界中のRubyistが集まる年に一度のイベントであり、新しい技術やアイデアに触れる絶好の機会でもあります。 私を含めてはじめて参加するメンバーが多く、学びの多いカンファレンスでした。 今回は、その熱気と学びをお伝えできればと思います。 メンバー紹介 taiga:2023年7月、ハイリンクに入社したプロダクト開発エンジニア。Ruby…
6ヶ月前
ライブラリのバージョンアップデートを継続的に行う仕組み
High Link テックブログ
はじめに こんにちは、プロダクト開発エンジニアの梶山(@h__kajiyama)です。 ライブラリのバージョンアップデートはサービスを提供し続ける上で必要です。しかし、機能開発の速度を求めるあまり疎かになりがちでもあります。そこで、開発速度を維持しつつ、必要なバージョンアップ作業を行う仕組みが大切です。 この記事では私たち開発チームがライブラリアップデートに対してどのように向き合い、開発速度を維持しながらバージョンアップ作業を行っているかを紹介します。 ライブラリアップデートを継続的に行う仕組み 一口にライブラリと言っても、様々な種類があります。私たちのチームは、「主要ライブラリ」「脆弱性対応…
7ヶ月前
プロダクト志向な開発チームとエンジニアの役割
High Link テックブログ
はじめに こんにちは、ハイリンクで開発エンジニアをしていますタイガです。この会社に入社してから早いもので半年以上経過しました。 今回は「カラリア 香りの定期便」事業の開発に関わることで感じた我々のチームの特徴とそのチームの中で求められる開発エンジニアの役割についてお伝えしたいと思います。 プロダクト志向なチームについて 私たちハイリンクのプロダクト開発の一番の特徴として、「全メンバープロダクト志向」であることが挙げられます。これはプロダクトマネージャーはもちろんのこと、開発エンジニアやデータ分析エンジニア、デザイナーチームも含めてすべてのメンバーが意識していることです。 プロダクト志向とは、製…
8ヶ月前
ハンディターミナルで物流業務を効率化した話
High Link テックブログ
はじめに こんにちは。株式会社High Link ロジスティクス開発のかんたろう(kantarow)です。 今回の記事では、弊社の物流業務を委託している倉庫の検品業務にハンディターミナルを導入して業務を効率化した話を紹介します。 ハンディターミナルで動作するアプリケーションはRuby on Railsを使って開発されています。こういった事例はなかなかないと思いますので、参考までに実際の開発についても紹介します。 ハンディターミナルとは ハンディターミナルはコードの読み取りが可能な携帯端末です。モデルによっては文字認識が可能なものもあります。 この記事では倉庫内の検品業務に話を絞りますが、身近な…
9ヶ月前
カラリアに「香りのギフト」を立ち上げるまで
High Link テックブログ
はじめに こんにちは。エンジニアの百瀬 (@rn0rno)です。 カラリアは2019年にリリースされましたが、2023年10月に新たに「カラリア 香りのギフト」というプロダクトをメインエンジニアとして携わりローンチすることができました。 今回は、新規のプロダクトをどう作っていったか?という話を中心に、既存のプロダクトに新規のプロダクトを組み込むときに気をつけたことについて書いていきます。 カラリアとは カラリアは、フレグランスのサブスクリプションサービス「カラリア 香りの定期便」と、香りに関する情報を紹介する専門メディア「カラリアマガジン」からなる、香りの総合プラットフォームです。 「カラリア…
10ヶ月前
BigQuery ExportされたGA4データをもとに「セッションごとの最後の流入チャネル」を抽出する
High Link テックブログ
本記事では、私たちがBigQueryにエクスポートされたGA4データをもとに「サイトへの流入チャネル」を集計するうえでハマった落とし穴と、それを解決したやり方について共有しようと思います。
1年前
Kaigi on Rails 2023参加レポート:学びからプロジェクトへの応用まで
High Link テックブログ
こんにちは!株式会社High Link プロダクト開発エンジニアのタイガです。 2023年10月27日と28日に行われた Kaigi on Rails 2023 に参加しましたので、その感想などをレポートしていきます。 最後にはトークセッションの内容から実際にプロジェクトに対して実践してみたいと思います。 そもそも Kaigi on Rails とは? Kaigi on Railsのコアコンセプトは「初学者から上級者までが楽しめるWeb系の技術カンファレンス」です。Kaigi on Railsは技術カンファレンスへの参加の敷居を下げることを意図して企画されています。また、名前の通りRailsを…
1年前
プルリクエストごとに検証環境が立ち上がるようにした話
High Link テックブログ
株式会社HighLink ロジスティクスエンジニアのかんたろう(@kantarow)です。 私たちは複数のチームで一つのステージング環境を利用しています。masterブランチが更新されるごとにステージング環境へのデプロイが行われ、リリース前には必ずここで動作確認を行います。 このmasterマージによるデプロイには問題が無いのですが、master以外のブランチの動作確認を行うために手動デプロイを行った場合、ステージング環境での検証が中断される問題が起こります。 そこで、Pull Requestごとに自動で検証環境を立ち上げる仕組みを構築することで、この課題を解決しました。 本記事では、この解決…
1年前
AWS Step Functionsでバッチ処理を並列化した話
High Link テックブログ
はじめに こんにちは、プロダクト開発エンジニアの梶山(@h__kajiyama)です。 私たちのチームでは、「カラリア 香りの定期便」という、サブスクリプション型のECサービスを開発・運用しています。 こちらのサービスは開始から4年が経過しユーザー数は55万人に達しました。サービスの成長に伴いシステム内で最も重要なバッチである、サブスクリプション更新バッチの実行時間が徐々に長くなり、そのままだと安定的なサービス運用に支障をきたす可能性がありました。 そこで私たちのチームは、この課題を解決するため、AWS Step Functionsを利用してバッチ処理を並列化することで実行時間を大幅に短縮しま…
1年前
ActiveRecordのincludesがロックに与える影響と対策
High Link テックブログ
はじめに こんにちは!株式会社High Link ロジスティクス開発エンジニアのかんたろう(@kantarow2813)です。 今回はRailsのincludesを使用していて遭遇したロックの問題と、その解決方法及び対策について紹介します。 includesとは includesとはActiveRecordが提供するクエリインターフェイスのひとつで、クエリする際に関連先レコードを一括読み込み(eager loading)する機能です。 includesには二つの一括読み込み戦略があり、検索条件に応じてよしなに使い分けるようになっています。二つの戦略はそれぞれpreloadとeager_load…
1年前
Cloud Firestore を活用したバッチレコメンドシステムを開発した話
High Link テックブログ
こんにちは,株式会社 High Link で業務委託(副業)として働いている,機械学習(ML)エンジニアの柏木(@asteriam)です. High Link では,カラリア香りの定期便という toC サービスを提供していて,ML エンジニアは,データを武器にした非連続的な事業成長を支える技術開発を担っています.具体的には推薦システムや診断といった部分に ML が活用されています. ハイリンク 機械学習・データエンジニア向け 紹介資料 今回はよりサービス改善がしやすい環境にすべく,機械学習用 API(ML-API)と ML パイプラインの役割を分離させ,ロジック改善を回しやすい環境を作っている…
1年前
LLMを活用したAIフレグランスアドバイザーの仕組みと開発背景
High Link テックブログ
こんにちは!株式会社High Link CTOの nogaken(@nogaken1107) です。 ハイリンクでは”香りとの出会いを最適化する”をビジョンとする「カラリア」という香り領域の総合プラットフォームを運営しています。 先日、大規模言語モデル (以下LLM)を活用し、探したい香りのイメージに合った香水を提案する「AIフレグランスアドバイザー Kaori 」(以下 「Kaori」)のα版をリリースしました。 香りの総合プラットフォーム「カラリア」 「AIフレグランスアドバイザー Kaori」 α版をリリース! | 株式会社High Linkのプレスリリース この記事では「Kaori」の…
1年前
Datadog ログのアーカイブをBigQueryから見れるようにする話
High Link テックブログ
こんにちは, 基盤開発チームで業務委託として働いている奥山です. 弊社で開発しているカラリアというサービスでは, モニタリングに Datadog を利用しており, Rails や Nginx などのログは Datadog に集約しています. 基本的には Datadog の UI でログを閲覧・集計すれば十分なのですが, たまに Datadog のログ保存期間よりも古いログを閲覧したい ログを他のデータと join して SQL で分析したい ことがないでしょうか? カラリアでも最近, Datadog に保存したログを BigQuery でクエリできるようにしたので, 検討した点を話したいと思い…
1年前
スプレッドシートを活用して組織横断的にテーブル・カラムの説明文を入力した話
High Link テックブログ
こんにちは。株式会社High Link で業務委託として働いている、データエンジニアのikki(@ikki_mz)です。 私たちデータチームでは、「データの民主化」を推進しており、全社員がデータ利活用を行えるように、dbtを用いた分析基盤の整備に取り組んでいます。 tech.high-link.co.jp データの民主化を推進していくにあたり、テーブル・カラムの説明文は非常に重要な役割を占めます。テーブルやカラムが何を意味しているかの説明は、分析をする上ではとても重要です。 しかし、このテーブルやカラムの説明はなかなか厄介で、データベースを開発した開発エンジニアとコミュニケーションをとらないと…
2年前
RailsアプリのフロントエンドをじわじわとNext.jsにリプレースした話と、その振り返り
High Link テックブログ
株式会社High LinkのCTOをやっている nogaken (@nogaken1107)です。 最近はChatGPTなどのLLM系のアプリケーションを触って楽しんでいます。 ハイリンクでは「カラリア 香りの定期便」などのサービスを開発しています。 「カラリア 香りの定期便」は2021年まで、フレームワークとしてはRuby on Rails (以下Rails)単体で書かれていましたが、デザインリニューアルと合わせて2021年前半から1年間強の時間をかけてフロントエンドをNext.jsにリプレースしました。 結果として開発体験が向上し、気軽に実装できるデザインの幅が広がり、エンジニアの採用面で…
2年前
カラリアの物流管理システムを自社開発している理由
High Link テックブログ
はじめに こんにちは、ロジスティクスマネージャーの横山(@katsuya_high)です。 ハイリンクでは「COLORIA (カラリア)」という香り商品のECサービスを運営しています。中でも「カラリア 香りの定期便」は、毎月ユーザが選んだ香り商品をお届けする月額制のECサービスです。従来購入障壁が高かった香水をはじめとする香り商品を手軽に試し、楽しむことができます。 「カラリア 香りの定期便」では1ヶ月で使い切れるサイズの香水をお届けしており、完品をそのままお届けするサービスと比べると特殊な物流作業を必要とします。 弊社では、その物流業務を支えるシステムを自社開発しており、今回は自社開発に至っ…
2年前
SQLFluffではじめるお手軽コーディング規約導入
High Link テックブログ
はじめに こんにちは。株式会社High Link データエンジニアの谷口祐太郎(@ytaniguchi811)です。 私たちのチームは全社的にデータの利活用を推進できるよう、分析基盤の開発に日々取り組んでいます。 Data WarehouseとしてはBigQueryを採用しており、分析用のテーブルはdbtとGitHubを連携させてコードで管理しています。 dbtを用いることで分析テーブルをコード管理できるようになり、私たちのような小規模チームでも管理・運用が非常に楽になりました。詳しくは本テックブログの別記事で説明していますので、よろしければご参照ください。 tech.high-link.co…
2年前
SWRを導入してユーザー体験を向上させた話 (Next.js)
High Link テックブログ
「カラリア 香りの定期便」はNext.jsを利用して構築されており、今回はユーザー体験の向上を目的に、データ取得/キャッシュライブラリの SWRを導入した話です。SWRはシンプル軽量なライブラリであり、理解も容易で、APIキャッシュによるユーザー体験向上というユースケースをうまく実現できました。
2年前
カラリアのデータ基盤と機械学習基盤 - 小さく始めるMLOps
High Link テックブログ
はじめに こんにちは。High Linkのデータエンジニアの芦川 (@hirorororo772) です。 私たちが運営する香水サブスクサービス「カラリア」では、「香水診断」、「レコメンド機能」、「フレグランスプロフィール」など、データを活用したさまざまな機能を提供しています。 こういった機能を提供するためには、ロジックの開発だけでなく、安定的に提供するための基盤や開発を加速させるためのCI/CD基盤やデータパイプラインの構築(MLOps)が重要になってきます。 今回は、カラリアにおけるデータを活用した機能の裏側についてご紹介したいと思います。 スタートアップである私たちは、小さくはじめてスピ…
2年前
GitHub Actions OIDCを活用してTerraform CIをセキュアにする話
High Link テックブログ
はじめに こんにちは, 基盤開発チームの奥山(okue)です. 基盤開発チームでは, tech.high-link.co.jp のように, サービス開発の基盤に関する開発を行っています. カラリアでは, AWS 上のインフラ構築に Terraform を利用しており, 2種類の CI を GitHub Actions で実装しています. Pull Request が作成されたら terraform plan をする Pull Request が main ブランチにマージされたら terraform apply をする 本記事では, GitHub Actions OIDC を用いて, Terr…
2年前
BigQueryへEmbulkで転送するバッチ処理を改善した話
High Link テックブログ
はじめに こんにちは, 基盤開発チームの奥山(okue)です. High Link では, BigQuery を活用してデータの分析や可視化, 機械学習への活用を行っています. アプリケーション DB の BigQuery へ転送には, AWS ECS Fargate + Embulk という構成でバッチ処理を実行していましたが, いくつか運用上の問題点がありました. 本記事では, BigQuery へDBのデータを転送するバッチ処理を, AWS Step Functions + AWS ECS Fargate + Embulk で実装し改善した話をします. 改善前の構成と問題点 構成 改善前…
2年前
dbtを導入して小規模チームでも運用可能なデータマネジメント体制を構築した話
High Link テックブログ
はじめに こんにちは。株式会社High Linkのデータユニットマネージャーの芦川 (@assy) です。 私たちのチームでは、データを強みとした事業価値創出を促進するために、データ基盤の整備やデータマネジメント、全社的なデータ利活用レベルの引き上げに取り組んでいます。 データマネジメントをしていると、「誰が作ったかわからない野良のテーブルが乱立している」ことや「BigQueryコンソール上でviewを定義してしまってコードレビューができない」さらには、「テーブル間の依存関係がわからず削除できない」といった課題にぶつかる方は多いんじゃないでしょうか。 私たちもまさにこのような問題に直面し、導入…
2年前
香りEC カラリアを支える技術
High Link テックブログ
こんにちは。株式会社High LinkのCTOの野川賢二郎 (@nogaken)です。 この記事では、新しくハイリンクにジョインした方や、これからするかもしれない候補者を主な対象に、カラリアを支える技術スタックを紹介しそれぞれの技術を使用するに至った経緯などを簡単に紹介していきます。 サービス概要と全体の構成について ハイリンクでは「COLORIA (カラリア)」という香り商品のECサービスを運営しています。中でも「カラリア 香り定期便」は月額制のECサービスで、毎月ユーザが選んだ香り商品をお届けすることによって従来購入障壁が高かった香水をはじめとする香り商品を手軽に試し、楽しむことができます…
2年前