OPTIMINDテックブログのフィード

https://zenn.dev/p/optimind

世界のラストワンマイルを最適化する、OPTIMINDのテックブログです。「どの車両が、どの訪問先を、どの順に、どういうルートで回ると最適か」というラストワンマイルの配車最適化サービス、Loogiaを展開しています。https://recruit.optimind.tech/

フィード

記事のアイキャッチ画像
Effect.tsのpipe()関数は、なにか
OPTIMINDテックブログのフィード
Effect.tsでは、 Effect.Effect や Option.Option など、さらに言えばあらゆるものに .pipe メソッドが生えています。 (パイプと読む)すこし例を見てみましょう。import { Option } from "effect";const fakeFetchName = () => { switch (Math.floor(Math.random() * 3)) { case 1: return Option.some("Alice"); case 2: return Option.some("...
1日前
記事のアイキャッチ画像
リトライ管理はEffect.tsを推奨したい (Effect.ts Schedule)
OPTIMINDテックブログのフィード
リトライが必要だウェブアプリケーションを作る上で、外部サービスを利用するとき、リトライについて考える必要があります。たとえば、クラウドサービスを使う上でも、一瞬500エラーを返すけれども、次の瞬間にやりなおせばうまくいくことがあります。こうしたとき、それがショットのリクエスト内のことであれば終了してもよいのかもしれませんが、ロングランであれば、サービスのユーザー体験に影響します。そのようなとき、リトライするように設計することがウェブサービス開発者には求められます。[1] 既存のパッケージライブラリの課題具体名を挙げることはしないが、従来のパッケージには下記のような課題が...
22日前
記事のアイキャッチ画像
依存が浮かび上がる!?Effect.tsで依存グラフをレイヤで設計しよう、そしてDIコンテナについて考える
OPTIMINDテックブログのフィード
この記事のコード例は、bunを利用して実際に実行できます。 依存が浮かび上がる まずは依存がない基本から売上伝票の一覧から、売上の合計を計算することを考えてみます。とりあえず、単純に合計値を計算することを考えます。import { Effect, Stream } from "effect";// ┌─ Effect.Effect<number, never, never>// ▼const profitSum = Effect.gen(function* () { const profits = Stream.make(1, 2, ...
2ヶ月前
記事のアイキャッチ画像
Effect.tsはストリームを扱う目的でも便利だよ、という話 with BigQuery Storage Write API
OPTIMINDテックブログのフィード
この記事の目標クオータを越えないようにしつつ、BigQueryにStorage Write APIでインサートしてみよう。ということになります。この記事を読むにあたって、BigQueryの知識は必要ないです。詳しくはBigQuery Storage Write API の概要 - Google Cloudを参照。BigQueryはビッグデータ向けのデータベース、分析ツールです。ストリームで処理しつつ、ストリーム単位のトランザクションが扱えたり、重複して挿入されない保証をしたりできます。たとえば、旧来のやつは二重挿入されることもありえたりしました。こちらを利用して、以下の...
2ヶ月前
記事のアイキャッチ画像
誰でもアクセスできるURLで情報を共有するリスクについての考察
OPTIMINDテックブログのフィード
Webサービスでは誰でもアクセスできるURLを発行する機能を持つものが多くあります。例えばGoogle Driveの共有設定で「リンクを知っている全員」にするとか、Notionで「Web公開」をするなどです。非公開URLやリンク共有などと呼ばれることもあります。お手軽に誰でもアクセスできるようになるのは便利なのですが、当然漏れてはいけない情報が漏れるというようなセキュリティリスクもあります。意外と人によってリスクの捉え方が違っているので、改めて情報や思考の整理をしてみようと思います。この記事は株式会社オプティマインドによる「Optimind Advent Calendar 2024...
8ヶ月前
記事のアイキャッチ画像
GitHub Actionsでカスタムコマンドを作ってChatOpsを始めよう(フォーマットをする例)
OPTIMINDテックブログのフィード
アドベントカレンダーです。https://qiita.com/advent-calendar/2024/optimindGitHubでChatOpsをぜひやりましょう。ということで、その第一歩として、GitHub Actionsを利用して手軽に実行できるチャットコマンドを作ってみたいと思います。 シチュエーションGitHubでレビューするときに、ちょっとした編集はGitHubの機能でできます。なので、レビュアー側で片付けてしまいたい。だけれどいざコミットすると行が長くなって改行が必要だった…といったことがあります。フォーマットで落ちてしまってスムーズに進められない。Git...
8ヶ月前
記事のアイキャッチ画像
今更のブロックチェーン入門
OPTIMINDテックブログのフィード
この記事は、株式会社オプティマンドアドベントカレンダー2024 1日目の記事です。 blockchain概要 分散型システムの観点そもそも今回の記事に執筆する経緯として、分散型システムの本を読んでいる中で、gossip protocolというものを知り、それでBitcoinにも使われているよ、との情報が得られて興味を持ち始めました。ブロックチェーンは元々根幹的分散型システムなので、この節では従来のWEB2で議論しているものとの違いをみながら、ブロックチェーンの特徴や考え方をまとめたいと思います。 CAP定理とPACELセオレム分散型システムの設計において、CAP定理(Co...
8ヶ月前
記事のアイキャッチ画像
Slackの画像等のファイルを含めたメッセージをGitHubのIssueコメントとして同期する
OPTIMINDテックブログのフィード
開発に関する重要な会話でもSlackでやりとりがされがちですが、GitHubに連携したいという気持ちがあります。もちろん、GitHubになるべく書いてください、といって解決すればよいですが、Slackのほうが距離が近いとか、そもそも開発者以外と会話するということもあります。そのときに、SlackのポストをうまくGitHubに同期する方法を持っておけば、色々工夫できます。この記事では、その同期の部分のみに着目しますが、実際はさらにそれをどう活用するかというのを考える必要があります。例えば、既存のスレッドに !gh-link 123 としたらそこから先のメッセージが Issue 123 ...
10ヶ月前
記事のアイキャッチ画像
Emacsの良いところ
OPTIMINDテックブログのフィード
会社でEmacsの紹介をする機会がありました。せっかくなので私の観点でのEmacsの良さを言語化しておこうと思います。Emacsのことを知りたいと思った人の助けになれば幸いです。 前提Emacsは名前を聞いたことがある、くらいの人を想定読者としています。私はEmacsに特段詳しい人間ではありません。ただの一個人の感想です。他のエディタやIDE等と優劣をつける意図はありません。他のツールにはそのツールの良いところがあると思います。他のツールに無いことしか書かないということはありません。みんな互いに影響し合っています。 Emacsの良いところ以下では私がEmacsを使っ...
1年前
記事のアイキャッチ画像
tidy first? を読んだ感想
OPTIMINDテックブログのフィード
本について著者Kent Beck氏はソフトウェア開発領域の先駆者です。アジャイル、TDD、設計パターンはもちろん、JavaのJUnitといったテストフレームワークの開発者でもあります。この本では著者が経験則でまとめられている、より良いコードを書くためのリファクタをどうやっていくのか、のテクニックと運用法をメインにまとめられています。最後のパート3ではリファクタリングに関わるものに限らず、ソフトウェア開発設計上の考慮する理論について述べています。33章もあるものの、ほとんどが2-3ページのものなので結構読みやすかったです。もちろん、その分述べきれないトピックもあったりするが、読者にと...
1年前
記事のアイキャッチ画像
DataformでSQLFluffを使いたい
OPTIMINDテックブログのフィード
はじめにSQLFluffは、SQLコードの静的解析およびフォーマッティングが可能なOSSツールです。https://sqlfluff.com/今回は夏休みの自由研究として、これをdataformに適用することを考えます。 モチベーションdataformではcompileやdry-runの機能がありますが、チーム開発でSQLをより安全に管理したい場合、それらの機能だけでは若干役不足感が否めず、SQLコードであれ一定の規約の元に秩序を作り安全にコードの反映を繰り返せる体制を作りたいというモチベがあります。というか、ほぼこのスレッドの質問主の方と同じモチベです。そして、これを単...
1年前
記事のアイキャッチ画像
99%のゴリ押しと1%の工夫でBigQueryのダミーデータを作る
OPTIMINDテックブログのフィード
はじめにアプリケーション開発やテストにおいて、テストデータを作成することは避けて通れない道です。しかし、実データに近いダミーデータを大量に用意するのは時間も手間もかかる面倒な作業です。個人情報保護の観点から実データをそのまま使うわけにもいきません。今回、実データがある程度貯まっていることを前提として、実データから全てのフィールドを匿名化しつつ、統計的な特徴を維持してダミーデータを作る方法を考えてみました。以下では、PythonとFakerライブラリを使用して、決定論的な匿名化を行うことでファクトとディメンションの(外部キー的な)結合を維持したままダミーデータを作成していきます。...
1年前
記事のアイキャッチ画像
serverからclient用のschemaとopenAPIを自動生成する
OPTIMINDテックブログのフィード
はじめにnest.jsをバックエンドとして開発したが、api docは人間の目で確認しながら、作成しました。悲しいと感じながら、人間ミスも多発でした。その現象を解決ために、コードからapi docを生成し、api docからフロントエンド用のschemaを生成するまでに自動化するのは本記事の目的です。 nest.jsとはNest.jsは、Node.jsのための強力なフレームワークで、効率的なサーバーサイドアプリケーションを構築することを目的としています。TypeScriptをベースになっています。DIコンテナもサポートしております。https://docs.nestjs.c...
1年前
記事のアイキャッチ画像
ReDoS対策(re2の紹介)
OPTIMINDテックブログのフィード
導入正規表現に対する攻撃として、ReDoSというものがあります。これは正規表現にマッチングさせる入力文字列によって、バックトラッキング[1]が大量に発生したり、量指定子が入れ子になることで組み合わせ爆発を起こしたりすることにより計算量が爆発する脆弱性を突いた攻撃です。Webアプリケーションにおいては、外部からの入力に対して正規表現をマッチングさせる場合に問題になり得ます。 対策メモ化によってマッチングを高速化するなど、自前で実装するのも一つの手段だと思います[2]。https://techlife.cookpad.com/entry/2022/12/12/162023他...
1年前
記事のアイキャッチ画像
Terraform+GitHubActionsでGoogleCloudのCI/CD構築入門
OPTIMINDテックブログのフィード
はじめにクラウドインフラの構築・管理において、冪等性の担保や効率性の向上のために、TerraformやGitHub Actionsなどがよく利用されます。Terraformによるインフラのコード化は、手作業によるミスを減らし、設定変更のたびに発生する手間を削減します。さらに、GitHub Actionsとの連携により、コードの変更をトリガーとした自動テストやデプロイが可能になり、インフラ管理のライフサイクル全体を効率化できます。本記事では、TerraformとGitHub Actionsを利用して、Google CloudインフラのCI/CDパイプラインを構築する具体的な手順を解...
1年前
記事のアイキャッチ画像
Emacsの起動速度を上げてみた
OPTIMINDテックブログのフィード
今までなんとなくEmacsは起動が遅いと思って使っていたのですが、正直もう何年もEmacsの起動時間チューニングなんてしていなかったので、この機会に自身の知識と設定まわりのアップデートを図ろうと思い立ちました。起動速度向上としてどんな対応方法があるのか調査し、それぞれどれくらい効果があるのか検証してみようと思います。 前提高速化の手法については私がいろいろ調べてまとめるまでもなく、Emacsのプロフェッショナルの方々がまとめてくださっています。本記事は体験記でしかないので、より網羅的に学びたい方はこれらをおすすめします。https://zenn.dev/takeokunn/art...
1年前
記事のアイキャッチ画像
BigQueryリモート関数でのエラー発生時の再試行をどう処理するか
OPTIMINDテックブログのフィード
導入BigQueryとCloud Functions、Cloud Runを結合することで、PythonやGoなどのコードをSQLから実行できるリモート関数という機能があります。このリモート関数には以下の仕様があります。成功したレスポンスの場合、エンドポイントから HTTP レスポンス コード 200 が返されます。それ以外の値を受け取ると、BigQuery はレスポンスを失敗とみなし、HTTP レスポンス コードが 408、429、500、503、504 の場合は、なんらかの内部上限に達するまで再試行します。https://cloud.google.com/bigquery...
1年前
記事のアイキャッチ画像
Cloud Run Jobs から Alloy DB にマイグレーション
OPTIMINDテックブログのフィード
はじめに昨日、Cloud Run Jobs から Cloud SQL へのDBマイグレーション(up/down)を実行してみる、ということをやってみました。https://zenn.dev/optimind/articles/b00592163df170Alloy DB でも同様にジョブを作成できるかと思い、確認のため実際に試しました。結論として、コネクション設定を少し変えることで同様のことが可能でした。本記事ではその際の情報をまとめようと思います。なお、CloudSQLで実施した前述記事と重複する部分が多いため、セクションが同一内容である場合にはタイトルに「[1]」を付けてい...
1年前
記事のアイキャッチ画像
Cloud Run Jobs で Cloud SQL にマイグレーション実行
OPTIMINDテックブログのフィード
はじめに便利だろうと思いつつ、これまであまり触れる機会のなかったCloud Run Jobsですが、DBのマイグレーション(up/down)の自動化を試みる際に使ってみることにしました。今回は、CloudSQL(PostgreSQL)に対して、Cloud Run Jobs上でマイグレーションを実行する実装を行いました。本記事では、そのための環境構築方法をTerraformコードを交えて説明します。サンプルコードはこちら(github)にあります。なお、PostgreSQLを使用していますが、MySQLを使用する際にもドライバを変えるだけで同様に実装できるかと思います。また、Al...
1年前
記事のアイキャッチ画像
Cloud Run デプロイ時のアーキテクチャ不一致エラーの解決覚書
OPTIMINDテックブログのフィード
本稿の内容は、「コンテナは実行環境に合うようにビルドが必要。Cloud Runはx86_64アーキテクチャであり、このアーキテクチャ向けのビルドが必要」に尽きます。 発生した問題M1チップ搭載のMacマシンでビルドした、FastAPIアプリケーションのDockerイメージをArtifact Registryにプッシュし、Cloud Runにデプロイした際に以下のエラーが発生し、サービスが起動しませんでした。Error waiting to create Service: Error waiting for Creating Service: Error code 13, mess...
1年前