プログラマの端くれとして、ソフトウェアのインストールだったり、開発だったり、そういった物事が滞りなく進むのは良いことだ。良いことなのだけど、他の誰かの環境や、ある状況下でうまくいかなかったときは、原因を探るために、そのうまくいかない状況を作り出す必要がある。そういうのを、再現するとか、再現性があるとかないとかいう。「あの手順を踏むと再現するね」とか、「僕の環境だと再現しないね」みたいな会話をしたりする。
そういう、なにかうまくいかないことの原因を調査するために、同じような状況を作り出して再現するかどうか確かめているのに、どうも再現出来ない、ということがここ最近多い。
ひとつは、僕の専攻科の特別研究に関することで、もうひとつは内定先での開発アルバイトに関することだ。どちらも、だいたいのアタリはついているのだけど、同じ状況を作って再現しようとすると再現しない。後者の方は、若干答えを掴めそうな感じがあるし、最悪無視すればなんとかなるレベルの話なのでどうでもいいのだけど、前者に関してはさっぱりだ。実験室と同じ環境を研究室に作ってみても、なんと再現しない。それに、人によってうまくいったりいかなかったりするとか、何回か試してみるとうまくいくとか、逆にさっきはうまくいったのに今度はうまくいかないとか、そういう感じだ。
もう仕方がないので、回避策を用意することにする。一応、そこは本質では無いっちゃ無いし。
ところで、こういうトラブルシューティング的なことをやるときに、その人の実力を垣間見ることができるのだなぁといつも思う。後輩がRailsで作ったものがうまく動かない、みたいな時は、いろいろヒアリングしつつ、原因を探って解決するという事ができるけど、それは僕がRailsだけやってるわけじゃなくて、Rubyそのものとか、HTTPとかSQLとか、あとはActive Recrodそのものとか、Railsというデカいものを構成する下位の概念についてそれなりに(少なくとも彼ら彼女らよりは)知っているし、それなりに経験も積んできているから出来ることだ。
今回はもっと低いレイヤの話で、ネットワークとか、Linux、パッケージマネージャがどうこうとか、とかそういう話だ。正直そういうのはめんどくさいので僕はHerokuみたいなものが大好きだし、ちょっとインフラ自分で頑張ってみるかってなっても、自前マシンにDebianをインストールして、適当に設定をしつつ、コミュニティがお膳立てしてくれた公式のDockerイメージを適当に構成して立ち上げるくらい。
結局、普段からそういったモノとよく触れ合っている後輩が緩和策を提案してくれて、そのとおりにやるとなんとなくうまくいった感じがする。それでもまだダメな人や、「さっきはうまくいったのに今度はうまくいかない……。」みたいな事が起きているので、ちょっとどうしようという感じなのだけど。正直ここに時間をあまり使いたくないので、次回以降は回避策を試す感じで考えている。
言い訳として、今回は学校の異常なネットワークのせいで二重ルータを強制されていること、それが無かったら驚くほどちゃんと動いてくれるというのがあるのだが、それでも今回は僕の実力不足、知識不足感が否めないなぁ、と思ったのであった。