FRUITS ZIPPERの力を借りて、Dependabotに「さ、アップデートしよ？」って言わせてみた

## はじめに

みなさん、Dependabot は活用していますか？  
脆弱なパッケージをこまめに検知してくれるので、とっても便利ですよね。  
ただ、Dependabotが作ってくれるPRですが、さまざまな理由で放置したりする方も（私を筆頭に）そこそこいらっしゃるのではないでしょうか。

---

さて、話がコペルニクス的に変わりますが、みなさん **FRUITS ZIPPER** (ふるっぱー) というグループはご存じでしょうか。
私は大好きで、特に「NEW KAWAII」という曲を延々リピートしています。

歌詞がとにかくかわいくてですね。なかでもサビ前にある

```
さ、アップデートしよ？
```

というフレーズが耳から離れないです。
「あー、アップデートしねぇとなあ」っていう気持ちにさせてくれます。

ん？アップデート？

**Dependabot が「さ、アップデートしよ？」って言ってくれたら、脆弱なパッケージをアップデートするべく放置PRが減るのでは？**  

...

「作るか」

私は会社の食堂で一人、硬い決意を固めました。

## 作るもの

**Dependabot が開く PR に YouTubeリンクをランダムでコメントしてくれる GitHub Actions** です。  
汎用性を考え、とりあえずふるっぱーに限らない形としました。
また、同じコメントばっかりだと飽きてしまうかもしれないため、ランダムでコメントする動画を選べるようにしました。

## 開発

### YouTube サムネイルの表示方法

GitHub MarkDownではYouTubeの埋め込みができないため、動画リンクをクリックで開けるように、サムネ入りの Markdown を使うことにしました。

以下のような記述です。

```markdown
[![](https://img.youtube.com/vi/jNQXAC9IVRw/0.jpg)](https://www.youtube.com/watch?v=jNQXAC9IVRw)
<--------------サムネイルURL-------------------> | <--------実際のYouTube動画リンク---------->
```

これならサムネを一枚絵として表示しつつ、クリックすると動画に飛べます。  
iframe埋め込みができない環境下では、意外と重宝します。

↓みたいな感じになります。

[![](https://img.youtube.com/vi/jNQXAC9IVRw/0.jpg)](https://www.youtube.com/watch?v=jNQXAC9IVRw)

### GitHub Action の作成

テンプレートとして、公式が提供している [actions/typescript-action](https://github.com/actions/typescript-action) をForkしました。

あとは、YouTube の URL リストからランダムに一つ選んで、上記の Markdown 形式でコメントするコードを書くだけですね。

特に困ったことはないのですが、配列で引数を渡すときは

```yaml
- uses: myaction
  with:
    multiline-param: |
      line1
      line2
      line3
```
のように渡して

```ts
const myMultilineInput = core.getMultilineInput('multiline-param', { required: true });
```

のように受け取ります。

https://github.com/actions/toolkit/blob/main/packages/core/README.md#actionscore

```yaml
- uses: myaction
  with:
    list-param:
      - item1
      - item2
      - item3
```
こんな感じで渡せたら楽そうなんですけどね…。

https://github.com/actions/toolkit/issues/184#issuecomment-1198653452


## 完成したアクション

完成したのがこちらです◎

https://github.com/iisyos/youtube-linker-action

[![GitHub Marketplace](https://img.shields.io/badge/Marketplace-YouTube%20Linker%20Action-blue?logo=github)](https://github.com/marketplace/actions/youtube-linker-action)

### 使い方

使い方はとっても簡単で、以下のようなワークフローファイルを `.github/workflows/` 配下に配置するだけです。

```yaml
name: Add YouTube Comment
on:
  pull_request:
    types: [opened]

permissions:
  pull-requests: write

jobs:
  comment:
    runs-on: ubuntu-latest
    if: ${{ github.actor == 'dependabot[bot]' }}
    steps:
      - uses: iisyos/youtube-linker-action@main
        with:
          youtube_urls: |
            https://www.youtube.com/shorts/ThyyFk4tGa0
            https://www.youtube.com/shorts/T6RFDdT4viQ
            https://www.youtube.com/shorts/WUfHauv9cgo
            https://www.youtube.com/shorts/qJMmVLXw1ak
            https://www.youtube.com/shorts/Yc4hWFuiOt4
            https://www.youtube.com/shorts/r7aMeLA4JDg
            https://www.youtube.com/shorts/ifa_BSKB_Kg
          github_token: ${{ secrets.GITHUB_TOKEN }}
```

- `pull_request` イベントで `opened` のときに実行する
- `github.actor == 'dependabot[bot]'` の条件が満たされたらコメントを投稿する

あとは youtube_urls に好きなYouTubeリンクを複数行で指定するだけです。
今回は メンバーが**NEW KAWAII** のサビ前で踊っているショートのリストを入れていますが、もちろん好きな動画を入れていただいて問題ありません。
すると、DependabotがPRを立ててくれたタイミングで、ランダムに1つがコメントされるようになります。


## 実際に動かしてみる

[手動でdependabotを起動](https://scrapbox.io/ohbarye/dependabot%E3%81%AEupdate_check%E3%82%92%E6%89%8B%E5%8B%95%E3%81%A7%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%81%99%E3%82%8B)し動きを確認します。

https://github.com/iisyos/DependaBotTest/pull/8#issuecomment-2614465113

**おお！ノエルちゃーん！**

https://github.com/iisyos/DependaBotTest/pull/9#issuecomment-2614465161

**あまねきー！**

https://github.com/iisyos/DependaBotTest/pull/10#issuecomment-2614465210

**ま、ま、マナフィーー！(；ω；)**


## まとめ

ほんとくだらないGitHub Actionsですが、こういう**楽しみ**って意外と大切だと思うんですよね。。
え？そうでもない？
いや、でもでも...


- 好きなアイドルやアーティストの動画
- ミーム動画
- 自分を奮い立たせてくれるようなモチベーション動画

など、いろんな使い方ができるかと思います。
ぜひ一度お試しください！

それでは最後に、もう一度だけ。

**さ、アップデートしよ？**