SHIPPAY✕GAICHU

# ミックスソース

上司に詰められたボックのような世界では
外注がそれぞれ出会った誰かと寄り添い合ってる
そこに紛れ込んだ僕らは営業職みたいに
優良企業のフリしながら 微笑み浮かべる

幸せの発注依頼の上
文字通り絵に描いたうわべの裏
モニタを囲み手を合わすその時さえ
ありのままでは居られないまま

コピペコードだらけ 継ぎ接ぎだらけの code, you know?
デバッグしても無くならない
タイポがコードに挟まったまま
不安だらけ 成り行き任せの schedule, and I know
仮初めまみれの進捗だけど
ここに僕が居て 外注が居る
この真実だけでもう 胃が痛んでゆく

化けの皮剥がれた一回の進捗会議みたいに
幹部から一瞬で弾かれてしまう そんな時こそ
突貫工事で良かったら僕にやらせて
共に罵倒され 揺られ 踏まれても
帰れない夜みたいになるから

APIの呼び出し場所が初期処理か関数の中か
それだけの違い
許されないほどにクソイなこのコードを
等しく僕が直せますように

時に冷たくて 騒がしい会議室の向こう you know?
笑顔の一つも見つからない
怒号に満ちた日があっても良い
ミスだらけ 外注任せの code, but I know
所詮ひとかけの日常だから
Backlogの中にでも 流して引き継ごう

コピペコードだらけ 継ぎ接ぎだらけの code, you know?
とっておきも出来損ないも 残さずに全部デバッグしながら
普通などない 正解などない design, and I know
仮初めまみれのローンチだけど
ここに僕が居て 外注が居る
この真実だけでもう 胃が痛んでゆく whoa
この一掴みの失敗を 噛み締めてゆく

----

# わくわく！

上司のアイデアで単発のサイトを作ることになりました。
ある分野に関するまとめサイトで、一覧ページと詳細ページがあるだけのシンプルなサイトです。
シンプルとは言っても社内のデザイナーもエンジニアも空きリソースがあるわけではなかったので、まるごと外注に制作依頼をすることになりました。

デザインにもこだわりたいとのことで、上司の知り合いのデザインに定評がある某社に業務委託で依頼することになりました。
私にとっては初めての外注先でしたが、Webデザインに加えてインフラ構築、PHPでの開発もでき、サービス公開まで一通りできそうでしたので、安心して任せられそうでした。

外注先も活気のある会社でキックオフ飲み会で意気投合し、工期3ヶ月のプロジェクトの幸先の良いスタートを切りました。

# よろろすおねがいするます

順調に滑り出したプロジェクト・・・のハズでしたが、序盤で早速難航。
デザインがなかなかFixできなかったのです。

というのも、外注さんが出してきたデザイン案に上司がなかなかOKを出さず、何度もリテイクが発生したためです。

会議でその場の思いつきで言ったとしか思えないようなアイデアを出す上司。
思いつきで言っているせいで、次の会議のときには自分の言ったことを忘れている上司。

「先週と言ってること違うやんけ・・・」と外注さんの困惑した顔にもはっきり出ていました。

明らかにこちらが悪いのに、なかなか進まない進捗に会議で激昂する上司。完全に呆れて愛想をつかされている外注さん。日に日に外注さんとの関係は悪化していきました。

気づけばデザインFixするだけで3ヶ月が経過していました。

# ものすごいうそつき、でもかっこいいうそつき

プロジェクト開始から半年が経った頃、ようやく外注先から納品されました。
進捗会議で状況良くわかってないのに「順調（なはず）です！」と言い続けた私もほっと一安心です。

が、納品されたものを見てみると・・・。

ぱっと見、ちゃんと動いているように見えるのですが、細かいところに表示上のバグが・・・。
おまけにやけに重い。100件くらいのリスト出しているだけなのに表示に３秒くらいかかります。

バグの修正と表示をもっと早くできないか外注さんにメールで依頼しましたが、返事が返ってきません・・・。電話で話しても「確認する」といったきり動きがありません。

おそらく赤字プロジェクトになっているであろうこのプロジェクトにもうリソースを使いたくないようです。

当然進捗会議は炎上。このままでは埒が明かないので、私の方で修正することにし、環境の情報を外注さんからもらい、ソースコードを見てみました。

# だいじょうぶます、がんばるます

PHPソースコードを確認したところ・・・。ひどい状況でした。

いろんなところからコードをコピペしてつなぎ合わせたと思われるような状況で、変数の命名ルールがキャメルだったりスネークだったり、全く関係ない変数名が付けられていたり、関数の切り方が統一性がなかったりと、継ぎ接ぎだらけの状況でした。
そのせいであちこちでTypoが発生。
長々とデータをこねくり回した結果、結局何にも使っていないというような状況も発生していました。

また、英語対応もお願いしていたのですが、元の日本語サイトのリソースを全てenディレクトリにコピペして、文字のところだけ英語に書き換えるという再利用性度外視の作りになっていました（ある意味マイクロサービス？）。

不要なコードが大量に紛れ込んでいるのも遅延の原因の一つでしたが、一番の原因はcontentfulからデータを取ってくる部分でした（contentfulはヘッドレスCMSです）。

```index.php
/* 指定したIDのデータを取得する */
function getData($id) {
    $data = NULL;

    // contentfulから全件データ取得
    $entries = getDataFromContentful();

    foreach ($entries as $entry) {
        if ($id == $entry->getId()) {
            $data = $entry;
        }
    }
    return $data;
}
```

1件のデータを取るために、全件APIから取得して、ループで回してIDが一致したものを返すようになっていました（しかも見つかってもbreakはしない）。

**この関数をリスト分100回呼んでいたので、100件データ取得するのに、同じ全件取得APIを100回実行するようになっていました。**

こんな使い方していたら、重いし、あっという間に無料の回数上限超えてしまうのでは・・・。

無駄な処理をなくし、APIを初期処理で1回だけ呼び出すようにしたら劇的に早くなりました。

# ほんとはおまえとなかよくしたいです

今回、外注さんに丸投げで納品されるまでノーチェックだったため、納品されてから色々と問題に気が付きました。
こういうことをなくすため、スクラム開発で、随時お互いの意識を合わせ、お互いに無駄な作業をなくすことが大事だと思いました。

今回のプロジェクトはお互いにあまり良い結果に終わりませんでしたが、その外注さんはデザインは良く、活気もあって本当に良い会社だったので、また別の機会に一緒に仕事をしたいと思いました（向こうはそう思ってないでしょうが・・・）。

いきなりまるなげしてごめんなさい
ほんとはおまえとなかよくしたいです

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21645/5abef38b-2aba-ad69-30b4-083fd48c6a19.png)