tadyjpのブックマーク (2,091)

  • ただJSONサイズを80%削減する話

    モチベーション HowToだけを知りたい方は読み飛ばしてもOKです。 モチベは次の2つです。 通信量を削減したい! 難読化したい! 1. 通信量を削減したい! 個人開発しているサイトでNetlifyを使っていました。 NetlifyにはFreeのプランがありますが、通信量の制限があります。 個人開発で潤沢にポケットマネーがあるわけではないので、できるだけ通信量のケアをしたい! 2. 難読化したい! サーバーからブラウザへJSONを配信すると、JSONの中身が見れてしまいます。 苦労してデータ作ってるので、JSONの中身見られてパクられるのがちょっとなぁ...(※)と思ってました。 nginxのようなミドルウェア層でgzipやBrotli圧縮しても良いのですが、ブラウザのディベロッパーツールで見れちゃったり、よく知られた圧縮方式なのでデコードもしやすいです。 独自の方式で難読化したい! (※

    ただJSONサイズを80%削減する話
    tadyjp
    tadyjp 2025/01/22
  • マルチテナントSaaSのテナント分離をRow-Level Securityに移行した - Sansan Tech Blog

    こんにちは、クラウド請求書受領サービス「Bill One」の開発に携わっているソフトウェアエンジニアの加藤です。Bill OneはB2BのマルチテナントSaaSであり、データベースとして Cloud SQL 上のPostgreSQLを利用しています。従来はマルチテナントのデータを分離するために、テナントごとにPostgreSQLのスキーマを分けていましたが、2020年12月にRow-Level Securty(行レベルセキュリティ。以降RLSと表記)による分離に移行しました。 稿では、移行の背景とRLS組み込みにあたって考慮したポイントをご紹介します。 マルチテナントSaaSのテナント分離 マルチテナントSaaSにおけるテナント分離方法はいくつか知られており、大きく次の3つに分けられます。 アプリケーションの実行環境ごと完全に分離する データベースのみをインスタンスやスキーマで分離する

    マルチテナントSaaSのテナント分離をRow-Level Securityに移行した - Sansan Tech Blog
    tadyjp
    tadyjp 2025/01/21
  • RSCがSPAに与える意味についての考察、Wakuを試してみませんか?

    こんにちは、Wakuの作者です。RSCのためのReactフレームワークであるWakuですが、SPAもサポートしたいと思っています。RSCとSPAに関して思ったことを雑多ですが記事にしたので、よろしければご覧ください。 以下、ChatGPTによる翻訳です。 はじめに RSCはReact Server Componentの略ですが、この投稿では以下の2つの主要な要素を含む広義のアーキテクチャとしてRSCを使用します。 コア機能:Reactコンポーネントやその他の値をシリアライズおよびデシリアライズする能力。 コア機能に基づくベストプラクティス:まだ探索の余地があると感じています。 SPA(Single Page Application)は、静的ファイルとしてデプロイされることが多いです。別のサーバーが存在する場合もありますが、それは通常SPA自体を提供するためのものではありません。この文脈では

    RSCがSPAに与える意味についての考察、Wakuを試してみませんか?
    tadyjp
    tadyjp 2025/01/14
  • OpenAIの次期最強モデル「o3」、人間を超えて超人レベルに進化

    OpenAIの次期最強モデル「o3」、人間を超えて超人レベルに進化2025.01.07 19:0051,965 satomi もう追いつかれちまった…。 12日間にわたるOpenAIプレスイベントの最終日(12月20日)に発表された新しいAIモデル「o3 」と「o3-mini」は、昨年9月に出た「o1モデル」の後継モデルです。一般公開に先駆けて、安全性テストや研究目的の利用はもう解禁になっているわけですけど、数々のテストでとんでもないスコアを出しているっていう、もっぱらの評判ですよ。 「o3 」って何?「o3」はOpenAIが開発した最新の推論モデルで、miniはその小型版です。 開発にあたってOpenAIが組み込んだのは「private chain of thought(外部から見えない思考の連鎖)」というプロセス。これは、回答を出す前にいったん立ち止まって内部の対話を精査し、先々を見越

    OpenAIの次期最強モデル「o3」、人間を超えて超人レベルに進化
    tadyjp
    tadyjp 2025/01/08
  • Cloud Build での Next.js のビルドを最適化する

    はじめに Zennプロジェクトでは、フロントエンドNext.js を使っています。実行環境は Google Cloud の Cloud Run で、ビルドは Cloud Build で行っています。 以降、すべてステージング環境の話となります。 Cloud Build は、GitHub の 特定のブランチの push をトリガーとして、Next.jsのビルドを行い Dockerイメージを作成し、リポジトリに push します。その後、Cloud Run に新しいリビジョンを作成し、新しいDockerイメージをデプロイします。 この一連の処理に、平均して 8 分程度かかっていました。 さすがに長いと思い、最適化を試みた結果、平均して 3 分 20 秒 程度まで短縮することができました。 先に結論 効果があった変更点は、以下の通りです。 Cloud Build のロケーションを、Art

    Cloud Build での Next.js のビルドを最適化する
    tadyjp
    tadyjp 2024/12/30
  • 実践セキュリティ監視基盤構築

    書では情報セキュリティ対策の一環であるセキュリティ監視を実現するための方法として、セキュリティ監視の基盤を自分で構築するために必要となる実践的な設計・実装方法について紹介します。セキュリティ監視基盤を内製する方だけでなく、既製ソフトウェア・サービスを利用して基盤構築しようとしている方にも参考になれば幸いです。

    実践セキュリティ監視基盤構築
    tadyjp
    tadyjp 2024/12/30
  • AIスクレインピングエージェントの構築(LangGraph, Firecrawl)

    はじめに この記事では、LangGraphとFirecrawlを使用して、企業のWebサイトから特定の情報を抽出するWebスクレインピングエージェントを構築する方法を紹介します。具体的には、企業のホームページから社長の名前を取得する方法を解説します。 参考にさせていただいた動画 この動画では特定のキーワードをホームページから取得していますが、今回は正規表現では取得できないより抽象的な情報を取得することに挑戦しました。 使用技術 LangGraph LangGraphは、AIエージェントを作るためのツールで、複雑な処理をいい感じに管理してくれる便利なフレームワークです。状態遷移グラフを使って、どの処理をどの順番でやるかを分かりやすく設計できます。 特徴: 処理の流れを図にして確認できる(Mermaid図対応) 条件分岐や並列処理ができて柔軟 タスクの状態を一括管理 プロジェクトでの役割:

    AIスクレインピングエージェントの構築(LangGraph, Firecrawl)
    tadyjp
    tadyjp 2024/12/29
  • AWSリソースの命名規則を考えてみた (2024年版) | DevelopersIO

    リソース名に規則性を持たせたい こんにちは、のんピ(@non____97)です。 皆さんはAWSのリソース名に規則性を持たせたいと思ったことはありますか? 私はあります。 AWSを使っている中で「命名規則を設定した方がいい」もしくは「設定しなければならない」場面があります。 利用し始めはリソース数や管理、使用するメンバーが少なくなんとかなることもあります。しかし、規模が大きくなってくると、命名規則が設定されておらず無秩序にリソース名が設定されていると、オペレーションミスが発生したり、構成を把握するのに時間がかかったりします。 そんな命名規則を設定するのにあたって参考になるのが以下記事です。 こちらの記事をベースに命名規則を改めて考えてみた時に、考慮が必要な内容をまとめてみました。 以降、AWSリソースの命名規則についてまとめた基設計書の例を紹介します。 記載した内容に対する一言コメントは

    AWSリソースの命名規則を考えてみた (2024年版) | DevelopersIO
    tadyjp
    tadyjp 2024/12/29
  • 【保存版】Active Storageの内部詳細と、5年以上productionで運用して得た知見(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Active Storage in production: lessons learned and in-depth look at how it works - rubyonrails-talk - Ruby on Rails Discussions 原文公開日: 2023/07/26 原著者: Breno Gazzola 参考: Active Storage の概要 - Railsガイド 元記事はRuby on Rails Discussionsへの書き込みですが、「公式ドキュメントにしたい」との声もあったほど大きな反響を呼びました。 2023年の情報につき、記事のクラウドなどの情報はその後状況が変わっている可能性もありますのでご了承ください。 🔗 1: 概要 私の会社では、ユーザーアップロードの実装が必要になる直前に、幸

    【保存版】Active Storageの内部詳細と、5年以上productionで運用して得た知見(翻訳)|TechRacho by BPS株式会社
    tadyjp
    tadyjp 2024/12/26
  • tfmv - Terraform のリソース名のリファクタリング

    tfmv は以下のことをするシンプルなツールです。 リソース名の変更 リソースの参照の変更 moved block の生成 なお、ここでいうリソースは Terraform の以下のものを指します: resource data source module Remote State を参照したりしない静的なツールで事前に terraform init を実行したりする必要もありません。 リソース名を書き換えるロジック リソース名を書き換える方法として現在 3 つサポートしています。 多くの場合は --replace (-r) で十分かと思いますが、より柔軟な修正をしたい場合は正規表現や Jsonnet が使えます。 固定文字列の置換 --replace (-r) '<置換前の文字列>/<置換後の文字列>' マッチする文字列が全部置換されます。 正規表現による置換 --regexp '<正規表現

    tfmv - Terraform のリソース名のリファクタリング
    tadyjp
    tadyjp 2024/12/25
  • All remote

    創業以来、GitLabはDevSecOpsプラットフォームアプローチを適用して、65か国以上で人々が共同作業を行い、コミュニケーションし、結果を生み出す方法を革新してきました。当社では、その知識とベストプラクティスを一般に公開しています。

    All remote
    tadyjp
    tadyjp 2024/12/25
  • 4.39.0 to 4.41.0: the `cloudflare_record` no longer has the `value` argument and results in all of these resources needing to add it back · Issue #3915 · cloudflare/terraform-provider-cloudflare

    tadyjp
    tadyjp 2024/12/20
  • TypeScript の Discriminated Union と Haskell の代数的データ型 - 一休.com Developers Blog

    この記事は 一休.com Advent Calendar 2024 の15日目の記事です。 予定より早く書き上げてしまったので、フライングですが公開してしまいます。 TypeScript の Discriminated Union (判別可能な Union 型) を使うと、いわゆる「代数的データ型」のユースケースを模倣することができます。一休のような予約システム開発においては「ありえない状態を表現しない」方針で型を宣言するためによく利用されています。 「あり得ない状態を表現しない」という型宣言の方針については以下の URL が参考になります。 Designing with types: Making illegal states unrepresentable | F# for fun and profit このユースケースで Discriminated Union を使う場合、それは文字

    TypeScript の Discriminated Union と Haskell の代数的データ型 - 一休.com Developers Blog
    tadyjp
    tadyjp 2024/12/14
  • 2024年11月29日|福島良典 | LayerX

    (※ 社内報です。8-9割社内向けに書いています。この半年、LayerXの皆が取り組んでいたことがいかにすさまじいものだったか、困難を乗り越えてきたのかを公開することで、LayerXの皆が外に話しやすくするために公開します。今回やり遂げたことに自信をもってほしいです。) 2024年11月29日。LayerXにとって非常に歴史的な日になりました。私にとっても忘れられない日になりましたし、LayerXの皆にとっても忘れられない日になったのではないでしょうか。 LayerXの皆へこの半年間、すごく厳しいことを言い続けてきたと思います。当にこんな目標達成できるの?と疑問に思ったことがある社員も少なくないと思います。 そういった困難を超えて、この目標を達成した皆が誇らしいです。 誰か1人が頑張ったという話ではなく、全員が頑張らないと絶対に達成できない目標でした。営業チームだけでなく、プロダクトチー

    2024年11月29日|福島良典 | LayerX
    tadyjp
    tadyjp 2024/12/14
  • 無自覚にメンバーの心理的安全性を奪っていた経験から得た学び

    2024.12.11 エンジニア組織のリアルな失敗経験から学ぶ! 生産性向上&チーム強化Tips

    無自覚にメンバーの心理的安全性を奪っていた経験から得た学び
    tadyjp
    tadyjp 2024/12/12
  • SaaSのNRRは役に立たない?見るべきは契約後12ヶ月の月次推移。グローバル、日本、自社の数値で解説。|tebiki ブログ

    SaaSのNRRは役に立たない?見るべきは契約後12ヶ月の月次推移。グローバル、日、自社の数値で解説。 一般に定義されている「NRR (売上継続率)」の算式は、SaaS企業の稼ぐ力を総合判断するには役立ちますが、そのまま数字を見ても直近のカスタマーサクセス戦術評価には役立たないよ、という分析を自社データを交えて解説します。 なお、平均顧客単価とNRRは正比例の関係にあり、例えば月額5,000円のSaaSのNRRは低く、月額15万円のNRRは高くなります。ビジネスモデルの違いから来るもので両者を比較する意味はありません。記事では高単価SaaSを念頭において書いています。 貴山敬 (@tkiyama) 「NRR (Net Revenue Retention)」とは日語では「売上継続率」。既存顧客が伸びているのか/減っているのか、という指標で、SaaS企業の力をあらわす重要指標の一つです。

    SaaSのNRRは役に立たない?見るべきは契約後12ヶ月の月次推移。グローバル、日本、自社の数値で解説。|tebiki ブログ
    tadyjp
    tadyjp 2024/12/10
  • 問い合わせフォームを実装しただけなのにスパムメールの加害者になっていた話 - Qiita

    よくある問い合わせフォームを提供していたら、知らぬ間にスパムメールの加害者になっていた話です エンジニアが知っておくべき メール送信・運用ノウハウ、メールの認証技術セキュリティについて投稿しよう! by blastengine Advent Calendar 2024 の8日目です。 要件 お問い合わせ内容の他、名前や所属、メールアドレスの入力が必須 問い合わせ完了後、入力されたメールアドレス宛に自動応答メールを送る 自動応答メールには入力された問い合わせ内容を記載する 同様に指定したサービス担当者宛にも問い合わせ通知メールを送る 以上の要件で作成しました。 実現方法 メール送信にはAWS SESを使用しました。問い合わせ確定ボタンを押下後にAWS Lambdaにリクエストを飛ばし、SESと連携してメールを送信する流れです。 実装後のこと 実装後、しばらく正常に稼働していました。しかし、

    問い合わせフォームを実装しただけなのにスパムメールの加害者になっていた話 - Qiita
    tadyjp
    tadyjp 2024/12/10
  • 改めて学ぶ satisfies 演算子

    TSKaigi Advent Calendar 2024の9日目の記事となります。 皆さんは普段TypeScriptのsatisfies演算子を使っていますか?私はswitch文の最後をnever型で終える際に、1行で記述するために使っていました。 type Role = "admin" | "user"; const getRoleText = (role: Role) => { switch (role) { case "admin": return "管理者"; case "user": return "ユーザー"; default: // もし将来Role型に新しい値が追加された場合、この部分でコンパイルエラーが発生 return role satisfies never; } }; const getRoleText = (role: Role) => { switch (rol

    改めて学ぶ satisfies 演算子
    tadyjp
    tadyjp 2024/12/09
  • TypeScriptのもとでuseRefを使うときに知るべきRefObjectとMutableRefObjectについて

    TypeScript環境でのReactの useRef は、初期値と型引数の与え方によって返り値の型が RefObject と MutableRefObject のどちらかになります。どういう使い方のときにどう書いてどちらを得るべきかを、 @types/react の更新まわりの議論を追った結果を示します。 この記事は2021年5月現在、React 17.0.2が最新バージョンの時点で記述します。 参考にした情報 https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065#issuecomment-446425911 RefObject と MutableRefObject が別である理由について https://github.com/DefinitelyTyped/DefinitelyTyped/pull/38228#i

    TypeScriptのもとでuseRefを使うときに知るべきRefObjectとMutableRefObjectについて
    tadyjp
    tadyjp 2024/12/09
  • React v19 – React

    React 19 is now stable! Additions since this post was originally shared with the React 19 RC in April: Pre-warming for suspended trees: see Improvements to Suspense. React DOM static APIs: see New React DOM Static APIs. The date for this post has been updated to reflect the stable release date. In our React 19 Upgrade Guide, we shared step-by-step instructions for upgrading your app to React 19. I

    React v19 – React
    tadyjp
    tadyjp 2024/12/06