🦔

cdk initで生成されるcdk.jsonのcontextオブジェクトの値が文字列からboolになったタイミングを知る

2022/03/08に公開
npx cdk --version
2.15.0 (build 151055e)
npx cdk init app --language=typescript

で生成した cdk.json を眺める。

{
  "app": "npx ts-node --prefer-ts-exts bin/foo.ts",
  "watch": {
    "include": ["**"],
    "exclude": [
      "README.md",
      "cdk*.json",
      "**/*.d.ts",
      "**/*.js",
      "tsconfig.json",
      "package*.json",
      "yarn.lock",
      "node_modules",
      "test"
    ]
  },
  "context": {
    "@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId": true,
    "@aws-cdk/core:stackRelativeExports": true,
    "@aws-cdk/aws-rds:lowercaseDbIdentifier": true,
    "@aws-cdk/aws-lambda:recognizeVersionProps": true,
    "@aws-cdk/aws-cloudfront:defaultSecurityPolicyTLSv1.2_2021": true,
    "@aws-cdk-containers/ecs-service-extensions:enableDefaultLogDriver": true,
    "@aws-cdk/aws-ec2:uniqueImdsv2TemplateName": true,
    "@aws-cdk/core:target-partitions": ["aws", "aws-cn"]
  }
}

@aws-cdk/aws-apigateway:usagePlanKeyOrderInsensitiveId の値は true と bool 値になっている。ふつうだ。実はこの値は以前 'true' という文字列であらわされていた。

それを修正するための PR を作ったことがある。その PR は取り込まれなかったのだが、結果としては私の願う方向に進んでいて喜ばしい。当時どのような形にしていれば、うまく取り込んでもらえたのかなあというのを知るために、この変更がどのタイミングで行われたかを調べた。

ある値が変化したコミットをみるには git log のオプション -S を使うと便利だ。余談だが -S と -G のオプションについては日本語だとつるはしで過去を発掘する が私にはとてもわかりやすかった。

git clone https://github.com/aws/aws-cdk.git でリポジトリをクローンして
git log -S "'true'" -p -- packages/@aws-cdk/cx-api/lib/features.ts で結果を眺めると

commit 999e99924804d8ee2c2962fa7ed86023b3f7d590
Author: Rico Huijbers <rix0rrr@gmail.com>
Date:   Mon Oct 18 11:10:24 2021 +0200

    chore(pipelines): deprecate legacy API (#17034)

    The presence of the legacy API for CDK Pipelines confuses people who
    didn't read the README or the blog post, but go from a copy/pasted
    example they found on the internet and then proceed to explore the API.

    Clearly deprecate the legacy classes to avoid confusion.


    ----

    *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*

diff --git a/packages/@aws-cdk/cx-api/lib/features.ts b/packages/@aws-cdk/cx-api/lib/features.ts
index 554c41929..986be7f4e 100644
--- a/packages/@aws-cdk/cx-api/lib/features.ts
+++ b/packages/@aws-cdk/cx-api/lib/features.ts
@@ -175,9 +175,9 @@ export const CLOUDFRONT_DEFAULT_SECURITY_POLICY_TLS_V1_2_2021 = '@aws-cdk/aws-cl
  */
 export const FUTURE_FLAGS: { [key: string]: any } = {
   [APIGATEWAY_USAGEPLANKEY_ORDERINSENSITIVE_ID]: true,
-  [ENABLE_STACK_NAME_DUPLICATES_CONTEXT]: 'true',
-  [ENABLE_DIFF_NO_FAIL_CONTEXT]: 'true',
-  [STACK_RELATIVE_EXPORTS_CONTEXT]: 'true',
+  [ENABLE_STACK_NAME_DUPLICATES_CONTEXT]: true,
+  [ENABLE_DIFF_NO_FAIL_CONTEXT]: true,
+  [STACK_RELATIVE_EXPORTS_CONTEXT]: true,
   [DOCKER_IGNORE_SUPPORT]: true,
   [SECRETS_MANAGER_PARSE_OWNED_SECRET_NAME]: true,
   [KMS_DEFAULT_KEY_POLICIES]: true,

という差分をみつけた。こちらが対象のコミットのようだ。コミットログからは PR #17034 を辿れる。PR に書いてある文はコミットログの

The presence of the legacy API for CDK Pipelines confuses people who
didn't read the README or the blog post, but go from a copy/pasted
example they found on the internet and then proceed to explore the API.

Clearly deprecate the legacy classes to avoid confusion.

と同じだ。「レガシーな API を depricated にする」というコミットのときに行っていた。

おやっ、コメントとコミットの内容は一致していない気がするな。これでよかったのかな?
まあ、いいか……

GitHubで編集を提案

Discussion