[CircleCI]Slack通知時にあってほしい情報と取得方法

# 概要
現在のプロジェクトで設定されているCircleCIからのSlack通知について、通知される情報がいろいろ不足していて一目で状況が把握しづらいと感じた。
「CircleCIからの通知で、一般的にさっさと知りたいであろう情報をリストアップ」するとともに、それらを「どう設定すれば通知できるのか」を調べてみた。

# 前提
- Gitのホスティングサービス: GitHub
- CircleCI: 2.1 (&[Slack Orb](https://circleci.com/developer/ja/orbs/orb/circleci/slack#usage-custom_notification)使用)

# ほしい情報と取得方法
ほしい情報|使えそうなパイプラインパラメータ、定義済み環境変数 の調査結果
---|---
ワークフロー名|なさそう(2023年時点. 参考: https://circleci.canny.io/cloud-feature-requests/p/expose-workflow-name-in-the-environment-variables)
ジョブ名|``$CIRCLE_JOB``
ブランチ|``$CIRCLE_BRANCH``
コミット時のコメント|``pipeline.trigger_parameters.github_app.commit_title``, ``pipeline.trigger_parameters.github_app.commit_message``らしいが、自身の環境ではエラーになり、使用できなかった(※)GitHub App使ってないから？
PRのURL(PRマージでパイプラインがトリガーされたとき)|``$CIRCLE_PULL_REQUEST``が使えると思いきや、「リポジトリ自体をフォークした状態から元のリポジトリのブランチへPR出したとき」にしか使えないらしい。中身空っぽだった。
ワークフローの成否|なさそう。強いて言うなら「workflowの最後に成功通知用のジョブを実行、失敗時には通知しない」で表現する形か。
ジョブの成否|``Slack Orb``の``event`` に任せられる
対象ワークフローのCircleCI WebアプリのURL|``$CIRCLE_BUILD_URL``
PUSHでパイプラインが自動実行されたのか、CircleCIのWebアプリ上から手動実行したのか|``<< pipeline.trigger_parameters.circleci.event_type >>`` らしいが、自身の環境ではエラーになり、取得できなかった(※)GitHub App使ってないから？
パイプライン実行をトリガーしたユーザー|``$CIRCLE_USERNAME``

※Circle CIのWebアプリ上で以下のようなエラーが出力されていた
```
Unknown variable(s): event_type, commit_title
```


# 具体的な設定例
自身の環境で使えた以下の環境変数を使ってslack通知のテンプレートをcommandで定義しつつ、job失敗時・workflow完走時の通知で使用する例。
- CIRCLE_USERNAME
- CIRCLE_JOB
- CIRCLE_BRANCH
- CIRCLE_BUILD_URL

```config.yml
commands:
  slack_notify:
    description: "Notify slack"
    parameters:
      event:
        type: enum
        enum: [fail, pass, always]
        default: always
      message:
        type: string
    steps:
      - slack/notify:
          event: << parameters.event >>
          custom: |
            {
              "blocks": [
                {
                  "type": "header",
                  "text": {
                    "type": "plain_text",
                    "text": "<< parameters.message >>",
                    "emoji": true
                  }
                },
                {
                  "type": "section",
                  "fields": [
                    {
                      "type": "mrkdwn",
                      "text": "*Branch*: $CIRCLE_BRANCH"
                    },
                    {
                      "type": "mrkdwn",
                      "text": "*User*: $CIRCLE_USERNAME"
                    }
                  ]
                },
                {
                  "type": "actions",
                  "elements": [
                    {
                      "type": "button",
                      "text": {
                        "type": "plain_text",
                        "text": "View Job"
                      },
                      "url": "${CIRCLE_BUILD_URL}"
                    }
                  ]
                }
              ]
            }

jobs:
  sample_job1:
    ...
    steps:
      ...
      - slack_notify # 失敗時の通知処理を末尾に書いておく
          event: fail
          message: "Job:${CIRCLE_JOB} failure"
  sample_job2:
    ...
    steps:
      ...
      - slack_notify # 失敗時の通知処理を末尾に書いておく
          event: fail
          message: "Job:${CIRCLE_JOB} failure"
  # workflow完走時の通知
  notify_workflow_succeeded:
    parameters:
      workflow_name:
        type: string
        default: ""
    docker:
      - image: cimg/base:stable
    steps:
      - slack_notify:
          message: "Workflow:<< parameter.workflow_name >> Successful"

workflows:
  sample_workflow1:
    jobs:
      - sample_job1
      - sample_job2
      - notify_workflow_succeeded:
          workflow_name: "sample_workflow1" # ワークフロー名を教えてあげる
          requires:
            - sample_job1
            - sample_job2

```

# 参考

https://circleci.com/docs/ja/slack-orb-tutorial/

https://github.com/CircleCI-Public/slack-orb/tree/main/src/message_templates

https://github.com/CircleCI-Public/slack-orb/wiki

https://circleci.com/docs/ja/variables/