ゲーム

未開の星で工場のラインを組み上げていくゲーム「Factorio」が得意な人はソフトウェアエンジニアに向いている


未開の惑星でなんとか素材をかき集めて工場を作り、宇宙船を作って星からの脱出を目指すリアルタイムシミュレーションゲーム「Factorio」が得意な人はソフトウェアエンジニアに向いているということを、エンジニアのKrishna Sundarramさんが自身の経験をもとに主張しています。

Factorio and Software Engineering · Krishna's words
https://blog.nindalf.com/posts/factorio-and-software-engineering/


「Factorio」は、未開の惑星に漂着してしまったプレイヤーが、素材を集め、加工工程をじわじわと自動化して、最終的には星からの脱出を目指すゲーム。2012年にアルファ版がリリースされて、どんどんとバージョンアップを重ね、2020年8月にとうとう正式版・バージョン1.0がリリースされました。

未開の惑星に工場を建設するリアルタイムシミュレーション「Factorio」の正式版となるバージョン1.0がついにリリース - GIGAZINE


Factorioは主に「工場のラインを構築」していきますが、Sundarramさんはこのゲームにソフトウェアエンジニアリングを感じるのだとのこと。

◆1:技術的負債
Factorioでは初心者プレイヤーだというSundarramさんは、ついつい自分の工場のあちこちをベルトコンベアで縦横無尽に接続してしまい、まるでスパゲティのように絡み合ったラインを構築してしまうのだそうです。

ソフトウェア開発において、「時間はかかるけれど最適な方法」よりも「とりあえず素早く進められる方法」を選んだことにより生じた複雑さは「技術的負債」と呼ばれますが、Sundarramさんの工場はまさに技術的負債を抱え込んでしまったわけです。

最終的に、Factorioのプレイヤーはこの複雑さをうまく飼い慣らす技術が身につき、状況判断が簡単にできるようになっていきます。その姿は、確かにどこかソフトウェアエンジニアに通じるところがあるのかもしれません。


◆2:DRY(Don't Repeat Yourself)原則
DRY(繰り返しを避ける)というのはプログラミングにおいて守るべき原則として、「達人プログラマー 職人から名匠への道」の中で提唱された考え方です。

Sundarramさんの工場では、電子基板を作るためのラインが4~5カ所に分散していたため、最終的に集中的に生産できるように設備を簡素化したとのこと。

◆3:スケーリング
Factorioで最終的に生産ラインに求められる処理量は、初期の3~5倍。このため、ときには完全に一からラインを作り直す必要が出てきます。プレイ経験が浅いうちはこのライン構築で行き詰まってしまうことがあり、プレイを重ねることで、ラインを拡張する余地を残して計画的に進めていくことができるようになります。

「拡張の余地を念頭に置く」というのは、ソフトウェアと共通した部分だとSundarramさんは述べています。

◆4:再構築
Factorioをシングルプレイヤーモードで遊んでいるときは好き放題できますが、マルチプレイヤーモードだと、自分の行動が他のプレイヤーに影響を与えるおそれが出てきます。コンポーネントの組み替えで他人の足を引っ張ってしまう恐れもあるので、Sundarramさんは自分が行動するときには、ダウンタイムが発生しないように配慮して作業していたとのこと。

◆5:デバッグ
工場はいつでも「完璧」にはほど遠く、一方で追加を行ったことで、別のところに異変が起きるというのは日常茶飯事。どこに原因があるのか探り当てても、修正すると別の問題が飛び出す可能性があります。これは、コードの修正作業にも共通しています。


◆6:チームワーク
Factorioはシングルプレイヤーモードでもたいがいの要素を楽しめますが、複数人で遊んだ方が素早く、楽しく遊べます。Sundarramさんの場合、自分が石油担当、ほかの2人が鉄道担当と国防担当という形で役割分担。Sundarramさんが石油のことを一任されているので、他の2人は製油所のことは気にせずに遊べたとのこと。こうした分担は、大規模なソフトウェア開発でもみられるものです。

◆7:研究
ウラン鉱石が不足していて原子力発電に切り替えるのを見送ったSundarramさんですが、石炭発電では電力不足と汚染が深刻化したため再度検討したところ、わずかなウラン鉱石でも工場を100時間は稼働させられることがわかったとのこと。

ソフトウェアでも、他になにかないかを研究・検討することは大事なことで、新たなチームメイトが自分の知らない知識を用いて、これまでに到達できなかった高みに導いてくれることもあります。

◆8:自動化
Factorioでは、鉱石や石炭の採掘も、さまざまなアイテム生産も、すべて手動で行うことができます。しかし時間がかかるため、基本的に、繰り返し行う作業は自動化することになります。

この「できるだけ手動ではなく自動化すべき」というのはソフトウェア開発でもいえることですが、Sundarramさんは、「我々は自分たちが幸せになるから自動化を行いますが、やりすぎて、自分が何をしようとしていたか忘れてもなお自動化に突き進んでしまいます」と記しています。突き進みがちなのは、Factorioと共通している気がします。

◆9:鎮火
ソフトウェア開発では、アラート処理に追われて新たな機能の実装が難しくなることがあります。チームとしての解決策の1つは、メンバーの1人がアラート対応係となって対策を行い、他のメンバーは機能追加に集中するということです。Sundarramさんは、Factorioを複数人でプレイする際にも同様の手法を採っていたとのこと。

Sundarramさんは上記9つの理由を挙げた上で、「複雑さを管理すること」「仕様を設計し、仕様を満たすシステムを実装すること」「システムを維持し、時間をかけて成長させていく」という点がFactorioでは大事だと述べました。


一方で、Sundarramさんは「Factorioをプレイしたからといって、よいソフトウェアエンジニアになれるわけではない」と釘を刺しました。ただ、ソフトウェアエンジニアであればFactorioを楽しめるはずであり、これを裏返して、「Factorioが得意ならソフトウェアエンジニアに挑戦してみるとよいかも」と締めくくっています。

この記事のタイトルとURLをコピーする

・関連記事
「OKボタンは右か左か」問題から始まったゲーム「Factorio」のGUIデザインの工夫 - GIGAZINE

限られた土地で「縦方向」に環境を考えつつ都市を築いていくシミュレーションゲーム「Block’hood」 - GIGAZINE

シムシティで生み出された人口600万人超の究極のディストピア都市「マグナサンティ」 - GIGAZINE

in メモ,   ゲーム, Posted by logc_nt

You can read the machine translated English article here.