2024 年振り返り
自分が 2024 年にエンジニアとしてやったことの振り返りです。
去年の振り返りはこちら。
本記事は長いので興味のあるものだけつまみ食いするのも良いでしょう。
- aqua や tfaction などの利用者は update をざっと眺める
- 新しく作った OSS をざっと眺めて興味のあるものを見てみる
- 自分が書いたブログ記事のタイトルをざっと眺めて興味のあるものを見てみる
GitHub の Follower 数や Star 数などの変化
GitHub Followers: 245 => 360 (+115)
2024-12-31 時点の GitHub Status
Star 数 Top 3 は変わらずですが、 go-graylog がようやく Top 6 から消えました。
Top 6 を全部 100 超えしたいですが、あと 1 つですね。
新しく作った OSS
15 個 (漏れがあるかもですが)
リポジトリ一覧
first release date | name | lang | type | short description |
---|---|---|---|---|
2024-12-21 | disable-checkout-persist-credentials | Go | CLI | Disable actions/checkout's persist-credentials |
2024-12-21 | tfmv | Go | CLI | Rename Terraform resources and modules and generate moved blocks |
2024-12-10 | sort-issue-template | Go | CLI | Change the order of GitHub Issue Templates using a text editor |
2024-12-03 | ghd2i | Go | CLI | Create GitHub Issues from GitHub Discussions |
2024-12-01 | close-discussion-action | YAML | GitHub Action (Composite Action) | GitHub Action to close and lock GitHub Discussions |
2024-11-29 | tfrstate | Go | CLI | Find directories where changed terraform_remote_state data source is used |
2024-11-17 | release-js-action | YAML, Shell script | GitHub Actions | GitHub Action to release JavaScript Actions |
2024-10-29 | lock-action | TypeScript | GitHub Actions | GitHub Action for lock mechanism using GitHub branches |
2024-08-06 | ghomfc | Go | CLI | Output GitHub Organization Members ordered by GitHub Followers |
2024-07-23 | ghproj | Go | CLI | Add GitHub Issues and Pull Requests to GitHub Projects |
2024-06-28 | ghatm | Go | CLI | Set timeout-minutes to all GitHub Actions jobs |
2024-06-16 | yodoc | Go | CLI | Keep document including commands and their results maintainable |
2024-05-30 | lintnet/lintnet | Go, Jsonnet | CLI | General purpose linter powered by Jsonnet |
2024-05-08 | aquaproj/devcontainer-features | JSON, Shell Script | Dev Container Features | Dev Container Features for aqua |
2024-02-04 | simple-sync-action | YAML | GitHub Action (Composite Action) | GitHub Actions to synchronize specific files with the specific branch to prevent tamper |
lintnet は Jsonnet を活用した汎用の Linter です。
Event で登壇もしました。
weekly.tf でも紹介されました。これは lintnet が Terraform の lint にも対応していて Terraform 用の Module を提供しているからでしょう。
ghproj は GitHub Issues や PR を検索して Projects に追加するツールです。
自分の OSS のタスク管理には欠かせない OSS になっています。
ghatm は GitHub Actions の timeout minutes を簡単に設定できて便利です。
GitHub Actions の実行履歴に基づいて自動で timeout-minutes を設定する機能もリリースしました。
ただし、 workflow_call 非対応など、まだまだ改善の余地があります。
yodoc はコマンドの実行結果をドキュメントに埋め込むツールです。
コマンドとその実行結果を含むドキュメントのメンテナンス性を改善します。
せっかく作ったもののあまり活用できてないので、もっと活用していきたいですね。
simple-sync-action はとてもシンプルな action ですが、 CI の改ざんを防ぐのに役立つ security 的には重要なやつです。
aquaproj/devcontainer-features は Dev Container で aqua をインストールするやつです。
ghomfc は GitHub Org 内のメンバーを GitHub の Follower 数に出力してくれるやつです。
社内で OSS 活動をバリバリやっている人を見つけたいときとか、自分がどのくらいの位置にいるのか知りたいときに便利です。
release-js-action は JavaScript action の開発に便利なやつです。
lock-aciton は GitHub Actions で lock action を実現するやつです。
実際に使ってくれている人もちらほらいるようで何よりです。
sort-issue-template は GitHub Issue Templates を簡単に並べ替えるツールです。
ghd2i は GitHub Discussions から GitHub Issues を生成するツールです。
Discussions を Issues に移行したい場合に便利です。
close-discussion-action は自動で Discussion を close, lock する action です。
新たに discussion を作らせたくない場合などに便利です。
tfrstate は terraform_remote_state data source 経由で Root Module の Output values に依存している Root Module を検出するツールです。
Output values が変更された際に影響のある Root Module を洗い出すのに便利です。
Terraform Weekly でも紹介されました。
tfmv は Terraform のリソースをリネームして moved block を生成するツールです。
一括で -
を _
に置換したり出来ます。より柔軟な置換にも対応しています。
disable-checkout-persist-credentials は GitHub Actions の actions/checkout の persist-credentials を無効にするツールです。
persist-credentials はデフォルトで有効ですが、有効になっていると後続の step で GitHub Access Token などの secret を参照できてしまいセキュリティ的に望ましくありません。
ただ、 actions/checkout は至るところで使われるため、 workflow を手で修正して無効化するのは大変です。
そこで自動で無効化するツールを作りました。
multi-gitter と組み合わせると大量のリポジトリをまとめて修正することが出来ます。
こうして振り返ると大きな OSS は少ないですが、どれも思い入れがあります。
OSS contribution
merge された Pull Request の数: 54 個
週 1 くらいで contribution していました。
マージされた PR 一覧
40 のリポジトリに contribution しました。
リポジトリ一覧
- Boeing/config-file-validator
- Byron/dua-cli
- JanDeDobbeleer/oh-my-posh
- abiosoft/colima
- argoproj/argo-workflows
- ast-grep/ast-grep
- authzed/zed
- awslabs/dynein
- bufbuild/protoc-gen-validate
- cloudposse/atmos
- container-tools/spectrum
- ddddddO/gtree
- fujiwara/lamux
- goccy/go-yaml
- gojuno/minimock
- google/go-jsonnet
- gruntwork-io/boilerplate
- hashicorp/terraform-provider-aws
- ikanago/omekasy
- int128/ghcp
- ivaaaan/smug
- kubeshark/kubeshark
- lindell/multi-gitter
- mattn/bsky
- mercari/hcledit
- mvisonneau/s5
- open-policy-agent/opa
- owenrumney/squealer
- pen-lang/pen
- projectdiscovery/naabu
- renovatebot/renovate
- robscott/kube-capacity
- sachaos/toggl
- slsa-framework/slsa-github-generator
- terraform-docs/website
- tofuutils/tenv
- trufflesecurity/trufflehog
- urfave/cli
- vectordotdev/vector
- zix99/rare
自分がメンテしている OSS のアップデート
幾つかピックアップしますが、ここにあるのが全てではありません。
aqua
v2.21.3 => v2.41.0
GitHub Star: 594 => 948 (+354)
Features
Node.js をサポートしました。実は aqua 本体には変更が入っていません。
v2.37.0 aqua.yaml でコマンドのエイリアスを設定できるようになりました。
同じ package を複数バージョン使い分けたい場合に便利です。
registries:
- type: standard
ref: v4.246.0 # renovate: depName=aquaproj/aqua-registry
packages:
- name: hashicorp/[email protected]
- name: hashicorp/terraform
version: v0.13.7
command_aliases:
- command: terraform
alias: terraform-013
# no_link: true
v2.33.0 aqua rm で go_install
や http
package も削除できるようになりました。
v2.32.0 aqua rm でリンクを削除するオプションが追加されました。
aqua rm -m l cli/cli # Remove only links
aqua rm -m pl cli/cli # Remove links and packages
環境変数も使えます。
export AQUA_REMOVE_MODE=pl
v2.26.0 global config に package を追加するオプションが追加されました。
aqua g -g -i cli/cli
v2.24.0 aqua.yaml で定義されている package の一覧表示をサポートしました。
$ aqua list -i # -a
rhysd/actionlint v1.7.3 standard
suzuki-shunsuke/cmdx v1.7.4 standard
sigstore/cosign v2.4.1 standard
suzuki-shunsuke/ghalint v1.0.0 standard
int128/ghcp v1.13.4 standard
golangci/golangci-lint v1.61.0 standard
goreleaser/goreleaser v2.3.2 standard
reviewdog/reviewdog v0.20.2 standard
v2.40.0 package のバージョンをファイルから取得できるようになりました。
他のツールと併用する場合に便利です。
packages:
- name: hashicorp/terraform
version_expr: |
"v" + readFile('.terraform-version')
JSON や YAML からの取得にも対応しています。
version_expr: |
readJSON('version.json').version
version_expr_prefix: cli-
v2.29.0 fish の補完をサポートしました。
aqua completion fish > ~/.config/fish/completions/aqua.fish
v2.28.0 go.mod や go.work の go directive から Go のバージョンの取得をサポートしました。
packages:
- name: golang/go
go_version_file: go.mod
ただし go directive は semver x.y.z である必要があり、 patch version の省略はサポートしていません。
v2.39.0 aqua init や aqua policy init で生成されるコードに yaml-language-server 用のコードコメントを追加しました。 VSCode などのエディタを使っている場合、 JSON Schema に基づいて補完が効くようになります
# yaml-language-server: $schema=https://raw.githubusercontent.com/aquaproj/aqua/main/json-schema/aqua-yaml.json
v2.31.0 Registry で変数が使える様になりました。
Bug Fixes
v2.38.3 aqua g -i が packages 中のコメントを削除するバグを修正しました
v2.37.1 aqua g -i や aqua up で空行が消えるバグを修正しました
v2.27.4 aqua update-aqua
が windows で失敗するバグの修正
セキュリティ
v2.35.0 GitHub Artifact Attestations による package の検証をサポート
aqua の GitHub Artifact Attestations も公開
v2.31.0 v2.34.0 Minisign での検証をサポート
v2.27.0 checksum の検証を強制する環境変数の追加
設定ファイル上で無効になっていても強制的に有効化することが出来ます。
export AQUA_ENFORCE_CHECKSUM=true
export AQUA_ENFORCE_REQUIRE_CHECKSUM=true
その他
v2.37.2 AQUA_CONFIG
や aqua -c
option が設定されている場合でも aqua which や exec で設定ファイルを探索するようにしました。地味に重要な変更です
v2.30.0 Windows で shell script や bat script の代わりに aqua-proxy と Hard link を使うようになりました
aqua-registry
相変わらずどんどん増えています。
contributor の数ももうじき 100 人に到達します。
tfcmt
v4.8.0 => v4.14.1
GitHub Star 338 => 424 (+86)
あまり大きな変更はありませんでしたが、幾つか機能追加されています。
- v4.14.0 Terraform の warning を ignore するオプションの追加
- v4.11.0 merge_group event に対応
- v4.10.0 環境変数やコマンドラインオプションで label の無効化をサポート
- v4.9.0 sensitive なデータの mask をサポート
tfaction
v1.0.1 => v1.14.0
GitHub Star 218 => 288 (+70)
Features
v1.3.0 local path Module が変更された際に、依存する Root Module で CI を実行できるようになりました
v1.2.0 OpenTofu や Terragrunt のサポート
v1.1.1 Trivy の設定ファイルを環境変数で指定できるようになりました
v1.13.1 v1.14.0 tflint --fix
による自動修正をサポート
v1.8.0 v1.9.0 v1.10.0 Conftest サポートを大幅に強化しました
v1.8.0 terraform-docs で Root Module のドキュメント生成に対応しました
v1.6.0 Follow up PR の仕組みを変えて、ファイルを作成・更新するようにしました
v1.7.0 terraform plan -generate-config-out
でコードを自動生成する action を作成しました
v1.12.0 ci-info などのツールを tfaction 自体に組み込み、ユーザーが自分でインストールしなくても良くなりました
v1.5.0 GCS Backend 用の Service Account の設定ができるようになりました
v1.4.0 google-github-actions/auth の access_token_scopes を設定できるようになりました
v1.11.0 AWS IAM Role session name を変更できるようにしました。またデフォルトの session name をいい感じにしました
その他
v1.13.4 リリースフローを改善し、リリース時に commit と tag に署名するようにしました。
v1.13.2
- 9 個の JavaScript Action を 1 つにマージしました
- コードを 9,000 行ほど削除しました (大部分は package-lock.json)
- ビルドが 2 ~ 3 倍高速化されました
- ビルド手順がシンプルになり、複雑なスクリプトが不要になりました
- package.json や package-lock.json, tsconfig.json, vitest.config.mjs などが共通化され、 action ごとに管理しなくてよくなりました
- action ごとに dependencies (node_modules) をインストールしなくてよくなり、無駄にストレージを消費しなくなりました
- コードの共有も簡単になり、逐一共有ライブラリ (lib) をビルドしなくても良くなり、開発体験が非常に良くなりました
- コードジャンプも効くようになって便利
- 自動テストを拡充しました
- CI で setup や test, plan, list-targets など多くの action を実行するようになり、「実行したら必ず失敗する」みたいな致命的なバグを防げるようになりました
- 逐一テスト用の private repository で動作確認する手間が省け、開発効率も高まりました (まぁ、完全にはなくならないですが)
v1.10.0 dist ディレクトリを削除し、開発フローを改善しました
v1.0.3 TypeScript の大幅なリファクタリング
色々な会社さんで導入していただきました。
特に newmo さんは前職で同僚同士だったということもあり、色々フィードバックも頂いて tfaction の改善につなげることが出来ました。
github-comment
あまり大きな変更はありませんでしたが、幾つか機能追加されています。
v6.3.0 コメントする代わりにファイルに出力できるようになりました。 GitHub Job Summary に出力したい場合などに便利です。 コメントとファイルへの出力を同時にすることも出来ます
github-comment exec -out "file:$GITHUB_STEP_SUMMARY" -- npm test
v6.2.0 GitHub Enterprise Server で ghe_base_url
と ghe_graphql_endpoint
を設定しなくても環境変数から自動で取得するようになりました
v6.1.0 merge_group 対応
pinact
v1.1.0 action の update をサポートしました
pinact run -u
v0.2.1 ダブルクォートで囲まれてても動作するようにしました
v0.2.0
-
main
やmaster
といったバージョンを無視するようになりました - コードコメントに記載されたバージョンと commit hash が同じか検証する機能をサポートしました
pinact run --verify
-
v0.1.3
.github/pinact.yaml
をデフォルトの設定ファイルとしてサポート
ghalint
- v1.2.0 actions/checkout の persist-credentials の無効化を必須にするルールを追加しました
- v1.1.0 ignore の設定で aciton 名を指定する際に glob をサポートしました
excludes:
- policy_name: action_ref_should_be_full_length_commit_sha
action_name: suzuki-shunsuke/tfaction/* # glob pattern
zenn 本
2024-05-05 Octo STS 入門
ブログ
会社ブログ:
zenn:
2024/12/27 actions/checkout の persist-credentials を false にする linter と修正ツール
2024/12/23 tfmv - Terraform のリソース名のリファクタリング
2024/12/15 Ephemeral variables なら terraform apply 時に plan file と一緒に渡せる
2024/12/10 GitHub Issue Templates をエディタで自由に並べ替える
2024/12/04 自分の OSS のタスク管理方法
2024/11/29 aqua-installer はなぜ bootstrap するのか
2024/10/29 lock 機構のための GitHub Action を作った
2024/10/18 tfaction でトランスパイルした JS をコミットするのを止めた
2024/09/23 GitHub Actions の実行履歴に基づいて自動で timeout-minutes を設定
2024/09/01 aqua が Node.js をサポート
2024/07/24 開発組織の issue や Pull Request を自動で適切な GitHub Project に割り振っていく
⭐ 2024/07/23 自分が管理する全 OSS の Issue や Pull Request を 1 つの GitHub Project に集約
2024/06/29 GitHub Actions の timeout-minutes の linter 及び一括設定ツール
2024/04/06 CI/CD Test Night #7 で登壇しました
2024/02/29 tfaction が OpenTofu や Terragrunt をサポート
2024/02/10 GitHub Actions でスクリプト等の改竄を防ぐ
dev.to (English)
2024/11/14 Lock Mechanism on GitHub Actions
2024/09/01 aqua Now Supports Node.js
2024/08/04 Gathering GitHub Issues and Pull Requests Across Repositories into GitHub Projects Automatically
2024/07/03 Set GitHub Actions timeout-minutes
登壇
2 回ほど登壇しました。両方とも DeNA さん主催ですね。
date | event | style | presentation title |
---|---|---|---|
2024-06-07 | Lint Night #3 | Talk (15 min) | lintnet - General purpose linter powered by Jsonnet |
2024-03-26 | CI/CD Test Night #7 | Talk (20 min) | CI/CD のセキュリティや Developer Experience を改善するツールやプラクティス |
その他
- 8 月 転職
OSS のタスク管理の改善
GitHub Artifact Attestations 対応
自分がメンテしている多くの CLI で GitHub Artifact Attestations を公開するようにしました。
https://github.com/suzuki-shunsuke/tfcmt/attestations
e.g.加えて検証方法をドキュメントで整理しています。
HashiTalks Japan 2024 Winter で aqua, tfcmt, tfaction が紹介されました
aqua が vector で採用されました
GitHub Star 数 18.4 K の OSS で採用されました。
自分がメンテしている CLI の設定ファイルの JSON Schema を生成するようにしました
設定ファイルに以下のようなコメントを書くとエディタによっては補完が効くようになります。
また設定ファイルに間違いがあったら直ぐ分かるようになるようにもなるので便利です。
# yaml-language-server: $schema=https://raw.githubusercontent.com/aquaproj/aqua/main/json-schema/aqua-yaml.json
Go であればコードから JSON Schema を生成することが可能です。
来年やりたいこと
引き続き OSS のメンテとコントリビューション、そして新規 OSS のリリースをしたいと思います。
aqua や tfaction で色々やることがあるので主にそこに注力することになるかと思います。
幾つかやりたいことをピックアップしますが、これらを全部やるとは限りませんし、ここで取り上げられてないことも色々やるかと思います。
2 月に tfaction について登壇します
2 月に tfaction について登壇します。
aqua
- Features
- .terraform-version, .node-version のサポート
- package の情報を出力する機能のサポート
- 古いバージョンをアンインストールする機能
- 7zip や deb package のサポート
- Registry
- Registry の自動生成の改善
- Security
- checksum の検証の改善
- Policy の自動生成
- パフォーマンス改善
- 巨大な registry を全部読み込むのではなく、各 aqua.yaml に必要なものだけをキャッシュ
- https://github.com/aquaproj/aqua/issues/685
tfaction
- Features
- 設定をより柔軟に変更できるようにする
- 一部の設定が tfacton.yaml で設定できないので、それを改善する
- 設定したいというニーズと、設定させたくないという相反するニーズがあるので難しい
- Linter の設定管理の改善
- そもそもどうあるべきなのかを検討
- 設定ファイルのパスを設定できるようにする https://github.com/suzuki-shunsuke/tfaction/issues/246
- Module 管理の改善
- 変更検知において sparse checkout のサポート: https://github.com/suzuki-shunsuke/tfaction/issues/1848
- tfaction.yaml なしでも動くようにする
- Template Engine の導入
- 設定をより柔軟に変更できるようにする
- Security
- Secure Secret Management
- tfaction-go を tfaction に統合
- Go で実装したものを TypeScript に移植
- 自動テストの改善
tfcmt
- pull request へのコメントとファイルへの出力を同時に出来るようにする
- Output values の変更の強調表示
github-comment
- CI が失敗した際にコメントを一回だけ投稿する機能
- CI が失敗したらコメントをしたい、ただし既にエラー通知している場合二度もするのは noisy なので投稿をスキップしたい
さいごに
以上、 2024 年の振り返りでした。
来年も OSS 活動を中心に頑張ります。
GitHub Sponsor もやっているのでよければよろしくお願いします。
良ければ Follow や Star もお願いします。励みになります。
Discussion