やわらかテック

興味のあること。業務を通して得られた発見。個人的に試してみたことをアウトプットしています🍵

SELECTの結果から複数のデータを複数INSERTする

SQL

SQLで初期データを作成したいというのは、よくあるケースかなと思います。 例えば全ての企業(companies)に対して初期ユーザー(users)を1件登録する必要があるとします。企業とユーザーは1対多の関係にあり、以下のようにINSERTとSELECTを組み合わせることで…

AWS クラウドプラクティショナー(CLF-C02)に合格しました

先日、AWS公式が開催しているAWS Certified Cloud Practitioner(CLF-C02)に合格しました。 学習期間は1週間ほど。市販のテキストを読みつつ、無料で問題を解くことができるサイトを利用させて頂きました。 AWSに関しては多少の知識はあれど、実務で使ったこ…

2023年度のブログ活動の振り返り

あっという間に今年も残り数時間で終わろうとしていますね。 今年度もありがとうございました。今年は多くの方に記事を読んで頂けて嬉しい限りです。 実は報告などはしていなかったのですが、2023年はある目標を立ててブログ(アウトプット)を続けてきました…

2023年に読んで良かった本

気づいたらクリスマスが終わっていました。本当に早いですね...。 前回、公開した「2023年に買って良かったもの」に引き続き、年末恒例の「~年に読んで良かった本」についても紹介していきたいと思います。 www.okb-shelf.work 買って使ってみて本当に良かっ…

今更ながらMATERIALIZED VIEW(マテリアライズドビュー)について学ぶ

アプリケーションにおいて高負荷になりやすい処理の一つにレポート・データ集計があります。 リアルタイム性が求められる場合もあれば、ある時点までに集計されたデータを見れればOKなど、要件はさまざまですが、一般的にはデータベースに対して複雑なクエリ…

2023年に買って良かったもの

早いもので2023年も終わろうとしています。 いやー、今年もあっという間でしたね。今年もたくさん記事を書いてきましたが、どうでしたでしょうか。 読者の皆さんをはじめ、僕の記事を読んでくださる方には頭が上がりません。本当にいつもありがとうございま…

NULL値が含まれるカラムにインデックスは有効なのか

データベースで0対Nのモデルを表現する際に、よく外部キー制約とNULL許容の制約を定義することがあります。 値は特定のテーブルのIDもしくはNULLのどちらかを持つことになります。これを出版社(publishers)と書籍(books)のモデルをテーブルに落とし込んでみ…

Ruby3.4で追加されるブロックパラメーター"it"について

先週、届いたRuby Weeklyに面白そうなトピックが紹介されていました。 Ruby 3.4 Will Have 'it' — There’s never been any doubt: Ruby has it. But now as well as the ‘it’ factor, it really will have it. Confused? it is a nicer looking shortcut to …

データベースにおけるJSON型のカラムの使い所

最近、データベースのテーブル設計を担当したり、既存のテーブル設計を見ることが多いです。 テーブルの設計書を見てみるとJSON型が指定されているカラムが目につくことがあります。既存のテーブルでもJSON型が使われている箇所がありました。 「json型を使…

HonoのNode.jsランタイムにマージされた神PRを見てみる

先日、Twitterにて素晴らしいツイートを見かけました。 うおおお。@usualoma さんの神PRをマージしたぞ。これでHonoがNode.js上で3倍近く速くなった!これはFastifyよりかは少し遅いけど、他のフレームワークと比べると十分速いレベルで、Node.jsの世界にお…

エアコンの分解洗浄をして内部の汚さに衝撃を受けた

ある日のこと、ポストに「エアコンの分解洗浄しませんか?」という旨のチラシが入っていました。 今までこういったチラシが入っていたことはなくて、どうもエリアを移動しながら洗浄を行なっているようで、今回、たまたま自分の住んでいる場所が洗浄エリアに…

中間テーブルへのデータ更新(削除・追加)を効率的に行う方法

以下のようなテーブルがあったとします。 ユーザーは記事(posts)に対して、自由にタグ(tags)を設定することが可能です。 記事とタグは多対多の関係にあるため、中間テーブル(post_tags)にて記事へ設定したタグの一覧を管理しています。 仕様上、ユーザーは記…

Cloud Run上でのexpressとhonoのパフォーマンス比較

最近、JavaScript界隈の盛り上がりがすごいですね。 zigで作られたJavaScriptのランタイムであるbunは、その便利さ・パフォーマンスの良さから驚くような勢いで広まっています。その一方で新たな軽量WEBフレームワークhonoも非常に注目されています。 honoも…

毎朝、味噌汁を飲んでます(一汁一菜でよいという提案...を読んで)

少し前から、ずっと調子が良かった肌が荒れてしまいました。 元々、敏感肌で弱いアトピー持ちで季節の変わり目や花粉が飛ぶ季節になると、肌が荒れることがあったのですが、今年は今まで以上に肌の調子が悪くなりました。さまざまな要因があるため「これが原…

サブクエリとLEFT JOINのパフォーマンス比較(集計編)

SQL

業務で集計処理を書く予定があるのですが、サブクエリとLEFT JOINのどちらを使って集計した方が良いのかを判断できませんでした。もちろん、データ量やデータ特性、トレードオフなどを踏まえて判断する必要がありますが、今後、同じような場面に遭遇した際に…

今更ながらHTTPのRFC(Status Code Definitions)を読んでみる

RFC

みなさんはRFC読んでますか... 自分は普段、ガッツリと読む機会はないのですが、新しいプロトコルを触るような場合に読んだことがある程度です。 過去にWebSocketを使ってSlackライクなチャットアプリを作ったことがあるのですが、その際にWebSocketのRFCを…

sequelizeで全テーブルに対してTRUNCATEを実行する

業務でsequelizeというNode.js製のORMマッパーを触る機会がありました。 単体テストを実行する度に、データベース(MySQL)のテーブルをクリア(全削除)するために制約を無視してTRUNCATEを全テーブルに対して実行したいのですがsequelizeでは対応するメソッド…

【コピペでOK】はてなブログでソーシャルボタン一覧に「読者になる」を追加する

前回の記事でブログのデザインを一新したとお伝えしました。 その対応の一部として、はてなブログの「読者になる」ボタンをソーシャルボタンの一覧に表示するという対応を行なっています。 この位置を採用したのは、記事を読み終えた後にアクションを行うボ…

Rubyの新たなテストフレームワークtldrの紹介

またもやRuby Weeklyで面白そうなgemが紹介されていました。 Ruby製の新たなテストフレームワークtldrというものです。すでにRspecやMinitestが人気を博している中、なぜ新しいテストフレームワークの実装を始めたのでしょうか。気になったので色々と調べつ…

ミノウラ DS-2200が自転車縦置きの夢を叶えてくれた

移動手段として自転車(シクロクロス)を使っているのですが、防犯の都合で室内で保管しています。 ただ、部屋に自転車を置いてみると、その存在感には驚かされます。 思っているよりも大きいのと、部屋の面接をかなり占有してしまいます。結果的に「自転車、…

弊社の技術ブログに「Rubyで簡単なCSVパーサーを作ってみる」を投稿しました

先日、ヘイシャの技術ブログに記事を投稿しました。 簡単に内容を紹介すると、RubyでCSVファイルをパースして標準ライブラリcsvが提供しているCSV.readと同じように最終的に二次元配列に変換する処理系をフルスクラッチで実装するというものです。コードは最終的…

ブログのデザインを一新しました

すでにお気づきの方もいるかもしれませんが、ブログのデザインを一新しました。 元々はEpicというテーマを使っていたのですが、悩みに悩んだ結果、新しくkewpiedesignさんが公開されているgrayにテーマを変更しました。 今回、テーマを変更するにあたってシ…

RubyでGUIが触れるglimmer-dsl-libuiの紹介と内部実装について

先日、SubscribeしているRuby Weeklyからメールが届きました。 何やらRubyでGUIが触れる「glimmer-dsl-libui」たる、とても面白そうなgemが紹介されていました。 このgemは福岡Ruby2022でスペシャルアワードを受賞しており、とても注目されているgemのようで…

知ってるようで知らない$PATHについて調べてみた

プログラミングを始めたばかりの頃、Python3をインストールするべく環境構築に取り組んでいました。 その際によく見かけたのは「パス($PATH)を通す」という言葉です。当時の自分には何のことだか全く分からず「なんでプログラミングのインストールにバスケじ…

RubyでgRPCをサクッと試してみた

最近はマイクロサービスを検討することが多いです。 マイクロサービスにおいて、よく問題となるのはサービス同士のやりとりをどのように行うかです。オーソドックスな選択肢としてはAPIを作成してHTTP通信で呼び出すという方法が候補に上がりますが、リクエ…

今更ながら「オブジェクト指向でなぜ作るのか」を読んだ

今年は昨年度と比べるとあまり技術書を読んでいませんでした。 というのも今年はとにかくコードを書くこと、実装をすることに重きを置いていたからです。ただ、最近、活字が頭にスッ...と入ってこないのを自覚しており、読書リハビリしないとダメだなと思っ…

MarkdownパーサーをWeb Assemblyにして公開しました

先日、以下の記事を公開しました。 タイトルの通り、Golangを使ってMarkdownをHtmlに変換するパーサーを作ってみたよ〜という記事です。 www.okb-shelf.work ただモノを作ったのに公開しないのはもったいないな...と思ったのでGolangのコードをWeb Assembly…

Markdownをhtmlに変換するパーサーを作った

最近はパーサーの実装にハマっており、直近だとRubyでJSONパーサー(json形式のテキストをRubyのハッシュに変換)を作りました。 www.okb-shelf.work 少し間が空いてしまいましたが、今回はMarkdown形式のテキストをhtmlに変換するパーサーを作ってみました。 …

Rails7.10にて提案した内容がリリースされた

少し前にはなりますが、RailsのDiscussionに問題提起を行いました。 その後、Discussionで「Issueを作成して良いよ〜」とお許しを頂いたのでIssueを作成した所、修正PRが作成されてマージされるという...とんでもない出来事がありました。 www.okb-shelf.wor…

PNGファイルの中身(バイナリー)を覗いてみる

みなさんはバイナリデータの中身を覗いたことがありますか。 僕は普段、WEBアプリケーションの開発に携わっているのですが、どうしてもこういった領域とは接点がありません。一度、WireSharkというアプリケーションを使って自身のPCから外部に送信されている…