Akatsuki Hackers Lab | 株式会社アカツキ(Akatsuki Inc.)

Akatsuki Hackers Labは株式会社アカツキが運営しています。

アカツキゲームスで Cocos2d-x / C++コース のインターンシップに参加しました

こんにちは。 株式会社アカツキゲームス クライアントエンジニアの、軍曹 (@maupukuncarbon) です。

この度、私たちのチームでインターンの方を受け入れました。ありがたいことに、参加レポートを書いてくれたので、私の方から代理投稿させていただきます。

上記の通り、この記事は代理投稿となります。 投稿者と執筆者は異なるのでご承知ください。



2023/09/04~2023/09/22の3週間、株式会社アカツキゲームスのインターンシップに参加させていただきました。 今回はインターンシップで取り組んだことを備忘録としてまとめていきます。

自己紹介

趣味でC++でライブラリ開発をしたり、Unityでゲームを作っています。 普段関わっているプロジェクトよりも大規模な開発に取り組めるこのインターンに興味を持って参加させていただく形になりました。

取り組んだこと

クライアントエンジニアとしてモバイルゲームのタイトルに携わらせていただきました。 私が主に担当したのはCI改善と既存のバグ修正です。 今回はその中の1つのタスクについて話していきます。



GitHub Actionsのコードの共通化

メンターさんにCIに興味があるとお話ししたところ、CI関連のタスクをもらえるように調整してもらいました。 GitHub Actionsの知識をつけたいという動機から CIのワークフローの共通処理を単体Action化するというタスクをいただきました。

Composite Actionを使ってみる

まず、Composite Actionで共通化を試みます。

secretsを間接参照する

ビルド環境ごとにsecretsのアクセスを分けようと考えました。 GitHub Actionsではexpressionのネストはできないため、次のような書き方ができません。

${{ secrets.foo-${{ inputs.bar }} }}

代わりにformatを使います。

${{ secrets[format('foo-{0}', inputs.bar)] }}

問題発生

Actionを書き上げたところ、Actionからsecretsに直接参照できないことに気づきました。

対策案①Reusable workflow

同じ Organization 内のReusable workflowを呼び出す場合は、inherit キーワードを使ってシークレットを暗黙的に渡すことができます。

secrets: inherit

しかし、Reusable workflowはjob単位での呼び出しになり、やりたかったことが実現できなかったため断念しました。

対策案②inputsで渡す

少し手間になりますが、必要なsecretsをinputsで渡します。

action.yml

name: 'sample action'

inputs:
    foo:
        required: true

runs:
    using: "composite"
    steps:
        - run: echo ${{ inputs.foo }}
            shell: bash

run 句では shell の設定が必須です

sample-workflow.yml

name: sample workflow

jobs:
    composite_test:
        runs-on: ubuntu-latest
        steps:
            - uses: {org}/{repo}/.github/actions/{name}@{tag or branch}
                with:
                    foo: ${{ secrets.foo }}

secretsをComposite Actionのinputsとして渡してもセキュリティ上の問題はないようです。

act

実際にGitHub Actionsを使ってテストするのは大変だったので、actを使ってローカルで試すようにしました。

act -W .github/workflows/sample-workflow.yml

感想

ゲーム会社の就業型インターンは初めてではなかったのですが、ここまで規模が大きくて長期間運営されているプロジェクトに携わるのは初めてだったので楽しかったです。

運営期間が長いこともあって、仕様やコードの依存関係が複雑化していたりと、長期開発ならではの課題も体験できました。

また、作成したPRに対しても丁寧なレビューをいただきました。チーム開発での生産性の観点から細かい改善点を指摘してもらい、コードの技術的な側面だけでなく、プロジェクトを円滑に進めるためのコミュニケーションについても学ぶことができました。

皆様、本当にありがとうございました!