年が明けてから振り返るスタイル...(いいわけ)
年末年始は様々な方のふりかえりや新年の抱負、2020買ってよかったものシリーズなどを拝見してだいぶためになりました。いつも1月にやっていたので自分用に振り返ってみます。KPT法のKeep/Problemのあたり、YWT法のYatta/Wakattaのあたり、Fun/Done/Learn法の各要素のあたりになります。
まずはおしごと関連から。前の年はこんなことを書いていました。
おしごとでYattaこと・doneしたこと
関わったプロジェクト数は意外に多かったです。
WebAPIでWebサイト的なシステムを拡張していくおしごと
ドキュメント管理のパッケージ製品にデータを登録してDBの代わりにデータソースとして扱い、WebAPI経由で通信して内容を表示するシステム。PHP
による純然としたWebアプリケーションでもあり、社内の別の部署がメンテしている社内Webサイトでもあるという両方の側面を持っています。通信部分の部品、Webアプリ部分は僕が前に作った軽量級フレームワークを使っています。
こちらも本番リリースしてずっと動いてる後に機能拡張の話が来て仕組みを考えたり見積もったり、現在も開発が続いてきました。もう動いているものなので注力するところといえば既存部分に影響を与えずに拡張性保守性を考慮しつつ、必要な分の拡張だけで必要な仕様を満たすこと、リスクも見て余裕をもって精確な見積でやっていくこと。
僕が出てくる訳ではないですがへーしゃの公式サイトの製品紹介ページにこの案件は事例紹介として載っていますし、コンテンツの更新後はグループ全社の告知でも出てきたりしています。規模はあまり大きくないですが、自分の作ったフレームワークや仕組みが使われるのはちょっと楽しいですね。
開発経験のまだ浅いメンバーと一緒にやっているので、チャットで密に連携をとりつつやっています。開発メンバ同士の細かい話はもうSlackやTeamsでやるのが断然効率がよいですね。
けっこう前に最初に形にしたシステムなので、改善としてはPHP7.2以降から可能な関数の引数戻り値の型指定を全部適用したり、古いコードを見直したりお掃除をしていきました。案の定、今までは暗黙の型変換でなんとなく動いていたところが所々あったりして撲滅していきました。今後も続いていく案件なので2021年はそのうちPHP8にもアップデートして、どれぐらい対応が必要だったか確かめていきたいですね。
また社外向けサイトの事例紹介にも載ったりするのは意味のあることなんですが、仕事と個人の活動は一応分けて会社以外の場では控えています。これがもし成長中の若い会社だったら、これ自分が作りました!ドヤ!と積極的にTwitterの個人垢でもアピールしたりするところだろうし、そういう文化も羨ましくは思ったりします。
ザ・業務システムの継続開発のおしごと
リリースしてグループ社内で本番稼働している、業務仕様がめちゃんこ複雑な業務システムのおしごと。去年の開発のメインでした。技術スタックは自分たちで決められたので、もうJava
はやめてこちらもPHP
、フレームワークはLaravel
でもいいのですが社内の認証の仕組みの流用の話があり、上と同じ僕作成のFWでいきました。フロントは開発開始当時はそれほど膨らむ予定がなかったので、伝統のjQuery
で行っています。今でも触るたびにここ最初からReact
かVue.js
でやっていたらどうなるだろう……と思うのですが、ひとまず諦めていますw
いちおう保守フェーズなので問い合わせの対応やデータ調査もやるのですが、機能追加や変更の要望がズンドコきて、実質開発を継続しているのと同じような状態でずっとやってきました。開発のピーク後にサーバーサイドのPHP、クライアントサイド(フロントエンド)のJSとも徹底的なリファクタリングはもう実施して品質は安定しているので、以下に注意しました。
- DRY原則を厳密適用して最小の修正で必要な効果を上げる
- 度重なる今までの修正を踏まえ、最適な正しい場所で修正する
- 他の仕様やロジックに影響を与えないよう修正する
- これまで通り可読性の高いコードを保つ
- 未来の自分や他の人が触っても大丈夫なようにメンテンナビリティを保つ
- 必要な分のパターンのテストを確実に行う
だんだんパズルをやっているような感覚ですね。2020年に読んだものだと『レガシーコードからの脱却』、『リファクタリング 第2版』、『Clean Code』、さらには『Clean Architecture』などで得た知見も役に立ちました。
iwasiman.hatenablog.com iwasiman.hatenablog.com iwasiman.hatenablog.com iwasiman.hatenablog.com
レガシーコードからの脱却 ―ソフトウェアの寿命を延ばし価値を高める9つのプラクティス
- 作者:David Scott Bernstein
- 発売日: 2019/09/19
- メディア: 単行本(ソフトカバー)
- 作者:MartinFowler
- 発売日: 2019/12/06
- メディア: Kindle版
Clean Code アジャイルソフトウェア達人の技 (アスキードワンゴ)
- 作者:Robert C.Martin,花井 志生
- 発売日: 2017/12/28
- メディア: Kindle版
Clean Architecture 達人に学ぶソフトウェアの構造と設計 (アスキードワンゴ)
- 作者:Robert C.Martin,角 征典,高木 正弘
- 発売日: 2018/08/01
- メディア: Kindle版
こういうスキルはプログラミングの独学やスクールなどではおそらく得られない、実際の開発現場でこそ学べるものだと思います。さらに武器を磨くことができました。今はチーム開発でなく自分単独なのでやりやすい仕事でもありました。
CRMなおしごと
お客さんの業務をCRM導入でよりよくしていくおしごと。Microsoftの製品である旧Dynamics CRM
、現Dynamics365
を使います。
けっこう大きい案件でブラウザの開発画面をポチポチやって画面を開発していくところは他メンバー、自分は沢山ある顧客要望の中でD365の基本機能では開発できないところをどうやって実現していくのがよいのかを調べたり提案したりする、アーキテクト的なところをちょっとやりました。D365や仲間の製品を調べたり、名刺管理のSansanが出てくるかもしれなくなってAPIのところを調べたり。
まぁ自分的にはあまり深追いしたくない分野でもあったのでモチベーションは低めでしたね。お客さんの注力したい場所が定まったり当初と予定が変わったため、自分の出番は少ないままプロジェクト離脱となりました。
自分の手で実際に動くものを作っていないのでなんか手ごたえがない、というのもモチベ低めの原因でした。やっぱりものづくりの現場にいた方が自分は性に合ってるのだなあと思ったり。
Dynamics365の延長にある、非エンジニア層でもアプリが作っていけるプラットフォームのPowerApps
や、その一部分扱いであるRPA的な所を担うPower Automate
などもちょっと調べたりしました。このへんのNo-Code、Low-Codeの分野もMicrosoftさんはいろいろ進めていますね。
あとこの頃は緊急事態宣言の後で保育園も休みで子供が家にいたため、そちらもけっこう大変だった思い出があります。
LCPを調べるおしごと
時々話題になるLCP(Low-Code Platform)
の有力製品のひとつを評価して、エンタープライズな大規模開発への適合度合いやうまく使っていく方法を探っていくおしごと。全部英語のチュートリアルをやったり、実物を動かしてアプリを作って課題を上げていったりしました。
この仕事も感情的には抵抗を感じて、モチベーションが下がるのを実感していました。本格的に動かしていくと制限がかなり多いこれで、開発を全部置き換えるつもりなのか? SIerは技術力がない・プログラミングができないなどの一部の誇張された悪評をさらに広めることにならないか? 海外のオフショアに代行してもらう心づもりだったようですが、現場の苦労をさらに増やすことにならないか? といったソフトウェアエンジニアとしての信条や良心、感情からくる抗いのような気持ちをかなり自覚しました。
調べたツールは技術スタック的にはサーバーサイドはJava
、フロントはGUIで画面を作っていくと内部でBootstrap
を持っていて構築、ユーザーと開発者に見えないところでNode.js
でビルドされてReact
コンポーネントが動いてスマホでもPCでも同じ画面が出るというものです。CRUDレベルのものは簡単に作れて、背後で自動的に対応するテーブルが専用RDBの中に作られます。このへんはスキャフォールディング機能があるRubyのRails, C#のASP.NET Core 3, PythonのDjangoなどとちょっと似てます。
なのですが分岐するバリデーションや独自ロジックなど、チュートリアルに書いてないような高度なことを埋め込もうとすると、途端に複雑になって手間がかかるようになり制限も出てきます。コードが書ける人ほどここ自分で書いた方が速いよね、となりそうな印象でした。まあ案の定というところ。
製品ではCitizen Developer
と定義してある非エンジニア層の現場担当の人が業務を改善したい簡単なアプリを作ったり、アジャイル開発でも見かけるような早期に画面だけのモックを作ってユーザに見せたりする用途には向いていると思います。逆に本格的な大規模開発には実は向いてないんじゃないかな?という感想を持ちました。
こうした、簡単なものならすぐ作れるが高度なものになってくると途端に大変になってくる、というのはへーしゃでよく飯の種になっているRPA関連のツール等でもだいたい同じです。
No-Code、Low-Code系の技術で「プログラミングなしで」とは「プログラミングはしないが、プログラミング以外の手段で同等の作業をする必要がある」ということなんですが、そのステップがすっぽ抜けて、「プログラミングなしで」→「何もしなくても魔法のように実現できちゃう!革命的!」と誇張され誤解されがちです。このへんは気を付けていく必要がありますね。
管理用のWebシステムを改良していくおしごと
将来ソリューションの売り物に進化させていく予定の、RDBにあるデータや他のツールと通信して取得したデータを表示、更新、他のツールへのリンクなど管理用の機能を集めたWebアプリケーションを作るおしごと。これもサーバーサイドは僕作成のPHP
のフレームワークをベースにし、クライアントサイドもFW的にラップした仕組みを使いながら作りました。
一旦は開発完了、その時は僕はコードレビューだけ参加だったのですが、チームが解散してWebアプリ部分はひとまず誰も触らなくなった後、拡張のためにもう一度入ることに。アーキテクト的な全体視点から標準に沿ってないところを直したり内部のバグを一緒に直したりお掃除したり、メニュー画面を綺麗にしたりFont Awesome
を入れてアイコンを出したり。プロジェクトに関わる面々も親しい面々だけだったので、新機能は詳細な設計書作成をスキップしてそのまま作っちゃったりしました。
フレームワーク側部分も改善したり、Excelダウンロードの新機能が突如ポップアップしたので今後のために完全に共通化して作ったり。Restful
なURLに一部対応できるように改良したり、いろいろやりました。
この頃はIDEは完全にVisual Studio Code
に移行してたんですが、せっかくなのでPHP系の主要な拡張機能も調べなおしました。その知見は以下のブログ記事でもアウトプットになっています。
その後故あって停止中なのですが、気にかかっている残件もあるのでまた再開したいですね。
伝統的なシステムの新機能にVue.jsを導入したおしごと
他の機能を持つWebアプリケーションに、リモートワークのご時世らしくメンバーの勤務の情報やらを管理する仕組みで生成されたデータを、手軽にブラウザから参照できる新機能を追加していくおしごと。こちらも今後売り物にしていく計画があります。
既存機能はかなり前に作ったとても伝統的なJava
アプリケーションでここも手を入れる必要がありました。僕自身もキャリアで一番多く触ったのはJavaなんですが、かなり久々にJavaおぢさんと化してEclipse
でガリガリやりました。struts-config.xmlを生で触ったのは何年振りだろう……
そしてネットで一般的なJava情報をぐぐると、プログラミングスクール系のいまいちなページが先頭にヒットするようになっていて、昔と変わってしまったなあと隔世の感があります。
サーバーサイドも試作レベルで改良すべき点はあったのでリファクタリングして機能追加がしやすいように改善、そしてサーバーサイドでHTMLの描画まで行う伝統的な仕組みだけでなく、RDBのデータにクエリを発行してJSON
を返すだけの軽い仕組みも共通化しました。ディレクトリ構成もいろいろ改良しましたね。
そして今回作る新機能分では、JSON色付け係と化したフロントエンドが仕事の大部分を行うアーキテクチャで開発。このぐらいだとReact
でもVue.js
でもだいたい同じものが作れますが、秋にVue3も出ることだし実績2件目ということでVue.js
を投入しました。
カレンダー部分はvuejs-datepicker
、検索結果のページングはvuejs-paginate
、いろんな種類のグラフを出す所は定番のライブラリChart.js
、CSSはド定番のBootstrap
という技術スタック、IDEは約束のVSCode。
結果、既存機能ではサーバーサイドのJavaがやっていた仕事の大部分がフロントエンドのJavaScriptがやるように移動、ユーザ操作に応じてその場で表示内容もぐにょーんと変わるUXを実現……というナウいモノができました。トラディショナルな技術とモダンな技術がひとつのアプリケーション内で温故知新の謎の融合を果たしたのであります。
Chart.js
を使うのは初めてだったのですが意外なぐらいすぐグラフが出ましたね。ブラウザ操作で表示内容が動的に変わるのは見栄えでもインパクトがあります。携わったメンバーに見せたらかなり好評でした。それまではデータ可視化ツールのTableau
で画面を作ってDBの中身を表やグラフにして閲覧していたのですがだいぶ制限があり、それよりもかなり見栄えが良くシュッと動く画面が作れました。
この仕事は案件の特性を踏まえて以下の構成でやりました。
- 既存アプリへの追加だったのでSPAはなし、普通に画面ごとに遷移
- 自分以外の慣れていないメンバがメンテすることも考慮して、まずはNode.jsビルドシステムも入れずに.jsファイルの直接読み込み
- 企業内の利用も考えてCDNも未使用
- コンポーネントを分割する必要がないので1画面=1Vueインスタンス
- データの集約もいらないのでVuexも未導入
- 処理の共通化はmix-inのような高度な機能を使わず、JavaScriptの純粋関数をライブラリ化して別ファイルで集約
- 絶滅しつつありますがIE11でもいちおう動くよう、泣く泣くコードは一部古い書き方で...笑
この構成でも十分実現でき、出来上がってみるとJSはけっこうなコード量になりました。必ずビルドが発生するReact
に比べると、ビルドシステム未導入でもこういう構成ができるという点ではVue.js
はやりやすいですね。
厳密な設計書は作らずに構想資料とメンバーとのチャットの対話から直接作ったり、自分自身もユーザー使いながらあった方がよいと思った機能は一緒に入れちゃったり、アジャイル的、サービス開発的なアプローチができたプロジェクトでもありました。こちらも作業は一時お休み中なのですが、また復活させたいですね。
常に掛け持ちでやっていたのですが、人をマネジメントする作業が入らなければ最大4つまで並行でやっていました。実際に手を動かす仕事だとこれぐらいが限界かなというところです。
ふりかえり&Problem&Wakattaこと、FunやLearn
コードの改善やリファクタリングを続けました
上に上げた通りですが、単に動くプログラムを書く人以上のソフトウェアアーキテクト的な視点から、今あるコードをより良くしていく作業はしっかりやれました。継続的に呼んでいる本から得た知見も役に立っています。2020年より前に読んだ本だと『レガシーコード改善ガイド』も役に立っています。
- 作者:マイケル・C・フェザーズ
- 発売日: 2016/01/15
- メディア: Kindle版
JavaScriptとVue.jsを実戦投入しました
2019年のふりかえりで小規模案件でもっとフロント技術を導入していこう……というのがあったのですが、丁度よいケースに恵まれたので完全新規にVue.js
投入2件目を達成しました。
ちなみにこのおしごとはVue.js v3に変えたら動くかなと秋に開発環境でこっそり試したのですが、ライブラリ側起因で動かなかったのでv2に戻してしばらくそっとしておいてあります(笑)
自動テストまで行きませんでした
ここも2019年と変わらず。処理を切り出したクラスを単体でテストしたりはしましたが、本格的なTDDやアプリケーション全体に渡っての自動テストのようなことはできませんでした。開発で携わった案件はチームメンバが何人もいるものでなく一人で完結する作業が多かったのと、どれも画面から動かした方が早いものだったというのもあります。
これはTDDの師として有名なt_wada先生のあのライオンのスタンドに怒られること必至であります。AAからJoJo風漫画に進化していてめでたい。
メイキングも記事になっていて拝見したのですが再現度がすごいです!
リモートワーク(テレワーク)にほぼ完全に移行しました
2020年4月の緊急事態宣言以降、弊社グループもリモートワークに移行しました。最初は混乱もあったしその後も試行錯誤しながらですが、続いています。僕も物理出社は月イチぐらいで、ほぼフルリモートな生活に移行できました。
定まった生活スタイルは以下の記事に書きました。そういえば環境整備でいろいろ自費で揃えたGearをいつか記事にしようと思ったまま、2020年に買ってよかったものシリーズの流れに乗る機運を逃しました。
家で作業すると今度は電気代が掛かったり椅子をはじめ環境整備が必要になってきて、在宅勤務手当を出す企業さんも増えてきました。
某Fさんは月5000円だったのでそれぐらい出るのかな~と淡く期待したところ、へーしゃグループは定期代支給は廃止になった割に手当の類はまだ特に出ておらず、そういうとこやぞ! 的なお気持ちになったりしています(笑
フルリモートへの気持ちが変わってきました
僕はAWS認定のSOA試験をなんとか突破する3月末、緊急事態宣言の直前までは、当時もプロジェクトを掛け持ちしていたこともあり、物理出社した方が作業効率いいんだよネ~と思っていました。(自分の中ではw)
当時ぽつぽつ在宅ワークを始めるメンバーもいましたが、最後まで物理出社していましたね。
なのですがいったん号令がかかってフルリモート態勢でコミュニケーションにも慣れて環境も整ってくると、もうずっとリモートでいいよね!と完全に気持ちが変わっています。2019年の振り返り記事を読み返したら
自分としては交通機関の乱れや家族の病気、休みの前や後の日などなど、時々やるぐらいで十分かなあという感じです。
と自分で書いていたのですが、もう完全に前言撤回であります。
また僕は人と会う機会が多い職種ではないですが、スーツでも特に仕事に支障はないし気持ちがシュッと引き締まるし、スーツ肯定派でした。夏のクールビズ以外はネクタイも基本的に締めています。スーツが似合う男性は女性から好印象という調査結果も出ています。(ソースは俺の嫁……)
なのですがリモートワークに慣れてくると、うんやっぱITエンジニアはもうラフな格好でいいよね、とこれまた完全に気持ちが変わっています。
このように、人間は環境が変わって慣れてくると気持ちは変わるものなのだなあ、と思った2020年でした。
効率的な作業を心がけました
僕は残業時間と給料が比例しない、残業手当が一定の裁量労働制の人なので定時+αの範囲内で効率的にやっていくようにしていますが、リモート環境下ではいっそう気を付けました。定時後に子供の保育園のお迎えという不動のタスクを置いているのが逆に効果がありましたね。
昔はみんなダラダラ残業して残業手当を稼いだり、無計画さやリスクへの鈍感さ、マネジメントの欠如を残業でなんとかする不味いやり方が跋扈していましたが、このへんは世の中が良い方向に向かってきて本当にありがたい。どんどん良くなっていってほしいものです。
AWS認定のアソシエイト級3冠を達成しました
2020年4月に東京で緊急事態宣言が発動される直前ギリギリでかなり危なかったのですが、『ソリューションアーキテクト - アソシエイト』『デベロッパー - アソシエイト』に続いて『SysOpsアドミニストレーター - アソシエイト』も2020年3月に突破、3冠達成しました。
iwasiman.hatenablog.com iwasiman.hatenablog.com
長いこと動き続けている社内システム周りでも最近一部をAWSに載せ変える話なんかを見聞きしたり、おーやっとエンプラ界隈でもクラウド化の流れがきたか~と思う2020年でした。
弊社グループはAWSパートナーネットワークの一員でもあるのですが、AWSJの人を招いた教育とか認定突破のための講座が最近出てきたりして、クラウドプラットフォームの中ではAWSに特に着目、認定取得者の数も増やしていく計画のようです。
その一方でAWS公式の教育はけっこう本格的なので、教育類は受けたものの資格合格までたどり着かない社員がまだまだけっこういる……という話も見聞きしたりします。
これ実際の開発や構築経験がない人はけっこう大変だよなあ、というのはAWSを学んだ時に僕も正直思いました。自分の場合は豊富といってよい開発経験があるからイメージが湧いて助けられたこともあるし、技術の変遷を楽しみながら学べたというのもあります。
そういう意味では会社の後発リソースに頼りすぎず、ほぼ自走で先行して3冠まで登れた自分は頑張れた方だったのかな、と振り返って思います。
でも実務でAWSを使えませんでした(ギヤー
ハイ、その通りであります。うちはクラウド専門の事業部ではないし、僕も幾つもプロジェクトを掛け持ちしているしタイミングその他諸々もあるしCOVID-19で色々あるし、しばらくは仕方ないですね。個人アカウントで色々作ってみたりしてる方も多いと思いますが、子育てエンジニアにはその余裕がないのであります。
認定の合格記録や資格対策本記事にはかなりアクセスを頂いているので、なんだか申し訳ない気持ちもあります。バリバリAWSを使っている方のブログなんかをウラヤマシス...羨ましいからワイのはてなスターを食らえピシピシ!と思いながらいつも拝見しています。
社内イベントを覗いたりしました
社内でもTeamsの活用が一般化して、コミュニティの様子が分かりやすくなりました。会社が大きいので目立たないだけで、クラウドに超詳しい人とかアジャイルが好きな人、DXに取り組もうとしている人、OSSにコミットしてたり新技術に感度が高い人、熱量の高い人、ブログやNoteをやっている人、広い社内にはもちろんいるわけですね。時々オンラインで聴講できるイベントを覗いたりしています。
オンラインのコミュニケーションをなんとか保ちました
所属部署のTeamsでも雑談チャネルがあって程よくゆるくやっていますし、朝会も毎日継続しています。勉強会というほどの規模ではないですが情報共有の機会には僕もAWSの話をしたり、朝会で時々技術ネタを話したりしました。部署の新人氏も2年目に入るし、若手サポートも機会があればしていきたいところ。
またこんなご時世ですが、新入社員諸氏も事業部に配属されてきました。発表会を僕も見たのですが、新人研修もだいたいリモートの中でなんとかやってきてるのですね。顧みると自分はリモートだったら成長できなさそうな自信が100%あるので、withコロナ世代は頑張ってるなあと思います。
オンラインで新入社員顔合わせの催しがあって、各グループや人ごとに軽い紹介の資料を作ったりして話をしました。僕も自己紹介資料を作って話しました。
仕事以外の趣味の話で「僕けっこうオタクなんでアニメとか漫画もけっこういけますよ」と事前に軽くジャブを放ったところ、新人氏が安心してカミングアウト。そこへ同席したメンバーが鬼滅ファンであることを熱烈にカミングアウトして盛り上がる……という、ゆかいな流れがありました。やっぱり仕事以外の雑談って大事ですね。
変化の様子をWatchしました
2019年に引き続き2020年も、へーしゃと弊グループは今後の時代への対応を見据えて変化に対応しようと動きが進んでいます。なんとか全社でCOVID-19にも対応しリモートワークへ移行、制度の整備、人事、働き方や意識の改革、単なるシステムインテグレーションからサービス型の開発へなどなどなど。
ここも2019年と同じなのですが、普段から自助努力を重ねて情報収集も行っている自分からすればやっとエンプラ世界も変わり始めたかい、先進的な若い企業を追えるようにどんどんやってくれ!という気持ちもあります。
同時に社内で今まで見てきた沢山の人の中には時折いる、変化に追随できなさそうな人や何のスキルがあるのかよくわからない人たち、大企業特有の人々は今後どうなるのかな?という気持ちもあります。引き続き観察し、身近な変化は受け入れていきたいところです。
まとめ:力を蓄えつつコロナ禍をなんとかやってきた1年
なんといってもまずはリモートワークに対応して家族含め無事生存。このご時世で仕事が一時的に空いちゃった人もいる中でも、ほぼ仕事には困らずに2020年も色々やってきました。
Low-Code系の技術にはまだ懐疑的な感触を持っていますが、アーキテクト的な立場に基づいて引き続き技術力をメイン武器として活動することができました。将来的に比重が高まりそうなサービス寄りの開発ができたのもよかったですね。2021年も自分をアップデートし続けながらエンジニアとしてサバイブ、その前に人間としてサバイブしていこうと思います。
皆様にも2021年が良い年でありますように……
つづくよ