人間とウェブの未来

「ウェブの歴史は人類の歴史の繰り返し」という観点から色々勉強しています。

ガンプラの全塗装プロセスは現代のソフトウェア開発プロセスそのものであると気づいた

最近ガンプラ(ガンダムのプラモデル)の全塗装をやっているわけですが、僕がガンプラ全塗装でやっているプロセスは、まさに現代のソフトウェア開発プロセスのなんたるかを擬似的に短期間で凝縮して体験できる優れたプロセスである、と思わされましたので、それについて書きたいと思います。

僕のガンプラ全塗装のやり方を大まかにまとめると、

  1. 説明書チェック
  2. 各パーツの処理をしながら組み立てる
  3. 一度全てのパーツを仮組みし塗装箇所や全体の塗装行程を検討
  4. 全て分解して塗り分けパーツごとにパーツを分離
  5. 全塗装
  6. 再度仮組み後にスミ入れとデカール貼り
  7. 必要であれば再度分解してトップコート
  8. 完成

という手順になるわけですが、えっ、これってまさに今のソフトウェア開発プロセスそのものじゃないですか、作りたいソフトウェアなくてもそこそこのソフトウェア開発プロセスが今すぐにでも体験できるじゃないですか、ソフトウェア開発プロセスから入る道がこんな身近にあるじゃないですか、と思ったわけです。

前提として、上述した流れは僕がやっている全塗装プロセスなので、一般的なガンプラ全塗装プロセスとは区別してお読み頂けると幸いです。

では、1つずつ見ていきましょう。

説明書チェック

まずはパーツ全体の構成や仕様のチェックをざっくりやります。ふむふむこういうものを作りたいわけですね、というのを見ます。「なんかこれページ数多いな、時間かかりそうだな、この辺面倒そうだな」とか思うわけですね。

ソフトウェア開発でも、大体の仕様をみたり、最初に自分で仕様を考えて、自分で実現できそうかなどを検討しながらやっていきます。「あのあたりまでは実装できそうだけど、あのへんがちょっと山場だな」とか思うわけですね。

各パーツの下地処理をしながら組み立てる

パーツを切り離しながら、細かいプラモデル自体の製造上の不要な線や切り離しで生じた突起箇所などを削ってパーツを綺麗にしていきます。その上で、仮組みの過程でパーツ同士を組み合わせても後でちゃんと再分解できるように、噛み合わせ場所をゆるくしたり、凹凸の凸を細く・短くしたりして分解可能にしておきます。

ソフトウェア開発でも、各コンポーネントを実装しながらユニットテストを書いて、細かいバグを取りながらも、後で結合した時に密結合でテストや実装し直しができなくなる、ということがないように疎結合かつ分解可能なようにコンポーネントを実装していきます。

一度全てのパーツを仮組みし塗装箇所や全体の塗装行程を検討

一旦、全てのパーツを組み上がったら、実際に完成の状態とポーズを再現します。すると、パーツにおいて、外から見える所と見えない所が明確になったり、ポーズによっては関節の見えにくい所が実はしっかりと外から見えるんだといったことがわかります。また、組み合わせてから改めて見ると、思った以上に塗装しようとしていた色のイメージと違う場合や、各パーツのもともとの色よりも、もっとこういう色にしたほうが良いといったアイデアが生まれてきます。僕はこのフェーズで、サーフェイサーという下地を全体の色が全く見えなくなるレベルでしっかり塗装して、外から見える部分がどこになるかというのを分解後のバラバラのパーツ単位でも認識できるようにしておきます。

ソフトウェア開発でも、いざコンポーネントを結合させていみると、思ってたように動かなかったり、実はこの実装って全体としてはあまり性能が要求されないところだから、違う実装にしても良いよね、とか、新たなバグや改修箇所が見えてくると思います。逆に、このコンポーネントって実は不要じゃない?みたいな、なんで気付けなかったんだ!みたいなことにも気付けたりします。各コンポーネントを実装していたり、その実装の細部を見ているだけでは見えないような、全体感としての実装方針と各コンポーネントの改修案が改めて検討されだすのではないでしょうか。仕様書の時点ではなかなか想定できなかった問題も見つかることで、仕様へのアップデートを書けることもあるでしょう。

全て分解して塗り分けパーツごとにパーツを分離

組み立てた後にサーフェイサーをすることによって、必要最低限の塗装箇所が明らかになります。僕は、組み立てた後に外から見える部分だけを重点的に塗装することで、塗装コストを減らすようにしています。 これによって、仮組み前ではパーツ内で外から見えるような、重点的に塗装すべき箇所がわからなかったのですが、パーツのこの箇所は外からは絶対に見えないのであまり塗料をつかなくても良い、一方で、ここは外からすごく見えるので出来る限り綺麗に塗装しておく、という効率的な塗装方針が検討可能になります。また、当初想定していたよりも、より良い仕上がりにするための塗り分けのアイデアから、塗装の色の種類が増えたりもします。

ソフトウェア開発でも、結合テストで問題が明らかになった後で、改めて各コンポーネントの最適化を行っていく場合においては、結合テストで明らかになった知見に基づいて、性能や安全性、可読性といった様々な優先度を決定しながら、各コンポーネントのリファクタリングや修正を行えるようになります。同時に、結合した際にはこの実装はそれほど処理が多くないので、安定性重視で実装しておいた方が良い、優先度は下げて時間があれば工夫する感じで良い、といったことが検討可能になります。また、当初想定したよりも、より良いサービスにするための追加実装のアイデアが生まれ、追加のコンポーネントが増えたりもします。

全塗装

粛々と塗装の分類に合わせて、サーフェイサーで認識できる塗装箇所を重点的に無心で塗っていきます。

ソフトウェア開発でも、まさにモクモク実装するといったフェーズです。

再度仮組み後にスミ入れとデカール貼り

塗装が終わったら、スミ入れやデカールといった仕上げ作業をするために、再度一旦組み合わせます。これによって、自分の塗装イメージが実際の組み上がりと合っているかなど確認できます。ここで、思ってた以上に特定のパーツの色を濃くしすぎていた等も明らかになりますし、スミ入れとデカール貼りにおいても、全体を見ながら仕上げのイメージをしていきます。

ソフトウェア開発でも、再度結合テストを行いながら全体感を担保しつつ、細かいコンポーネントの修正などを行っていきます。また、人が触る部分や見る部分については、結合テストをしながらより良い体験が可能なように実装していきます。コメントをもう少し充実させたりCosmetic change的なリファクタリングをやったりもします。

必要であれば再度分解してトップコート

そして、デカールや墨入れが終わったら、最後はガンプラのツヤの統一感や、デカールや塗装の保護のためにトップコートを吹きます。つや消しをしたい箇所と光沢にしたい場所がある場合は、必要に応じて再分解してトップコートします。

ソフトウェア開発でも、軽微な修正やリファクタリングが終わったら、しっかりドキュメントやデプロイのための諸々の整備をやりつつも、各コンポーネントを再整備したり、ソフトウェアの紹介サイトを作ったり、SNSやブログで宣伝できるように準備をします。まさに出来上がったソフトウェアのトップコートといえるでしょう。

完成

トップコート後ガンプラをコレクションラックに飾って完成です!

ソフトウェア開発でも、最後にデプロイしたりリポジトリをpublicにして、SNSやブログ砲を放って完成です!

まとめ

ということで、あくまで僕のガンプラ全塗装のプロセスを前提にお話しましたが、この流れはまさにソフトウェア開発プロセスを擬似的に再現できて、かつ、身近なところで完成まで持っていくことのできるとても素晴らしいプロセスの体験方法だと感じました。僕はガンプラを全塗装するときは、いつもソフトウェア開発をするつもりで取り組んでいます。

何かソフトウェアを作りたいと思いつつも、なかなかアイデアが生まれなくて手が動かない、なんて人もいると思います。なんとガンプラでは既に作りたいものの仕様とプロセスがそれなりの難易度で用意されているのです。すばらしい。すぐにでもソフトウェア開発プロセスを体験できそうです。作りたいものがなくても身近なところでいい感じでソフトウェア開発プロセス体験できるのすごい。プロセスを先に体験することで、ひょっとすると作りたいソフトウェアのアイデアが生まれてくるかもしれません!

是非、ガンプラ(MGを想定)を全塗装することで、革新的イノベーティブでスーパーウルトラミラクルエキセントリック少年ボーイソフトウェアを作るための開発プロセスを身近なところで体験し、エンジニアとして次のステージへ行く手助けになると良いですね!