Skip to main content

30 posts tagged with "job"

View All Tags

My Activity in 2022-09

· 3 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

Work​

I've improved the experience of a huge Terraform Monorepo by introducing my OSS tfcmt and github-comment.

OSS Development​

Mainly I focused on the release of gha-trigger. After the release, mainly I'm working on the improvement of aqua.

aqua​

  • v1.19.4
    • generate-registry: set complete_windows_ext
    • Support MD5 for the checksum verification
    • Improve a log creating a symbolic link
  • v1.19.3
    • generate-registry: fix the regular expression to extract checksums
    • exec: set config file path

aqua-registry​

I've updated aqua-registry from v3.42.0 to v3.64.0. The number of packages has increased from 803 to 870. Thank you, all contributors!

tfcmt​

  • v3.4.1
    • fix: Fix links to GitHub Actions jobs in GitHub Enterprise
    • chore: Update Go from v1.18.5 to v1.19.1
  • v3.4.2
    • fix: Add pull request labels properly even if a pull request number isn't passed as an argument or an environment variable
  • v4.0.0
    • breaking change: Remove features to output environment variables for security

github-comment​

  • v4.5.1
    • fix: Fix links to GitHub Actions jobs in GitHub Enterprise
    • chore: Update Go from v1.18.5 to v1.19.1
  • v4.5.2
    • fix: Check if the configuration base is nil
  • v5.0.0
    • breaking change: Remove features to output environment variables for security

go-ci-env​

  • v3.0.1
    • fix: fix GitHub Actions JobURL for GitHub Enterprise

tfaction​

  • v0.5.17
    • feat: Show how to create a scaffold pull request with $GITHUB_STEP_SUMMARY
  • v0.5.18
    • tfmigrate-plan: Support testing with Conftest

New OSS 🚀​

gha-trigger​

I've released gha-trigger, which is Webhook Server and Actions to run GitHub Actions securely.

oss-contribution-guide​

I've published OSS Contribution Guide, which is a guide to creating GitHub Issues and Pull Requests for OSS Contribution.

2022-08 振り返り

· 9 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

仕事​

仕事はあまり書けることもないんですが、元気にやっています。 tfcmt, github-comment, aqua をとあるリポジトリに導入しました。

OSS 開発​

aquaproj/aqua​

ツールのインストール時に checksum を検証する機能の開発を進めています。 基本的な機能の開発は既に出来ていて prerelease も出しています。 あとは現職に導入してフィードバックをもらいながら正式リリースに持っていきたいと思っています。

aqua-registry​

v3.20.0 => 3.42.0

Package 数が 702 から 803 まで増えました。 Contribution してくださった方々、ありがとうございます。

今月は Pull Request の数がすごくて 91 個の PR がマージされました。

ありがたい話ですし、これほどの PR が来る OSS を開発できたことを誇りに思います。

aqua-registry がサポートするツールの数が 800 を超えました。 ちなみに asdf-plugins がサポートする数は 2022-08-30 時点で 514 なので、 asdf よりだいぶ多くなりました。

$ asdf plugin list all | wc -l
514

また、 GitHub の API rate limit に引っかかるようになったので対応しました。

  • github.token を使う
  • main branch で test するのやめる
  • ci-info の結果を cache

後述する aqua registry のための framework を使って CI とローカル開発を大きく改善しました。

aqua registry のための framework​

aqua Registry を開発するための Framework をリリースしました。 主な aqua Registry といえば Standard Registry ですが、 組織内の private なツールのための Private Registry を作ることも出来ます。 aqua-registry を開発するためのコードは元々 aqua-registry のリポジトリ内に置いてありましたが、 それを Private Registry を開発するのにも使えるよう、別の OSS として切り出しました。 また、 Private Registry の Template Repository とドキュメントも整備しました。

自分も社内のツールのための Private Registry を作るのにこれらを使っています。

aqua-installer​

aqua-installer を GopherJS を使って JavaScript Action に出来ないか検証しました。

結論を言うと今はまだやめたほうが良さそうということで諦めました。 興味のある人は zenn の scrap を見てみてください。 将来的に GopherJS がより成熟してきたらまた検討するかもしれません。

aqua-renovate-config​

go datasource をサポートしたら warning が大量に出るようになったので対応しました。

tfcmt​

  • v3.4.0
    • commit hash に関連した PR を取得して PR にコメントするようにしました

GitHub 側の仕様変更で、今月になって commit に対する comment が PR の timeline に表示されなくなりました。

そのため、 CI で push event を hook して commit にコメントをしている場合、 tfcmt plan の結果が PR に表示されなくなるというケースがありました。

そこで commit hash に関連した PR を取得して PR にコメントするようにしました。 なお、元々 pull_request event を hook するなどして PR 番号が tfcmt に渡っている場合は関係ありません。

tfaction​

  • v0.5.15: tfmigrate-apply 中の typo の修正
  • v0.5.16
    • tfmigrate が history の保存先に GCS をサポートしたことのに合わせて、 tfmigrate-plan job で .tfmigrate.hcl を scaffold する際に GCS を指定できるようになりました
    • gsutil が Workload Identity Federation をサポートしたことに合わせて、 setup job の中で最新の gsutil をインストールするようになりました
    • これにより、それまで AWS を利用することが前提だったのが、 AWS の代わりに GCP を使うことができるようになりました

github-comment​

上記の tfcmt と同様の変更を github-comment にもしました。

ci-info​

  • v2.1.0
    • public repository なら GitHub Access Token なしで動くようにしました
  • v2.1.1
    • arm64 support

OSS の新規開発 🚀​

gha-trigger​

まだ開発中ですが、新しい OSS を開発しています。詳細はまたいずれ書けたらと思います。

その他​

Aqua Picker (Third Party)​

公式ではないですが、 aqua に色々 Contribution してくださっている 4513echo さんが作られているサイトです。

ありがたい話です。

Chrome の tab を手動で group 作って整理するようにしてみた​

tab たくさん開きすぎて目的のページが見つからなくなって手当たりしだいに閉じるみたいなのをなんとかしたいとは前から思ってました。

たまに Chrome の拡張機能をググったりしつつもどれもしっくりこず、特に何も対策を打たずに来ましたが、 最近 Chrome 標準の Grouping 機能を使って、業務のトピックごとに Group を使って整理するようにしてみました。

それなりにうまくいってますが、まだ改善の余地はありそうな感じはするので、模索していきたいと思います。

その他のその他​

aqua​

GitHub Sponsor になると言ってもらえてありがたい。

雑に使えるというのは、学習コストの低さの表れかなと思います。 これは team や project にツールを導入し、普及していく上ではとても重要なことです。 個人で使う分には多少学習コストが高くても好きなものを使えば良いですが、 他の人にも広めていく上では学習コストの低さは極めて重要です。 仕事で使う場合には学習することが目的ではなく、他にもやるべきことがあるはずなので、 そういう状態でもストレスなく、簡単に使えることがスムーズに導入を進める上で大事です。 なので、学習コストが低くて team や project に導入しやすいという意味でも、 個人の dotfiles だけでなく team, project で使うツールのバージョン管理にも aqua が広がっていくと良いなと思っています。

また、雑に使えると言っても、 aqua では registry も含めて version を厳格に固定し管理され、バージョンの差異による問題が起こらないようになっています。

こうやって徐々に認知されていくのはいい話ですね。

aqua-registry​

PR お待ちしてます。

tfcmt​

tfaction​

GCPでのworkload identityと連携できるか

できます。

github-comment​

github-comment でコメントが長すぎた場合に、代わりのコメントを post する設定です。

inspire しました。

It is inspired from suzuki-shunsuke/github-comment.

ci-info​

ci-info が自動で環境変数から commit hash などの情報を取得してくれるという話ですね。 内部的には go-ci-env というライブラリを使っています。

2022-07 振り返り

· 6 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

仕事​

今月から Mercari の Platform Group の Platform DX team のメンバーとして仕事をしています。 英語で若干苦労している部分はありますがなんとかやっています。

このご時世なので同僚の方とオフラインで会うことは当分無いだろうなと思っていましたが、 2 回ぐらい歓迎会をして頂き(オンラインを含めるともっとある)、顔を合わせることができました。

ドキュメントはかなり整ってますし、わからないことは聞けば教えてもらえますし、毎日メンターと 10 ~ 15 分程度 1on1 をやっているので順調にオンボーディングを進められているかなという気がしています。

自動化の仕組みとかはかなり整っていますが、 aqua や tfcmt, github-comment といった自分が開発している OSS を活用して更に DX を高めたりコードを綺麗にしてメンテナンス性を高めることができるのではないかなと感じています。

現在幾つかのタスクに取り組みつつ、上記のツールを導入するためにツール側を若干修正しています。 新しい環境に移ることで今まで見えてなかった部分が見えてツールを進化させることが出来ていていい話だなと思います。

OSS 開発​

aquaproj/aqua​

v1.15.1 => v1.18.0

  • v1.16.0
    • aqua g の検索結果の表示を改善
  • v1.17.0
    • log のカラー出力を環境変数で制御できるようにした
    • progress bar をデフォルトで無効化した。環境変数で有効化できるようにした
  • v1.18.0
    • aqua cp コマンドのサポート
      • Docker image などにツールをインストールし、 aqua なしで実行できるようにする際に便利

aqua cp を使った Docker image の build に関しては以下に書きました。

aqua-registry​

v3.5.0 => v3.20.0

Package 数が 637 から 702 まで増えました。 Contribution してくださった方々、ありがとうございます。

あと、 aqua-registry に contribution するためのシェルスクリプト generate-registry.sh や scaffold.sh を Go で書き直したり、新たに create-pr-new-pkg というコマンドを追加したりしました。 Go で書き直すことで Windows でも動くようになりました。 scaffold してから PR を作成するまでが自動化できるようになり、より簡単に contribution できるようになりました。かなり便利です。

例えば以下の 3 コマンドで kevwan/depu を追加する PR を作成できてしまいました。 #4992

$ go run ./cmd/scaffold kevwan/depu # scaffold
$ depu --help # 動作確認
$ go run ./cmd/create-pr-new-pkg kevwan/depu # PR 作成

また Style Guide を整えました。

https://aquaproj.github.io/docs/reference/registry-style-guide

そして既存のコードを Style Guide に合わせて修正しました。

Package 数が 700 を超え、順調にパッケージの数は増え続けています。 これも簡単に新しいパッケージを追加できるアーキテクチャも含めた仕組み作りの賜物です。 ユーザーからは見えにくい部分ですが、この辺の良さも伝わればいいなと思います。

tfcmt​

  • v3.3.0
    • Google Cloud Build を標準でサポート

github-comment​

  • v4.3.0
    • post command で既存のコマンドの更新をサポート
    • ARM64 をサポート
  • v4.4.0
    • Google Cloud Build を標準でサポート

go-ci-env​

  • v3.0.0
    • API を大幅に修正し、使いやすくした
    • generic package を削除
    • Add function を追加し、独自の Platform をサポートしやすくした
    • JobURL を追加

tfaction​

  • v0.5.13
    • tfaction.yaml と tfaction-root.yaml で環境変数を設定できるようになりました。特定の working directory で terraform の -parallelism を変えたいときとかに便利です
  • v0.5.14
    • v0.5.13 で生じた、 terraform apply を実行する際に GCS から plan file をダウンロードするのに失敗するバグを修正しました (GCS じゃなくて S3 を使っている場合は関係ありません)

tfaction, もしかして某W社でも使われている(?)

その他​

aqua の Twitter アカウントを作ってみた​

@aquaclivm あとは hash tag #aquaclivm を活用し始めました(ちょくちょくつけるの忘れますが)。 aqua というワードがあまりにも一般的すぎて検索しても aqua が埋もれて見つけられないので、 aqua に関して呟くときは @aquaclivm をメンションするなり hash tag をつけるなりしてもらえると助かります。

starship, Yggdroot/LeaderF を導入​

仕事用の PC をセットアップした際、今まで使ってた denite.nvim や kube-ps1 がうまく動かず、調べるのも面倒なので別のツールに乗り換えました。

その他のその他​

aqua gr コマンドすごい便利。

fish で aqua を補完できるようにした話です。いい話

いい話

わかる。みんなにこの良さを知ってほしい

初物理出社時の記念写真

image

2022-06 振り返り

· 6 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

仕事​

05-18 がリクルートでの最終出社日でした。 https://techblog.szksh.cloud/job-change-2022-06/

なので今月は丸々休みです。来月 07-01 から働きます。

日報(?)​

https://zenn.dev/shunsuke_suzuki/scraps/dbfdeb67518c52

zenn で日報のようなものを書いてみました。休み中なのに偉い。 06-07 だけ何も書いてないですね。この日はグダグダ漫画読んでたのかもしれません。 でも基本は休み中もずっと OSS のメンテしてました。

Blog​

OSS 開発​

aquaproj/aqua​

Windows 対応は非常に大きな改修でしたが、反響がほぼなくて残念でした。

v1.9.0 => v1.15.0

aqua-registry​

v2.19.0 => v3.5.0

Package 数が 515 から 637 まで増えました。 #4181 binenv が対応しているツールに関して、 aqua-registry でもだいたい対応しました。

tfcmt​

  • v3.2.4: -auto-approve なしで tfcmt apply 実行できるようにしました。
  • v3.2.5: Windows に対応しました

asciinema-trim​

https://github.com/suzuki-shunsuke/asciinema-trim/releases/tag/v0.1.2

Windows に対応しました

その他​

aqua が紹介されました​

著者の zoetro さんは以前も aqua に関する記事を書いてくださいました。ありがたい話です。

Terraform や Kubernetes では様々な周辺ツールがあり、それらのツールの管理に aqua は非常に便利だと思います。

Windows 環境を用意するなら Amazon Workspaces が便利​

https://zenn.dev/shunsuke_suzuki/scraps/6859774d379414

aqua の Windows 対応で Windows 環境が必要だったので Amazon Workspaces を使いました。 とても簡単に Windows 環境を用意できるので便利でした。

tfcmt plan は plan ファイルを使っても実行できる​

terraform plan の代わりに terraform show コマンドを使えば plan file を使って tfcmt でコメントできます。

https://github.com/suzuki-shunsuke/tfcmt/issues/316

tfaction の Star 数がなぜか増えた​

理由はよくわかりませんが、結構 star 数が増えました。

image

Renovate が GitHub Actions x.y.z-0 を x.y.z に update してくれない原因と修正方法​

https://zenn.dev/shunsuke_suzuki/scraps/9b4a3e5e8f6925#comment-09bfe96f8a2c1d

Slide 作成は Google Slide が自分にあってる​

Slide をなにで作るか考えたりしましたが、結局 Google Slide が自分には合ってるのではないかという結論に至りました。 もっとも Slide ってあまりコスパが良くないので、ブログとかドキュメントのほうが良い気はしますね。

https://zenn.dev/link/comments/888dbb8af3ca0a

マイク買ってみた​

https://www.amazon.co.jp/gp/product/B099ZZMGJ5

image

aqua の動画を撮るのに内臓のマイクだとイマイチな気がしたのでマイクを買ってみました。 有線のヘッドホンしないといけないのがちょっとマイナスですね。 QuickTime Player で録画してみたら、まぁ内臓のマイクよりはクリアな気がしますが、 音を拾いすぎている気もします。

買ったあとちょっと動画収録に使っただけであまり使ってないですが、来月から仕事でも使う機会あるのかな?内蔵マイクで十分な気もするけど。

運動​

アキレス腱が痛くて走れないんですが、卓球はなんとか出来ます。 マイラケットとマイシューズを買いました。 週1, 2 くらいでやってますが、仕事始まったら週1になるかも。

その他のその他​

tweet の埋め込み、もうちょいいい感じにしたいですね。

tfaction に関するコメント。ありがとうございます。すごい自動化されている感じがしていいですよね。

自分が LINE で Corporate Engineer やってた頃に作った Slack App が未だに現役らしくて感動しました。

さいごに​

05-19 から 1 ヶ月以上に渡る有給消化が終わりました。 長い休みの間に新しい OSS を作ったりしたいとも思ってましたが、既存の OSS (主に aqua) のメンテで手一杯でした。 それでも aqua や tfcmt などを改善できたので良かったです。

来月から Mercari で働きます。 環境が大きく変わるはず(特に英語)なので、楽しみな半面ちょっと緊張します。

2022-05 振り返り

· 8 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

仕事​

05-18 がリクルートでの最終出社日でした。

https://twitter.com/szkdash/status/1526875250646204417

https://twitter.com/szkdash/status/1527235538951974912

Blog​

OSS Contribution​

merged daterepositorylangPR's short description
2022-05-07terraform-linters/tflint-ruleset-awsgofeat: support provider aliases

Terraform の AWS Provider の Alias が設定されている場合でも tflint の AWS Plugin の Deep Check が正しく動くようにしました。

https://github.com/terraform-linters/tflint-ruleset-aws/issues/331 を読むと分かりやすいかも。 これを実装する際にはメンテナの @wata727 さんに結構フォローしていただき、助かりました。

OSS 開発​

新規​

特になし

Update​

Demo​

https://twitter.com/szkdash/status/1531555164800557056

若干情報が古くなっていたので、デモ動画を作り直しました。

aquaproj/aquaproj.github.io​

https://github.com/aquaproj/aquaproj.github.io

zenn と違って dev.to, medium で書いた記事は GitHub で管理されていなかったのが嫌だったので、 aquaproj.github.io で Blog を有効化して dev.to, medium の記事をコピーしてきました。 Canonical URL を設定しています。 新たに英語で記事を書く際にはこちらで書いて、 dev.to にクロスポストして Canonical URL を設定することにしました。

関連: https://zenn.dev/shunsuke_suzuki/scraps/43b8f553d08b6f

あと DocSearch による検索がいつの間にか動かなくなっていたのでサポートに問い合わせました。 https://github.com/aquaproj/aquaproj.github.io/issues/76

aquaproj/aqua-registry​

https://github.com/aquaproj/aqua-registry

v2.11.0 => v2.19.0 (ツール数: 470 => 515)

様々なツールを追加しています。 package type go のツールも追加しました。 https://github.com/aquaproj/aqua-registry/pull/3713

aquaproj/aqua​

https://github.com/aquaproj/aqua

  • v1.5.0-0 => v1.9.0
  • v1.5.0: package 名のエイリアスをサポート
    • リポジトリ名が変わったり、別の org に transfer されたりしたときのための機能
  • v1.5.1
    • 同じツールを複数バージョンインストールする場合(基本そんなことしないけど)のバグを修正
    • Registry ファイルの拡張子が .json の場合、 JSON としてパース
    • リファクタリング
  • v1.6.0
    • standard registry の override のサポート: registry.yaml の代わりに registry.json を指定することで若干パフォーマンスが改善する
    • experimental feature という概念の導入
      • execve(2) でコマンド実行をサポート。残念ながら macOS で正常に動作しないケースが見られるので experimental feature としてリリース
    • retry の limit に引っかかった場合にエラーを返すようにした
    • リファクタリング
  • v1.6.1
    • log に GOOS と GOARCH を追加。問い合わせ時に便利
    • 大幅なリファクタリング
    • unit test の大幅な追加
  • v1.6.2
    • v1.6.1 のバグ修正。 aqua g と aqua list で global configuration を読まなくなっていたのを修正
  • v1.6.3
    • aqua g で 1 件もマッチしなかった場合に panic が発生するのを修正
  • v1.7.0
    • Go 製のツールをインストール時に go build でビルドするのをサポート
  • v1.8.0
    • aqua g で GitHub Tag からバージョンを取得できるようにした
  • v1.9.0
    • github_archive, go で commit SHA を version として指定できるようにした

checksum の検証も POC として実装してみました。 しかし checksum のリストのファイルを Git で管理しないといけないのがユーザーの体験を損なうので、どうするのが良いのかよく分からず一旦置いています。

https://github.com/aquaproj/aqua/issues/427

tfcmt​

https://github.com/suzuki-shunsuke/tfcmt

  • v3.2.1 => v3.2.3
  • v3.2.2: apply の merge commit に関連する Pull Request を API で取得
  • v3.2.3: GitHub Enterprise Support の修正。 Graph QL API の Endpoint を変更できるようにした

github-comment​

https://github.com/suzuki-shunsuke/github-comment

  • v4.1.1 => v4.2.0
  • v4.2.0: GitHub Enterprise のサポート

renovate-issue-action​

https://github.com/suzuki-shunsuke/renovate-issue-action

Project に追加できるようになったことで、だいぶ実用レベルに達した気がします。

v0.2.1 => v0.3.1

  • v0.2.2
    • Issue の title と body のデフォルトを改善
    • additional_body field の追加
  • v0.2.3
    • Issue を Project に追加できるようにした
  • v0.3.0
    • Issue の body 関連のフィールドを整理
  • v0.3.1
    • 紛らわしいログを削除

asciinema-trim​

https://github.com/suzuki-shunsuke/asciinema-trim

v0.1.0 => v0.1.1

再生速度の変更をサポートしました。

https://twitter.com/szkdash/status/1531563963057852416

その他​

CLAS でオフィスチェアをレンタルしました​

以前からオフィスチェアに興味はあったものの、結構高いですしいきなり高いものを買って失敗するのは嫌だったのでレンタルで試すことにしました。 レンタルもはじめてなので一番安い (1,650 円 / 月) のから試すことにしました。

注文してから届くまでに 2 週間以上かかりました。 Amazon とかの翌日配送に慣れていたので、 2 週間以上かかることに驚きましたが、そういうものかと思うことにしました。

一番安いのにしたものの、座り心地は今までのよりだいぶ良いです。 今まで自分は背もたれに寄りかかっている感覚があまりなかったのですが、新しいのだと自然と腰に背もたれが当たって支えられているような感じがします。 と言いつつ、一番安いものなのでもっといいやつも試したいとは思っています。肘掛けが若干ほしいです。

オフィスチェアの他に興味あるものとしては、ベッドも興味あります。 ベッドのレンタルもあるようです。ただベッドの場合は、今使ってるやつをどうすればいいのかよくわからないし、オフィスチェアよりも面倒な気もします。

https://clas.style/furniture/bed/

運動​

有給消化で時間に余裕もありますし、運動を週 5, 6 くらいでするようにしています。 元々食事には気を使っていてお酒も飲まないし間食もしないのですが、引きこもっていたら気づかぬうちに結構太っていました。

その他のその他​

go-yaml は別に watch しているわけではないですが、 v3.0.0 の tag が打たれていることに気づきました。 v3 は長いこと tag が打たれてなくて使う気になれませんでしたが、 tag が打たれたということは stable になってきて安心して使えるということなのでしょうか? v2 と v3 でどう変わってるか把握してないので、調べてみても良いかも

WhiteSource が MEND に名称が変わったらしいです。

https://github.com/spf13/afero 便利

GitHub Actions の pull_request closed event では workflow が trigger しないことがある

GitHub doesn’t queue the merge commit job for closed PRs; So workflows using on: { pull_request: { types: [“closed”] } } will not consistently be triggered.

Bot が team に対してメンションするには team を read する権限が必要

Mercari の Security Team の Blog Series 読まねば

転職します

· 13 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

転職することになったのでその経緯とかを書こうかなと思います。

現職ではなにをやっていたのか​

現職では Recruit でスタディサプリ及び Quipper Product (Quipper School, Quipper Video) の SRE をやっていました。

2019-10-01 から Quipper Japan Branch の SRE team に Join し、 Quipper Japan Branch が 2021-10-01 に Recruit に統合されてからは Recruit の SRE をやっていました。 統合されてからも携わっているプロダクトや業務内容は特に変わってないので、 2 年 9 ヶ月ほど在籍していたことになります。

https://github.com/suzuki-shunsuke/resume に職務経歴書を置いているのでそちらも参照してください。 ちなみにこのリポジトリは今回の転職の際に作ったのですが、このリポジトリが更新されているのに気づいて自分の転職をいち早く察した方もいたようでした。

SRE として様々なことを経験しましたが、特に自分は Terraform の CI/CD Pipeline の改善に注力してきました。 そしてその過程で様々な OSS を開発してきました。 詳細はブログや職務経歴書に書いてあるので割愛します。

コロナの流行に伴い途中から今に至るまでフルリモートになり、フルリモートだった期間のほうが長いです。 フルリモートになってからはオフィスにはワクチンの職域接種を除き 1 回しか行ってないですし、 同じチームでも自分の後に入社した方とは直接会ったことはないです。 ですが、 Slack や Google Meet などでコミュニケーションを取っていたので自分としては特に不便はありませんでした。

スタサプ SRE のすすめ​

IT の力で教育に変革を起こし、学びたい人がより自由に学べる世界を目指すスタディサプリ及び Quipper Product に関われて嬉しく思っています。 転職する自分が言うのもなんですが、スタサプの SRE チームは本当に恵まれた環境です。転職を考えている人は是非候補に入れてみてください。

スタサプ SRE の良いところ:

  • 同僚(SRE 以外も含む)が優秀
  • 現状に満足することなく、日々改善に取り組んでいる
    • 技術的な部分だでなく、 MTG などのあり方なども日々見直している
    • 振り返りをし、課題と改善案を考え実行するというサイクルを日々回している
  • 自己完結なプロダクトチームのためのプラットフォームの開発を行っている
    • SRE がプロダクトチームに依頼を受けてインフラを構築するのではない
  • 裁量が大きく、自分で課題を見つけて改善することが出来る
    • なぜそれが必要なのか Issue を書くなど、説明責任は伴うが、ちゃんと説明できれば No とはあまり言われない
    • 自走出来ない人には向きません
  • 情報が比較的オープン
    • Slack の Private channel や DM でのコミュニケーションがほぼない
    • GitHub リポジトリもスタサプ関連のものならほぼ全部見れる
    • GitHub を検索すればだいたい情報が見つかる
  • ドキュメントを書く文化もある
  • Postomortem や Design Doc, Production Readiness Check, SLI/SLO といった SRE の基本的なプラクティスが既に定着している
  • サービスが安定している
    • サービスの性質上・ SNS でバズって急にスパイクするようなことがほぼない
    • 基本的には k8s の Cluster Autoscaler や Horizontal Pod Autoscaler で対応できる(長期的なサービス拡大のために他にもやっていることはあります)
    • 障害は少なく、深夜や休日に稼働しないといけないことも少ないので、 QOL を損なわない

https://brand.studysapuri.jp/career/position/sre にもいいことが書いてあるので、読んでみてください。

あと、 Security に特化したポジションもあるので、そちらも興味があれば是非。

転職への流れ​

転職のきっかけは、 @deeeet さんから Twitter DM で声をかけていただいたことでした。 deeeet さんとは過去に 2 回ほど面識があり、最初は「突撃 Terraform」、2 回目は Open Policy Agent Rego Knowledge Sharing Meetup というオンライン LT 会でした。 ただ、面識があるとはいえ deeeet さんが自分のことを認識しているとは思っていなかったので驚きました。 ここ何年か OSS の開発や blog の執筆などを精力的に行ってきたのが功を奏したのかもしれません。

DM で声をかけていただいてから直ぐにカジュアル面談をして頂き、その後直ぐ採用ページから応募しました。 職務経歴書の言語の指定は特にありませんでしたが、採用ページに日本語の JD がないことから、英語で書きました。 markdown で書いて md-to-pdf で PDF に変換しました。 markdown で職務経歴書を書いたのははじめてですが、自分にとっては Word などと比べてずっと書きやすかったです。

自分は今回のも含めて過去に 3 回転職をしていますが、 エージェントを介さずに直接応募したのははじめてでした。 過去 2 回の転職活動は色々な会社の募集要項に目を通して複数社の面接を受けて日程を調整して面接を受けに行ってと、なかなか精神的にも肉体的にも大変でした。 一方、今回は 1 社しか受けなかったこと、またこのご時世なので面接も全てリモートだったこともありだいぶ負担は少なかったです。

どこに転職するのか​

2022-07-01 から、 Mercari の Platform Group に Join します。まだ1ヶ月以上先ですが、今から楽しみです。

Mercari には優秀なエンジニアが集まってますし、 Platform Group の Blog Series を読んで技術的にチャレンジングなことをやっていて面白そうだと感じました。 自分が現職で取り組んでいた Terraform CI/CD Pipeline などの改善にも通じる部分があり、自分の経験・強みを活かしつつ新しいことに挑戦できるのではないかと思いました。 Blog Series や OSS の公開など、社外にも技術をオープンにしているのも良い文化だと感じました。

現職でプラットフォームエンジニアリングのようなことをやっていく中で、 抽象化された UI/UX を提供すること・生産性を損なわずにプラットフォームのセキュリティを担保することがとても重要かつ難しい課題だと感じていて、 Developer Experience at Mercari や Securing Terraform monorepo CI に書かれていることに共感しました。

余談ですが、とある方から転職するなら Hashicorp に転職して欲しいと言われました。 自分のこれまでの OSS の開発の経験を活かし、より多くの人・組織に使ってもらえる OSS の開発に携わってほしい(そのほうがより大きなバリューが出せる)という意図だと思いますが、 具体的な社名が出てくるとは思っていなかったのでびっくりしました。 どこに所属するにせよ、より多くの人・組織に使ってもらえるような OSS の開発をしていきたいですね。

おまけ: OSS 活動の振り返り​

転職の話とは関係ないですが、ついでにここ数年の OSS 活動などについても振り返りたいと思います。

GitHub followers

2022-05-19 時点の状況

GitHub Followers: 139

image

やはり Star 数上位 3 つは思い入れがありますし、 github-comment や ci-info も便利なのでもっと評価されてほしいと思います。 色々なものを作ってきましたが、ここではこれらに絞って紹介します。

aqua​

一番思い入れがあるのは aqua です。 汎用的な CLI のバージョン管理ツールは色々ありそうで意外とあまりありません(多分)。 有名なのは asdf くらいですが、これは自分が求めているものではありませんでした (Nix とかもあるけど、良く知りません) 。

バージョンを固定することで、バージョンの違いによるトラブルを起こらないようにすることができます。 aqua は使うのがとても簡単で、 (symbolic link さえ作られていれば) コマンド実行時に自動で指定したバージョンがインストールされバージョンが切り替わります。 aqua g による検索は使い勝手がよいです。 GitHub Actions で簡単に導入ができるよう Action が提供されています。

aqua は Renovate の Preset Config を提供しており、 Renovate を使って簡単に update の自動化ができます。 aqua は Renovate を最も上手く活用した OSS の一つだと思っています。

aqua には Registry という Ecosystem があります。 aqua 本体への contribution にはそれなりのハードルがあるかと思いますが、 aqua-registry という公式の Registry には簡単に Contribution することができます。 2022-05-19 時点でありがたいことに自分以外に 13 人の方に Contribution 頂いています。 本体とは独立した拡張機構を持った OSS を作ることができたことにも満足しています。

aqua-registry に登録されているツールの数は、 2022-05-19 現在 asdf-plugins を超えました。 だから aqua のほうが優れているという話ではありませんが、 asdf と同等以上に多くのツールをサポートしているとは言えると思います。

$ asdf plugin list all | wc -l
470

$ aqua list | wc -l
499

aqua はツールのインストールと継続的 update を非常に容易にします。 ツールをダウンロードして展開してインストールするような定型的なシェルスクリプトを書く必要はありませんし、いつまでも古いバージョンが使われることもありません。

また、 Go で GitHub Actions の Action を作りたいと行った場合に、態々 Action としてパッケージングせずに aqua で install して run step で実行するということもやりやすくなります。 例えば自分は renovate-issue-action という GitHub Actions で実行することを前提とした CLI ツールを作っていますが、 これも態々 Action としてパッケージングせずに aqua で install して run step で実行するようにしています。

e.g.

- uses: aquaproj/aqua-installer@v1.0.0
with:
aqua_version: v1.6.0
- run: renovate-issue-action

tfaction​

tfaction は GitHub Actions で Terraform の CI/CD Pipeline を構築するための Action の Collection です。 便利な単体の Action は色々あると思いますが、 workflow 全体をカバーするものはあまり他にないのではないかと思っています。 こういう CI/CD Pipeline はあまりオープンにされない面もあると思うので、それを OSS にできたことは有意義なことだと思っています。

tfcmt​

tfcmt は CI で実行した terraform plan, apply の結果を Pull Request に分かりやすく通知する CLI ツールです。 tfnotify のフォークですが、 GitHub への通知に特化する代わりに様々な機能改善を入れています。 GitHub を使っているのであれば tfcmt を個人的にはオススメします。 OSS は気に入らなければフォークすればいいとはよく言ったものですが(?)、実際にフォークして個人でここまで開発するとは、我ながらよくやったなと思います。

github-comment​

github-comment は Pull Request, Issue にコメントをしたりコメントを非表示にしたりする CLI ツールです。 使い方次第ですが、 CI をよりユーザーフレンドリーにし、 Developer と DevOps Engineer の双方の生産性を高めることもできるツールです。

github-comment で PR にコメントをして CI の結果を分かりやすくする

ci-info​

ci-info は地味なツールですが、 CI に関連した情報を取得してファイルに書き出したり環境変数として出力する CLI ツールです。 CI を実装していると、 push event に関連する Pull Request とか、 Pull Request の label の list とか、 Pull Request で変更されたファイルの一覧とか、 Pull Request の Author とか欲しくなったりするのですが、そういった情報を取得するコードを毎回書くのは地味に面倒です。ページネーションとかも考えるとなおさらです。 また、 CircleCI や GitHub Actions など複数の CI Platform に対応していて、それらの違いを吸収する意味合いもあります。

さいごに​

以上、現職でやってきたこと、転職の経緯、ここ数年やってきた OSS 開発について書きました。

2022-04 振り返り

· 5 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

仕事​

  • GitHub Discussions の検証
  • renovate-issue-action の導入
  • tfcmt で patch option の有効化
  • etc

GitHub Discussions に仕事のナレッジを蓄積できないか検証したりしました。 Slack と比べてナレッジを蓄積しやすいのではないかと期待する一方、 Slack のようにその場で質問をしてすぐ解決するのには向かないかなという気もしました。 ちゃんとしたドキュメント書くよりはとりあえず Discussions に Q&A 形式でナレッジを残しておくのは低コストでやれるかなと思う反面、手間もかかりそうです。 活用の仕方を模索すること、無理なく運用できるルールを定めること、組織・チームでツールの活用方法・使い分けの認識を合わせる必要がありそうです。

Blog​

OSS 開発​

新規開発​

first release datenamebadgeslangtypeshort description
2022-04-23renovate-issue-actionGitHub last commitgocli for GitHub ActionsCreate, update, and close GitHub Issues with GitHub Actions according to Renovate Pull Requests
2022-04-21zap-errorGitHub last commitgolibraryEmbed zap.Field into error

zap-error​

zap-error は Go の error に zap.Field を埋め込み、構造化されたコンテキストを error に持たせてロギングできるようにするライブラリです。 Go では fmt.Errorf を使ってエラーにコンテキストを付与させるのが一般的ですが、 fmt.Errorf では構造化されたコンテキストを付与させることができません。 また、 uber-go/zap を始めとしたライブラリを使った構造化ロギングも一般的に行われることです。 であれば error に構造化されたコンテキストを付与しロギングに活用したいと思うのは個人的には自然なことだと思っています。 zap-error はそのための薄いライブラリです。 error に zap.Fields を付与する関数と、 error を zap.Fields に変換する関数の 2 つの API しか提供していません。 zap の logger をラップするようなことはしていないので zap はそのまま使えます。

ちなみに logrus 用の logrus-error というのも元々作っています。

renovate-issue-action​

Renovate ですんなり automerge 出来なかった Pull Request を Issue としてハンドリングするための GitHub Action です(正確には Action ではなくて CLI ですが)。 これはいずれちゃんとブログを書きたいですね。

Update​

OSS Contribution​

merged daterepositorylangPR's short description
2022-04-29shuaibiyy/awesome-terraformdocumenttools: add tfaction
2022-04-29shuaibiyy/awesome-terraformdocumentfix: update links to some tools
2022-04-22kreuzwerker/terraform-provider-dockergochore: remove the workflow to close stale issues and pull requests
2022-04-21mitchellh/mapstructuregofix: panic when Decode's input is array and output is a slice
2022-04-12rhysd/actionlintgofix: add permissions "pages" and "discussions" and remove invalid permission "metadata"
2022-04-06terraform-linters/tflint-ruleset-awsgostyle: format rules/api/rule.go.tmpl and run go generate ./...

tfaction が awesome-terraform に追加されました。

2022-03 振り返り

· 2 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

3 月は blog を結構読みました。

https://zenn.dev/shunsuke_suzuki/scraps/602d6f6b803168

後は職場のインフラ周りのコードとかを読み返して復習しました。

最近は OSS 開発やブログの執筆などの output が中心で、 input をする時間があまり取れていなかったのでブログなどを読むという形で input をしました。

仕事​

Blog​

datetitle
2022-03-30Terraform Modules を Monorepo で versioning して管理
2022-03-29Automate handling a number of Pull Requests by Renovate in Terraform Monorepo
2022-03-05tfaction v0.5.0 の update

OSS 開発​

  • aqua v1.2.0 ~ v1.3.0
  • aqua-registry v1.6.0 ~ v1.11.0
  • tfaction v0.5.0 ~ v0.5.7
  • tfcmt v3.1.0

その他​

AWS CodeDeploy を用いた AWS Lambda の Progressive Delivery に関して検討しました。

https://zenn.dev/shunsuke_suzuki/scraps/64bf029c5eeb7b

PipeCD も考えましたが、 CodeDeploy で出来るんならそれでいい気がするので、まずは CodeDeploy で検討しています。

2022-02 振り返り

· 2 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

まとめ​

aqua, aqua-registry, aqua-installer の v1 をリリースしました。 v1 に伴う変更は特にありません。 aqua v1.1.0 では aqua g -i によって aqua.yaml に package を追加できるようにし、使い勝手を良くしました。 tfaction は結構色々機能追加やバグ修正が入ってます。 仕事ではブログにも書いたように Renovate の大量 PR を自動で処理できるように改善を行いました。

仕事​

  • Terraform
    • tfaction バグ修正
    • GITHUB_TOKEN rate limit 引っかかったので GitHub App の token に置き換え
    • CI こけた renovate PR の自動 close 検討
    • tfsec や AWS Provider v4 の update 対応をどうするか検討したり、対応したりしてた
  • AWS Account 分割

Blog​

OSS 開発​

2021-11 やったこと

· 4 min read
Shunsuke Suzuki
Platform Engineer / OSS Developer / Go / Terraform

Job​

  • AWS Control Tower
    • 登録できてなかった Account を登録できた
  • AWS SSO
    • ユーザーへの案内・催促を行い、 IAM User から SSO に移行してもらった
    • ローカルの開発で Access Key に依存していた部分に関して修正し、 Access Key なしでローカルで開発できるようにした(人によってはまだ Access Key に依存したツールを使っている
      • S3 Browser が SSO でなぜか動かないらしい(自分が Windows 持ってないので確認できてないけど
      • Cyberduck が SSO サポートしていない
    • 一部のユーザーの Access Key の deactivate
    • 不要な IAM User のクリーニング
    • 来月中には一部の例外を除き、移行を完了させたい
    • SSO 出来ない人を SSO できるように対応した (同期対象の Group や、 Permission Set を追加したり)
    • SSO に関する User 向け、 SRE 向けドキュメントを英語で書いた
  • aqua を更新し、 Access Token なしでも動くようにした(API call を減らし、 rate limit の問題を解決した
  • Self Hosted Renovate in GitHub Actions
  • AWS WAF
    • COUNT, BLOCK log を Lambda で抽出しようとしているが、なぜか COUNT log が抽出できていない
    • あまり時間取れてない
  • Route53 のドメインのアカウントの移管
  • Lambda の CI/CD
  • git-secrets から secretlint への移行
  • circleci-config-merge を CI で実行して自動修正するようにした

課題​

  • Renovate の Automerge が base branch が更新されたことで disable になり、結局手でマージしないといけなくなっている
    • 自動化の検討

Blog, Slide​

OSS​

aqua の公式サイトを立ち上げました。

https://aquaproj.github.io/

Docusaurus v2 で生成して、 GitHub Pages でホスティングしています。

aqua 用の GitHub Organization を作り、関連リポジトリを transfer しました。

https://github.com/aquaproj

OSS Contribution​

tfmigrator と tfcmt を awesome-terraform に追加してもらいました。

その他​

このブログのリポジトリを別の GitHub Organization に transfer しました​

https://github.com/techblog-szksh-cloud/techblog-szksh-cloud.github.io

理由は techblog.szksh.cloud が suzuki-shunsuke.github.io の CNAME になっていて、 OSS のドキュメントなどを GitHub Pages で公開したいときに都合が悪かったからです。

ついでに CI を Drone から GitHub Actions に移行しました。

suzuki-shunsuke/issue の活用​

https://github.com/suzuki-shunsuke/issue/issues に記録を残すようにしました。

https://github.com/suzuki-shunsuke/issue/issues?q=is%3Aissue+updated%3A2021-11-01..2021-11-30

前から使ってましたが、あまり活用できてなかったので、意識的に活用していこうと思っています。 せっかくツールとかを検証しても、ちゃんと記録が残ってないと忘れてしまいもったいないというのと、 issue に残すと自然と検証とかが進むような気がしています。

Docusaurus​

Docusaurus はいい感じなので suzuki-shunsuke/profile やこのブログを Docusaurus に移行するのもありかもしれないなと思いました (思っただけでまだ何もしてません

ただ、 OSS のドキュメントに Docusaurus を使う場合、個人的には package.json を同じリポジトリに置きたくないので、 同じリポジトリでプロダクトとドキュメントを管理しにくいかなという気はしています。