🏢

開発チームの技術ブログまとめサイトを作って定期デプロイを設定した

2022/07/20に公開

私が所属する株式会社モニクルの開発チームでは、業務時間内に各個人の技術ブログを書いてもよいことになりました。2022 年 7 月現在の時点では、きちんとスプリントの中でストーリーポイントを付けたタスクにして、時間を確保することが推奨されています。

アウトプットの習慣があるメンバーが多く見えるチームというのは、対外的にも魅力を説明しやすいです。今後のソフトウェアエンジニア採用を円滑に進めていくための施策の一環として、アウトプットを推奨していきます。

技術ブログまとめサイトはじめました

ということで、メンバーの技術ブログをまとめた、monicle developers というサイトを作りました。

https://developers.monicle.co.jp/

開発メンバーのブログまとめサイト

テンプレートとしてcatnose99/team-blog-hubを使わせてもらいました。RSS を登録しておくと最新の記事をまとめて表示してくれる素敵なアプリケーションで、Ubie Engineers’ Blogs等でも採用されています。

会社としてテックブログを持つのも選択肢としてはあったのですが、各メンバーに書いてもらうための体制づくりをしている間に疲弊して頓挫する可能性がそれなりにあったので、スタートしやすさを最優先して、こういった形を取りました。書いた記事が各個人の資産として残るのもいいところですね。テックブログを使わずに個人ブログを使うことのメリットについては、作者の catnose99 さんも次の記事で言及しているので、興味があればお読みください。

https://zenn.dev/catnose99/articles/cb72a73368a547756862

ホスティング先としては、特に捻りもなく Vercel を選択しました。team-blog-hub は Next.js ベースですしね。

定期更新の仕組みづくり

前述の catnose99 さんの記事の中でも言及されているのですが、team-blog-hub はビルド時に RSS をチェックして新着記事を取り込む仕組みになっているため、サイトを最新の状態に保つには定期的に再ビルドを行う必要があります。

どうせ GitHub Actions にそんな感じの機能があるでしょ……と思って検索してみたところ、次の記事が見つかりました。

https://zenn.dev/nikaera/articles/vercel-github-actions

私と同じく team-blog-hub の定期更新が目的の記事で、ドンピシャでした。要点としては次の 2 点です。

  1. GitHub Actions の on.schedule.cron で crontab 記法による定期実行を設定できる
  2. amondnet/vercel-actionで Vercel へのデプロイが簡単にできる

このアプローチでもひとまず動きましたが、Vercel の認証トークンを発行しないといけないのが少し引っかかるところでした。

そんな折、同僚のka2nから、Vercel の Deploy Hooks という機能が使えるかもよ、というアドバイスと共に次のリンクを教えてもらいました。

https://zenn.dev/unemployed/articles/vercel-deployhook

手法の要点としては、次の 1 点のみです。

  • Vercel のプロジェクトに対して Deploy Hook と呼ばれる URL を発行すると、そこに空 POST をするだけで再デプロイを実施してくれる

Deploy Hook の URL 自体が秘密情報になってしまうという問題はありますが、認証トークンを扱うよりはいくらかマイルドです。

今回調べた内容を総合して、次のようなワークフローが作成できました。

.github/workflows/deploy_website.yml
name: deploy website
on:
  # 動作確認用に、手動でジョブを開始できるようにしておく
  workflow_dispatch:
    inputs:
      ref:
        description: branch|tag|SHA to checkout
        default: "main"
        required: true
  # 3時間おきに GitHub Actions が実行される
  # 実行の際に参照されるブランチは上記の default で指定したものが使用される
  schedule:
    - cron: "0 */3 * * *"
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          ref: ${{ github.event.inputs.ref }}
      - uses: actions/setup-node@v3
        with:
          node-version: "16"
      # 投稿内容を更新するためにVercelのDeploy Hookを叩く
      - name: Recreate all posts
        shell: bash
        run: curl -X POST ${{ secrets.VERCEL_DEPLOY_HOOK_URL }}

Secrets の VERCEL_DEPLOY_HOOK_URL には、Vercel で生成した Deploy Hook の https://api.vercel.com/v1/integrations/deploy/**** のような URL を入れてあります。認証なしでデプロイ指示ができてしまうので、漏えいには気をつけましょう。

こんな具合で、紆余曲折ありましたが、自社用の team-blog-hub を定期的にデプロイできるようになりました。

余談:cron の時間がいいかげん

これは amondnet/vercel-action 版を動かしているときから発生していたのですが、GitHub Actions で on.schedule.cron に設定した時間になっても処理が始まりません。何か設定を間違えたのだろうか……と心配していたのですが、30 分後くらいに動き始めました。

調べてみると、どうやら実行時間にはかなりムラがある様子。

https://qiita.com/tommy_aka_jps/items/5f4fe384008ffc9fa794

まあミッションクリティカルな用途にこのスケジューラを使うことはないと思うので、困らないといえば困りませんが……それにしてもずれ方が豪快すぎませんか……

まとめ

もともと技術ブログを書いていたメンバーが多かったのもあり、team-blog-hub をセットアップしてみたら、思ったより立派な見た目になって驚きました。なかなか賑やかに仕上がったので、気が向いたときに見にきていただけると嬉しいです!

https://developers.monicle.co.jp/

宣伝

株式会社モニクルでは、はたらく世代・子育て世代がお金の不安を手放せる手助けをするための金融サービス業をより広めるために、ソフトウェアエンジニアを募集しています。

90 秒だけお時間をいただいて、↓ の動画を見ていただけると、どんなサービスをやっている会社なのかざっくりわかってもらえると思います。

https://www.youtube.com/watch?v=mwZ_tnGKEIY

マネイロにお金の相談をしにきてくださるだけでも嬉しいですし、もしこの記事を読んで会社自体にも興味を持っていただけたら、↓ の Culture Deck(会社説明資料)を読んでみてください。

https://speakerdeck.com/monicle/about

さらに興味を持ってもらえた方は Meety で私と雑談しましょう!

https://meety.net/matches/egOQbaoKmgHd

よろしくお願いします!

株式会社モニクル

Discussion