読者です 読者をやめる 読者になる 読者になる

1.21 jigowatts

Great Scott!

エンプラ系のレガシーな現場でサブコンの一プログラマができること

概要

先日のde:code 2016にて赤間さんのセッション「拝啓『変わらない開発現場』を嘆く皆様へ ~エンプラ系SI開発現場の「今」を変えていくために~」を受講しザクザク刺さりました。

このセッション自体はSIerのPL/PM/SEを対象としており、このような状況を打破しようと聴きに来ている権限を持った方たちのいる現場は、少し未来に希望を持てます。教えに従い設計作業の最適化、テスト作業の最適化を行うことで効率的な開発が行えるようになる可能性があります。

では、そのような権限を持った方がいない、問題意識のない現場において、ほとんどの権限がない現場のサブコン(協力会社)プログラマが環境をもう少しマシにする為にはどうすればいいか、なにができるのでしょうか。

現場環境について

私はここ数年、某外資系のエンプラ系開発現場にて仕事をしております。

ウォータフォール開発、Excel/Access VBAWindowsフォーム、ASP.NET Webフォームなどを扱ったプロダクトが主であり、大量のドキュメント、Excelでのテストケース管理、手動テスト(もちろんテストコードなし)、エビデンスExcel方眼紙へスクリーンショットの大量貼り付けとレガシー環境そのものです。


現実を変えるためには

最良の方法は権限を持った方からのトップダウンでの現場環境改善の指示でしょう。しかし、現実にそのようなことは起こるには至っておらず、個人レベルでの活動を行う必要があります。

ただ、雇われの一プログラマにできることはそう多くはありません。


テストコードを書く

なんらかの変革を起こす場合、その変革によりシステムの本質に影響がないことを保証するためにテストコードを書くことは重要でしょう。そしてプログラマであれば手堅く、確実にこなすことができます。

ただし、効果がでるのは少し後になります。そしてテストコードのメンテナンスにもコストがかかることを認識してなければなりません。ある程度のライフタイムを持つシステムであれば、書けるところから少しでもテストコードを用意しておく方がよさそうです。

テストコードを書くことへの障壁

業務アプリにとってデータは根幹といえる要素であることが多いと思います。よって、データベース周りのテストを重点的に行いたいと思うのですが、私の現場ではローカル環境のSQLServerが使用できません。

もちろん開発用のDBサーバがあるのですが、共有のためデータのテストがしにくいのです。まずこの障壁を取り除くべく次期開発ではなんとしてでもローカルのDBをセットアップする必要があります。


モダンテクノロジーの導入

チャンスは小規模な新規案件しかありません。
今のボスは技術者よりなので完全新規案件かつ、小規模案件(開発一人)において私の裁量に任せてくれました。

業務Webアプリと言えど、jQueryなどを多用するようになってきたことから、親和性の問題でASP.NET MVCフレームワークの導入の検討を打診しました。

これにより初のASP.NET MVC*1での実装と実績を残せました。これはプロジェクトの規模が大きくなるほど難しいでしょう。

しかし、アジャイル開発や継続的インテグレーションなどはまだまだ遠いです。そもそもアジャイル開発が適していないケースというのもあります。


啓蒙活動

プロパー(社員やSIer)や同僚プログラマへの地道な啓蒙活動を行い、問題意識と改善の必要性を認識してもらう必要があります。テストコードを書き、少しずつ自動化を行い、小規模な新規案件でテクノロジーの刷新を行い確実に外堀を埋め実績を残します。

そうすればいつの日か権限のある人たちへ伝わって、大きな波となるはずです(希望)。


テクノロジーのアップグレード要求

そしてもっとも難しいのがこれ。これこそトップダウンで行われないと無理でしょう。ただ要求することはできます。

一つのプロジェクトに一年とかかかる間に次々と新しいテクノロジーが世に送り出されてきます。正直、置いてけぼり感すごいです。

そして先日Visual Studio 2015へのアップグレード打診が通らず、Visual Studio 2010とその周辺技術の現状維持が決定しました。

複数のアプリがVisual Studio 2010で開発されているため、すべてのソリューションのアップグレードが必要で、それをテストするにはコストと時間の両面から厳しく、現状維持が妥当との結論です。

この結論は理解できます。ビジネスですからね。ただ、開発者の視点だけで見ると残念というだけです。最新技術使いたいですからね。エンプラ系では特にここは我慢して、いつか使う日のために学習に留める必要があるのでしょう。


まとめ

エンプラ系開発においてレガシー要素が全て悪とは言い切れない部分もあります。

私の環境では何ができるかということを前提に考えてみました。もちろん現場の数だけ取るべきアクションが考えられると思います。

少しでもマシな明日のために、今何ができるのか。いいアイデアや実績があれば共有してください!


sh-yoshida.hatenablog.com

*1:MVC2ですが