GraphQLで、適切にグラフ上のノード間の関係を示すために、connectionやedgeに独自の名前をつけて、独自のフィールドも追加したいことがある。 Explaining GraphQL Connections | Apollo GraphQL Blog Instead think of them as the relationship between tw…
会社の読書会で"A Philosophy of Software Design"を読んでいる。 A Philosophy of Software Design, 2nd Edition (English Edition)作者:Ousterhout, John K. Amazon 自分の担当で第10章"Define Errors Out Of Existence"をしっかり読む機会があり、けっこ…
この記事は一休.com Advent Calendar 2023 8日目の記事です。 2023-09-25に入社して2か月半が経ったので、既存のWebサービスの開発にソフトウェアエンジニアとして参加するにあたって役立ったことを書いておく。 『Webサービスのソフトウェアエンジニアとし…
この記事はRust Advent Calendar 2023 シリーズ1の4日目の記事です。 あるソフトウェアをテストするとき、そのソフトウェアがデータベースやメッセージブローカのような外部のサービスに依存する場合に、その依存をどのように扱うかという問題がつきまとう。…
先日同僚と雑談的に話してたことを書いておく。ソフトウェア開発のバックログにおける話です。 「〜対応」とは 主に差し込みで入ったタスクやなにか早めに単一の解決したい事象のためのタスクに名付けられやすい名前。 あくまでも例としてだが 「マーケから…
Microsoftが提供しているSQL ServerのDockerイメージを使うと、デフォルト設定では無料のSQL Server Developer Editionのコンテナを起動できる。 learn.microsoft.com このコンテナに対してRustからクエリを発行したい。Rustでは、SQL Serverのクライアント…
GitHub CLI (gh)でカレントディレクトリ配下のリポジトリをGitHubの新規リポジトリとしてプッシュする方法。 $ gh repo create $(basename $(pwd)) --push -s . --pushでリポジトリ作成とともにローカルのコミットをリモートにプッシュする。そのソースとな…
Rustの宣言的マクロ(declarative macro)でScalaのfor内包表記(for comprehension)を部分的に実装してみた。Scalaの for { x <- xs y <- ys } yield doSomething(x, y) をRustで for_vec! { x <- xs, y <- ys; do_something(x, y) } のように書けるようにする…
GraphQLを久しぶりに使うことになったので、復習のために"Production Ready GraphQL"を読んだ。 book.productionreadygraphql.com 著者はGitHubとShopifyでGraphQL APIの開発に携わっていた人なので、信頼感がある。GraphQL APIの開発をしようとした人はだい…
たとえばAxumのハンドラでクエリパラメータ page を受け付けるときに、 page=1が付与されていれば値として1を使う page=aのように値が無効ならデフォルト値を使う pageが付与されていないならデフォルト値を使う page=のように値が空ならデフォルト値を使う …
RDBをデータストアとして使うWebアプリケーション(のバックエンド)の開発で、テストを通じてDBに作成したレコードを自動で削除できると、開発環境のDBが汚れず、また他のテストによって変更されたDBの状態に影響されないので便利。Rustではこれをどうやる…
セキュア・バイ・デザイン: 安全なソフトウェア設計 Compass Booksシリーズ作者:Dan Bergh Johnsson,Daniel Deogun,Daniel Sawanoマイナビ出版Amazon ドメイン駆動設計(DDD)の方法論をベースに、ドメインに対する深い理解を獲得し、その理解を設計に反映させ…
Webサービス界隈のソフトウェアエンジニアになって初めて転職活動をした1ので、やったことのうち役に立ったことを書いておく。 前提 経歴: https://www.linkedin.com/in/kymmt/ Webサービスを開発、運用するふつうのソフトウェアエンジニア 転職活動時期は20…
以前から社内用ライブラリをホストするためにGitHub Packagesを運用できる体制を作ったりしていた。 tech.pepabo.com ところで、そもそもアプリケーションとライブラリでは開発やメンテナンスにおいて気にする点が少し異なる。そのあたりに関する初歩的なこ…
Rubyのパターンマッチを使って、(GitHub Flavored) Markdownのテキストからコードブロックを抜き出す。次のようなテキストを考える。 # Ruby ## hello world Rubyでは次のようにhello worldします。 ```ruby puts 'hello world' ``` ``` これはRubyではあり…
今後役立つのかわからないがRuby 2.7→3.xアップデートのときに使った方法のメモ。 Warning[:deprecated] = true すると表示される非推奨警告を発生させるコードがRailsアプリに含まれないように、テスト実行時だけこのような警告をあらかじめエラーに変換で…
やりたいこと GitHub Actionsで次の要件を実現できるデプロイのワークフローを作りたい。 次のトリガーでデプロイできる リポジトリへのAPI呼び出し 手動 プルリクエストのマージ デプロイするブランチと環境(主にstagingもしくはproduction)を選択できる …
家のコーヒー環境が完全に安定したので書いておく。 コーヒーメーカー GENIO Sを使っている。 ネスカフェ ドルチェ グスト GENIO S 「ジェニオ エス」 スペースグレー【コーヒーメーカー】ネスカフェ ドルチェグストAmazon ドルチェグストは8年ぐらい使って…
Dockerコンテナアクション GitHub Actions (GHA)のDockerコンテナアクションは アクションを呼び出したときに実行したいスクリプト(entrypoint.sh) その実行環境としてのDockerfile を用意してGHAのアクションとしてまとめたもの。かんたんに他のリポジトリ…
前提 あえてmacOSの日本語入力プログラム(macOSデフォルトの日本語IME)だけで生活しようとしている場合の記事 ふつうはKarabiner Elementsを使えばよいはず これまで 以前Ctrlでひらがなと英字モードをトグルするようにした。 Macのセットアップでやること…
Railsアプリなど、Bundlerでgemの依存管理をしているプロジェクトでRubyのアップデートをしようとするとき、不幸なことにgemが全体的に古いことがある。 また、gemspecでrequired_ruby_versionというメタデータでRubyのバージョンの範囲を設定していると、そ…
TerraformでRoute 53の設定をインポートするときに、aws_route53_recordのドキュメントを読んでいた。このドキュメントにはRoute 53のゾーンを作るときに自動で作られるNSレコードとSOAレコードの管理方法について記述がある。しかし、コード例にはNSレコー…
GitHub ActionsでPRの"Files changed"タブと同じファイルの内容を取得する方法*1。 - uses: actions/checkout@v3 with: # マージベースの探索でコミットをさかのぼるために全コミットを取得しておく fetch-depth: 0 - run: | # ... でPRのFiles changedと同…
問題: コントローラで例外処理している アプリケーションが扱うドメイン特有のエラーを例外として表現する場合に、その例外をコントローラで処理するコードを書くと、ほとんどの場合でコードが読みにくくなったり、コードを変更しづらくなったりする結果とな…
新しくMacBookをセットアップする機会があった。開発環境はdotfilesである程度作れるようにしているが、macOSについてはいつもの設定を覚えておくしかない状態だったのでメモを残しておく。書いているのはデフォルトから変更している箇所だけ。 後述するがOS…
サービスを停止せずにデータベースリファクタリングする - Pepabo Tech Portal の作業をやっていたときに知ったことについて書いておく。 結論 pt-online-schema-change (pt-osc)で外部キーを削除するときは そのキー名の先頭に_を付与して--alterに渡す す…
発端: concernモジュールの命名をどうするか ここではActiveSupport::Concernをextendしたモジュールのことをconcernモジュールやconcernと呼ぶ。 「Concernに何を実装すべきかは…非常に曖昧」1である。さらに、Railsアプリのメインであるルーティングからモ…
RBSの練習としてhatenablogというgemの型定義をRBSで書いた。 https://github.com/kymmt90/hatenablog/blob/v0.8.0/sig/hatenablog.rbs まだ該当gemのsigディレクトリに置いているだけだが、やったことを書いておく。 作業の流れ Ruby 3.0をインストールする…
今年から会社で導入されているOKRについて、結局どうやっていけばうまく運用できるのかわかっていなかったので、入門書を読んで調べていた。 OKRとは OKR - Wikipedia a goal-setting framework for defining and tracking objectives and their outcomes. …
はじめに Rackミドルウェアの一つであるRack::Timeoutを使うと、Rackアプリがリクエストを受け取ってから一定時間が経過すると、アプリのどの場所でコードが実行されていても、その場所からRack::Timeoutの例外RequestTimeoutExceptionが発生する。 サンプル…