サイトアイコン Tech Inside Drecom

作業自動化のすすめ 〜人間がするべきでない作業を減らしたい話〜

これは ドリコム Advent Calendar 2019の7日目です。

6日目はてらこさんによる、ゲーム企画メンはプラットフォーム企画メンに転生できるのか です。

はじめに

ゲーム事業本部開発部のondaです。普段の業務はゲームアプリの運用開発を行っています。
アプリもリリースしてからしばらく経つと、いろいろ作業的に無駄に見えるところや、リリース時に手が回らなくて暫定対処のまま来てしまったところを改善したいなーとか思うところが出てきます。
今回はそういった中から、わざわざ人手を使ってしたくない作業を効率化しようというお話です。

人間がすべきでない!

というと過激に聞こえるかも知れませんが、つまり は人手で行わず、その分の手間や時間をクリエイティブな作業に当てられるようにしよう、ということです。

自動化するとこんなメリットが

無駄な手間が削減できる

もちろんこれが一番の目的です。反復実行される頻度の高いタスクほど効果が高いですが、頻度が低くても単純作業であれば自動化すべきだと思います。

人為的ミスが減る

手間のかかる作業になるほど人間はミスをするものです。機械にやらせることで少なくともコマンドの打ち間違いなどオペレーションのミスを無くすことができます。

ボトルネックの解消

作業自動化はエンジニア以外の職種のメンバーにも恩恵をもたらします。手順の単純化をしたり、Webやチャットボットをインターフェースにすればエンジニアでなくても作業を実行することができます。エンジニアに作業を依頼する必要がなくなり、エンジニアもそれによって作業を止められることがなくなります。チームのみんなに感謝されることうけあいです。

空いた時間を有効に使える

こうして空いた時間は開発作業、クリエイティブな作業に当てられます。プロダクトの品質向上になります。

どんな作業を自動化できる?

単純な作業の反復

データ更新などで大体いつも決まったコマンドを打っているような作業はどんどん自動化すべきです。毎回同じことをやっているな?と少しでも思ったら、自動化を検討したいところです。

頻度の高い作業

開発中のテストビルドなどは頻度が高く工数もかかるので、手作業で行うのは避けたいです。jenkinsなどのCI環境が最大限に効果を発揮できます。

属人性の低い作業

誰がやっても同じ結果になる作業でしたら、自動化すべきです。何か属人化している作業があったら他のメンバーに一度振ってみると、これ自動化やれそうだな?と気づくことがあります。(知見の共有にもなります)

どうやって自動化する?

例えば、単純なコマンドの羅列であればシェルスクリプトやバッチコマンドにしてしまうだけでも十分効果があります。シェルスクリプトでできることであれば、大抵はjenkinsなどのCI環境によってより簡便なインターフェースにすることができ、反復実行にも対応できます。シェルだとちょっと面倒な場合はPythonやRubyも使えます。

例

筆者の所属プロダクトでは、アプリのUIで表示するテキストの更新作業に以下のような手順が必要でした。
これを改めて自分で担当した時、スプレッドシートの編集だけは人手になってしまいますが、それ以外の作業は単純な手順なので自動化できると思い、提案・実行しました。
#!/usr/bin/ruby
require "google_drive"

# セッション情報のロード
session = GoogleDrive::Session.from_config("google_drive_config.json")

# 翻訳シート取得
spreadsheet = session.file_by_id("XXXX")

# xlsxで保存
spreadsheet.export_as_file("XXXX.xlsx")
/Applications/Unity/Unity.app/Contents/MacOS/Unity -batchmode -quit -logFile ./build.log -projectPath ${WORKSPACE} -executeMethod ClientString.ScriptRunner.Run
# ブランチ作成
UPDATE_DATE=date '+%Y%m%d%H%M%S'
BRANCH_NAME='feature/language_update_'$UPDATE_DATE
git checkout -b $BRANCH_NAME

git add Language_ja.txt

COMMIT_MESSAGE='テキスト更新'$UPDATE_DATE
git commit -m $COMMIT_MESSAGE
git push -u origin $BRANCH_NAME

# PR作成
RESULT=hub pull-request --no-edit -b ${target_branch}

if [ -n ”$RESULT” ]; then
  echo -e "PULL_REQUEST_URL=$RESULT"
  git checkout ${target_branch}
  git branch -D $BRANCH_NAME
else
  echo 'PR作成失敗'
  exit 1
fi

exit 0 
さらに、プルリクエストが生成されると、Chatworkにbotが知らせてくれます。
このURLをクリックしてマージすれば作業完了、とても簡単になりました。
これで、頻度としては手動だと1回に10~20分はかかっていた作業時間が自動化で5分以内で完了できるようになり、週に1~2時間程度の作業時間削減になりました。

その他の事例

他にも効率化の一環でこんな作業を自動化し、効果をあげてきました。

自動化を推進しよう

こうした改善施策は通常の開発業務に比べると優先順位が下がりがちで、なかなか着手できないのが運用プロダクトの常です。自動化の開発自体もノウハウがないと(効果が高いとわかっていても)面倒だったりもします。
チームの誰かが強い意志を持って推し進めることが必要です。チームの理解を得ること、ここをこうするとこれだけの効果が期待できます、などなるべく具体的な提案をすること、タスク (スクラム開発であればストーリー)を動かすための余地を作っておくこと、などができているとやりやすくなると思います。

まとめ


ちなみに、たまにこうした単純作業が気晴らしや頭休めになるという理由で人力で行いたがる人もいます(例えば自分とか)が、休憩が必要なら素直に休むべきですね。そうした時間を作ることができるのも実は最大の恩恵かも知れません。

さいごに

明日は尾﨑さんの記事です。
ドリコムでは一緒に働くメンバーを募集しています!募集一覧はコチラを御覧ください!
モバイルバージョンを終了