OPTIMINDテックブログのフィード
https://zenn.dev/p/optimind
世界のラストワンマイルを最適化する、OPTIMINDのテックブログです。「どの車両が、どの訪問先を、どの順に、どういうルートで回ると最適か」というラストワンマイルの配車最適化サービス、Loogiaを展開しています。https://recruit.optimind.tech/
フィード
誰でもアクセスできるURLで情報を共有するリスクについての考察
OPTIMINDテックブログのフィード
Webサービスでは誰でもアクセスできるURLを発行する機能を持つものが多くあります。例えばGoogle Driveの共有設定で「リンクを知っている全員」にするとか、Notionで「Web公開」をするなどです。非公開URLやリンク共有などと呼ばれることもあります。お手軽に誰でもアクセスできるようになるのは便利なのですが、当然漏れてはいけない情報が漏れるというようなセキュリティリスクもあります。意外と人によってリスクの捉え方が違っているので、改めて情報や思考の整理をしてみようと思います。この記事は株式会社オプティマインドによる「Optimind Advent Calendar 2024...
24日前
GitHub Actionsでカスタムコマンドを作ってChatOpsを始めよう(フォーマットをする例)
OPTIMINDテックブログのフィード
アドベントカレンダーです。https://qiita.com/advent-calendar/2024/optimindGitHubでChatOpsをぜひやりましょう。ということで、その第一歩として、GitHub Actionsを利用して手軽に実行できるチャットコマンドを作ってみたいと思います。 シチュエーションGitHubでレビューするときに、ちょっとした編集はGitHubの機能でできます。なので、レビュアー側で片付けてしまいたい。だけれどいざコミットすると行が長くなって改行が必要だった…といったことがあります。フォーマットで落ちてしまってスムーズに進められない。Git...
1ヶ月前
今更のブロックチェーン入門
OPTIMINDテックブログのフィード
この記事は、株式会社オプティマンドアドベントカレンダー2024 1日目の記事です。 blockchain概要 分散型システムの観点そもそも今回の記事に執筆する経緯として、分散型システムの本を読んでいる中で、gossip protocolというものを知り、それでBitcoinにも使われているよ、との情報が得られて興味を持ち始めました。ブロックチェーンは元々根幹的分散型システムなので、この節では従来のWEB2で議論しているものとの違いをみながら、ブロックチェーンの特徴や考え方をまとめたいと思います。 CAP定理とPACELセオレム分散型システムの設計において、CAP定理(Co...
1ヶ月前
Slackの画像等のファイルを含めたメッセージをGitHubのIssueコメントとして同期する
OPTIMINDテックブログのフィード
開発に関する重要な会話でもSlackでやりとりがされがちですが、GitHubに連携したいという気持ちがあります。もちろん、GitHubになるべく書いてください、といって解決すればよいですが、Slackのほうが距離が近いとか、そもそも開発者以外と会話するということもあります。そのときに、SlackのポストをうまくGitHubに同期する方法を持っておけば、色々工夫できます。この記事では、その同期の部分のみに着目しますが、実際はさらにそれをどう活用するかというのを考える必要があります。例えば、既存のスレッドに !gh-link 123 としたらそこから先のメッセージが Issue 123 ...
3ヶ月前
Emacsの良いところ
OPTIMINDテックブログのフィード
会社でEmacsの紹介をする機会がありました。せっかくなので私の観点でのEmacsの良さを言語化しておこうと思います。Emacsのことを知りたいと思った人の助けになれば幸いです。 前提Emacsは名前を聞いたことがある、くらいの人を想定読者としています。私はEmacsに特段詳しい人間ではありません。ただの一個人の感想です。他のエディタやIDE等と優劣をつける意図はありません。他のツールにはそのツールの良いところがあると思います。他のツールに無いことしか書かないということはありません。みんな互いに影響し合っています。 Emacsの良いところ以下では私がEmacsを使っ...
3ヶ月前
tidy first? を読んだ感想
OPTIMINDテックブログのフィード
本について著者Kent Beck氏はソフトウェア開発領域の先駆者です。アジャイル、TDD、設計パターンはもちろん、JavaのJUnitといったテストフレームワークの開発者でもあります。この本では著者が経験則でまとめられている、より良いコードを書くためのリファクタをどうやっていくのか、のテクニックと運用法をメインにまとめられています。最後のパート3ではリファクタリングに関わるものに限らず、ソフトウェア開発設計上の考慮する理論について述べています。33章もあるものの、ほとんどが2-3ページのものなので結構読みやすかったです。もちろん、その分述べきれないトピックもあったりするが、読者にと...
4ヶ月前
DataformでSQLFluffを使いたい
OPTIMINDテックブログのフィード
はじめにSQLFluffは、SQLコードの静的解析およびフォーマッティングが可能なOSSツールです。https://sqlfluff.com/今回は夏休みの自由研究として、これをdataformに適用することを考えます。 モチベーションdataformではcompileやdry-runの機能がありますが、チーム開発でSQLをより安全に管理したい場合、それらの機能だけでは若干役不足感が否めず、SQLコードであれ一定の規約の元に秩序を作り安全にコードの反映を繰り返せる体制を作りたいというモチベがあります。というか、ほぼこのスレッドの質問主の方と同じモチベです。そして、これを単...
5ヶ月前
99%のゴリ押しと1%の工夫でBigQueryのダミーデータを作る
OPTIMINDテックブログのフィード
はじめにアプリケーション開発やテストにおいて、テストデータを作成することは避けて通れない道です。しかし、実データに近いダミーデータを大量に用意するのは時間も手間もかかる面倒な作業です。個人情報保護の観点から実データをそのまま使うわけにもいきません。今回、実データがある程度貯まっていることを前提として、実データから全てのフィールドを匿名化しつつ、統計的な特徴を維持してダミーデータを作る方法を考えてみました。以下では、PythonとFakerライブラリを使用して、決定論的な匿名化を行うことでファクトとディメンションの(外部キー的な)結合を維持したままダミーデータを作成していきます。...
5ヶ月前
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...
5ヶ月前
ReDoS対策(re2の紹介)
OPTIMINDテックブログのフィード
導入正規表現に対する攻撃として、ReDoSというものがあります。これは正規表現にマッチングさせる入力文字列によって、バックトラッキング[1]が大量に発生したり、量指定子が入れ子になることで組み合わせ爆発を起こしたりすることにより計算量が爆発する脆弱性を突いた攻撃です。Webアプリケーションにおいては、外部からの入力に対して正規表現をマッチングさせる場合に問題になり得ます。 対策メモ化によってマッチングを高速化するなど、自前で実装するのも一つの手段だと思います[2]。https://techlife.cookpad.com/entry/2022/12/12/162023他...
5ヶ月前
Terraform+GitHubActionsでGoogleCloudのCI/CD構築入門
OPTIMINDテックブログのフィード
はじめにクラウドインフラの構築・管理において、冪等性の担保や効率性の向上のために、TerraformやGitHub Actionsなどがよく利用されます。Terraformによるインフラのコード化は、手作業によるミスを減らし、設定変更のたびに発生する手間を削減します。さらに、GitHub Actionsとの連携により、コードの変更をトリガーとした自動テストやデプロイが可能になり、インフラ管理のライフサイクル全体を効率化できます。本記事では、TerraformとGitHub Actionsを利用して、Google CloudインフラのCI/CDパイプラインを構築する具体的な手順を解...
5ヶ月前
Emacsの起動速度を上げてみた
OPTIMINDテックブログのフィード
今までなんとなくEmacsは起動が遅いと思って使っていたのですが、正直もう何年もEmacsの起動時間チューニングなんてしていなかったので、この機会に自身の知識と設定まわりのアップデートを図ろうと思い立ちました。起動速度向上としてどんな対応方法があるのか調査し、それぞれどれくらい効果があるのか検証してみようと思います。 前提高速化の手法については私がいろいろ調べてまとめるまでもなく、Emacsのプロフェッショナルの方々がまとめてくださっています。本記事は体験記でしかないので、より網羅的に学びたい方はこれらをおすすめします。https://zenn.dev/takeokunn/art...
5ヶ月前
BigQueryリモート関数でのエラー発生時の再試行をどう処理するか
OPTIMINDテックブログのフィード
導入BigQueryとCloud Functions、Cloud Runを結合することで、PythonやGoなどのコードをSQLから実行できるリモート関数という機能があります。このリモート関数には以下の仕様があります。成功したレスポンスの場合、エンドポイントから HTTP レスポンス コード 200 が返されます。それ以外の値を受け取ると、BigQuery はレスポンスを失敗とみなし、HTTP レスポンス コードが 408、429、500、503、504 の場合は、なんらかの内部上限に達するまで再試行します。https://cloud.google.com/bigquery...
5ヶ月前
Cloud Run Jobs から Alloy DB にマイグレーション
OPTIMINDテックブログのフィード
はじめに昨日、Cloud Run Jobs から Cloud SQL へのDBマイグレーション(up/down)を実行してみる、ということをやってみました。https://zenn.dev/optimind/articles/b00592163df170Alloy DB でも同様にジョブを作成できるかと思い、確認のため実際に試しました。結論として、コネクション設定を少し変えることで同様のことが可能でした。本記事ではその際の情報をまとめようと思います。なお、CloudSQLで実施した前述記事と重複する部分が多いため、セクションが同一内容である場合にはタイトルに「[1]」を付けてい...
5ヶ月前
Cloud Run Jobs で Cloud SQL にマイグレーション実行
OPTIMINDテックブログのフィード
はじめに便利だろうと思いつつ、これまであまり触れる機会のなかったCloud Run Jobsですが、DBのマイグレーション(up/down)の自動化を試みる際に使ってみることにしました。今回は、CloudSQL(PostgreSQL)に対して、Cloud Run Jobs上でマイグレーションを実行する実装を行いました。本記事では、そのための環境構築方法をTerraformコードを交えて説明します。サンプルコードはこちら(github)にあります。なお、PostgreSQLを使用していますが、MySQLを使用する際にもドライバを変えるだけで同様に実装できるかと思います。また、Al...
5ヶ月前
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...
6ヶ月前
SPAのダウンタイムなしリリース
OPTIMINDテックブログのフィード
経緯 なぜダウンタイム無し目指すのか一つ大事な要因として、toBのアプリケーションなので、停止リリースするにはお客様の利用時間を避ける必要があり、それは通常深夜または早朝になりがちです。さらにお客様が増えると、この深夜早朝に仮に利用するお客様がいると、リリースするタイミングすら見つからなくなる恐れがあります。アプリケーションのリリースからまださほど経っていないので、早いうちでダウンタイム無しでリリースを達成しないと、今後の開発サイクルに大きな支障が出るかねません。バックエンドのアプリケーションのリリースは、以前紹介した CloudRun Service + Jobsのコンビネ...
6ヶ月前
Cloud Run Jobs をPythonから起動する
OPTIMINDテックブログのフィード
本記事では Google Cloud の Cloud Run ジョブをPyhtonから実行する例を紹介します。実行の際に環境変数や引数を設定することも可能です。 Cloud Run ジョブとはGoogle Cloud には Cloud Run ジョブというサービスがあります。コンテナの実行基盤なのですが、従来の Cloud Run のようにWebサーバーを立ててリクエストを受け付けるような用途ではなく、バッチ処理のように非同期で処理時間が長いようなものの実行に向いているサービスです。AWSで言うとBatch (on Fargate) が近いサービスかと思います。https://z...
8ヶ月前
Firebase Hostingのプレビューチャンネル数リミットにヒットした件
OPTIMINDテックブログのフィード
問題今携わっているプロダクトの開発では、フロントエンド側をfirebase hostingに上げていて、PRごとにプレビュー用のチャンネルをCIでデプロイするようにしています。name: Firebase Hostingのプレビューチャンネルを作成on: pull_request: types: [ opened, reopened ]jobs: build: # ここでビルドする deploy-pr: needs: build runs-on: ubuntu-latest permissions: conten...
8ヶ月前
GitHub Actions: PRのdiff行数に応じてラベルを貼る簡単なスニペット
OPTIMINDテックブログのフィード
ちょっとしたスニペットの紹介です。結構雑なやつですPRのdiff行数に応じてラベルを貼るワークフローの書き方の紹介です。完成図は以下のようになりますこのようなラベルが、PRを作成した際に自動的に作られるようになります。PRが更新されればラベルも貼り直しされます。 スニペット.github/workflows/label-pr-diff-line-count.yml などのような名前で(ファイル名は何でもいいです)以下のような内容のワークフローを作成します。name: PRの差分行数カウントon: pull_request: types: [opened, sy...
8ヶ月前