Rのつく財団入り口

ITエンジニア関連の様々な話題を書いているはずのブログです。

【雑記】2019年を振り返る【おしごと編】

 年が開けてから振り返るのがMyスタイル…と言い訳をしつつ、だいぶ遅れましたがこれから続く一連のエントリは1年のふりかえりです。KPT法のKeep/Problemのあたり、YWT法のYatta/Wakattaのあたり、Fun/Done/Learn法の各要素のあたりを自分用に振り返ってみたいと思います。

まずはおしごと関連から。前の年はこんなことを書いていました。

iwasiman.hatenablog.com

おしごとでYaってdoneした編

f:id:iwasiman:20170126102823j:plain:w350
フリー素材ですよ

 2019年も期間が長かったものがあり、プロジェクト数としては少なめだった感じです。

WebAPIでサイトを作るおしごと

 前から続いていた社内の仕事。とあるパッケージ製品のアプリケーションにデータを登録してWebAPI経由でJSONで通信して取得、表示したり検索したりする社内のWebサイトに見えるPHPのWebアプリケーションを作るおしごと。通信部分の部品、Webアプリ部分のフレームワークとも僕が前に作ったものを使っています。
 これもリリースして公開済みなのですが忘れた頃に問い合わせが来たり、機能拡張や改造の話が来て見積もったり調整したり他と並行して開発したり。マーフィーの法則的に、いつも他のプロジェクトが忙しい時に限ってなんか来たりするのでまず頭を切り替えて思い出すのが一苦労でした。調べたことや進んだこと、話し合ったことはいつも自分用メモに書いて忘れないようにしていました。

 規模は小さいのですが会社的にはちょいと意味のあるおしごとだし、自分の作ったPHPの軽量級フレームワークが実際に動くものとして使われるのを見るのはそれなりに楽しいですね。
またこのおしごとがきっかけで別の案件で流用して使えないかと営業の人から相談を受けたり、将来サービス化して売っていけたらいいねえという話になったりして、こういうきっかけになったのは嬉しい所。周囲でも認知度を上げ、またこのフレームワークを使ったPHPのWeb開発に携われる人ももっと増やしていきたいところです。

フロントの技術をたくさん使うおしごと

 お客さんの会社さんとの共同開発で、こちらも前から続いていたWebアプリケーション開発のおしごと。以前はDelphiで作っていたWindowsアプリのWeb版開発です。開発環境では仮想コンテナ環境の中で動いているPHPでParavel、フロントはJavaScript+jQuery+ライブラリ多数、バックには約束のMySQL。ちょいと事情があって開発が頓挫し、IE11では動かない状態で止まっていたものにへーしゃが加わって再スタートしました。
 2018年にJavaScript再入門してフロントエンドも(いちおう)分かるマンに進化した僕が技術部分をリードして、フロントのJS部分はすべてES6仕様に書き直してリファクタリング、Node.jsとBabel+Polyfill、Webpackのトランスコンパイルを導入してIEでも動くようにして進行。完全脱jQueryの夢は工数から実現しなかったのですが、特に難しい1画面はVue.jsで作り直してより良くすることができました。
 このプロジェクトもへーしゃの標準から比べたら技術的にはかなり新規要素が多く、得られる知見も多かったです。パートナーさんにも新人君含め新しいメンバが加わったりする中、立ち上げから参加している身としては最後まで一緒にやりたかったのですが…他のプロジェクトとの兼ね合いにより途中から月50%、そしてそのあと月0%になって完全に引き剥がされることになってしまいました。うーんこれ最後まで関わりたかったなぁ……
 そしてこのときは一緒に作ったお客さんの会社のコアメンバーの方が途中で退職。転職するのかと思いきや、なんとバイクで世界を巡る旅に出ることになり、送別会で見送るという不思議な体験をしました。ロシアのあたりからスタートする予定でしたが、さてはて今頃どのあたりを旅していることでしょう。

ザ・業務システムなおしごと

 うちではグループ社内の業務のRPAによる効率化が周囲で進んでいるのですが、その関連で始まったWebシステム開発のおしごと。業務フローで別の大きなシステムへの登録の手前の手続き業務を今まではエスアイヤ〜伝統のExcelでやっていたところを、Web化して便利に、そして完全定形の作業は人でなくRPAのロボットがやるというもの。エンドユーザーが人とロボット両方であるWebアプリを作っていきます。
 2000年代にJava/.NET中心の世界線を作り上げ、大筋ではそのまま進んできてしまったジャパニーズトラディショナルビッグ(以下略)な弊社界隈でもJavaライセンス有償化問題や懐かしのフレームワークStruts等のレガシー化問題は注目されており、新規案件ではより新しい選択肢を…という雰囲気になっています。
 このおしごとはプロマネも僕と親しい元同僚のマネージャーだし内部的にはやりやすく、じゃあ僕の周りで実績が増えてきたPHPでやろうということに。現在ではすでにデファクトのLaravelも考えたのですが、ちょいと社内特有の認証周りの仕組みが流用できたりすること、複雑な仕様への対応のしやすさもあって、僕作成の軽量フレームワークでいくことになりました。

 この自作FW部分の技術的なチャレンジとしては、対応DBをSQLServerに増加、FW自体の部品や機能もさらに拡充、PHP7.2を導入して機能側の開発は全メソッドの引数と戻り値は型必須とし、フロント側にもjQueryベースの仕組みやモーダル画面をより簡単に組み入れる仕組みを作ったりして対応しました。
ちなみにソース管理は今度こそGitにしたかったのですがちょいとサーバー側の都合があり、次こそは…と思いながら伝統のSubversionで我慢することになりました。

 このおしごとが2019年のメインだったのですが、いやはや手こずりました。画面数は少ないんですが業務仕様がめちゃんこ複雑、画面の状態やパラメータによって表示内容や要素の状態やバリデーション仕様やサーバサイドのロジックも変わるという厄介なやつ。僕もコードレビューしたり開発の基本方針を指示したりできることはしたのですが、詳しくは語れませんがチームの要員的な問題もあって品質を保てない状況に。
能力の高い人が一時的にヘルプに入ってクラス分けなど細部は無視で実装だけ大まかに終えるところまで完了、Webアプリ部分は残りを全部僕が引き継ぐという形で進まざるを得ないことに。

 サーバサイドのPHP、クライアントサイド(フロントエンド)のJavaScript実装とも徹底的にリファクタリング、案の定結合テストで出てきた何百件レベルのバグをすべて討伐、さらにこちらも事情があって後から後から湧いてくるかなり大きい機能変更や追加の要望も見積もって順次対応、そしていつかメンテするかもしれない人の事も考えてレガシーコードにならないよう注意しながら(ここでは、テストコードの無いコードではなく保守性の低いコードの意です)作り上げていく。
 プロマネと仕様面はマネージャーがもう一人いましたが、バッチを除いたWebアプリ部分は設計と実装とテストを全部僕一人という、ソフトウェアアーキテクトとは一体…的な感じでなんとかやってきました。5〜6月あたりがピークでしたね。最初は数ヶ月で終わる予定のプロジェクトでしたが、最終的には1年以上続いていました。

 新規開発ではチームメンバのプログラミングの基本能力は重要だという、至極当たり前の事実を再確認したおしごとでもありました。詳しくはネットでは語れないのですが、業務経歴書を盛るのはほんと勘弁してほスィなぁw
 得られたこともあって、下で触れますがリファクタリングとクライアントJavaScriptの知見もかなり貯まりました。作業の見通しが立てやすい仕事だったのでそこも効率的にやれましたね。
 一度作り終えた後から機能変更が度重なったのでデグレードもあったのですが最終的には品質も落ち着き、そろそろようやく終わりそうなところです。

フォローをするおしごと

 前から僕ともっと一緒に仕事をして開発のスキルを得ていきたいです!と言ってくれていた後輩君が、ようやく小規模ながらWebアプリ開発の仕事にアサインされることに。WebサーバーはIISRDBSQLServerというMS寄り構成で、僕が作ったPHPフレームワークでさっと開発することになったのでフォローをするおしごと。
 よくあるWeb画面なのでふつうに開発完了できたのですが、いろいろ質問も出てきたのでどういう意図や思想があって内部構造的にそういう仕組みにしているのかも含めて説明したりしました。中身が分かれば分かるほど、工夫して作ってあるのが理解できてきた、こういうのを自作できちゃうのは凄い…とかいう感想も出てきたりして、ああ良かった根本的なところをだいぶ理解してくれたな…と思ったり。

 どのプログラム言語、どのフレームワークで作ってもWeb技術の根源のところは変わらないというのはありますね。いわゆる駆け出しエンジニアと繋がりたい勢のツイートなんかを見ていると、Railsとかフロントエンドの勉強をしていてもこのへんの根本がよく分かってない方というのは一定の割合でいるなと思います。
 実際の開発はビジネスパートナーさん任せみたいなありがちな姿勢ではこの先生き残れないことに大企業も気付き始めた昨今、自分の手でWeb開発できる人材は僕の周囲でももっと増やしていきたいと思っています。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

  • 作者:山本 陽平
  • 発売日: 2010/04/08
  • メディア: 単行本(ソフトカバー)

ふりかえり&Problem&Wakattaこと、FunやLearn

リファクタリングをがっつりやりました

 上記の業務システム開発でサーバサイドのPHP、クライアントサイドのJavaScriptをじっくりがっつり掃除しました。携わるのが僕一人だけだったので、他メンバーとのコンフリクト等を考えなくてよいのは楽でしたね。
 やったのは特に独創的だったり高度なことはなくて基本に忠実に。

  • 巨大なクラスの分割
  • DRY原則の徹底
  • Baseクラスへの処理集約
  • 特定のクラスへの処理集約
  • マジックナンバーの徹底排除
  • 判定に使う値の徹底的な定数クラス化
  • コメント記述の徹底
  • 変数名やメソッド名の改良
  • よく使う判定のメソッド化
  • 長い処理の内部メソッド化
  • 『レガシーコード改善ガイド』にある「スプラウトクラス」の活用

などです。
 このへん一度ブログ記事にしようと思って忙しくてそのままになっちゃいました。こういう泥臭い仕事はあまり脚光を浴びませんが、自社サービス開発でも受託開発でもSI開発でも実際にコードを書く現場では変わらないものかと思います。さらに経験を積んで知見を貯めることができました。

iwasiman.hatenablog.com

iwasiman.hatenablog.com

JavaScriptをがっつりやりました

 まあ伝統のjQueryなんですけどね(ああっそこのイケてるフロントエンドの方、石を投げないで!w)
 上の業務システムのおしごと、僕作成のPHPフレームワークの画面側の仕組み自体はjQuery非依存で作っているのですが、キー押下の制御や非同期通信などなどはオプションでjQueryを入れてもいいように拡張しました。そしてクライアント側の制御が激しいある1画面についても最初は仕様が膨大にはならない想定(※フラグ)だったので、案件の規模や開発メンバのスキルを踏まえ、今回はjQueryを選択しました。
 自分がコードをコントロールできる範囲で、jQueryだとどこまで行けるのか一度感触を確かめてみたかったという思いもあります。僕が過去ウン年やってきた何十個もの開発プロジェクトの中で、上で上げたフロントの技術をたくさん使うお仕事に次いでJSコード量は2位確実です。SPAでない1画面の中で使うJSコードが何百...いや何千行だろう、かなりがっつりやって経験スキルをさらに確実にすることができました。

 後悔していることももちろんあって、最初は想定していなかった仕様が後からどんどん追加されて、品質やメンテナビリティは守れたのですがコード量がどんどん増えていったんですね。基本は各DOM要素のchangeイベントに、これまた関数化された制御処理を入れていく…という実装が多かったんですが、実は他にも別のイベントや別の処理でもその制御処理を呼ばなければいけなかった…的なバグがけっこう起こりました。
 (Reactでもいいですが)たとえば画面全体をVue.jsのVueコンポーネントにすると、DOM要素から完全に離れてデータに対してプログラミングする形になるので、このへんのイベント処理関連がもっとコード量を減らせて、バグも少なくなったかなあと思います。

 まあ技術選定したのは僕なので自分の責任なんですが、度重なる仕様追加や変更が落ち着いた最終形態の今から思い返すと、うーん最初の時点で思い切ってVue.jsを導入すればよかったかなあと思うところです。くっ、ターゲットブラウザにIE11さえなければ…そして社内にまともにJavaScriptが書ける人がもっといれば……
 この経験蓄積を踏まえて、次回は小規模案件でももっとフロント技術を導入していこうと思います。

iwasiman.hatenablog.com

jQuery入門道場

jQuery入門道場

自動テストまで行きませんでした

 上の業務システム開発は実作業が僕一人で手がまったく回らなかったこと、仕様の複雑さが集中しているのが1画面でブラウザで動かしたほうが早いこともあり、自動テストの導入までは至りませんでした。これではTDDのカリスマであるサバンナのライオン先生のAAに怒られること必須であります。

f:id:iwasiman:20200112151411p:plain:w450
この画像はライセンス:パブリックドメインだそうです

 例えばサーバサイドの入力チェックのバリデーションが分岐がめちゃんこ複雑、処理は完全にクラスに切り出しているので、ここはPHPUnitなどで自動テスト可能でしたね。一部だけでも自動テスト化しておけば機能追加時のデグレード防止になったかも、でもテストコードを書く分のかかる時間も考えるとその価値はあっただろうか、うーんどうだろう…?と、後から思い返すと悩ましいところです。メンバーがもう何人かいる規模の開発だと、導入する価値ありになったかな。
 このへん、基礎部分を作って公開後にその収益分を使って機能拡張や追加を繰り返しつつ品質を維持していく必要のあるサービス開発と、基本的に期間内で品質を保ってベストエフォートで開発しきったらそれで終わりのSI的な開発なんかだと、若干毛色が違うところはあるかと思います。

リモートワークを体験しました

 仕事でリモートワーク(テレワーク)を体験しました。初の体験だったので以下の記事に書きました。

iwasiman.hatenablog.com

 この記事に書いたように人とコミュニケーションが必要な作業はツール含め改善の余地あり、プログラミングなど一人で集中してできる作業はかなり効率良し、意外と疲れる、ずっとリモートだと運動不足になりそう…などなどいろいろ気付きがありました。
フルリモート可能!なんて謳い文句はよくエンジニア向け求人で見かけますが、自分としては交通機関の乱れや家族の病気、休みの前や後の日などなど、時々やるぐらいで十分かなあという感じです。このへん人や企業や働き方によって様々でしょうね。
 秋に期待の新人諸氏が現部署に配属されてからはやってないのですが、2020年はオリンピックもあることだしまた活用していきたいと思います。

効率的な作業を心掛けました

 へーしゃも働き方改革の浸透で残業規制がどんどん厳しくなり、ワーク・ライフ・バランスを保って定時内で成果を上げていく方向にシフトしていきました。僕も残業手当分は一定の裁量労働制、もう上司の目を気にする立場でもないのでいつも定時+α、月の残業も数時間で収まるようにしてきました。
 このへん昔はだいぶ違って、2000年代の頃はみんなデフォルトで残業する風潮はありました。みんなダラダラ残業して残業手当を稼いだり、内職したり他のことやったりしてたもんです。今だったら事前にリスクを検討して潰すべきところ、何もせず前進して地雷を踏み抜いて爆発した分を残業でカバーするようなスタイルの働き方もやってました。

 さすがに昔ほど無理は効かなくなり、自分でなく子供の病気で休んだりするケースが出てくる今、世の中が良い方向に変わってきたのはありがたい。特に2019年は見通しの立てやすい仕事が多かったので、タスクを分割してなるべく集中して時間を意識しながら効率的に作業、空けた分を毎日少しづつAWS認定の準備や他のことや息抜き諸々に使うようにしてきました。

AWSをLearnして2冠達成しました!

 実案件ではまだ使えていないのですが、2019年の最大の収穫がこちら。会社で本格的に始まったクラウド領域にも対応できる高度なエンジニアを増やそう計画の流れに乗っかり、研修に行ったり。自費でイベントに行ったり本を読んだり、目に見える成果としてAWS認定『ソリューションアーキテクト - アソシエイト』『デベロッパー - アソシエイト』の2冠を達成することができました。
学習期間・時間ともけっこうかかっちゃったんですが、実務未経験からの2冠は誇れるところです。社内でもプレゼンスを上げていきたい所。

iwasiman.hatenablog.com

iwasiman.hatenablog.com

 DVA(デベロッパー - アソシエイト)の合格エントリは後ほど書きます。

f:id:iwasiman:20190921201357p:plain:w350 f:id:iwasiman:20191228114709p:plain:w350

変化の始まりをWatchしました

 これを語るとあまり見ないけどネットのどこかにいるかもしれない同グループ内の同志諸氏に分かってしまうのですが(笑)、へーしゃと弊グループでもこの1年でだいぶ変化が始まりました。働き方改革、残業規制、東京オリンピックに向けてリモートワークの導入、先進企業に習って1on1も開始、人事制度が変わリ始めて管理職にならずともエンジニアでも昇進していける制度開始、Udemy for Businessが一括導入されて一定の講座はただで受講可能、全社にMicrosoft Teamsが導入、アンケートを繰り返して社員の満足度の実態を上層部も認識、変化や挑戦をキーワードに意識改革、コワーキングスペース開設、この流れを受けてうちの事業部でもフロアを改装して似たような取り組み…。
新人君が身近に配属されたのでいろいろ聞く機会もあるのですが、近年はだいぶ新人研修も手厚くなって離職防止も考慮されているようです。

 より単金の安い外部のパートナーさんに開発をやらせてその差額で儲けるいわゆる人月商売、よくSIer批判で出てくるこれは大企業の仕事の100%でそうなのかというとまた違うのですが、この人月商売のツケを払う時がいよいよやってきました。エンジニア転職戦線の好景気と来たる2025年の壁を前に、鈍重な大企業もいよいよ生き残りをかけて本格的に変わろうとしはじめたなという感じです。ジャパニーズトラディショナルビッグカンパニィのナカーマであろう、他社さんでも恐らく同じでしょう。

 普段から継続的なスキルアップや自助努力、社外からの吸収やサバイバル戦略の意識を続けてきた自分からすれば、やっとかいなという気持ちもあり、全社的な動きについては「ワイ、高みの見物」とばかりにお手並み拝見の感もあります。
同時に僕の属している集団ではよりよい組織づくりが進んでおり、身近なところでの変化は喜んで受け入れて行きたいところです。

その他まとめ

 僕の周囲ではRPAが流行っています。エンジニア界隈ではあまり人気のないRPAですが定形作業の多い仕事の効率化では成果を上げており、メシのタネになって実際儲かっているしやってるのは僕の同僚たちなので無下にはできないところ。
 とはいえ同時に僕の技術力が活かせる高度な仕事という訳でもないので、生存戦略としてもこっち方面は消極的な姿勢を取り続けてきました。その先のクラウド時代を見据えて先んじてAWSを学び、新たな武器を蓄えつつ目の前の仕事を確実にやって未来に備えた1年でした。

 社内で距離が遠い人との調整など、リスクがあり自分の専門分野でもない仕事はあまり出てこず、2019年もマネジメントの人とうまく仕事を分担、引き続き技術力をメイン武器として活動することができました。ピークもあったんですが、これまで乗り越えてきた数々のハードな案件に比べれば、乗り越えればまあ大したことはなかった感じです。

 仕事納めの最後の日、前にちょいと縁があってC#の本を貸してあげたことのある、その後別事業部に行ったはずの若い某氏がお菓子を配っていました。年末で退職するとのこと。流行りの自社サービス開発企業にでも転職するのかと思って聞いたらそうでもなく、疲れ切って次は何もまだ何も考えてない電撃退職とのことでした。
 その氏が行ったのは比較的ルーチンワークや保守が多いはずの事業部だったので、そうか我々と道が別れた後はあまりスキルを高めることができなかったのか、C#エンジニアとして成長して生き残ることはできなかったんだな…とふと思いを馳せました。まあ人生人それぞれいろいろあります。

 その日は酒が入って軽い納会になり、一緒に仕事をした別部署のマネージャーと話をしてそっちでも開発できる社員が足りないという話を聞いて、僕みたいなエンジニアをもっと増やしていかないとなと思ったり。
 僕が新人のころ世話になった人たちがいたので久々に思い出話をしたり。能力がなさすぎた当時の僕からしたらみんなスーパーできる人に見えたその方たちも既に50代、定年に向けた今後のことを話していました。そうか、あれからもう20年ちょい経つのか…と昔を思い出してエモくなりました。
 今の人たちからしたら想像もつかない昔話でしょうが、90年代のバブル崩壊後の暗黒の就職超氷河期、非情報系学部からIT業界に飛び込み、金融系開発のPl/I世界線の未来のなさに気づいて脱出して半年で転職。当時はまだベンチャーとかも脚光を浴びてなかったので今よりもテック寄りだった現社の元になった会社に転職。
その後も七転八倒紆余曲折、本当にいろいろありましたが、少なくとも胸を張ってITエンジニアだと言えるだけの人間としてここまで生き残ってきました。
 よしこれからも、自分をアップデートし続けながらエンジニアとしてサバイブしていこう。と改めて思った年の瀬でした。