2018年の振り返り、そして2019年の抱負を綴るには少し出遅れてしまった感が否めないが、better late than never ということで書いていく。
2018年の振り返り
1月 ~ 2月
GASで社内業務の効率化してた。
いわゆる6分の壁を乗り越えるための time-driven-trigger に苦戦していた記憶がある。
kido0617.github.io
また、Node.js/Express/GCP/OAuth2.0 辺りの勉強も兼ねて、GASで行なっていた一連の処理をWebアプリにリプレイスする業務も行なっていた。 その頃は、それぞれの要素がシステム全体でどのような役割を担っているかも正確に把握出来ていなく、雲を掴むような感覚でコードを書いていた気がする。
あとは、TypeScriptとかAWSの勉強させてもらったり。
3月 ~ 5月
別の現場に異動して、kintoneで地図プラグイン・アプリ開発してた。
gitの使い方とかREST APIの基本的な考え方とかJSのPromiseとか、最初の1ヶ月は非常に学びが多かった。
US圏向けのジオコーディングAPIの調査をやらせてもらったおかげか、ここで英語ドキュメントへの耐性がついた気がする。
そのチームはテストコードを書く文化が無く、E2Eテストで品質を担保するような運用だった。 後半の方は毎週本番環境にリリースを行っていたため、その度にdev環境と本番環境に対して手動でE2Eテストを行なっていたが、それが辛かった。
試験項目が多いため、どうしてもテスト工数が多くなってしまい、仕様変更やバグ修正が追いつかなくなってきてしまう。 よって必然的に残業時間が増えてしまっていた。
ここでテスト自動化の重要性を理解した。
6月 ~ 7月
何でも屋さんの時期。
Go/Revelでミニマムな出欠管理アプリ開発を開発したり、Javaシステムの動作検証・デバッグの手伝いをしたりしていた。
この時期は1つのことに集中できないために悶々としていたが、この時期のおかげでGo/Javaの文法やオブジェクト指向プログラミングの考え方について理解することが出来たため、意外と良い経験になっているかもしれない。
OOPを学ぶ過程でデザインパターンも勉強したのだが、既に頭の中で風化しつつあるのでよろしくない。
オブジェクト指向の勉強にはこの書籍を用いて勉強した。少し古い本だが、オブジェクト思考の概念を理解するには良い書籍だったように感じる。
なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング
また、6月に21歳の誕生日を迎えたため、こんな記事も書いていた。
業務ではプレーンのJSとjQueryしか触っていなくて、 モダンな環境で開発がしたいという気持ちが非常に強い。切実に。
現時点では アーキテクチャ・APIの設計 とか パフォーマンスの改善 を将来的にはやってみたい。 しかし元々フロントエンドに憧れていたので、SPAの実装とかにも興味あるし...といった感じで定まらない。
モダンなフロント開発をしたい欲に満ち溢れている様子が見て取れる。
8月
8月はファイル共有システムのデモを開発していた。念願のSPA開発だ。
Vue.js/Bulma でのフロントエンドをメインに担当していたが、API Gateway/LambdaでのAPI・サーバーサイドの開発や、Serverless frameworkを用いたデプロイ環境構築など、AWS周りにも横断的に携わっていた。
この時期はかなり能動的に動ける環境だった、ありがたいことにフロントエンドの技術選定から任せていただいた。
JS/CSSフレームワークは、波が来てそうなVue.jsと相性が良さそうなBulmaをチョイスした。
Vue.jsは本当に使いやすく日本語ドキュメントも充実しているため、人気が出るのも納得した。
Vue CLIによるDeveloper Experienceも素晴らしく、スピード感が求められるデモ開発では非常に助かった。
丁度Vue CLI 3.0が出たタイミングだったので記事も書いた。Vue CLI UIの体験が良すぎて、びびった。
9月上旬
社内でミニマムな採用試験アプリの開発していた。
ここでは、俗に言うMERNスタック(MongoDB/Express/React/Node.js) で開発を行なった。
Reactに触れるのはほぼ初めてだったが、Vue.jsでの開発経験があったため、スムーズに開発を行うことができた。
少人数だったが、自分以外フロントエンドの開発経験が無い人だったため、設計も担当することになった。 Atomic Designを推進したが、開発者毎のイメージの違いやレベル感の差異、用意されていた開発期間の短さから、結局コンポーネント毎の粒度にばらつきが出てしまった。
設計、チームでの意思統一の難しさを実感することができ、良い経験になった。
9月下旬 ~ 11月
某仮想通貨取引所のフロントエンド開発をしていた。
この現場は TypeScript/React/Redux/redux-thunk/ImmutableJS/LESS/gRPC/WebSocket とモダンな開発環境で楽しかった。 また、問題提起に対して積極的に議論し共有する風潮があったため、様々な課題がみるみる内に改善されていく様は初めての体験で驚いた。
ただ、以下の事柄が暗黙知となってしまっており、書く人によってコードの書き方にバラツキが出たり新規参画者のキャッチアップが大変になってしまっていた。
- Atomic Designを参考にしたコンポーネント設計
- コーディングスタイル
- propsの渡し方やPureComponentの使用などについて
これを解決するために、フロント周りの開発ルールをWikiに書き起こし、明文化する活動も行なっていた。
また、フロントエンドの設計にも携わらせていただいた。Reduxあるあるだと思うが、特にローディング周りの設計に苦労した。
各非同期処理の前後に HOGE_REQUEST/HOGE_SUCCESS/HOGE_FAILURE
を書き、その中で isLoading
を切り替える実装は負債になり得る可能性が非常に高いと感じたため、以下の記事を参考に実装を行なった。
結果として HOGE_REQUEST/HOGE_DONE
というアクション名をキーに、isLoading
のstateを切り替える実装にした。
ここら辺については別途、記事として書きたい。
悲しいかな、再び短期間で異動となってしまったが、ここでの開発から得た学びは非常に大きかった。
12月
現在進行形で採用管理アプリの開発をフロントエンドからサーバーサイドまで担当している。
- フロント: RxJS
- BFF: Node.js/Express
- API: Go/Echo
DIやTable Driven Testなど概念は理解できているが実装はしたことがない、といった事柄がたくさんあるので全て吸収していければと思う。
そしてRxJSは難しい...。
2018年は幅広い技術に触れることができ、広く浅くの年だった。
2019年の抱負
2019年は「基礎力」をテーマに勉強を進めていきたいと考えている。
特に下記の事柄の「基礎力」だ。
- コンピュータサイエンス
- 英語力
- 文章力
これらはエンジニアとして生きていく上で、風化しにくく価値が変わりにくいものだと自分は考えている。
コンピュータサイエンス(CS)
自分はCSのバックグラウンドが無い為、必ずどこかで勉強しなくてはいけない運命なのだ。
とりあえず年末年始の時間を使って下記の本を読んでいる。計算・アルゴリズム・データ構造・P=NP問題 などの概念を、有名な物語に紐づけて解説している書籍でとっつきやすくオススメ。
ワンス・アポン・アン・アルゴリズム: 物語で読み解く計算 Martin Erwig
また、競技プログラミングにも興味が出てきた。AtCoderのBeginner向けの問題をやってみたら結構楽しかったので、コンテストにも参加してみたい。
英語力
よく大事って言われるけど、学習が続かないランキング第一位。(俺調べ)
これに関しては、半年前から通勤中に iKnow というアプリで学習を進めている。
継続的に iKnow での学習を進めつつ、3月頃にTOEICも受ける予定なのでそれに向けての対策もやっていきたい。
文章力
これについては最近まであまり意識していなかったが、ドキュメントを書いたりSlackでのコミュニケーションなど文章力が必要になる機会は非常に多いことに気づいた。
TOEICが終わった頃に一冊本などを読んで基礎から学び直したい。
2019年は基礎力を高め、変化に強いエンジニアを目指そう。