「はじめに」という名の免罪符
以下の内容は結構感情のままに書いたものである。 どのような状況でも自分に責任はないというのはほぼあり得ないというのを忘れてはいけない。自戒を込めて。
発端
今、僕が1年半近く組み立て続けているプロダクトがある。 サーバ側も作っているけれど、主に「フロントエンドエンジニア」という立場からフロントを1人で開発している。
開発メンバーが20人弱居る中なぜそのような状況下というと、フロントをガッツリ触れる人間が僕1人だからである。 (自画自賛のようだけれど、第三者からもその認識を持っていただけている)
開発期間からも想像できるように、サーバサイドもさることながらフロントもかなり巨大な規模である。
そんな中、別の大きな案件に僕がサポートとしてアサインされるかもという話が入ってきた。 それに関わることはやぶさかではないし、現在の作業と並行しつつできる限りの手伝いをするつもりだった。
しかし話が進むと、どうも今触っているプロダクトから完全に外れ、別案件のほうにガッツリ関わって欲しいということになった。
そうなると僕が触っているプロダクトはどうなるんだろう?
え? 入社1ヶ月未満の人間に全て任せる?
……。
ええ? JavaScript を触った経験がない?
…………。
うん? 業務時間外に JavaScript リファレンスを読むよう指示した?
………………。
JavaScript という言語
個人的に JavaScript というのは Java や C#、 C++ 界隈から来た人間にとってとても分かりづらい言語じゃあないかと思う。 JavaScript は彼らと同じように「オブジェクト指向」にカテゴライズされる言語ではあるが、ECMAScript5 までにおいてクラスはないし、当然ながら継承なんて概念もない、かなり毛色の異なる言語だ。 (似たことを実装することはできるが)
返り値、引数、動的型付け、値判定、ブラウザ間での挙動の違い他諸々。 パッと思いつくだけでも JavaScript ならではの「くせ」というものは多い。 もちろん他言語にもその言語独特の「くせ」はあるが、 JavaScript の「くせ」はそれらとは一線を画している風がある。
こと、固い言語の世界から来た人にとって、 JavaScript の言語仕様には面食らうものだと思う。 自分自身、 JavaScript を日々触っていても「あ、これはそうなのか」と反省しながら学び直す超々基礎な仕様が多い。
JavaScript を触っているときの僕は結構狂ってる。
日替わりでJavaScriptに対する好感度が暴騰と暴落を繰り返してる。
— バトルプログラマー柴田智也 (@tomoya_shibata) 2015年1月21日
お前も JavaScript にしてやろうか
— バトルプログラマー柴田智也 (@tomoya_shibata) 2015年3月16日
JavaScript 嫌いです💢💢💢
— バトルプログラマー柴田智也 (@tomoya_shibata) 2015年3月26日
つらさを受け入れて JavaScript を書くの楽しくなってきた感がある
— バトルプログラマー柴田智也 (@tomoya_shibata) 2015年4月7日
体は JavaScript で出来ている――
— バトルプログラマー柴田智也 (@tomoya_shibata) 2015年4月16日
どのような言語、どのような技術にでも言えることだが、数日でマスターできるものなど存在しない。 ましてや、業務時間外の社員の行動を指示していたなど…。
JavaScript のゆかいななかまたち
JavaScript の役割が日々スケールアップしていく中、世の中では「JavaScript MVC フレームワーク」なるものを使い、「ジャングルのようなソースコード」にならない対策が取られている。 今回のプロダクトでも例に漏れず、ある有名なフレームワークを採用している。
あまり良い学習手順を踏んだとはいえず、そのフレームワークの特徴やプラクティスをある程度学ぶのに、1年は掛かったと認識している。 JavaScipt に対してある程度の知見が有りながら恥ずかしい話である。
学習に終わりはないので、これからも歩みを止めず学ばなければいけないのは言うまでも無い。
クソコードと属人化
再びお恥ずかしい話であるが、「学習しつつの開発」というものをしてしまったがために古くに作ったソースに関しては「クソコード」と呼ばざるをえない状況になっていたり、 MVC を使っておきながらその職掌分離に誤った手法を用いてしまっている部分がある。 これらは実装作業と平行して「正常化」を進めているが、もうしばらく時間が掛かるだろうという見通しを立てている。
これは完全に僕の落ち度であり、自業自得という言葉は当然だと思う。
そして大規模な JavaScript になると、はっきり言って自分でも把握しきれない部分が出てきてしまった。 IDE 等による支援された開発環境でないと、正直、安全な開発は難しいと悩んでいる。
これらの問題ははるか以前から上司に相談していたし、重要な懸念点として共有できているという認識だった。
さらに JavaScript、今回採用したフレームワークならではの「ノウハウ」をふんだんに盛り込んだソースコードであり、付け焼き刃な知識で第三者が加わった作業になると、剪定し始めたジャングルが急成長しかねない。 「ソースコードの正常化」、「あらたなメンバーの教育」、「ノウハウの共有」は最重要事項だ。 (ノウハウの共有に関しては、時間を見つけてメンバー全員がアクセスできる場所で公開している)
また TypeScript などの AltJS の導入し、順次置き換えていくことも円滑安全な複数人開発のために必須だろうと考えているし、推し進める考えの旨を全体に伝えていた。
それには十分な期間が必要だし、それは用意されていた。
しかしながら私の勤める素晴らしい弊社は「僕が人生をかけて学んだ JavaScript と苦しんで覚えたフレームワークの知識の全てを1人に教えて全作業を引き継いでくれ」とおっしゃる。
1週間で。
マジっすか?
という以上の話を
至極冷静に順序立ててまとめて別の上司に話したら、最初の話はすんなり再検討になった。
暁の水平線に勝利を刻んだのである。
抱き枕を抱いた自称戦士は安らかな睡眠を獲得する。
余談、別の現場での思い出
A「きみはどんな言語ができる?」
僕「これができます」
A「なるほど、案件にアサインしよう。Bさんの指導で作業してくれ」
A「ふぁい」
~翌日~
僕「あの、この言語、触ったこと無いんですが」
B「」
~翌日~
僕「とりあえずリファレンスを見ながらであればできそうです…」
B「その言語をマスターしたということですね?」
僕「」