ひどい目に遭いそうなところからテストを書く

blog.sushi.money 僕も最近は正常系から書くことが多いです。こうすると悪い設計に早く気付きやすいという利点があると感じています。 ここでは単体テストのような開発者向けのテストを想定していて、E2Eテストのようなテストでは必ずしも当てはまらないでし…

AWS CDKやGo関連で最近作ったものたち

cdk-dynamodb-expression aereal/cdk-dynamodb-expression: DynamoDB expression builder for AWS CDK AWS CDKでDynamoDBの式を書く時に便利なグッズ。 usageより: import { DynamoAttributeValue } from "@aws-cdk/aws-stepfunctions-tasks"; const builder…

やたらと短いエイリアスは使わない

Gitもシェル (zsh) もよく使うコマンドをエイリアスとして設定して任意の入力で呼び出すことができる。 このエイリアスについていくつか派閥があると感じていて、おおまかには: エイリアスをまったく使わない 入力の手間を減らすため極限まで短いエイリアス…

組織をプロダクトと捉えてみる

※組織の話は詳しくないので自信はないけれど、こう思ったという話を書きます ※現在の所属組織の社内ブログに書いた内容を一部修正して転載しています プラットフォームのプロダクトマネジメント メルカリのSREであるdeeeetさん (eは4つ) のこの記事が良かっ…

AWS API Gatewayのdocumentation partに関するメモ

Documentation part AWS API GatewayのREST APIはOpenAPIに準拠したドキュメントの生成もサポートされている *1。API GatewayのREST APIはリソースやメソッドなどの部品から成る。特別な定義なしでも、これらAWS上のリソースが持つ各種プロパティからデフォ…

ISUCON 10の予選に参加しました

id:masawadaとid:side_tanaと一緒にはやいTシャツ屋さんで参加しました。初期スコアが最高スコアでした。察してください。 チームでやった主なこと: New Relicの導入 Web Transactions SQL Logs デプロイ自動化 デプロイするたびにNew Relicのdeploymentsを…

AWS CDKとは何か、IaCの変遷を踏まえての紹介

概要 これまで業務・プライベートの双方でAWS CDK (Cloud Development Kit)というInfrastructure as a CodeツールをDeveloper Previewのころから着目し利用してきたので、その特徴を競合と比較しながら説明します。 概観を掴んでもらうことを目的とするので…

最高のアーキテクトになる

が、今後5年のテーマかなーと思いはじめた。ここでいうアーキテクトは「ソフトウェアの誕生から運用を通したライフサイクル全体を通して良い感じにするためにあらゆる手を尽して準備する役割」くらいの意味で言っている。 「ひどい目に遭わないよう準備する…

各チームの大小様々なやっていることを共有する会をやったら予想外に盛り上がった話

前職で掲題のような取り組みを提案して始めてみたら予想以上に盛り上がったので書いておく。かなり低コストに始められるので以下に書くような課題感を持つところではおすすめできると思う。 どんな会か 会の名前は「今月のホットトピックス」と銘打った。前…

go-sql-caller-annotation: GoでSQLに呼び出し元の情報をコメントとして埋め込む

Go

github.comというのを書いた。ご利用ください。スロークエリを解析する時に「このクエリ、アプリのどこから呼んでいるんだろう?」と調べたいことがよくある。 だいたい遅いクエリって長くて複雑だったりするのでいちいち横に縦にスクロールして全容を把握し…

退職する時に同僚からフィードバックをもらう

退職するにあたって、人事評価とかそういった枠組みをすべて取り払って去る自分に対して言い残したことがあれば伝えてほしいなと思い、自分がどう見えていたかをGoogle Formによるアンケートというかたちで同僚に乞い、ありがたいことにたくさん送ってもらえ…

心配ゴム用 (^ω^)ニニニニニつ ビヨーン

gyazo.com const buildBiyon = (max) => { let incr = 1; let count = 0; return () => { if (count === 1) { incr = 1; } if (count >= max) { incr = -1; } count = count + incr; return "ニ".repeat(count); }; }; (() => { const biyon = buildBiyon(5)…

Kiritoru: 見ているページをScrapboxでブクマをAndroidの共有メニューから簡単にできるように

scrapit.vercel.app……というのを作った。ソースコード: GitHub - aereal/scrapitblog.sushi.moneyPCのブラウザではこういうブックマークレットでブクマしている一方、Androidで見ている時にぱっとやる方法がなくて、ブラウザのブックマークに入れておき後でP…

イニシャルで特定される都道府県

anond.hatelabo.jpルール: ヘボン式に倣う 広域地方公共団体の区別はしない 大阪府なら大阪、広島県なら広島、とする (含めると都や道などが2020年現在で識別されてしまうため) 使ったコードは以下: #!/usr/bin/env ruby require 'abbrev' prefs = DATA.each…

AWS CDKアプリを作る時のテンプレートリポジトリを作った

AWS CDKの昨今 最近は仕事でもプライベートでもAWSのリソース配備にはAWS CDKを使っている。 ちなみに最近はCDK for Terraformが出るなど、AWSに限らないツールキットを指向している雰囲気があるので「仕事は {ここにAWS以外のクラウドプロバイダが入る} だ…

公開されたシンボルにJSDoc/TSDocを書くことをESLintでルール化したい

公開しているライブラリほどじゃないにせよ、チームで開発しているTypeScriptで書いたコードにちらほらドキュメンテーションしていきたい。 それESLintで とりあえず今までろくに書いていなかった部分はいまさっき書き足すPull Requestを作ったけれど、今後…

react-type-safe-render: 第二引数にnullを許容しない安全なReactDOM.renderの型定義を書いた

@types/react-domで `ReactDOM.render` の第2引数 (container) はnullを許容しており、`document.getElementById` の返り値の型に合わせているそう。 しかしランタイムがnullを許容しているわけではなくnullを渡すと実行時例外になる。TypeScriptを使ってい…

株式会社はてなを退職

2020年8月14日付けで退職する運びとなった。 入社が2012年なので勤続丸8年を迎え社内でも古株の方になってきつつある。Web業界にしてはわりと長くいたほうだと思う。 自分自身でもこんなに長く籍を置くとは思っていなかったので驚いている。退職を決めた理由…

JWEは毎回ランダムなInitialization Vectorを使用するので得られるトークンは毎回異なる

タイトルですべて言い切ってしまった。JWE (= JSON Web Encryption) にはInitialization Vectorというフィールドが含まれており、これは暗号化処理ごとにランダムな値が使われる。 なので、同じペイロード・同じ秘密鍵を使って暗号化しても暗号化したトーク…

cloud.google.com/goのリクエストがX-Rayでトレースできないので土日を潰して調べて完全に理解した

cloud.google.com/goはGo向けのGCPのAPIライブラリ。一部を除き単にHTTPリクエストを送っているのでX-Rayでトレースする *1 のは造作もないだろうと思ったら思いがけず難航し、だらだら調査していたら2日かかってしまった。詳しいメモと結論はScrapboxにまと…

GAEのapp.yamlに秘密の情報を含めたい時

app.yamlに公開したくない情報を含める - aereal-techより。環境固有の値とかapp.yamlに書いてコミットしたくないけど、CD = Continuos Deliveryするためには必要でどうしよう、という時に思いついた策。valid JSON is valid YAMLなので、雛形となるJSONをリ…

人間が関わりあう時間の価値を最大化するためのオートメーション

コードを書かない問題解決 ソフトウェアエンジニアとしての価値観とか仕草みたいなのはだいぶid:hitode909さんの影響を受けており、その中でも自分が大きく変わったと思うのは、問題解決の手段としてソフトウェアにこだわりすぎないという視点を手に入れたこ…

aereal.orgをNext.jsのSSGとContentfulに移行した

VPS→Cloud Bucketのホスティング機能→Firebase Hosting + Gatsbyという変遷を辿っていた自分のサイトをNext.jsのSSG (= Server-side generation) とHeadless CMSであるcontentfulに移行した。aereal.org最近出たNext.js 9.3でSSGサポートがちょっと良くなっ…

趣味プロダクトのデザインドキュメントをScrapboxに書き始めた

scrapbox.io仕事と趣味が曖昧な方の人間なのであれこれ触ったり作ったりするのが好きなんだけど、これまでは作ったものをGitHubに置いてREADMEを書いてそれだけで終わっていてなんかもったいなあと感じていた。GitHubに置くからにはと、リポジトリをいきなり…

ECS taskの停止理由をMackerelのグラフアノテーションとして記録する

github.com記録するLambdaを作るAWS CDKのリソースライブラリを作った。いますぐ npm i -S @aereal/cdk-ecs-task-retirement-events-mackerel-annotator !こういうアノテーションが作られるモチベーションと利点はScrapboxに書いたように: [ECS]のtask停止は…

zsh: /usr/libexec/path_helperから逃れる方法 2020年版

zsh

macOSには /usr/libexec/path_helper というスクリプトがあり、これは /etc/zprofile で実行されOSがPATHをよしなに設定するというものだが、ユーザーが追加したパスより優先度高く追加するようになっており、かなり傍迷惑。 /usr/local/binなどより任意のパ…

2019

仕事 はてなブログ タグ staff.hatenablog.com initial commitの日付が1年くらい前だった。ほぼかかりきりだったので1年以上やっていたことになる。 上から下まで本当にいろいろやれて良かった。要素技術やらキーワードを挙げ連ねると: Next.js TypeScript G…

VSCodeでJSONを編集する時にJSON schemaを指定して補完を効かせる

JSON editing in Visual Studio Codetsconfig.jsonなどはデフォルトで補完が効くが、これはsettings.jsonで追加できる。たとえばrenovate.jsonを編集する時はこういう設定を入れておくと便利。 "json.schemas": [ { "fileMatch": ["renovate.json"], "url": …

SlackとGitHub Deployments APIで疎結合なChatOpsを実現する

this.aereal.orgDeployments APIが出た頃に上記記事を書いてもう5年が経とうしている中、最近いろいろなグッズが進化してタイトルにあるような良い塩梅のChatOpsが実現できそうなのでそれのメモ。 登場人物 GitHub Deployments API 「このリビジョンをデプロ…

1PasswordのChrome拡張どれ使えばいいのか問題

結論から言うとtouch IDを使いたいなら「Xじゃないほう」 1Password 拡張機能 (パソコンのアプリが必要) - Chrome ウェブストア macOS/Windowsで動く1Passwordアプリとプロセス間通信するバージョン vaultにDropboxなどが選べる 正確にはこの拡張自体はvault…