ビルドエンジニアのお仕事

jenkins_image

僕はビルドエンジニアというものをやっています。
(QAエンジニアとかサポートエンジニアとか色々な呼び方がありますが、ここではビルドエンジニアといっておきます)

チーム開発でしか存在しないビルドエンジニアってどんな仕事しているんだろう?
という話をしていきたいと思います。

もちろん仕事の内容には個人差があります。あ!やめてマサカリなげないで!!いたい!!いたい!!

ビルドエンジニア専門という感じだったので、兼務でやっていたりするとまた違うかもしれません。

ビルドエンジニアのお仕事を簡単に紹介

例えば
Unityでゲームを開発中に誰かが新機能を作ってgitにpush(ソースコードを共有)しました。
これは、よくあるシナリオだと思います。

そうすると、新機能のテストのため, お試しのため、ソースコードをビルドして、企画職の人やデバッガー(QA)の人たちがダウンロードできる状態にしなければいけません。

gitにソースコードをpushしてみんながダウンロードできる状態になるためには、だいたい次のような手順が必要になります。

manual

これを人が毎回手作業でやると面倒くさいし時間もかかるし恐らくミスもします、
そこで図の作業を人ではなくコンピュータにやらせます。これを自動化といいます。

コンピュータにやらせるためにはもちろん「Hi!Google!」なんて口頭でお願いしてもやってくれるわけがないので、ビルドの手順自体をプログラミングします。

この「手順自体をプログラムする事」が好きだとビルドエンジニアは多分楽しいです。
人がやると面倒くさいをコンピュータにやってもらうようにするのがビルドエンジニアの仕事の全てです。

ある程度の規模のチームなら一人以上専任で必要なお仕事です。

※ビルドプロセスの改良等も勿論やります

ビルドエンジニアってここがいい

ここではビルドエンジニアをやっていて楽しいことをいくつかピックアップします。

自動化されること自体が楽しい

今まで手作業だったのがもうその作業はいらない!
という状態にできたときが楽しい!

ゲームのエンジニアはできることを増やすのに対して僕たちはしなくていいことを増やしていきます。
そして僕は多分後者が好きなのです(*´Д`)

メタプログラミング的なプログラム自体を出力するプログラムを書くような作業も多いのでそういうのが好きな人向けの仕事だと思います。

ユーザーはチームメンバー

ゲームをメインとした会社なので基本的にはユーザーは遊んでくれているお客様になります。
ただ、ビルドエンジニアにとっては直接のユーザーはチームの仲間になります。
チームメンバーがここを直してほしいといえば直すし、新しい機能ほしいといわれれば作ります。

最終的にはそれによって開発効率が上がってチームメンバーの開発効率が上がり,新機能の開発がどんどんできるようになりゲームへの貢献ができるわけです。チームメンバーの一員なのでユーザーの声とかは聞きやすいです。
(勿論ミスするとすぐにバレてユーザー(チームメンバー)からクレームが来ます!)

スキルセットが広くなる(そして浅くなる)

僕が業務で今扱っている言語は次のとおりです。

  1. powershell
  2. sh(bash)
  3. groovy
  4. java
  5. C#(Unity)

またpythonやrubyは駆逐しました。

技術的にはJenkinsで利用するためにdockerやawsのような比較的新しいシステムからsshやgitなどの枯れたシステムまで多種多様で恐らくビルドエンジニア以外あまり使わない機能まで使うので「へーこんな機能があるんだ!たーのしー!」とはなります。
(gitコマンドは標準エラー出力に進行状況とか出力してるって知ってました?)

一方で、その多くの技術に関する深い理解があるかと言わればそうではありません。Jenkins本体に関しては一応プラグイン作ったりもするのでそこらへんの人よりは詳しいでしょう。その他一部の技術は興味をもって勉強しているのである程度わかります。

例えばgitの内部構造どうなってんの?と言われたらpackディレクトリになんかいっぱいあるー!
awsだってインスタンスをどうやって作るのか知りませんしセキュリティなにそれ美味しいの?状態です。

そんな変なスキルセットになりますが、色々さわれるのはとても楽しいです!

開発期間が比較的短期間なので飽きない

基本的に開発規模は長くて一週間です。
ということで小さなプログラムを沢山つくるような形になります。
短期間で作り上げるので作業中に飽きるということはなかなかありません。

新しいお仕事は新しい気持ちで!

ビルドエンジニアってここが大変

ビルドエンジニアというよりは調べる大変さとか人柱的な大変さかもしれません。
新しいものを最初に取り入れて実験する人を人柱といったりします

自分で考えて調べるしかない

基本的に開発というのはチームで動くので多分プロジェクトに詳しい人か自分よりその技術に明るい人がいてなんか相談できる感じになっていると思います。(最初に作り始めたり技術検証している段階は除く)

一方Jenkins触ったりする人なんて大していないのでなにか欲しい新機能や問題があると自分で調べます。

しかも日本人でやってる人少ない, ツールだって日本語ドキュメントなんてないことがほとんどなので大体英語です。つまり英語の勉強ができます。

ちなみにユーザー自体が少ないのでそもそも解決方法が英語の文章でもなかったりunresolveって書いてあったりもします。泣きながらがんばります。

いつ問題が解決するかが分からない

自動化プロセスはよく問題が起こります。それは、Jenkins側の問題かもしれませんし、プロジェクトの誰かがコンパイルが通らないようなコードをpushしたのかもしれません。はたまたxcode様のご機嫌が良くないのかもしれません。利用中のAPIが変わったかも?

問題が発生したときにgoogle先生に聞けばすぐわかる問題ならいいのです。
しかし時々、お前なんでエラー起こすの?みたいなJenkinsおじさんの気持ちになって考えなくてはいけないことがあります。
そうなるとその解決方法は試行錯誤になるので、「いつ終わるの?」といわれても「さぁ」としか言えなくなります。

本当に何が問題なのか分からないのです。
本当にいつ問題が解決するかそもそも解決できる問題なのかわからないのです。

そういう問題が解決するととっても気持ちがいいんですけれどね。

ビルドエンジニアってここが面白い

良いとも悪いともちがうなんかおもしろーいってなる感じの特徴です

他のメンバーと忙しい時期が違う

ゲームやアプリの開発はは開発終盤になるほど大変になっていきます。(模範的なチームはそうではないのかもしれませんが!!)

一方開発に必要な自動化のシステムはそんな開発スピードも早くなりチームの規模も増える終盤ではほぼ完成していなければいけません。
つまり、この終盤の時期あんまりビルドエンジニアと言う人間は忙しくないです。(勿論機能追加や必要になった機能の開発はあります)
ではいつ忙しいのかといえばそれはまだチームの皆はゆっくりしている開発初期が一番忙しくなります。
だってこの時期に自動化システム作んないといけないんだもん、
この時期はとても忙しくなかなか仕事が終わらない毎日でした。

一方開発終盤は他の人より仕事が少ないのでさあ今日は疲れたなーとゆったりできます。
この時期にはどうしても必要な機能ではなく、あったらいいなを作る人になります。意外とあったらいいなも結構な量にはなったりはします。

直接触っているマシンの数が多い

大規模なチームのJenkinsには沢山の自動化プロセスがあります。(冒頭の図のUnityのビルド以外にも例えば、画像の加工を自動でするシステムがあったり、サーバーのソースコードをコンパイルしたりするかもしれません。)
なので、1台だけでそれらを全てするというのは難しいのです。

というわけで沢山のマシンを管理します。
だんだんよく壊れるマシンのIPアドレスとか覚えだします。

そういうのが好きだと楽しいかも?しれません。

I can practice writing and reading English at work

UnityやJenkinsなんかのメジャーどころ以外はだいたい英語しかドキュメントがないので頑張って英語を読んで質問するときは英語でします。
つまり強制的に英語の勉強になります。

なお必要な英語は文法が正しいとかよりも伝えらることが大事です。
大体の英語圏の人優しいのでだいたい解釈してくれます。
ちなみに僕は最近は海外のゲームの英語の解説ビデオを聞いて英語の勉強したことにしてます!

終わりに

割とマイナーなお仕事ですけれどあれやってーこれやってーというのが苦にならなければ面白い仕事だと思います。
あとチームに一人とかのお仕事なので「ふふふ!俺は人とは違うんだー!」とか「やはり忍者は目立たないところで活躍するのがかっこいいでござるな」みたいな厨ニ心満載の人とかいいんじゃないですかね!

楽しいビルドエンジニアのお仕事紹介でした!
以上、Jenkinsユーザーや自動化に興味がある人が増えるといいなーと思うnakachanがお送りしました!