CircleCI、Scheduled workflowやめるってよ（Scheduled pipelineへの移行）

# はじめに
こんにちは、CircleCIでカスタマーサクセスをしているチヨです。普段はマンスリーのお客さまからの問い合わせに対応をしております。いつもお問合せいただきありがとうございます！
突然煽りのようなタイトルで釣ってしまいましてすみません。Schedule workflowの停止は６月以降です。まだお時間はありますので徐々にscheduled pipelineへ移行をお願い致します。今回はGUIを使用した移行方法を紹介します。APIからの設定は[こちら](https://circleci.com/docs/ja/2.0/scheduled-pipelines/#api)から確認してください。
# Scheduled Pipelineでできること
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/dd63cf36-3668-c16f-3878-fb069f6a2141.png"width=80%>
図のようにpipelineはプロジェクトの全体をコントロールする単位のため、以下のメリットがあります。
1. 渡したいパイプライン パラメーターも含め、パイプラインの実行全体をスケジュールできる。今までworkflowが複数あった場合、一つ一つにスケジュールを設定していた作業から解放されます。
2. コンテキストを使用した、特定のジョブに関して、実行者の制限を設けることができます。GUI から設定する際に誰がscheduled pipelineを実行できるのか選択できる箇所があります。詳しくはカスタマーサクセスのシゲさんの[記事](https://qiita.com/suzucir/items/fe38d0ccac54c91baa21)を確認ください。
3. モノレポを使用している際に便利なダイナミックコンフィグ機能と組み合わせて、CI/CD の設定の柔軟性をさらに高める。ダイナミックコンフィグはpipelineレベルでの設定です。詳しくは公式の[こちら](https://circleci.com/docs/ja/2.0/dynamic-config/)のページをご覧ください。
# GUIからのスケジュール設定
今回はworkflowを使用した指定の時間に設定のアカウントをretweetする[プロジェクト](https://github.com/yyx990803/retweeter)を拝借しております。ちなみにこちらのTシャツは先日行われた[CircleCIコミュニティイベント](https://circleci.connpass.com/)で参加者に配布されたものです！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/e09235fd-548b-f43b-6266-f618f29e620c.png"width=80%>
使用のconfig.ymlのworkflowの設定は毎日UTC時間１7時に実行するものになっています。cron表示が何時に設定されているかわからない場合こちらの[サイト](https://yonelabo.com/cronreader/)で変換ください。
```
workflows:

  test:
    jobs:
      - retweet

  poll:
    triggers:
      - schedule:
          cron: "0 17 * * *"
          filters:
            branches:
              only:
                - master
    jobs:
      - retweet
 ```
まずはGUIからの設定はプロジェクトの`...`からproject settingsを選択し、triggersから新しい設定を作成します。
![Screen Shot 2022-04-24 at 18.13.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/797b8866-f0fe-c71c-f3d1-9d6b4fa37882.png)
GUIからは曜日、時間、１時間内の実行頻度など設定してください。
スケジュールしたものがすぐに完了できたか確認するために、10分間隔でUTC9:00日本時間18:00に設定しました。
![Screen Shot 2022-04-24 at 18.00.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/29b551b6-9740-b86e-bdd4-aff194d11f25.png)
workflowが今回のプロジェクトのようにtestとpollのように２つある場合、pollのみスケジュールしたいため、中央のAdd Parameterからパラメーターの設定をします。パラメーターの詳しい設定方法は[こちら](https://circleci.com/docs/ja/2.0/pipeline-variables/)にあります。
# config.ymlの内容を変更
GUIの設定後、config.yml内のトリガーをpipeline parameterに沿って設定します。
triggerの部分を削除し、通常のworkflowと同じようにします。
2つworkflowがあるため、when:notなどの条件をつけて、testは指定の時間で実行されないようフィルターを機能の追加をします。
```
parameters:
  run-schedule:
    type: boolean
    default: false

workflows:

  test:
　　　when:
      not: << pipeline.parameters.run-schedule >>
 　　jobs:
      - retweet

  poll:
    when: << pipeline.parameters.run-schedule >>
    jobs:
      - retweet
```
指定の時間から10分おきに実行されていることを確認しました！
![Screen Shot 2022-04-24 at 20.25.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1277768/39051c85-73c3-46f0-43ab-e14956dec9aa.png)
# おわりに
現在曜日と時間の設定のみscheduled pipelineの設定が可能ですが、月単位での設定ができるようになる予定です。月単位での設定をすることで１ヶ月分のログの集計や、月末の集計が必要なクレジットカード決済などのアプリのテストができます。

またscheduled pipelineは新しく出た機能ですので、お客様に常にFeedbackをいただきながら機能を向上させています。こちらの[ページ](https://circleci.canny.io/cloud-feature-requests?search=scheduled+pipeline)より機能リクエストの投稿をお願い致します。

公式ブログではスケジュールパイプラインを使用したハンズオンブログもあります。ぜひご確認ください。
[パイプラインのスケジュール実行機能の使い方](https://circleci.com/ja/blog/using-scheduled-pipelines/)
[パイプラインのスケジュール実行機能で、定期的なセキュリティスキャンを実現する方法](https://circleci.com/ja/blog/scheduled-security-scans/)