Elasticsearch Painless スクリプトを動かす際の注意点について確かめてみた

こんにちは。最近は技術負債解消や開発効率向上に携わっているエンジニアの古矢です。 弊社ではキーワード検索エンジンに Elasticsearch を使用しており、システム内部では様々なクエリが発行されています。 Elasticsearch には Painless という Java VM ベ…

Node.jsのスタックトレースが読みづらいのはなぜ?

こんにちは、Legalscape コンテンツバリューチームでエンジニアをしている清水です。LegalscapeではNode.jsで書かれたサーバーが多く存在するため、ログを読み取る際にNode.jsのスタックトレースを見ることも多いのですが、どうもエラーが起きている箇所が特…

最近ハマっているterraformプロジェクト構成

こんにちは。Engineering Managerの小林です。 今日は最近一番使い勝手がいいと思っているterraformのプロジェクト構成を公開します。 dev(development)、stg(staging)、prd(production)の3環境がある想定で進めていきます。 今回の構成で実現したいこ…

1 + 1 = 2 をプログラミングで理解する

Legalscape のしろくまです。 自然数の集合論的定義(フォン・ノイマンの構成)は空集合の公理と無限の公理を利用して 以下のようになります。 0 = ∅ 1 = {0} = {∅} 2 = {0, 1} = {∅, {∅}} 3 = {0, 1, 2} = {∅, {∅}, {∅, {∅}}} ・・・ また加算は S(n) = n ∪…

15分で適格度トレースまで辿りつく強化学習

15分で適格度トレースまで辿りつく強化学習 by @aximov Legalscape の中山大地です。 Legalscape では、Legalscape Night というイベントを開催しています。この記事では、10月の Legalscape Night で LT をしたときに使ったスライドをみながら、社内勉強会…

PDFの中身を仕様を片手に読んでみる

PDF

こんにちは。Engineering Managerの小林です。 Legalscapeでは各種コンテンツの利活用性を高めるために、すべてのコンテンツをHTMLにする取り組みをしており、これを構造化と呼んでいます。 構造化の対象はWebコンテンツに限らず書籍にも及ぶため、PDFもHTML…

LLMのコンテンツフィルターについて

3行でまとめる Azure OpenAIとGeminiでは、コンテンツフィルターの挙動が異なり、エラーハンドリングの実装方法も変わってくる Azure OpenAIは400エラーで明確にブロックする場合と200で一部ブロックする場合があり、Geminiは200レスポンスでブロック理由を…

LLMコストの盲点: 日本語トークナイザー効率で変わる実質コスト比較(GPT-5, Claude Sonnet 4.5, Gemini 2.5 Pro, PLaMo 2.1 Prime)

はじめに こんにちは、LegalscapeでAIエンジニア/データサイエンティストをしている富田です。 皆さんは各LLMの本当のコストを測ったことがありますか? 1Mtokenあたり○ドルという料金表は確認されていると思いますが、実は各LLMの日本語に対するトークン効…

TypeScript は Structural Type System ではない場合がある

Legalscape のしろくまです。 TypeScript の Type System では Nominal な比較が用いられることがあります。 例 class Product { private name: string; } class User { private name: string; } let p = new Product(); let u = new User(); // Type 'User'…