2025.03.25
この記事は「 本番環境などでやらかしちゃった人 Advent Calendar 2025」の1日目です。 はじめに 「慣れてきた頃が一番危ない」 あれ、ほんとです。 当時の私は作業にも環境にも慣れてきて、油断が出始めていました。 「いつもの作業だし、サクッと終わらせよう」 完全にそんな気持ちでした。 何が起きたのか ECサイトの保守運用をしていた頃のことです。 本番/検証(STG)/ローカルの3環境でphpMyAdminを使っており、 なぜか3つとも同じテーマ・同じ色・同じUI。 ローカル 検証 仮に言えばこんな状況。 「URLをよく見ないと、どこで作業してるかわからない」 そんな、今思えば事故るためのレールはピカピカに敷かれた状態でした。 本来やる予定だった作業&何を間違えたのか やりたいことは単純です。 STGのDBをエクスポートしてそれをローカルに流し込む。 こんなものは、お腹が空い
概要 Dockerの本番環境で秘密情報を使う際に、環境変数を使うことは推奨されてません。 秘密情報を扱うには、コンテナオーケストレーションのsecret supportを使うことが推奨されてます。 Docker Composeには秘密情報を扱うために、secretsがあります。(Docker ComposeのsecretsはDocker Swarmと併用することが前提の機能です) 環境変数で秘密情報を扱う時の問題点 秘密情報を扱う時に、よくある方法として、環境変数を使う方法があります。 (この記事において、秘密情報とはパスワード、APIキーを想定します。) しかし、Dockerのドキュメントhttps://docs.docker.com/get-started/07_multi_container/ には While using env vars to set connection set
こんにちわ。せじまです。今回は地味で泥臭い話をします。ただ、割と平易な内容かと思いますので、初学者の方にもオススメです。 はじめに ゲームでは、受取期限のついたログインボーナス的なものがよくあります。ユーザが期限までに受け取らないと、ユーザからそのデータは不可視になりますが、必ずしも、不可視になった瞬間にデータベースから直ちに削除される、というわけでもありません。バッチジョブか何かで、ガベージコレクションのように削除するケースが多いのではないでしょうか。 また、論理削除という概念もあります。論理削除についてはいろいろ意見や考え方があるかと思いますので、ここでそれについては論じませんが、「削除フラグが立ってユーザから不可視になった後、三ヶ月以上経過したデータを削除したい」みたいなことは、ゲームに限らず、しばしばあるんじゃないかなと思います。 こういった、ユーザから不可視になってしばらく経過し
「要件定義のスキルを上げたいけどどうしたら良いかわからない」 こんなふうに悩んだことはないだろうか。 要件定義ではかなり幅広いスキルが求められる。さらに要件定義の対象は毎回異なるため、具体的なレベルでスキルを言語化するのがかなり難しく、どうしてもスキル定義が「コミュニケーションスキル」や「ビジネス理解スキル」といった抽象的な言葉になりがちだ。 そこでこの記事では、要件定義を第一線で実行してきた私が、要件定義を構成するスキルを以下の5つに分解し、それぞれの向上のための方策も可能な限り具体化した。 ・論理的に物事を整理するスキル ・ビジネスの数字を理解するスキル ・業務のフローを理解するスキル ・要求を具現化するスキル ・要求を達成するために必要な機能を洗い出すスキル それでは一つずつ見ていこう。 1 要件定義をするために必要な5つのスキル この章では、要件定義に必須なスキルとそれがなぜ必要な
DBMS に依存するロジックのテストを書く時、主に2つの手法があると思います。 Repository 層などを mock する Service 層のテストをする時は、その下位の Repository 層を mock して、DBMS に依存しない形にしてからテストする レイヤードなアプリケーションで適用できる手法 テスト実行時も DBMS を裏で動かして、それを使う 本番と同じスキーマを持つ DBMS に対して、実際に insert したり select してテストする DBMS は docker-compose upとかで事前に立ち上げておく 双方にそれぞれ良さがあって、プロダクトによってどっちでやるか変わってくると思います。 この記事では 2 の手法を Prisma でどうやるかについて紹介します。 前提 実際のテストコードの例 テストヘルパーを作る 別解: ヘルパーを自動生成する je
ネットスーパーシステムの決済ステータス表現 (状態遷移) は複雑だ。 その理由は要求要件が多いことに起因しているが、多いことが悪いのではなく、それに応えなければシステムとして真の価値を発揮できないからで。逆に問題解決できなければ、著しく利便性を落としてしまうので、必須要件という位置付けにある。 前提文脈を汲み取りづらいモデリングなので、問題解決例を示すのはあまり見かけないが、自分が考えた決済ステータス定義の答えを示す。 この内容は過去にブログや登壇で話した内容の延長でもあるので、過去の内容も参考にすると良いかもしれません。 「E-Groceryにおけるカード決済処理の難しさと設計戦略」 「ネットスーパーの買い物体験を支える工夫と決済機能実現の過程」 前提条件 注文から支払い完了まで時間差がある注文後に注文内容の変更ができる品切れが発生するケースがある販売員が注文内容を変更できる0円での支払
高校の校則や内部規則が検索できる無料のWebサイト「校則DB」が登場。まずは、神奈川県と大阪府の公立高校が検索の対象で、今後それ以外の都道府県や私立高校も対象になる予定。掲載されていない学校は、生徒や保護者からの情報提供も受け付ける。利用は無料。 高校の校則や内部規則が検索できる「校則DB」。利用は無料だ 校則DBは、滋賀県のリトルグリーブが提供するサービス。「行きすぎた校則」を問題視する流れが強まっていることを受け、入学前に希望校の校則や内部規則(内規)をチェックできるようにすべく開始した。 校則DBでは、高校の校則や生徒指導にかかわる内部規則の内容を検索し、全文を閲覧できる。学校側が実際の運用に用いている内部規則も参照できることで、より実情に合った詳細な情報が得られる。 サービス開始時は、神奈川県と大阪府内の公立高校の情報が検索できる(大阪府立高校は近日追加予定)。今後、都道府県や私立
Previous slideNext slideToggle fullscreenOpen presenter view Rails vs Node.js 最終章 「Prisma」 @mizchi Cloudflare Meetup 2024/10/02 今日の Prisma + Cloudflare の様子 About https://x.com/mizchi Node.js とフロントエンドの専門家 100万円*達成率で御社のフロントエンドの高速化をやります 前書き フロントエンド/Node.js 視点のポジショントークです Railsに対するチャレンジャーとして Node.js を使ってきた話 Rubyの開発者やRubyのユーザーを否定する意図はありませんが、好き嫌いは否定しません。型が好きです 「Rails」は 2010年前後に流行っていた任意なWAFに置き換え可能 Symfony
Calendar for PostgreSQL | Advent Calendar 2021 - Qiita の10日目の記事です。 思い当たる節がある人は、今の見積もりの数倍の時間と予算を確保してからキックオフして欲しい。 多分、そのまま走ると誰か倒れるから。。。 で終わりにするわけにはいかないので、いくつか書きます。 もちろん、SQLがDBMSによって「方言」があるので、使える構文、関数名が違うってのは当然あるのですが、それ以外のところを中心に。 PostgreSQLのサーバーサイドエンコーディングはShiftJISをサポートしていない 今どき、新規で立てるデータベースはUTF8を選ぶよねーキャハハ、と思っても、何世代もバージョンアップしてきたOracleや、塩漬けされたOracleなんかは、ShiftJISを使っているところも多いのではないでしょうか。 自分で文字コードマッピングの処
GoogleはGoogle Cloudで提供している大規模分散データベース「Cloud Spanner」に、PostgreSQL互換のインターフェイスを実装したと発表しました。 At #GoogleCloudNext, we've announced the preview of Cloud Spanner’s PostgreSQL interface—combining the scalability & reliability of Spanner that enterprises trust with the familiarity & portability of PostgreSQL that dev teams . Take a deeper dive ↓ https://t.co/Y3xD1lDPLg — Google Cloud Tech (@GoogleCloudTech
こんにちは、データベース愛好家のみなさん!今日は、データベース設計で永遠の議論となっている「テーブル名、単数形 vs 複数形問題」について、徹底的に掘り下げていきます。私は単数形派です!でも、なぜそうなのか、一緒に深掘りしていきましょう。 イントロダクション:我らが主人公、単数形くん みなさん、こんな経験ありませんか? You: テーブル名って、users? user? どっちがいいんだろう... 先輩: いや、絶対usersだよ!Rails使ってるし。 You: でも、user_idって書くときは単数形だよね? 先輩: あ、そうだね...でもやっぱりテーブルは複数形! You: (心の中で)なんかモヤモヤする... 実は、この「モヤモヤ」には理由があるんです。今日はその理由を解き明かし、単数形テーブル名の魅力をお伝えします。準備はいいですか?Let's dive in! 言語の壁を突破せ
GCP(Google Cloud Platform)を個人開発プロダクトの中心として使っているマンです. AWSやAzureなど他のクラウドサービスもそうですが, クラウドサービスを自分の財布から使ってる時ってめちゃくちゃドキドキしませんか?特にお金の話💰 gigazine.net 例えばこういう記事が流れてくると, 勉強のつもりでアカウント作ったけどどうしよう🤔 仕事で使ってるけど怖くなってきた😫 などなど, 色々と不安を覚えると思います, 自分も昔はそうでした, クレカの情報入れるのこわいお💳的な. ですが安心してください. 仕組みを正しく理解して使えば個人レベルだとメチャクチャ安く収まります. このエントリーでは, 私が今年(2020年)に使ったGCPの料金をチラ見せしつつ, 目的に合わせたクラウドサービスの使い方をTipsとして紹介し, GCP(に限らず他のクラウドサービス
日本語の問いをChatGPTでSQLに変換、実行する「Chat2Query」を搭載。MySQL互換のTiDB Cloud MySQL互換のオープンソースデータベース「TiDB」(タイデービー)を提供しているPingCAP社は、日本語を含む自然言語の問いをChatGPTを用いてSQL文に変換し、実行する「Chat2Query」機能を、クラウド上でTiDBのマネージドサービスを提供する「TiDB Cloud」にβ版として搭載したことを発表しました(日本語のプレスリリース) Introducing #Chat2Query, our AI-powered natural language querying tool that will release you from tedious manual SQL writing and change the way of #DataExploration
【Unit4 ブログリレー4日目】 こんにちは、エムスリーエンジニアリンググループの福林 (@fukubaya) です。 今回は、SNSではごく一般的ないいねとその通知機能をDynamoDBを利用して実装したら思ったより大変だったので、その詳細をご紹介します。 キャナルシティ劇場は、福岡県福岡市博多区の複合商業施設「キャナルシティ博多」のシアタービル最上階に位置する劇場。本文には特に関係ありません。 m3ラウンジ m3ラウンジのいいねとその通知の要件 RDBで実装したらどうなるか いいね機能 通知機能 DynamoDBで実装する いいね機能 通知機能 いいねする いいねを取り消す 通知を表示する 未読の通知の取得 未読の通知数 未読の通知を既読にする テーブル設計むずい PKとSKに何を選ぶか LSIは途中から作れない DynamoDBをローカルで動かして設計する まとめ We are h
PostgreSQLをWebブラウザ上で動かす「Postgres-WASM」、オープンソースで公開。Webブラウザ上のx86仮想マシンで実行、レプリケーションも可能 WebAssemblyを用いてWebブラウザにx86の仮想マシンを構成することで、PostgreSQLをWebブラウザ上で実行可能にした「Postgres-WASM」がオープンソースで公開されました。 Today we're open sourcing postgres-wasm with our friends at @_snaplet Discover how we built it, and the extra features we've added: https://t.co/6kmfXBBhCS#postgres #wasm #opensource — Supabase (@supabase) October 3,
MySQLのパフォーマンスを改善するうえで、「インデックス」は重要な要素の一つです。しかし、MySQLの内部でオプティマイザがどのようにインデックスを選択し、データを処理しているのかを正確に理解しているエンジニアは多くありません。どうすれば、インデックスを適切に使いこなせるのでしょうか。今回は、MySQL運用のスペシャリストとして知られるyoku0825さんに、インデックスの活用方法について解説していただきました。 B-treeインデックスの基本構造― 今回のインタビューでは、MySQLのインデックスの知見を詳細に伺っていきます。 インデックスを適切に活用するためには、その仕組みを理解することが重要です。そこでまずは、MySQLのInnoDBで最も基本となるB-treeインデックスの構造からお話しします。内部的にどのような構造になっているか、イメージを掴んでいきましょう。 今回は、MySQ
概要 実務で使用されたSQLをまとめました。Oracle19cとOracle12cでの利用実績がありますが、他のデータベースまたバージョンでの検証は行っていません。 随時追加予定です。 Oracleデータベースメタデータ抽出 オブジェクトの定義や作成に使用されるSQL文を抽出 SELECT sqlarea.sql_id AS sql_id, parsing_schema_name, CASE WHEN length(sql_fulltext) > 10000 THEN to_clob('sql is too long') ELSE sql_fulltext END AS sql_fulltext, sql_bind_capture.name AS param_name, sql_bind_capture.value_string AS bind_value, last_active_tim
技術部データ基盤グループの青木です。 ここ1、2年はなぜか成り行きでBFFをでっちあげたり、 成り行きでiOSアプリリニューアルのPMをしたりしていたので あまりデータ基盤の仕事をしていなかったのですが、 今年は久しぶりに本業に戻れたのでその話をします。 突然の1人チーム、そして0人へ…… 今年のデータ基盤チームは消滅の危機から始まりました。 間違いなく去年末は5人のチームだったと思うのですが、 メンバーがイギリスへグローバルのデータ基盤チームを作りに行ったり、 山へ検索システムを直しに行ったり、川へレシピ事業の分析業務をやりに行ったり、 海へ広告のエンジニアリングをしに行ったりするのをホイホイと気前よく全部聞いていたら、 なんと4月から1人だけのチームになってしまいました。 事はそれで終わりません。 恐ろしいことに10月にはわたし自身も育休に入ることになったので、 10月はデータ基盤が0
こちらは NewsPicksアドベントカレンダーの9日目の記事です。 はじめに こんにちは。NewsPicks エンジニアの鶴房です。 フロントエンドの刷新プロジェクトにおいて、主にインフラとバックエンドを担当しています。 今回は私が以前起こしてしまったサービス全停止の障害の原因と、その再発防止策に関して記載します。 尚、弊社ではRDBMSとしてMySQLを利用しているので、この記事はMySQLに関する内容になります。 障害事象 今年の夏頃、約30分の間、NewsPicksのほぼ全てのサービスが停止してしまいました。 ユーザーは、その間、ログインも、記事を読むことも、記事にコメントすることもできない状態でした。 アプリを開くと、エラーメッセージが表示されるだけの状態で、障害の解消までずっとその状態が続いていました。 障害の直接原因 障害の直接の引き金になったのは、タイトルにある通りALTE
この記事は datatech-jp Advent Calendar 2023 3日目の記事です。 背景・趣旨 筆者(@yuzutas0)は風音屋(@Kazaneya_PR)という会社を経営しており、データ職種の採用・育成に関心を持っています。 複数企業で少ない専門家を奪い合って疲弊するような採用活動ではなく、マーケット全体がより豊かになるような動き方はできないだろうかと模索しています。 1つの実験として、MENTAで「第2新卒が3ヶ月でデータ職種への転職を目指す講座」というトレーニングを提供し、ありがたいことに30名以上の方々に受講いただきました。 ちなみにこの講座は今では風音屋の社内研修になっています。 MENTAの受講者が30名を突破しました🎉 卒業生が風音屋に入社したり、スキルアップして「社内で提案が通るようになった」「現職で活躍できるようになった」という感想もいただいています。
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 主旨 以前はシステムの状態をオブジェクト指向でカプセル化し、オブジェクト同士の通信でシステムの制御をしようとしていた しかし、Webアプリケーションのように状態をメモリ上に保持し続けるのが難しい環境が増えると、上記のことがやりにくくなった(ORMのインピーダンスミスマッチの影響が大きくなった) 現在では、システム全体の状態を管理するためにオブジェクト指向を用いるシーンは減っているが、要所要所でシステムを抽象化する道具の一つとして用いるシーンはあり、適材適所で使い続ければ良い はじめに 一時期あれだけもてはやされた「オブジェクト指向」です
Software Design「データベース速攻入門」に「SQL50本ノック」が掲載されました - LIVESENSE ENGINEER BLOG 最近では、postgres-wasmなど、WebブラウザでDBを動かせるようになってきており、もう少しすれば、WebAssemblyを使って、ブラウザですぐにノックを始められるようになるかもしれません。もしも、また何年か後に記事を更新する機会があれば、試してみたいですね。 Web上からすぐに試せるpostgres-wasmはPagilaのデータを持っていくことが現時点で出来なさそうだったものの、SQLite3 WebAssemblyはSQLiteのデータを持っていけました。SQL50本ノックを気軽に試せそうです。 手順1 sakila-sqlite3をダウンロード まずgithubからsakila-sqlite3をダウンロードします。 gith
生SQLを扱う $queryRaw TypeScript向けのORMライブラリとしてPrismaがあります。Prismaは直感的で型安全なAPIを提供し、TypeScript向けのORMとしては第一に名前が上がることが多いライブラリです。 しかしそんな人気なPrismaでも、裏側では少しクセのあるSQLが発行されていたり、欲しいSQLがPrismaのAPIでは実現できない場合があります。 そういった場合のために $queryRaw というメソッドが用意されており、これを使うことで生SQLを書いてその結果を受け取ることができました。他のORMにもよくある機能です。 例えば以下のように実装することができます。 const users = await prisma.$queryRaw` SELECT id, name FROM "Users" WHERE id = ${userID} `; co
こんにちは、データ基盤グループの吉田(id:syou6162)です。データ基盤グループでは安定してデータを利用できるように様々な取り組みを行なっています。本エントリでは、データ品質に問題がある場合にすぐに気付けるようにしたSQLによる監視の仕組みを紹介します。 背景 SQLを使った監視基盤の構築 実際の監視項目例 他チームがdailyで転送しているデータがバッチの失敗により遅れていないか BigQueryのエラーレートが急激に増加していないか 承認済みビューの設定が意図せず消えていないか 今後の展望 背景 データ基盤の運用をしていると、日々様々なトラブルと向き合う必要があります。例えば、以下のようなものがあります。 他チームがdailyで転送しているデータがバッチの失敗により遅れている TerraformなどのIaCで承認済みビューの権限管理を行なっているが、コードの設定ミスで意図せぬ状態
3行まとめ はじめに Claude Codeのログ保存機能とその特徴 ログ分析の活用例 音声入力の課題と英語プロンプトの活用 DuckDBを用いた分析アプローチ スキーマ情報の重要性とログ分析の活用 ログの長期保存設定 まとめ 3行まとめ Claude Codeの会話ログはJSONL形式で保存されており、DuckDBを使って日次の利用状況や音声入力の課題などを分析できる 英語プロンプトの学習効率化やエラーパターンの特定など、自分の仕事の仕方を改善するための実践的な活用方法がある JSONLファイルのスキーマ情報を整理することで、Claude Codeがクエリを書く際の精度が向上する はじめに Claude Codeは非常に強力なツールで、これ自体は別のブログで書く予定ですが、もはやこれなしでコードを書けないほど便利に使っています。今回は、そのClaude Codeとの会話ログを分析すること
Trusted by 1,000+ engineers, analysts & business owners DuckDB GUI Client DuckDB Database GUI, SQL editor & SQL + Python notebooks. Powerful SQL Editor with smart autocomplete SQL + Python Notebooks for Data Exploration & Dashboards Edit database records as easy as updating a spreadsheet AI Assistant with the latest models including GPT-5, Claude 4, Gemini 2.5 Pro
データベース(に限らずあらゆる永続化リソース)を使用するテストをいかにして行うかはいつだって悩みの種です。この悩みは「どうやったらデータベースを使用するテストを行えるかわからない」ではなく「なんとかやってるけど、不満のようなものがある」というものになるかと思います。 やりかたはたくさんあるのですが、その優劣は条件なしに比較する意味がないくらい、条件に依存します。どんな選択肢も「この条件なら最適」と言えてしまうだけに、広いコンテキストで「こうするのがベスト」とも言いづらいのです。 前提 xUnit Test Patterns を下敷きにします。 ユニットテストでの話です。他でもある程度通じます。 具象イメージはSpringBootを使用するWebアプリケーションです。そこまでべったりな内容ではありませんが、背景にあるとご理解ください。他でもそれなりに通じます。 データベースを使用するテストで
最近思いつきで身内向けにTwitterクローンを開発していて、そこでの知見をゆるく共有したいと思います。技術選定の段階で以下の記事を参考にさせていただいたのですが、この記事の内容を前提として代替案としてこれもいいんじゃない?という話をしたいと思います。 フロントエンド 元々私は個人的にずっとNuxtを使っていたのですが、やはり現状はNext.js (+ Tailwind CSS)が一番良い気がします。一度勉強してみたら全然アリだな、と思いました。 バックエンド こちらもNext.jsでフロントエンドと同時に開発できます。Next.jsのServer Actionsはサーバーコンポーネントとクライアントコンポーネントどちらからでも呼び出すことができ、DBにアクセスしたりといったことができます。 Server Actionsの注意点 便利なServer Actionsですが、セキュリティの観点
1. sqldef とは sqldef は "The easiest idempotent MySQL/PostgreSQL/SQLite3/SQL Server schema management by SQL." と謳っているDBスキーマ変更管理ツールです。 通常の開発において DDL 文を管理する場合、環境を1から作るように CREATE TABLE 文など新規作成 DDL 文を準備すると共に、既に作成済みの環境でテーブルを変更するために ALTER TABLE 文など差分適用 DDL 文を準備する必要があります。この2種類の DDL 文を二重管理しないといけないというのは DBA にとっては頭の悩ましい問題でした。(差分適用 DDL 文のみ準備し、1から環境を作る場合も全ての変更を適用するという手もありますが…) sqldef を利用すると、変更適用先 DB の現在の状況と新規作成
前提 前提ですが。 transaction=Consistency/Isolationを担保する仕組みの話とする。 一般にtransactionが持つべき属性はACIDと言われる。C/Iに比べて、A/Dが“わかりやすい”のでAtomic/Durableの属性の方が人口に膾炙しているが、現在のtransactionではA/Dネタはあまり話題にならない。A/Dネタはローカルだけで見るのであれば普通にfile system /storageの話になる。元来Atomic/Durableはtransactionのコンテクストでは専らlogging / recoveryの話だった。そして、これは非同期のepoch-basedになるとそれ自体の取り扱い優先度が下がる。現代的なtransactionでは、「現時点ではread committedが保証されているFS/storageでA/Dの問題は(ある程度
このように、層ごとに関心事の分離を行うことで、保守性の高い(変更容易性や再利用性等)アプリケーションを実現できます。 しかし、「トランザクション」においてはどうでしょうか。 トランザクションはビジネス領域においても、技術領域においても関心事がある内容です。 そういう曖昧なものは「ひとまず usecase 層に入れてしまえ」という方針になりがちです。 ですが、DB 固有の知識を usecase 層の関心事にしてしまっては、関心事の分離をするメリットが得られません。 そのため、関心事の分離を実現しつつトランザクション実装をする方法を模索してみました。 前提 1. クリーンアーキテクチャを採用している(オニオンアーキテクチャやレイヤードアーキテクチャも含む) そもそもビジネス知識と技術知識を分離していないアーキテクチャを採用している場合、メリットは得られません。 そのため、オニオンアーキテクチャ
WHERE 条件のフィールドを UPDATE するのって,明示的にロックしてなくても安全?全パターン調べてみました!MySQLSQLPostgreSQLDatabaseQiitaEngineerFesta2022 TL; DR MySQL/Postgres とも, MVCC アーキテクチャの恩恵で, SELECT と UPDATE は基本的には競合しない。 単一レコードのシンプルな UPDATE でも排他ロックされ,排他ロック中のレコードへの UPDATE での変更操作は トランザクション分離レベルによらず ブロックされる。UPDATE 文に含まれる WHERE 句での検索もブロックされ,これはブロックされない SELECT による検索とは別扱いになる。 但し UPDATE 文の WHERE 句上で,更新対象をサブクエリの SELECT から自己参照している場合は例外。トランザクション分離
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く