2021年のChangelogから振り返るCircleCI - その1

# はじめに

CircleCIの中の人、Senior Developer Advocateの舟木将彦と申します。

CircleCIでは、今年3月からChangelogを日本語化したものを公開しています。

- [CircleCIに関する最新情報(更新履歴)](https://circleci.com/ja/changelog/) - いわゆるクラウド版のChangelog
- [CircleCI リリースノート(サーバーの更新履歴)](https://circleci.com/ja/server/changelog/) - いわゆるCircleCI ServerのChangelog

CircleCI Advent Calendar 2021の初日ということで、本エントリでは、クラウド版のChangelogを中心に、CircleCI目線で一年を振り返ってみようかと思います。

# 2021年3月
## [セキュリティ] 環境変数のローテーション
CircleCIのコンフィグ(config.yml)で、クラウド上のサービスやデータベースなどに接続する際のシークレットを指定する際、シークレットをコンフィグ中に直接記述するのではなく、環境変数を経由して引き渡すことが一般的に行われます。

環境変数は、プロジェクト(リポジトリ)ごとに設定する方法と、複数プロジェクトで共用されるような値であればコンテキストに設定して参照する方法の２つが用意されています。

- [環境変数の使用](https://circleci.com/docs/ja/2.0/env-vars/)
- [コンテキストの使用](https://circleci.com/docs/ja/2.0/contexts/#)


これにより、コンフィグの中身やログ出力からシークレットを見ることはできなくなりますが、その一方で、定期的にシークレットを変更したいという場合に、これまではCircleCIのGUI画面から手作業で設定する(更新はできないので、古い環境変数を削除→新しい環境変数として再設定)しかなかったのが、CircleCI API(REST)経由で設定できるようになりました(つまりスクリプト等で自動更新しやすくなった)。

- [安全な環境変数の作成、削除、ローテーション](https://circleci.com/docs/ja/2.0/contexts/#secure-environment-variable-creation-deletion-and-rotation)
- CircleCIブログ: [CI/CDパイプラインのキーローテーションの自動化](https://circleci.com/ja/blog/securing-ci-cd-pipelines-with-circleci-contexts-rest-api/)

具体的な例は、DeNA [@karupanerura](https://twitter.com/karupanerura)さんのこちらのブログに詳しいです。
- [AWS IAM Userアクセスキーローテーションの自動化](https://engineering.dena.com/blog/2021/12/aws-iam-user-credential-auto-rotation/)

## [セキュリティ] APIトークンのローテーション
上記と関連して、CircleCIをAPI経由で呼び出して使用する際に、APIトークンを指定します。例えば、CircleCI CLIを初期設定するときにも指定します。

- [CLIの構成](https://circleci.com/docs/ja/2.0/local-cli/#configuring-the-cli)

APIトークンはユーザごと(パーソナルAPIトークン)、および、プロジェクトごと(プロジェクトAPIトークン)に設定可能ですが、このAPIトークンもCircleCI API経由で更新できるようになりました。

- [Rotating Personal and Project API Tokens](https://circleci.com/docs/ja/2.0/managing-api-tokens/#rotating-personal-and-project-api-tokens)

# 2021年4月
## [効率化] Orbのバージョンバッジサービスの提供
Orbを開発されている方であれば、GitHubリポジトリのREADME.mdに入れておきましょう的なバッジの提供開始です。
![orbversion.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/f14795ae-f9c8-f0bc-6dce-0be66e244c2e.png)
- [New Orb Version Badge Endpoint](https://discuss.circleci.com/t/new-orb-version-badge-endpoint/39515)

ちなみにこれ以外のCircleCI公式バッジとしては、(新機能ではありませんが)ビルドステータス(成功 または 失敗)を表示するステータスバッジがあります。
![svg-passed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/10f47bc0-eef8-111d-b63b-fb71294f34fd.png)
![svg-failed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/a33d39f3-c16e-ac12-b6f5-7c6d2d881de0.png)
ぜひこちらもREADME.mdに入れていただき、ご自身のプロジェクトがグリーンビルドであることをアピールいただければと思います。

- [ステータス バッジの追加](https://circleci.com/docs/ja/2.0/status-badges/)

## [効率化] セットアップ・ワークフローによる動的コンフィグ
CircleCIで、あらかじめ書いておいた(=静的な)コンフィグを実行するだけでなく、呼び出すたびに異なるような状況(例えば、１リポジトリ内にいくつかのディレクトリを用意し、それぞれのディレクトリで異なる機能を実装している場合に、特定のディレクトリ配下のファイルが更新されたら、その機能だけをビルド、テスト、リリース、デプロイしたい場合)に、実行するコンフィグをその場で(別途用意しておいたファイルから)選択して組み立てるなど、その場で作成した(=動的な)コンフィグを実行することが可能になりました。

- [ダイナミック コンフィグ](https://circleci.com/docs/ja/2.0/dynamic-config/)
- CircleCIブログ: [セットアップ ワークフローによるダイナミック コンフィグのご紹介](https://circleci.com/ja/blog/introducing-dynamic-config-via-setup-workflows/)
- CircleCIブログ: [ダイナミック コンフィグを使用して CI/CD パイプラインをビルドする方法](https://circleci.com/ja/blog/building-cicd-pipelines-using-dynamic-config/)

より具体的な例は、ご利用いただいた方に公開いただいているブログを参照いただくのがよいかと思います。

- [CircleCI でモノレポ上の指定パスに変更があったらテストを走らせる](https://srz-zumix.blogspot.com/2021/04/circleci.html)
- [iutest の CircleCI ワークフローにパスフィルターを適用した](https://srz-zumix.blogspot.com/2021/06/iutest-circleci.html)
- [CircleCI Cloudのpath-filteringを試してみる](https://zenn.dev/korosuke613/scraps/74e6ccaf6f8b67)
- [Dynamic Configurationを使って.circleci/config.ymlを分割する](https://zenn.dev/kesin11/articles/96f0947583f34d)

# 承前(もう少し続く)
一度には書ききれないので、何回かに分けて書いていこうと思います。なお、CircleCI Advent Calendarにご寄稿いただいた記事は目を通すようにしておりますので、「Tシャツ欲しい」「初日の出のマウスパッド欲しい」と本文中で言っていただければ、TwitterのDM等、ソーシャルアカウント経由でメッセージが送信できるようであれば)送付先を入力いただくURLをお送りいたしますので、奮ってご参加くださいませ(いただいた情報はグッズ発送以外の目的では使用いたしません)。
![CircleCI-Tshirts.jfif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/d5bb88c3-d642-02a8-d544-aded94838350.jpeg)
![CircleCI-Mouse.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/9d4ad9b9-1f6c-28c5-3890-922cf446df62.jpeg)