hiroaki's blog

技術系を中心に気になったこととかいろいろと。

2018 年振り返りと 2019 年の目標

しばらくブログも更新していなかったが、平成最後の年末年始ということで振り返りの記事を書いてみたいと思う。結構あっさり書けるかなーと思ってたら、意外と言いたいことがたくさんあって長文になってしまった...。(記事の後半はちょっとバテ気味...)

人生の残り時間もどんどん減っていくし、無駄なことをやってる時間もないし、せっかくの人生だから 2019 年も新しいこととか面白いとかどんどんチャレンジしていきたいと思う。

2018 年の振り返り

仕事全般

仕事面で一番大きかったのは部署を異動したことだと思う。

今までは大規模転職支援サービスのフロントエンドチームのリーダーとして主にテクニカルディレクター的なことをやっていた。期間的には 3 年くらいになるのでキャリア的にも結構長い部類だと思う。とはいえ参画当初からテクニカルディレクターだったわけではなく、最初はコーダーとして参戦していたので、フロントエンドの開発からリーダー業務まで幅広く経験することができた。

大規模なサービスなので、当然ステークホルダーも多くなるし、その中でどれだけ技術的なチャレンジとか安定性を出していけるかというのはそれはそれでとても面白かった。なによりも「みんなが知ってるあのサービスのフロントエンドを任されている」というプレッシャーや責任感みたいなのもあって、個人的にはめちゃくちゃ成長できたと感じている。

一方、テクニカルディレクター業務がメインになってくるにつれてコードを書く時間がどんどんと減っていった。もともと今の会社に転職した理由が「コードを書きたい!」という要望だったので、途中から「これでいいんだっけ?」と思うようになってきた。

そんな感じでキャリアに悩んでいるときに、別の部署にいた同僚から声をかけてもらえたこともあって、コードが書ける今の部署に異動することができた。ポジションとしてはプロジェクトリーダーという肩書ではあるが、自らがコードを書いてメンバーを引っ張っていくというなかなか大変だけど面白そうなことをやらせてもらっている。その結果、今まで触っていなかった技術を大量に学ぶことができてエンジニアとしては非常に成長できた 1 年だったと思う。

エンジニアスキル

  • React / Redux

React / Redux をガッツリ使用して SPA なサイトを作成していた。個人的にはやっぱりフロントエンドが好きなんだなーと。技術の移り変わりが速いとか言語仕様があまりイケてないみたいなことも言われるが、やっぱりユーザーがブラウザで直接触れるところを作れるのは魅力的だと思う。

実際に運用していく上では、設計思想やパフォーマンスの観点を最初からある程度理解しておかないと、リリース後のエンハンス開発がキツくなると思った。

設計思想については Atomic Design をベースに Stateless Fuctional Component で HOC で設計する方針でやっていた。コンポーネントを作成する際に、スコープがコンポーネントに閉じるからといって全体を俯瞰してみたときのロジックの最適化を意識しなかったり、CSS 設計の優先度を落とす(理解しないまま進める)のはメンテナンス性を著しく下げることにつながってしまう。

CSS に関してはスコープ内だからと言って命名規則とかをサボったりすると全く意味のわからない CSS が出来上がるし、設計思想が異なるコンポーネントを結合したときに途端にレイアウトが破綻する。コンポーネント分割に関してもセマンティックや命名規則など、通常の Web サイト構築時に意識するところを同時に考えないと、適切なコンポーネント分割を考えられないと思う。結局基礎が大事なんだなーと。

また、パフォーマンスについてもコンポーネントレンダリングロジックや、State の更新によるレンダリングスコープをちゃんと理解していないといけない。パフォーマンスを意識することでも、コンポーネントが肥大化してしまったり、ロジックと View の分割がキレイにできなかったり、といったアンチパターンを防ぐことにもつながると思う。

  • Kotlin / Spring boot

SPA のバックエンド API に Kotlin と Spring boot を使っていた。今まではバックエンドは PHP とか Ruby とかばかりやってたので、Kotlin や Java、Spring boot でのガッツリとした開発という意味ではほぼ初めてに近かった。

なんとなく今までは Java は書きにくいイメージがあったのだが Kotlin はこのあたりは気にならずにスラスラと書くことができた。その裏返しではあるが、自由にかけることでどんなふうにでも書けてしまい何がベストな書き方なのかを考えるのが難しかった。(let, run, apply, also といったスコープ関数など)全体的には非常に書きやすい言語なので、今後も積極的に使っていきたいと思う。

あと Spring boot はもっと勉強しなければ...。デザインパターンも大事...。

  • AWS(ECS / ECR)

開発も商用サービスもすべてコンテナをベースにして対応した。一度このスタイルに慣れてしまうと仮想サーバーでの開発にも戻れないくらい便利に開発業務ができる。商用環境に関しても、既にステージング環境で動作確認ができているコンテナをデプロイするだけなので、リリース時のストレスなども軽減できていると思う。

通常フローでは問題なく運用が回ってはいるが、ちょっといレギューラーな対応をしたい場合の手順が確立できていないので、今年はそのあたりをキレイにしていこうと思う。(ECS タスクのビジョン管理とかリリースターゲットの管理など。)

  • Embulk / DigDag

分析基盤へのデータ連携や、サイトのデータ移行で Embulk と Digdag を使った。率直な感想としてはめちゃくちゃ楽にデータを移行することができるという一言に尽きる。インプット/アウトプットのアダプターも豊富だし、自分で移行スクリプトとかを書かなくてもいい感じにデータを取り込んで整形してアウトプットしてくれる。

ただ、Bulk 処理ということでスレッド管理に気をつけないと意図しないシーケンシャルデータができてしまったり、複数の Embulk 処理をまたいで変数を渡すときにファイルや環境変数を駆使しないといけなかったりとちょっとハマりポイントがあるのでそこだけは要注意。

ビジネススキル

  • オフショアマネジメント

異動前の部署から引き続き、今の部署でもオフショアで海外のエンジニアと一緒に仕事をしている。オフショアマネジメントに関しては 3 年くらいやっていたのである程度はこなせると思っているが、今の部署では更にそれを進化させて裁量をもたせるような取り組みを実施している。

まだ途中ではあるが、通常のオフショアではあまり任されないような上流工程も任されるので海外のエンジニアもモチベーション高く仕事に取り組んでいると思うし、うまくいけば今までにないような日本と一体感のあるチームが出来上がるかもしれない。

  • チームマネジメント

これは今までやっていたテクニカルディレクターの延長として引き続き対応している。ポジションとしてはプロジェクトリーダーなので今までよりも高い視座をもって考えるように心がけている。リーダーとして重要なことはめちゃくちゃいっぱいあってこれだけでも記事がいくつか書けると思うのだが、個人的には、メンバーに納得感を持って対応してもらうこと、メンバーが自分の成長につながるイメージを持ってもらうこと、を意識することが結果的に良いチーム作りにつながるのではないかと考えている。

プライベート

  • Sequelize (ORM for Node.js)

ちょっとプロトタイプを作ろうという機会があったので Sequelize を使って MySQL とやり取りをする API サーバーみたいなものを作ってみた。ActiveRecord みたいな感じでデータの関連性を定義してデータを持ってこれるので結構簡単に実装はできた。 結局実践で使うことはなかったが、何かいいタイミングがあったら検討してみたいと思う。

とあるサービスのお手伝いで Ruby on Rails を触っている。Ruby 自体は Sinatra ベースでサービスを作ったことはあったが、Rails は今回が初めて。やはり The Rails Way というか、Rails のお作法を理解するまでは思ったようなコーディングスピードが出なかった。確かに楽には書けるのだが、詳細を理解していないので「なんでこうなるんだっけ?」といった立ち止まりが結構発生した。徐々に慣れてはきたのでもっと効率よく開発できるようにしていきたい。

2019 年にやりたいこと

  • フロントエンドスキルの向上

やっぱりフロントエンドは好きなので、新しいトレンドなどをキャッチアップしつつ、実践でもどんどん活用していきたい。しばらくは React と Vue.js が中心になると思うのでそれぞれの最新動向を掴みつつ、実際の業務へ展開していきたい。

  • 新しい言語を使えるようにする

1 年につき 1 つは新しい言語に挑戦するようにしていく。書くこと自体はすぐにできると思うが、運用を見越して展開していくとなるとそれなりのスコープを理解しないといけないので、あえて「使えるように」という言い方をしている。今のところの候補は Go あたり。

  • 新しい分野の勉強をする

同じ分野のことばかり勉強してても業界全体で見たときのスコープが広がっていないのでそこをあえて広げにいく。機械学習まわりは基礎的な知識は理解できるようにしておきたい。

  • アウトプットを増やす

今書いているブログもそうだが、外部へ公開することによって自分の知識もより深く理解することができるようになると思う。理解した技術は定期的にブログに記事を書いて自分の理解を深めていくことにつなげる。

まとめ

とにかくエンジニアとしては立ち止まらずに、いろんな知識をインプット / アウトプットし続けていきたいと思う。そのためには今年も覚悟をもって自分を追い込んでいきたい。