見出し画像

TieUpsで一年働いてみて感じたこと+やってみたこと

こんにちは、TieUps株式会社(以下TieUps)でエンジニアをしている ohayoukenchan です。
働き初めて1年経つので、今回は働いてみて感じたことや、こうしたほうがいいかなと思ってやってみたことを中心にお伝えできればと思っています。

どんなissueでもとっていい職場

自分は当初iOSエンジニアとして入社しました。当時はiOS中心にissueを拾っていましたが、弊社の場合、誰がどのissueを拾ってもいいということが徹底されています。自分の場合も例外ではなく、はじめはAPIの簡単な修正から着手させてもらい、徐々にフロントエンドも触り始めています。図はいつものSprint Backlogです。タグにFrontendやAPIとついているものはそれぞれ、フロントエンドのissue、サーバーサイドのissueです。開発スタイルは主に、月曜始まりの1週間スプリントです。週頭にはその週に取り組むべきissueが詰まれるのですがiOS系のissueがスプリントにない場合もあるので、そんなときはもう他の領域のissueに手を出すしかありません 📛📛📛

ほとんど潰れてて見づらくてすいません 🙇‍♀

自分は自分の安心できる領域からちょっと外れたほうが成長できると思っているので、(コンファタブルゾーンとかなんとか)この環境はプラスでした。とはいえ、急に難しいissueに手をだすのはしんどいので、まずは軽めのissueに着手したり、詳しい仲間に聞いたりすることで大体解決してきました。

ChatGPTやGithub Copilotの登場により、文法を意識しなくてもやりたいことは表現できてしまうのですが、こういうふうに書くべきだよ、みたいな指摘はまだまだ仲間の存在に頼るところは大きそうです。
フロントエンドも同様に仲間に助けてもらいながらなんとかやっています。新機能のプロトタイプを作ったりするのに、React、Redux(Redux Toolkit), React Hook Formなどを使ったり、スタブレスポンスをAPIから返してもらうみたいなことをやっています。

TieUpsのいいところは、どんな領域にもある程度詳しい仲間がいるということです。自分はほぼサーバーサイド未経験だったけどなんとかやっていけているので大丈夫です 🤟🏻
現在運用中のサービスに関してはそこそこ下地もあるのでコードリーディングから分かることも多いです 😀

【余談】
kotlinやReactなどの言語、フレームワークが出てきていますが、弊社のサービスの技術スタックについての詳細はこちらをご確認ください 🙇🏻

おまけ:JavaScriptのnullの性質について教えをこうおはけん

iOSエンジニアとして

自分はiOSアプリエンジニアなのでiOSアプリ周りで行ってきたことについても触れておきます。専門性をもってご入社を検討される方もいらっしゃると思うので、どんな領域にも手を出せることが自身の専門領域がなくなることと必ずしもイコールではないと思うからです。何点かに絞ってご紹介します

Actorモデルの導入

TieUpsではWeClipというコミュニティアプリを運営しています。自分が入った当初からフルSwiftUIで構成されていて、ReduxライクなStateパターンを採用しています。Reduxライクなアーキテクチャを構成できるライブラリにTCAReSwiftなどがありますがそれらのライブラリは使わず自前で実装されています。またすでにasync/awaitが導入されている状態でしたが、ObservableObjectであるstateにMainActorがついていなかったことから、非同期に処理されたAPIが意図せずbackgroundスレッドで処理されてしまい、backgroundで更新されたstateでView を更新してしまいクラッシュするという現象があったので動作が不安定でした。

そこで、MainActorをState対象のClassに付与することでClass内のプロパティをActor隔離された状態でおこなうようにしました。それにともない、Stateを更新しようとしている処理に対して適切に更新できるように非同期処理の書き換えを行いました。また、さまざまなレイヤーから直接Stateを更新していて可読性、及びスレッドが安定しないという問題もありStateの更新は一箇所のレイヤーで行うことにしました。(WeClipではRedux Toolkitのアーキテクチャにインスパイアを受けておりsliceというレイヤー)

簡単ではありますがこんな感じです

@MainActor
class FooState: ObservableObject {

  @Published var isLoading = false

  func updateState(isLoading: Bool? = nil) {
    if isLoading {
      self.isLoading = isLoading
  }
}

class FooSlice {
    let state: FooState

    init(state: FooState) {
        self.state = state
    }

    func someEvent(isLoading: Bool) {
      state.updateState(isLoading: isLoading
    }
}

iOS17からはObservationが使えるのでCombine@Publishedを使った方法に頼らなくてもよさそうなのが楽しみです

Mixpanelの導入

入社当初、WeClipを触っていてよく考えていたのが、どんな人がアプリを触ってくれているのか全然わからない!ということでした。
そこで、上司との1 on 1でMixpanel入れてみたいっすと提案したのが始まりでした。弊社には明確なPdMが存在せず、日々ユーザーデータとにらめっこしている人がいない状態でした。Mixpanel導入でユーザー分析のきっかけになればと思ったのも動機の一つでした。
Mixpanel導入にあたりまず、仕様を考えました。下記は実際にMixpanelに送信しているイベントの一部です

更に詳細ページにどのようなパラメータを送るべきかをまとめています。これらの仕様は本来PdMと相談しながらすすめるのが良いと思うのですが、先述の通り明確なPdMは存在しないので自分で考えて作りました。

一通り、仕様がfixしたらあとは実装していくだけでした。必要最低限のイベントからはじめて今では、60イベントくらい送信しています。
リリース後、全社向けにMixpanel説明会を主催したりIVSというイベントでWeClipを使ってもらってアクション数の計測にMixpanelを使えるようになりました

現在ではCSチームやデザインチームなどを中心にMixpanelを使ってデータ分析してくれてるみたいで良かったです \(^o^)/

コードレビュー

iOS中心のPull Requestの場合、たまにアプリの仕様を知ってないと意図せぬ不具合を起こしてしまうときがあるので注意します。例えばUserDefaultsなどのアプリが消えると記録したデータも消える領域にデータを書き込むべきか、keychainなどのアプリを消してもデータを残したいケースなのかを明確にしたい場合などです。

働き方に対する課題

つっつのブログにもあります通り、弊社エンジニアはリモート勤務可能です。もちろん出社しても問題ないです。

自分はフルリモートで勤務しており、会社に行く機会はあまりないのですが、デザイナーと連携したいときに前提知識がないまま会議に参加して確認するだけでMTGが終わってしまうことがありました。MTG時間もったいないなぁと反省して、デザイナーと毎日15分話す機会をつくりました。(Googleカレンダーに予定突っ込んだだけです 😝

毎日15分話すだけで、デザイナーとの間にいい関係が産まれ、何を考えているのか分かるようになってきました。コンテキストや意図が分からない状態でMTGに入ることもなくなったのでより生産的な議論ができるようになったと思います。今も続けていますが、さすがに毎日話してると議題がなくなってくるもので今は週1日くらいの頻度です。さらに、いつ話しかけてもいいんだと思ってもらえたことでメンションの頻度があがったこともプラスです。

積極的に発信する

自分は比較的職歴が長い方ですが、TieUpsのメンバーは若めなのでまだ失敗の経験が少ないと思います。自分はおじさんなので(誰がおじさんですか!)比較的多くの失敗を経験しているとおもっていて自分が失敗した。もしくは過去に所属していたチームで取り組んだ失敗みたいなものを全社に共有したりしました。こういう取り組みが社内でも広まっていくといいなと思っています。🕶

おわりに 😁

ここまでの話のまとめると

  • TieUpsエンジニアはどんなissueをとってもよい

  • 専門性のある仲間とそこそこのコードベース下地があるので安心

  • 専門領域ももちろん伸ばせる

  • エンジニアはフルリモートか出社するかを選べる

  • 出社しているメンバーとコミュニケーションロスは課題。でも積極的に発信していくことでカバーしようず

正直、TieUpsに入社するまでDBマイグレーションを実行したりO/Rマッパーを使ってDBを操作したことなかったので良い機会に恵まれたと思っています。


これからもやっていき 💪🏻💪🏻💪🏻






プリキュアになれるかも?

ぜんぜんどうでもいいですが、TieUpsのメンバーはslackでプリキュアになれます。自分が全部作ったわけではなく、みんなが作ってくれてます。コラボレーション感があってとってもお気に入りです。(謎な終わり方ですいません)


そんなTieUpsに興味をもってくれた方は、下記リンクより採用サイトをご覧ください👻✨


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?