UMIHICO BLOG.

「Today I Learned」的なブログ

#CircleCI

circleci/path-filteringの欠点

モノレポ運用をしてるPJにて、導入寸前まで思案したcircleci/path-filteringというorbsですが、導入を諦めた懸念点をメモします

#bash#history

生産性を最大化するエイリアス設定のために、頻出コマンドを調査してみた

効率的なエイリアスのために、体感ではなく実際に使われているコマンドの出現頻度に基づいてエイリアス設定を行えるように、ワンライナーを作成しました。

#CI#bash#jq

CIのビルド用キャッシュとしてECRから最も適切なイメージタグを選んでみた

CIのビルド時にECRからキャッシュ用にイメージをプルするパターンは多いと思いますが、その際は簡単に最も日時が新しいイメージが選ばれがちかと思います。

しかし「最新のイメージをとる」方法では複数のブランチで複数人が交互にプッシュする状況で、例えば片方がnode_modulesなど依存関係に変更を加えるものであると、互いのキャッシュを活かせないことになります。 この解決法は「最新のイメージをとる」ことではなく、「自身のコミットログと一致する範囲での最新のイメージをとる」ことです。そうすることで、まだマージされてない他所のコミット(イメージ)をスキップして、自身の直系の先祖にあたるコミットのイメージをプルしますので、キャッシュ効率が高くなります。

#Github Actions#Notion

GithubのIssueでNotionのページを作って更新する

GithubのIssueの発行時に作成して、クローズ時にプロパティを変更するようにしました。

デフォルトブランチへのPRマージでIssueをクローズできるので、Issueベース、PRベースでNotionを更新できます。

一番粒度の小さいタスクをこのようにIssueで管理して、それらをNotion上のEpicなどでグルーピングして、エンジニア以外でも分かる粒度の進捗管理にあてれば手間や更新漏れのない管理ができると思いました。

また、検索に引っかけるためにIssue URLをプロパティに追加してますが、このおかげで完了したNotionページ見た時に起きる「このPRどれだっけ」問題がなくなりました。

#Notion

NotionのFormula使ってパスからフルURL生成

整数のGithub Issue NoからIssue URLを生成したかった

if(empty(prop("Github Issue No")), "", concat("https://github.com/umihico/hoge/issues/", format(prop("Github Issue No"))))

#AWS#Terraform

調査用のEC2をサクッと立ち上げるterraformスニペット

ECSのアプリがRDSのDBにつながらない事態が発生し、どうも解決できないのでEC2を同じVPCに立ててRDSに接続できるか確かめてみることにしました。再利用できるようにメモ

#AWS

prefixの一致するサブネットIDをカンマ区切りで取り出すワンライナー

aws ec2 describe-subnets --filters "Name=tag:Name,Values=COMMON_PREFIX_HERE*" --query "Subnets[].[SubnetId]" --output text | python -c 'import sys; print(",".join(sys.stdin.read().splitlines()))'

CircleCIのECSのOrbsに使いたかったが、そもそもCommandにしろJobにしろ引数は環境変数など静的にセットするか、circleci/continuationを使わないとダメそう

#Git

fixup,rebaseコマンドの自動化

fixupしたコミットを上から数えて10ならgit rebase -i --autosquash HEAD~10とかやってましたが、rebaseもまとめてやるコマンド作った話

#regex#vscode

vscodeでhogeとfuga両方を含む行を検索する

これ→(hoge.*fuga|fuga.*hoge)

#Docker#Mac

300GBあった「システムデータ」を削除した話

「このMacについて」→「ストレージ(タブ)」→「管理」から空き容量を作ることができますが、システムデータという編集が不可能な項目で300GB近く専有しており、削除までに調査が必要だった話

#AWS#AWS Lambda#Ruby on Rails

AWS LambdaでRailsのマイグレーションを秒殺する基盤を作った

aws-nukeで削除可能なリソースを調べたら、タスク定義が大量に残っていることが分かったたので、以下のコマンドで削除した。

#AWS#AWS App Runner

Terraformで空のECRレポジトリを参照するApp Runnerをapplyしたくて辛かった話

別の新規プロジェクトに既存のTerraform資産を流用した時に、App RunnerとECRを一発で同時デプロイすることになりましたが、そうなると当然ECRのレポジトリは空なので失敗するわけで、次回スムーズに流用できる方法がないか試行錯誤しました

#AWS

AWSアカウント内のECSタスク定義を全て除去するワンライナー

aws-nukeで削除可能なリソースを調べたら、タスク定義が大量に残っていることが分かったたので、以下のコマンドで削除した。

#AWS

aws-nukeを触ってみた

アカウント内のリソースを全削除してくれるライブラリaws-nukeを触ってみました

#Docker#Next.js#Ruby on Rails

WEBフレームワークをDockerで作るワンライナー

Next.jsとRuby on RailsのプロジェクトをDockerを通じて環境依存せず指定した言語バージョンで構築する

#Google App Script

シート名の先頭が一致する全シートを削除する(Google Spreadsheet)

某サイトからCSVのインポートをよく行うのですが、インポートしたデータを使った後に毎度足したシートが増えており、消すのも大変なのでスクリプトを書きました。

#Alfred

Alfredで本日の日付を入力するショートカットを作る

議事録、日報などなにかと必要になる本日の日付をショートカットで呼び出す方法を紹介します

#CircleCI#Docker#React#Ruby on Rails

React on Railsで本番イメージをNodeレスにした

Nextとしてサーバーを建てるのではなく、RailsのViewからscriptタグでJS配信するだけなら、本番イメージ内にインストールする必要ないのでは?と思ったらできた話