最近ブログが書けていなかったわけですが。転職していろいろと忙しくしております。
転職で何が変わったのか、というお話をしてみます。なお、転職前の記事は以下の通りで、記事中に書いた会社に所属しています。
業務内容
自社事業のWebサイトの運営を行っています。社内に事業は複数あります。私の役割は、実質的に一つの事業に関する開発リーダーみたいな感じです。入社してから二週間で、サイトのリリース可否を判定する立場になりました。早い。
チームメンバーは私ともう一人(2年目社員)なので、かなり小規模なチームです。
一応、リーダーに当たる人がいて、その下についていることになっています。リーダーは別の事業の業務を主に行っているので、分業している感じです。
言語とか
採用しているプログラミング言語とかはこんな感じです。
サーバーサイド
全社的にScala
を採用しています。データベースはMySQL
です。AWSのECSを採用しており、サイトリリース時はコンテナに固めてアップロードするだけで動く環境が整えられています。というか、リリースはコマンド打つとできちゃいます。すごい。
クライアントサイド
フレームワークとしてPlay Framework
を採用しており、完全にサーバーサイド専用、つまりWebAPIとして使う場合もあれば、フロントまでカバーする場合もあります。どこまでフレームワークに乗っかるか、に関しては、事業要求に応じて異なります。
私が携わっている事業は、ほぼWebのみで完結するため、フロントまでカバーする形でPlay Frameworkを使用しています。動的な動作が必要な場合はAngular
を使用しており、部分的にAngular Elements
によるCustom Elementを使用しています。
その他、事業によっては、クライアントサイド全体がAngular
で動いているものもあります。また、AndroidやiOSアプリをリリースしている事業では、Kotlin
やSwift
を使用します。
開発環境
Macです。ターミナルは扱えて当然と言われます。というか言われました。最近ようやくtmux
を使い始めました。便利。
結果として
社内の開発メンバーの公用言語は
となっています。
入社してからのこれまで
入社前
上に社内公用言語上げましたが、入社時の私のレベルはこんな感じです。
入社一か月ぐらい
まず、プロダクトで動いているScalaのコードに全くついていけませんでした。感想は
いつぶりだろう。ソースコードが全く読めねぇって気持ちになったの
でした。かなり綺麗に書かれているのに、どうしてそれでコンパイル通って動くのか分からない。自分で同じように書いたら動かない、というのを繰り返しました。入社一週間はそれで潰れました*1。
そして、実際のWebシステムのCSSに引きました。ファイル数多くね?という感じで。あと思った通りのデザインにならなくてしんどい思いがいっぱいでした。
さらには、入社3週間ぐらいでリーダーから
できればこの事業(私が今担当している事業)のタスク管理をお願いしたい
という話になり*2。
とにかく、入社しての一か月は必死でした。
一言で言うなら、打ち砕かれました。今まで何やってきたんだ…ここまで自分の能力が活きないとは…という感じです。
GWが過ぎて
こんな状況だったので、GWで気持ちをリセットできたのは大きかったです。
とにかく落ち着いて、基礎からScalaを学び直す。その上でプロダクトで使っているようなライブラリを自分で使ってみて、どういう動きをしているのか知る。CSSを自分で書いてみる。Webの基礎知識がまるで足りていないので入門からやり直す。
そして、ゆっくり休養を取って、ゆとりを持つ。
これを心がけて過ごしました。そして業務では
- 当面は目の前の問題を片付ける方向で動く
- わからんもんはわからん、と割り切る(分からないまま続けてもしょうがない。後から勉強して学んだり、質問したり、社内の他プロダクトを参考にする)
- 週一で何かリリースする
- 実装時間が短く効果が大きそうなタスクから着手していく
というのを自分に言い聞かせて進みました。
これにはプロダクトの都合もありつつ、私の「小さなことをいろいろやっていたら、言語の勉強しつつ事業やシステムについて理解が深まっていくはずだ」という打算があります。
事実、状況把握や機能分析を通じて、全体理解が深まりました。Scala自体の理解もなんとかなってきて、DIどうやるんだろう、とか調べられるようになりました。(試した記事を貼る)
最近
「実装時間が短く効果が大きそうなタスク」から着手した結果、大きな機能追加に着手できる状況になってきたので、そういうものを選んで搭載することを行い始めました。
WebそのものやScalaにもだいぶ慣れてきて、実装スピードが上がったと実感しています。一方、自分が過去に作ったもので、これ良くなかったな…と思うものもそれなりに出ています。それに気づけただけよかったと思い、今はプルリクのレビュー等でその知見を活用しています。
また、社内のエンジニアと「この部分の作り、全プロダクトでほぼ同じになっているけど扱いづらい」みたいな話ができるようになってきました。実際に試す動きが出ており、自分でも作ってみようと思っているところです。
そして、Scalaに慣れてきて、だいぶいい感じだなと思い始めた矢先、急にAngularをやることになりました。また勉強し直しです。現在業務やりつつ、業務外でも勉強しながら必死に習得しています。
タスク管理も相変わらず行っています。上の人のアドバイスをもらいつつですが、なんとかなっていると感じています。
転職して思ったこと
さっさと転職しておけばよかった
これに尽きます。
新しいことを学ぶ刺激がとても大きく、そして楽しいです。
慣れている世界で戦うのは可能ですが、単に能力を消費している感じがしてしまいます。新しいことを学び、取り入れていくのは独学でもできますが、やはり活用してこそ学びが得られますし、学ばなければ仕事にならないという状況は成長にもつながります。
世の中にはすごい人がいる
前職があれだったので、多少天狗になっていましたが、この人すごいと思える人が今の会社にいっぱいいます。会社の開発基盤を整えてきた人、インフラ周りを一手に引き受ける人、あらゆる領域に強い人などなど。
そういう人が身近にいて、学べる機会があるのがうれしいです。
事業に参画している感覚が強い
プロダクトの開発リーダーみたいな立場で、事業の方向性に応じてプロダクトをどういう方向性に持っていくのか考えたり、今何を開発すべきか考えるのが楽しいです。
もっとも、今は作ったものが役立っているとは言い難い状況です。自分から打ち手が提案できていないと感じる部分もありますし、まだまだ私は未熟だと考えています。
それでも、私の役割は事業の方向性に応じてプロダクトを柔軟に変更できるようにすることだと思っています。現状は課題が山積みだと認識したので、それをどうにかして制御できる状態に持っていくことが、私の役割と考えています。事業そのものがなくなるとどうしようもないのですが…
今やっていること
目下やろうとしているのは、全社的に単体テストがあまり活用されていない印象を受けたので、Angularのテストを活用できないか試しています。
今のプロダクトに付随して、Angularでツールを作る必要があるので、試しながら進めている最中です。
おわりに
なんか書き忘れている感じがありますが、勢いで記事書きました。
Scala勉強して、理解したと思ったらタスク管理や事業理解を行い、それもだいぶこなせてきたらAngularと、とにかく目が回るような日々が続いています。ただプログラム書いていればいいというのではなく、AWSのこの機能使うなどの決定も、いずれはできるようにならないといけないので、勉強することが非常に多いです。
忙しいですが、それでも間違いなく前職と比べたら充実しています。
自分ってこんなにできなかったっけ…?と思う気持ちもありますが、一方で設計技術はなかなか高い水準にあるという自負も生まれてきました。
人それぞれ得意なことを活用すればいい、ということも、転職で学んだことの一つです。
転職した後の記事はあまり見かけないので、この記事が誰かの一助にでもなれば幸いです。