nisshiee.org

Factorioについて

2018-12-17

この記事は、「Splathon Advent Calendar 2018」の17日目です。

昨日はkfukaさんより「Splathon#9 のネットワーク構成について」、明日はおとーさんより「アドベントカレンダーにエントリーした悪夢をみたので。」です。

まず自己紹介

Splathonコミュニティ内にも「にっしー」でたまーに顔見せしてます。

Splathonの前身になった企業対抗戦のときから参加していて、創造主ほどコミュニティ貢献できてるわけじゃないんですが、時間が取れるときにはお手伝いなんかをさせてもらったりしてます。

「Spee」に所属しており(「e」争奪戦に敗退したので今「e」は2個)、ladderにもエンジョイ勢として参加させてもらいました。

Factorioとは

Factorioとは教材であり、試験にも使われる科目です。

※ 参考: 試験に使われている様子

Factorioを通じてソフトウェア開発者の気持ちを学ぶことができます。
もしあなたが「ソフトウェアエンジニアと一緒に仕事をしているけどエンジニアの考えていることがよくわからない」という課題を持っているとしたら、Factorioは良い教材になるかもしれません。しかもゲームなので楽しく学ぶことができます。

ゲームの内容

Factorioは、未知の惑星に墜落してしまったところからゲームが始まります。そして、助けを呼ぶために、ロケットを打ち上げ、宇宙空間に救難信号を発信する人工衛星を打ち上げるのがクリア条件です。

惑星には資源がありますが、文明はありません。はじめは手で石や木材、鉄鉱石を彫り、炉を作り、鉄を精製するところから始めます。そして、作った鉄板や銅板を使って掘削や組み立てを行う機械を作り、それを用いて生産を自動化していきます。ロケットが打ち上がる頃には、マップ全体が1つの巨大な工場のようになっていることでしょう。

ウォーターフォールとアジャイル、リファクタリング

一度プレイしてみるとわかりますが、Factorioではゲームが進むに連れてどんどん工場を拡張していく必要があります。最初は秒間に1個程度の鉄板を生産する工場から始めて、最終的には秒間100や1000といった数の鉄板を生産しなければならなくなります。

では最初から「最終的にどれくらいの規模の工場が必要か」を考えて工場を設計すべきでしょうか。

最初から最終形を設計してから工場を作り始めたら、まさにウォーターフォール開発ですね。しかし残念ながらFactorioで最初から最終形の設計をしていたらいつまでも生産が始まりませんし、そんなことをしてる間に原住民に襲撃されてしまいます。

ではどうするかというと、まずは小さい規模で動くラインを組むのです。アジャイル開発をするのです。動くコードこそが正義であり、動く工場で実際に生産を開始することにより、顧客に価値を届けることができます。

最初は最小限の構成で研究を動かす(材料や燃料は手で運んでいる)。

しかし一方で、「まずは動く工場を」という方針で工場を作っていると、規模を拡張して生産速度を上げたいと思ったときに、以前の工場が邪魔になってきます。これが技術的負債です。ある程度は技術的負債を抱えながら工場を拡大することもできますが、だんだんと工場を建てたり輸送ベルトを通す隙間がなくなったりして、手詰まりになってきます。

狭い場所に無理矢理輸送ベルトを通した負債。ベルトが工場を囲んでおり、中の工場を拡張するのは難しそう。

ソフトウェアと同じで、Factorioの工場もリファクタリングしなければなりません。ソフトウェアエンジニアが「一旦ここで負債を解消しておかないと手を出せなくなる」と言うのを聞いたことがあるでしょうか。もしあなたがソフトウェアエンジニアリングを仕事にしたことが無いなら、言っていることは理屈で理解できても、体感値として技術的負債がどのように足を引っ張るのかわかりにくいのではないでしょうか。そんなあなたに朗報です。Factorioをプレイすれば技術的負債に足を引っ張られる体験をすることができます!

計測とボトルネック解消

ある程度ゲームが進むと、「既に必要な物の生産ラインは完成しているが、生産速度を上げる必要がある」という状況に陥ります。その場合に、工場全体をまるっとコピーすれば当然2倍の生産速度を得られるわけですが、多くの場合はそこまで必要ありません。つまり、ラインのどこかに生産速度のキャップを作っているボトルネックがあるのです。

このとき、「とにかく手当たり次第高速化できそうな場所を高速化する」という手段をとっていると、いつまでたっても肝心の最終生産物の生産速度はあまり上がりません。ボトルネックを的確に見定めて解消する必要があります。

ライン全体の構造を把握し、計測をし、また時には知識と経験に頼りながら、ボトルネックを見つけ、狙ってボトルネックを解消します。輸送ベルトの向きをちょっと変えるだけで劇的な改善を見込める場合もありますし、ときには1,2時間かけて工場全体の物流の見直しをして生産速度を上げるとともに将来の拡張の余地を確保することもあります。

貨物車が2両編成になっていて資材の輸送がボトルネックになっている例。3両編成にすることで大幅な物流の改善を見込めるが、鉄道網全体を改修する必要がある。

やってみるとわかるかと思いますが、この作業は「まず動く工場を作る」のに比べて遥かに難しいです。

もしあなたがソフトウェアエンジニアに何か開発をお願いする立場であれば、ちょっと機能を足すだけのはずなのに「難しい、時間がかかる」と言われた経験はあるでしょうか。そういうときエンジニアは、「機能を追加することにより、今までは許容範囲だったボトルネックを無視できなくなるので、それを解消しなければならない」とか「追加する機能が将来ボトルネックになる可能性が高いので事前にそうならないように手を打ちたい」といったことを考えているかもしれません。

朝会とタスク分担

Factorioは通常プレイ以外にも、以下のような楽しみ方をすることができます。

  • MODを使って生産ツリーを複雑にする
  • オンラインで、複数のプレイヤーで協力して工場をつくる

複数人でプレイすれば、より複雑で大規模な工場も作ることができ、よりFactorioを楽しむことができます。

しかし、より難易度の高い課題に複数人で立ち向かうためには、チームビルディングが必要不可欠です。
ログインしたらまず朝会をしましょう。現状と課題の確認をし、誰がどこを拡張するのか、あるいはどの課題を解決するのか、どういう方針でそれを成し遂げるのか、手を動かし始める前に確認しましょう。メンバーが連携を取らず各々好きなことをやっていては、チームとしての生産性を上げることはできません。

Factorioで勉強したくなった方へ

https://store.steampowered.com/app/427520/Factorio/?l=japanese

デモとしていくつかのシナリオを無料でプレイすることができます。
今すぐダウンロード!