独学大学情報学部

ただのノート。主にプログラミング。

転職して二ヶ月くらい経った

ご無沙汰しています。数年ぶりの生存報告(?)です。 ちょっとふわっとした内容ですが、せっかくなので近況とか(もう3月なのに)今年の抱負?とか残しておこうと思います。

ブログは2019年末を最後に全く更新していなかったですが、適当に振り返ってみると Lens の次は継続モナドや Tagless-final に夢中になったり、 チーム開発で技術的負債と向き合ったりしていてまぁ相変わらずだなぁという感じでした。この辺りの話も完全にタイミング逃してしまったのですが、 そのうち気が向いたタイミングで何か書けるといいですね。いつかは...。

プライベートだとかれこれ5年以上住んでいた都内の狭小ワンルーム賃貸マンションを引き払って地元の茨城県に帰ってきました。 窓を開けていても木々のざわめきや鳥の囀り、時折バイクのエンジンふかしてる音くらいしかしないので至って静かと言っても過言ではないでしょう。 しかし歩いてコンビニにはギリ行けますが、完全に車社会なのでふらっと飲みにはいけないしそもそも最寄駅周辺に良さげな Bar も まともな本屋もないのでストレス発散に目的もなく外出したくなる人間にとっては少々物足りなさを感じていたりもします。 まぁ、どちらにせよ現在の感染症状況的には家から出ない生活一択なのですが。

そんなこんなで適当に過ごしていましたが昨年末に退職してました。 職は変わりましたが引き続き茨城からリモートで Scala 書くお仕事を頑張っています。

アルプ株式会社に入社しました

f:id:Aoino:20220301125948j:plain

年明けの1月4日からアルプ株式会社にてお世話になっています。

2018年の創業で、近年お馴染みのサブスクリプションの契約や請求(not 請求書)管理をする SaaS、Scalebase を提供する企業です。 エンジニア界隈的な話題だと Scala で Eff めっちゃ使ってたり ScalaMatsuri の大名スポンサーに名を連ねていたり。 ビジネス面では約一ヶ月ほど前に12.5億円もの資金調達を行うなど、今とても勢いのあるベンチャー企業です。

prtimes.jp

どんなお仕事しているの?

サブスクリプション関連のコンテキストの設計やドメインレイヤーのコードを改修してたりします。

転職してやりたいことの一つに、複雑なドメイン知識の理解とそれを踏まえての設計から開発に携わりたいというのがありました。 とりあえず一ヶ月程度は全くわからん!!と嘆くことが多かった会計というか売上や請求あたりの知識とそれをベースにした実装などなどですが、 二ヶ月もぼちぼち経過していくつかの機能実装や各種ミーティング、社内勉強会に参加を通して業務知識のスタートラインに立てたような気はします。

ここ数年考えてることではありますが、例に漏れず理解が浅かろうが深かろうが機能として実装に落とし込むのは自分のメインの業務であり、 自身がユーザーではなかったとしても背景や課題感に理解(自分の中で腑に落ちている状態)でなければそもそもドメインエキスパートと深い議論をすることも実装に落とし込むことも叶わなかったり、 例え動くものが作れたとしても真にユーザーに使われるような機能として完成させるのが難しくなってしまうなぁと再認識したり。

相変わらずバックエンドで Scala を書いてはいますが、これまでの toB, toC で非機能要件突き詰めるような開発とはまた違った領域の実装をやっている感じです。楽しいね!

エンジニアリングに関して

大半のメンバーが設計談義が大好きなので雑談でもモデリング会でも議論が始まれば Entity なのか VO なのか、はたまたドメインモデルとして作るべきか否か、 仮にそうだとした場合に既存のモデルとの食い合わせは果たしてメンテ可能かどうかなどなどひたすら話が尽きないという、なかなかに楽しい時間を過ごすことができます。

alpinc.notion.site

そんなバックエンドですが、システム全体としては Kubernetes (EKS)の上で大半のアプリケーションが動いていて構成は Terraform で管理されています。CI/CD は Circle CI と Jenkins が併用されていて、裏方作業関連の便利バッチ/ツールなんかもここに集約されています。バックエンドアプリケーションはほぼ全て Scala で実装されていて、 Akka Http がベースの Web アプリケーションや Spark を使ったバッチなんかも存在しており、それぞれのコンテキスト単位でいわゆる Clean Architecture で構成されていて、 それらを束ねて一つのモジュラモノリスを成しています。そして全体を通してEffが積極的に使われています。

Eff に関しては業務アプリケーションでの実用経験はありませんでしたが、Tagless-final と比べて Monad の型クラス制約をかけずとも for 式で合成できるのはもちろん、 ADT を組み立ててそれをインタープリタで実行するといったプログラムと実行の分離が自然と実現されるので、ドメイン層からインフラ層(アダプター層)まで 通して使いやすく感じました*1。 そして、単に使う分には処理を for 式で組み立てて既に提供されているインタープリタ(runFooメソッド)を実行する程度なので、Eff 自体に精通している必要もあまりなくチーム内でのスキル差をうまく吸収でき、 近年の Scala でのアプリケーション開発における(副)作用の扱いどうするか課題における一つの解決策としてとてもアリだなぁと思っている今日この頃です。

そんな Eff の話題も含めて今週末3/4(金)開催のイベントや ScalaMatsuri 2022 のメインセッション登壇など、 社内エンジニアの積極的な情報発信/アウトプットが行われているのもとてもいい文化だなと思ったり。 (宣伝)

alp.connpass.com

f:id:Aoino:20220301010120j:plain https://scalamatsuri.org/ja/proposals/J1647668100

オーバーコミュニケーションの組織と文化

サービス自体やシステムの面白さに惹かれた部分ももちろんありますが、 Biz, Dev 問わず一緒に働くことになる方々を特に魅力的に感じた、という人的な部分もまた大きいです。

全社的に Notion と Slack に情報を集約していて、エンジニアも商談や顧客定例議事録を見たり利用状況やら把握して顧客社名で会話するし、 カスタマーサクセスのメンバーも内部仕様めっちゃ詳しいし SQL ばんばん書きます。こうした部署間の密なコミュニケーションが もはや当たり前に行われている状況はなかなか驚きでした。実際やろうとしてもなかなか難しいですよこれ。 自分が直接お客さんとお話しすることはほとんどないにしても、近いと錯覚するくらいには情報共有が上手く回っているように思います。

当事者意識とコミュニケーションが大切!なんてのは文章にしてしまえばなんて事ない当たり前の話になってしまいますが、 実際一緒に仕事をしていて各々担当している領域 + αに対するラストマンシップ具合もまた飛び抜けてるようにも思います。 もちろん個人的なこれまでの人生の狭い観測範囲でしかないですが、正直なところ何がどうなってこんな面白い文化が醸成されるんだ?と不思議に思ってたりもします。 もちろん褒めです。

ある意味このようなハイコンテキストなコミュニケーションが成立するのは今の人数だけかもしれないし組織が拡大するにつれて綻びが生じるのではないかという懸念もないわけではないですが、 現状の環境を作り上げることができているメンバーならば何だかんだで乗り越えられるのはもちろん、 変化自体が今のフェーズならではの楽しみとさえ思えてしまうかもしれません。そんな強い組織と文化な現状がとても楽しいです。

まとめ

といった具合で近況やら所感やら宣伝やらをだらだら書き連ねましたが、 社内に凄いメンバーが揃っていて負けたくない(?)し、ドメインやら業界商習慣やらの勉強もしつつ リファクタリングやら新機能の設計& 実装やらも担当したりで(自分の中では)大忙しだったりしますが、 とても充実してるしテンション高めでやっているぞ〜〜〜という生存報告でした。

というわけでビジネス的にもシステム開発的にも今めちゃくちゃ面白いフェーズなので興味のある人カジュアルにお話でもしませんか?

meety.net

という定番セリフで締めておきます。今度こそは定期的にブログ更新できる年にしたい...。

(´-`).。oO(早く気兼ねなく飲みに行ける出社できるようになるといいですね。


*1:Eff をドメイン層に出したくないとか、生産性の観点で高機能 IO 型をドメイン層でも使うのを許容したりなど、諸説あると思うのであくまで個人的な感覚といったところ。