Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

Github Actionsを利用して作業を自動化してみよう

こんにちは。 CTO室マイクロサービス推進部で働いている元(Won)です。

マイクロサービス推進部では、Github Actionsを利用した自動化の取り組みを進めています。 今回は、以前のブログ記事で紹介した「メール取込」の開発で行われている自動化の取り組みと、改善した内容について紹介します。

目次

  1. Github Actionsとは?
  2. Issue作成自動化
  3. PR作成自動化
  4. まとめ
  5. 終わりに

Github Actionsとは?

https://github.com/features/actions Githubイベントをトリガーにして一連のワークフローを実行する機能です。

Github Actionsのトリガーで利用される例としては

  • Issue
    • open
    • close
  • Pull Request
    • open
  • Scheduled events(定期実行)

などなど多くのイベントを扱うことができます。

詳細については公式リンクをご覧ください。

Issue作成の自動化

メール取込における解析対象メールの量産化は、サービスの付加価値向上のためには重要なミッションです。 量産化作業は初心者でも作業全体について理解しながら進められるよう、issueを細かく作成して対応を進めています。 一連のIssueを起票するために、Github Actionsを利用している事例を説明します。


メール取込の対応サービスを追加する際に行うタスクは毎回同じなので、 対応サービスを追加するための親Issueを起票したら、パーサーを追加するためのタスク詳細が書いてあるIssueたちを自動で起票するためにActionsを利用しています。

on:
  issues:
    types: [opened]

Issueが作成(起票)された場合のトリガーは上記のようになります。 ただし、この条件だけでは全てのIssueが起票されるたびにActionが動作してしまうので、条件を追加します。

jobs:
  myJob:
    runs-on: ubuntu-latest
    if: ${{ startsWith(github.event.issue.title, 'パーサー追加') && contains(github.event.issue.labels.*.name, 'PARSER') && contains(github.event.issue.labels.*.name, 'receipt') }}
    steps:
      - name: Create issue 1
        uses: JasonEtco/create-an-issue@v2
        id: create-issue-ecr
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          filename: .github/template/1.md
      - name: Create issue 2
        uses: JasonEtco/create-an-issue@v2
        id: create-issue-ecr
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          filename: .github/template/2.md

if:を利用して条件を追加しました。 以下2つの条件を満たした場合にActionが動作します。

  • タイトルがパーサー追加で始まる
  • ラベルにreceiptとPARSERが設定されている

元々は1つの解析対象メールの追加のために、1つの親Issueと9つの詳細タスクIssueを手で起票していました。 これまでなかなかの手間がかかっていましたが、1つの親Issue起票だけで完結できるようになりました。

Pull Request作成の自動化

マイクロサービス推進部では開発環境で追加した機能や修正などを検証環境へリリースして想定した動作をするのか検証しています。

実装や修正が溜まると検証が難しくなり、時間がかかる、という問題があるので、 チームでは週1回の定期リリースの方針で運用しています。

リリースをする際にはリリース用ブランチへのPull Request(以下、PR)の作成と、git差分から自動収集したリリースノート(リリースされる案件リスト)のIssue作成をして、リリース完了後にはIssueに検証結果を記録しています。

検証は実装や修正により変わりますが、リリースするためのPR作成自体は毎週同じなので、こちらを自動化して効率的に運用しています。

PR作成の自動化はScheduled eventsを利用して定義します。

on:
  schedule:
    - cron: "10 0 * * 3" # 水曜日 09:10 JST

jobs:
  myJob:
    runs-on: ubuntu-latest
    steps:
      ...
      - name: Create issue
        uses: JasonEtco/create-an-issue@v2
        id: create-issue-ecr
        with:
          filename: .github/stg_release_template/stg_release_template.md
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          TITLE: ${{ env.ISSUE_TITLE }}
          BODY: ${{ env.ISSUE_BODY }}
      ...

cronはUTC時間で定義されるので、想定している日本時の-9時をする必要があります。 (10:00 JST => 01:00 UTC)

これで毎週決められた時間にPRとIssueが自動的に作成され

  1. リリースのための準備作業が自動で行われる
  2. 個人差による作業のミスがなくなる

というメリットを得ることができました。

まとめ

何かを自動化したいと思って1から作ってみることも良いですが、既に誰かが実装して公開しているActionも多くあります。 下記のリンクから探すことができます。利用できそうなものがあれば積極的に導入することをおすすめします! https://github.com/marketplace?type=actions

終わりに

ここまでお読みいただき、ありがとうございました! 最後に、マネーフォワードではこのような課題に一緒に向き合い、解決していけるメンバーを募集しています。 興味を持っていただけた方、ぜひ一度カジュアル面談でお話しましょう!

CTO室エンジニアの募集


マネーフォワードでは、エンジニアを募集しています。 ご応募お待ちしています。

【サイトのご案内】 ■マネーフォワード採用サイトWantedly京都開発拠点

【プロダクトのご紹介】 ■お金の見える化サービス 『マネーフォワード ME』 iPhone,iPad Android

ビジネス向けバックオフィス向け業務効率化ソリューション 『マネーフォワード クラウド』

おつり貯金アプリ 『しらたま』

お金の悩みを無料で相談 『マネーフォワード お金の相談』

だれでも貯まって増える お金の体質改善サービス 『マネーフォワード おかねせんせい』

金融商品の比較・申し込みサイト 『Money Forward Mall』

くらしの経済メディア 『MONEY PLUS』