こんにちは!
株式会社リンクアンドモチベーション新卒1年目の宮林です。現在はSREチームでインフラの構築やトラブルシューティング、コスト最適化をおこなっています。
はじめに
先日ハッカソンに参加し、簡単な Slack Bot の開発を行いました。
会社主催のハッカソンでは、普段の業務で感じている課題を短時間で解決するため、既存の業務ツールに対するプラグイン的な開発を行うケースも多いのではないでしょうか。
実際私がこれまでに参加した社内ハッカソンでも、Slack 連携・Calendar 連携・オンライン会議ツールとの連携など、外部サービスと組み合わせるタイプの開発が多かったです。
こうした外部サービスとの連携を行う開発では、次のような課題があります。
- 連携先が localhost を受け付けない
- HTTPS のエンドポイントでないと連携できない
- ngrok や localtunnel などの一時的 URL に依存し、設定が安定しない
- コールバック URL を変えるたびに再設定が必要になる
また、連携ツール以外のプロダクトを開発する場合でも、次のような問題が起きがちです。
- 動作確認がメンバーの誰かの PC に依存し、開発効率が落ちる
- プレゼン直前にローカル環境が立ち上がらず焦る
- プレゼン時にデモを他のメンバーにも触ってもらいたいが、環境構築に時間がかかる
このような課題を解決するため、今回参加したハッカソンでは最低限の骨組みができた段階で早々にデプロイ環境を整え、誰が main ブランチにコミットしても即座にデプロイされる CI/CD パイプラインを組みました。
作ったもの
今回のハッカソンでは、作成した Slack Bot を fly.io へデプロイし、
GitHub Actions を用いて main ブランチへの更新時に自動デプロイが走る構成を用意しました。
# See https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/
name: Fly Deploy
on:
push:
branches:
- main
- feat/cicd
jobs:
deploy:
name: Deploy app
runs-on: ubuntu-latest
concurrency: deploy-group # optional: ensure only one action runs at a time
steps:
- uses: actions/checkout@v4
- uses: superfly/flyctl-actions/setup-flyctl@master
- run: flyctl deploy --remote-only
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
代替サービス
今回は fly.io を利用しましたが、Heroku / Render / Vercel など、短期間であれば無償または低コストで利用できる PaaS は多数存在します。
プロダクトの要件やランタイム、デプロイのしやすさに応じて選択すると良いでしょう。
(Tips)なぜGitHub Actionsか
一部の PaaS では、リポジトリを連携するだけで自動デプロイが可能です。しかし、サービスによっては以下のような制約に遭遇するケースがあります。
- 無料プランでは自動デプロイ機能が提供されていない
- デプロイ権限が特定のアカウントに紐づくため、チームで運用しづらい
こうした事情もあり、API Key を GitHub Actions に登録して自前でデプロイパイプラインを組むほうがチームでも柔軟に運用しやすいことが多いです。
注意点
ハッカソンで作ったプロジェクトは、そのまま放置すると意図せぬ課金が発生する可能性があります。
利用が終わったらリソースを削除する、プランを変更するなどの管理が必要です。
効果
ハッカソン期間の 2 日間で、チームでは 計 62 回のリリース が行われていました。
CI/CD を導入する前は、main ブランチに変更が入るたびに私が作業を中断して環境を更新し、Slack Bot 側の設定画面で URL を手動で書き換える必要がありました。
今回のように、短期間での反復開発が求められるハッカソンにおいて、CI/CD のセットアップにかけた時間以上の価値があったと実感しています。
まとめ
時間が限られたハッカソンでも、最初に最低限の CI/CD を用意しただけで、デプロイや動作確認の負担が一気に減りました。チームメンバーからも「作業がしやすくなった」と好評で、開発者体験の向上を実感できました。
ハッカソンのような時間がない場面こそ、最初に少しだけ仕組みを整えることで大きなリターンが得られます。「そんな余裕はない」と感じている方にこそ、開発に集中できる環境づくりとしてぜひ一度試してみていただければ幸いです。
