ブックマーク / zenn.dev/ubie_dev (55)

  • YANS2024でLLMを使った医療テキストの情報抽出について発表してきました

    概要 YANSシンポジウムで最近の取り組みの1つをポスター発表してきました。YANSシンポジウムは言語処理学会の若手支援事業の1つで、自然言語処理の周辺分野に参加して間も無い研究者の発表を奨励している研究シンポジウムです。NLPに取り組んでいる研究者の方々と議論することができ、様々な知見が得られました。 発表タイトル・著者 [S3-P15] 大規模言語モデルによって医療テキストの固有表現処理はどこまで簡単になったか 西林 孝 (Ubie), 横井 祥 (東北大/理研) 背景 LLMの性能向上により様々な自然言語処理タスクに手軽に取り組めるようになりました。ただNLPの経験ゼロの状態でLLMの波に飲み込まれた私の様なエンジニアはLLM登場以前の手法の肌感が無く、LLMだとそれなりに動かせるが当にLLMに全てを任せれば良いのか判断がつきません。そこで最近取り組んでいたメディカルエンティティリ

    YANS2024でLLMを使った医療テキストの情報抽出について発表してきました
    yug1224
    yug1224 2024/10/03
  • Ant Designで始める管理画面開発

    こんにちは、Ubieデザインエンジニアの takanoripです。 最近はずっと社内管理画面を開発しており、そのフロントエンド開発にAnt Design(Antd)を採用してみたので感想と注意が必要なポイントについてまとめました。 Ant Design? Ant DesignはAnt Group(中国アリババグループの金融関連会社)が開発しているUIライブラリです。現在はReactのコンポーネントや周辺ライブラリが公開されています。 なぜAntdを選択したか 今回の管理画面開発でAntdを採用した理由は次の6つです。 コンポーネントの種類が十分豊富であること できる限り新規でコンポーネントを作らずに実装が進められることが重要 特にRange PickerやComboBoxなど複雑Form用コンポーネントが充実していること アントグループが開発をしていて十分に歴史があり現在も活発に開発がされ

    Ant Designで始める管理画面開発
    yug1224
    yug1224 2024/10/01
  • 全体最適なデータサイエンスチームの運営について (Ubie Tech Book 2024 から抜粋)

    くんぺー (@ymdpharm) です。Ubie でデータサイエンスチームの Lead をしています。 2024.5に開催された技術書典16にて、有志のエンジニアメンバーで「Ubie Tech Book 2024」を出しました (※ 現在はもう販売を停止しています)。私は「第4章: データサイエンスチームの目指す世界について」を担当し、その中で「全体最適を目指して」と題してチームの運営について書きました。 いま読み返すと3か月しか経っていないのにすでに古い部分があります。ただ古くなっていくのももったいない気がするので、内容を一部公開します。最新の状況については、直接お話しましょう! 以下、「基盤チーム」という用語を用います。技術アセットによりプロダクトチームによる事業成長を支援するチームという意味で用いていて、私達データサイエンスチームはここに位置付けられます。 Ubieとデータサイエンス

    全体最適なデータサイエンスチームの運営について (Ubie Tech Book 2024 から抜粋)
    yug1224
    yug1224 2024/09/23
  • マツコの知らない LINE ログインの世界

    Ubie プロダクトプラットフォーム所属の nerocrux です。今回は Ubie において、 LINE ログインを成功させるために工夫したことをいくつか紹介したいと思います。 面白いこともすごいこともやってないし、対象読者もよくわかりませんが、興味があったら読んでみてください。 はじめに 症状検索エンジン「ユビー」について Ubie では、症状検索エンジン「ユビー」(以下、ユビーと呼ぶ)という一般ユーザー向けのサービスを展開しています。ユーザーが簡単な質問を回答することで、関連する病名や、適切な受診先情報を得ることができるサービスとなっています。 ユビーは Web ブラウザ経由で利用されることが多いですが、iOS / Android のネイティブアプリも提供しています。 ユーザーがユビーを利用する際に、ユビーのアカウントを作成することで、一貫性のある問診・受診・受診後のフォローアップ体

    マツコの知らない LINE ログインの世界
    yug1224
    yug1224 2024/07/31
  • Ubie における、小さく泥臭くはじめる開発生産性改善

    記事では Ubie における最近の「開発生産性」というテーマで向き合っている事柄と実際のアクションについて紹介します。まだまだ発展途上ではあるのですが、何かの参考になれば嬉しいです。 背景 「開発生産性」とは一見シンプルな概念に見えますが、世のテック企業、取り組んでいる人々のアクティビティを見ていると複雑で深いものにも感じます。例えば SpeakerDeck で「開発生産性」と検索することで多様な情報発信を見ることができます。有名な書籍として「 Lean と DevOps の科学」も、初学者が内容を頭に叩き込むのも難しいのではないでしょうか。 これらの先行者の知見は素晴らしいものの、具体的に我々の現場の開発組織、事業状況などなど現実に近しい環境と密接に接続して、すぐに手応えが感じられる成果が得られるかというとそうでもないとも思います。 Ubie でも過去に開発生産性課題を感じて様々なアプ

    Ubie における、小さく泥臭くはじめる開発生産性改善
    yug1224
    yug1224 2024/07/09
  • NestJSでDataLoaderをどこで初期化するか問題

    ユビーではGraphQLのバックエンドサービスをNestJSでモジュラモノリスな構成で作っていますが、その中で得られたDataLoaderの知見について紹介します。 背景 GraphQLでN+1を回避するにはDataLoaderを使うのが一般的なプラクティスですが、DataLoaderはインタフェースの都合上リクエスト毎に初期化をおこなう必要があります。この初期化をどこで行うかが悩みどころで、いくつかパターンがあるので今回はそれについて紹介します。 DataLoaderの基 このようなスキーマとResolverがあったとします。 type Query { posts: [Post!]! } type Post { id: ID! title: String! author: User! } type User { id: ID! name: String! } @Resolver("Po

    NestJSでDataLoaderをどこで初期化するか問題
    yug1224
    yug1224 2024/06/12
  • Prismaが返すオブジェクトに機能をつけたい!

    Prismaが返すオブジェクト RubyRailsばかり書いてきたぼくも、ここ最近はTypeScriptばかり書いています。 今開発しているサービスはNestJSを使っているのですが、DBのデータを取得するのにPrismaを使っています。 Prismaでは以下のようにしてデータを取得できますよね。 const user = await prisma.user.findUnique({ where: { id: userId } }); console.dir(user)

    Prismaが返すオブジェクトに機能をつけたい!
    yug1224
    yug1224 2024/05/24
  • mablを使ってlocalStorageを弄るテストをする

    mablにて、localStorageをいじるタイプのtestを書きたいケースがあったので調べました。 JavaScriptスニペットを利用することで実現できます。 JavaScriptスニペットエディターは、ECMAScript 8をサポートしています。JavaScriptサポートのレベルはブラウザーによって異なることに注意してください。mablは、最新のChrome、Firefox、Safari (WebKit)、Edgeを使用してテストを実行しますが、これらはほぼES8の標準機能をサポートしています。 localStorage以外にも、ブラウザAPIを利用する様々なテストシーンでJavaScriptスニペットが活用できそうです。 Howto 1. mablトレーナーでステップの挿入を選択 2. JavaScriptスニペットを検索 3. 新規ボタンを押下 3. コードを編集 例えば以

    mablを使ってlocalStorageを弄るテストをする
    yug1224
    yug1224 2024/05/14
  • TypeScriptとGraphQLで実現する型安全なAPI実装

    この記事はTSKaigi2024での以下の私の発表内容を書き下ろしたものです。 なぜAPIに型をつけたいのか 現代のWebのシステム開発において、クライアント・サーバーともに型のある言語で開発されることが増えてきました。静的な型検査はコードの堅牢性やよりよいメンテナンス性の向上をもたらします。 プログラミング内部だけで型検査をするだけでも十分メリットはありますが、外部I/Oに対する型付けが不十分だとそのメリットを最大限に発揮してるとは言えません。外部I/Oとは、例えばWebフロントエンドだとLocalStorageやDOMからの入力値、それからネットワーク通信(今回はこれをAPIと呼びます[1])などですね。サーバー側でいうとAPIからの入力・レスポンスやデータベースへの読み書きが該当します。 個人的な経験から言うと、Webシステムの開発におけるエラーの多くはAPIやデータベースとのやり取

    TypeScriptとGraphQLで実現する型安全なAPI実装
    yug1224
    yug1224 2024/05/11
  • チームの生産性と向き合う

    こんにちは @glassmonekeyです。 Ubie 株式会社に転職してあっという間に二ヶ月が立ちました。 現在私は toC 向けのアプリケーションに配信する施策を入稿・管理するシステム「案件管理システム」の開発チームに所属しています。 そのチーム内で現在、私はテックリードというロールで、日々の開発を一人のエンジニアとして進めつつもチームの生産性改善、技術的な意思決定のファシリテーションなどに取り組んでいます。 今回のエントリでは、何かと話題となるエンジニアリングの生産性ですが、テックリードとしてどのように向き合ったのか、どのように改善し今後どうしていくのか?を紹介します。 生産性の定義 前提として生産性を正しく計測することは難しく、それこそ生産性を下げる行為だと私は考えています。 @hiroki_daichiさんの開発生産性について議論する前に知っておきたいことに詳細は譲るとして、一般

    チームの生産性と向き合う
    yug1224
    yug1224 2024/05/09
  • UbieにおけるGo言語のエラーハンドリング

    背景 Ubieでは以下の記事にあるように、一昨年から新しく始めるプロジェクトにはGoTypeScriptを積極的に採用しています。私は来プロダクトセキュリティが主な専門領域なのですが、公私ともに普段からGoでツールやサービスの開発をしているため、社内のGo言語の普及をサポートしたりプロダクト開発に参加したりしています。 Go言語で開発したことがある方はご存知かと思いますが、Goは標準パッケージで提供されているエラーハンドリングは最低限の機能しか提供されていません。これは、CLIツールなどではエラーの内容が簡潔に表せてよいのですが、サーバサイドアプリケーションのようにエラーにまつわる情報を詳細に残してあとから調査に利用する、という場面では不向きです。特に番環境でしか再現しないようなエラーの場合は、いかに関連情報を残せているかが、問題の解決に大きく影響します。 先日も話題になっていました

    UbieにおけるGo言語のエラーハンドリング
    yug1224
    yug1224 2024/04/07
  • WebViewからReact Nativeの関数を型安全に呼び出す

    今までCapacitor(=WebViewのみ)で実装されていたユビーのモバイルアプリ(Android/iOS)を、React NativeとWebViewを組み合わせたハイブリッドアプリとして刷新しています。その過程で、WebView内で実行されるJavaScriptから、React Native側で定義した関数を型安全に呼び出せるライブラリを実装しました。その使用例と仕組みを紹介します。 使い方 React Native側の実装 まずライブラリをインストールします。Peer dependenciesであるreact-native-webviewとcomlinkも入れてください。 npm install @react-native-webview-rpc/native npm install react-native-webview comlink # peer dependencies

    WebViewからReact Nativeの関数を型安全に呼び出す
    yug1224
    yug1224 2024/04/03
  • Prismaのテストでデータ削除を高速化する

    背景 ユビーではNode.jsのアプリケーションにおいて、DBORMにPrismaを採用しています。Prismaに限らず、実際のデータベースを使ったテストにおいてはテストを実行するごとにデータを削除することでテストごとのデータの干渉を防いでテストの安定性を保つという手法が用いられます。今回はPrismaでテスト時にデータ削除するときのパフォーマンス改善の事例について紹介します。 今開発しているアプリケーションでは以下のように、DBを用いるテストを実行する前に全てのテーブルを truncateするという素朴な方法でテストDBの掃除を行っていました。 import { Prisma, PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); export async function cleanupDat

    Prismaのテストでデータ削除を高速化する
    yug1224
    yug1224 2024/03/26
  • TypeScript 5.5で型述語を推論できて最高。配列のfilterも型安全に

    2024/6/20 TypeScript 5.5が正式リリースしたので追記しました。 TypeScriptの次バージョン5.5で、開発者が長い間求めていた機能がついに実現されました。 従来のTypeScript 5.4以前では、ユーザー定義型ガードを使う際には型述語(用語は後ほど解説します)の記述が必要です。 ▼ TypeScript 5.4 function isNumber(value: number | string): value is number { return typeof value === 'number'; } 2024年6月20日にリリースされたTypeScript 5.5では、関数の実体から型述語の型推論(infer type predicates)が可能になります。すなわち、次のようなコードが可能です。 ▼ TypeScript 5.5

    TypeScript 5.5で型述語を推論できて最高。配列のfilterも型安全に
    yug1224
    yug1224 2024/03/21
  • NestJSの構造化ロガーを公開しました

    先日以下の記事で書いたNestJSの構造化ロガーを汎用的に使えるかたちにして npm に公開しました。 使い方は普通のNestJSのカスタムロガーと同じでこんな感じで使います。 async function bootstrap() { const app = await NestFactory.create(AppModule, { bufferLogs: true }); app.useLogger(new StructuredLogger({ logLevel: process.env.LOG_LEVEL, format: process.env.LOG_FORMAT, })); const logger = new Logger("bootstrap"); logger.log("Hello structured log!", { foo: "bar" }); logger.debu

    NestJSの構造化ロガーを公開しました
    yug1224
    yug1224 2024/03/19
  • 「情報アクセシビリティ好事例2023」に応募しました

    「症状検索エンジン ユビー」を総務省が募集している情報アクセシビリティ好事例2023に応募しました。(募集はすでに締め切っています。) 情報アクセシビリティ好事例2023 「情報アクセシビリティ好事例2023」は、総務省が主導する取り組みで、情報アクセシビリティに配慮したICT機器やサービスを対象とした募集活動です。この取り組みを通じてアクセシブルなICT機器・サービスの普及促進を目的としています。 応募には3つの書類が必要です。 情報アクセシビリティ自己評価様式(応募書式1-1及び1-2) 「情報アクセシビリティ好事例2023」応募資料 情報アクセシビリティ自己評価様式 情報アクセシビリティ自己評価様式とは、米国で採用されているVPAT (Voluntary Product Accessibility Template)に倣って定められた書式で、製品やサービスがJIS規格(JIS X 8

    「情報アクセシビリティ好事例2023」に応募しました
    yug1224
    yug1224 2024/01/30
  • Rebooting Ubie Vitals Design Systems

    デザインシステム Advent Calendar 2023 25日めの記事です。 Ubieでデザインエンジニアをしているtakanoripです。 この度UbieデザインシステムであるUbie Vitalsのウェブサイトを公開しました。 またUbie Vitalsを構成するUIコンポーネントライブラリであるUbie UIをOSSとして公開しました。(こちらはまだWIP) ウェブサイトやコンポーネントライブラリ公開に至った過程を振り返ります。 Ubie Vitalsの出現と失敗 Ubie Vitalsはデザインに関するガイドラインなどをまとめる箱として作られました。 Ubieではデザイン生産基盤の構築を2022年から進めていましたが、当初はデザインシステムという箱をつくらず必要なツールやドキュメントを必要に応じて作っていました。 箱を作らないことで目先の課題を解決することに集中し、できるだけ

    Rebooting Ubie Vitals Design Systems
    yug1224
    yug1224 2024/01/18
  • Ubie Engineering ゆく年くる年 2023

    トップは sakajunquality で、インフラや各種基盤周りのあらゆるところで顔を出して contribute していくので納得という感じです。 2,3 位はデータエンジニアとして入社した二人ですが、yu-iskw はプライバシーエンジニアリングなどでも開発全体をリードしたり、Attsun1031 は根幹となる基盤システムの開発にコミットしたりなど多様な働きをしています。 4 位の teru01 は 10 傑の中で唯一 2023 年途中(6月)入社で、サービステンプレーティングツールを筆頭としたプラットフォームエンジニアリングを推進しています。 5 位の okiyuki99 は BI エンジニアであり、データカンパニーたる Ubie におけるデータ利活用を推進していて、特に dbt モデル作成を中心に貢献しています。 6 位以降は詳細を省きますが、プロダクト開発エンジニアが目立ってき

    Ubie Engineering ゆく年くる年 2023
    yug1224
    yug1224 2023/12/31
  • Firebase Authから内製認証基盤に無停止移行して年間1000万円以上削減した

    症状検索エンジン「ユビー」 では、ローンチ当初から Firebase Auth (GCP Identity Platform) を使っていましたが、OIDCに準拠した内製の認証認可基盤に移行しました。 認証認可基盤そのものは m_mizutani と nerocrux と toshi0607(退職済) が作ってくれたため、僕は移行のみを担当しました。 結果として、強制ログアウトなし・無停止でビジネス影響を出さずに、年間1000万円以上のコスト削減に成功しました[1]。その移行プロセスについて紹介します。認証認可基盤そのものの紹介はあまりしません。 移行した理由 大量の匿名アカウント ユビーでは、アクセスした全ユーザーに対して自動的に匿名アカウントを発行しています。これにより、ユーザーがアカウント登録しているかどうかに関わらず、同じID体系で透過的に履歴情報等を扱うことができます。アカウント

    Firebase Authから内製認証基盤に無停止移行して年間1000万円以上削減した
    yug1224
    yug1224 2023/12/29
  • アルファチャンネルを持つ色のコントラスト比の計算

    こんにちは。Ubieでデザイン、フロントエンド関連のお手伝いをしています、腹筋ローラーの力を信じろです。腹筋しろよ(私は最近してません)。 Qiita/アクセシビリティ Advent Calendar 2023の25日目を滑り込み(2日遅れ)で書いていきます。 サイトのグレーを定義する場合に、アルファチャンネル(透過度)を設定することがあります。グレーを color や border-color に指定することで、背景色など、他要素との馴染みがよくなります。 UbieデザインシステムであるUbie Vitalsでも、カラーパレットに採用したグレー(ブラック)にはアルファチャンネルを含めています(Primitive Colors | Ubie Vitals)。 ※Ubie Vitalsについては、年明け特集記事が公開されますのでお楽しみに! ただし、半透明な色のコントラストを求めようとした

    アルファチャンネルを持つ色のコントラスト比の計算
    yug1224
    yug1224 2023/12/29