ココが凄い！新メンバーから見たRNI開発部

この記事は [RNIアドベントカレンダー2023](https://rni-dev.hatenablog.com/entry/2023/12/19/172817) 3日目の記事です。

## はじめに
2023年7月に株式会社リサーチ・アンド・イノベーション（以下RNI）に入社しました。
私は過去10年ほど、AndroidをメインにiOS/PM/EMを兼任しながら、様々なアプリ事業開発に携わってきました。

現在はRNI３人目のAndroidエンジニアとして、[CODEというポイ活&家計簿サービス](https://code.r-n-i.jp/)のアプリ開発を行っています。

https://code.r-n-i.jp/

- [iOS版はこちら](https://apps.apple.com/jp/app/%E3%83%AC%E3%82%B7%E3%83%BC%E3%83%88%E3%81%8C%E3%81%8A%E9%87%91%E3%81%AB%E3%81%8B%E3%82%8F%E3%82%8B%E3%82%A2%E3%83%97%E3%83%AAcode-%E3%82%B3%E3%83%BC%E3%83%89/id879385562)
- [Android版はこちら](https://play.google.com/store/apps/details?id=jp.r_n_i.code.point.app)

この記事では、RNIに入社後、率直に「ココが凄い！」と感じたことを紹介していきたいと思います。

:::note warn
私個人の経験を踏まえて感じた組織としての「凄さ」の紹介となります。
具体的な技術課題やそれに対する解決策、取り組んできたプロジェクトの詳細など、技術的観点からの情報は別の機会に紹介できればと思います。
:::

![message_yoroshiku_casual.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351850/9ff2dce5-a5e4-9c25-533b-31f9d973de63.png)


## 開発について

### CI/CD周りが整備されている

「そんなの当たり前じゃない？」と思う方が多いかもしれませんが、しっかり整備されていて使いたい機能がフルで使える状況は、素直に有り難いの一言です。
会社の方針によって利用可能なツールが限定されており、かつツールの仕様が安定していない（開発途中といった感じの）ケースでは、ツール側の変更内容に合わせて設定を見直す必要があり、調査と整備にかかる工数がスケジュールを圧迫していきます。

例えば、[Androidは2021年8月からバイナリファイルをAppBundle形式とすることが必須となりました](https://developer.android.com/guide/app-bundle?hl=ja)。

https://developer.android.com/guide/app-bundle?hl=ja

ざっくり言うと「AppBundle形式じゃなきゃ、新しいアプリをリリースさせないぞ」というGoogle側の大きめの変更です。

しかし、当時利用していたツールは従来のAPK形式しか対応しておらず、リリース作業の自動化を事前に組み込むことができませんでした。

それでも得られるベネフィットがCI整備にかかったコストを上回れば良いのですが、当時は足元の開発が盛り沢山だったというのもあり、自動化のメリットをフルで享受するのは諦めよう...との判断となりました。

RNIではGitHubをメインで使用しており、GitHub Actionsを使ったテスト実行やカバレッジ算出、バイナリファイルの配布を含めたリリース作業の自動化が導入されています。
テストの抜け漏れやリリース内容のマージ忘れなど、人力では取りこぼしやすい部分をCIが代替してくれるのは非常に開発体験が良いです。

### [Android]様々なアーキテクチャとの共存

CODEは2024年に10周年を迎えます🎉

現在は新規機能開発に加え、レガシーな処理のリプレースも行っています。

Android版CODEはほとんどのコードがKotlinですが、一部Javaが現役な箇所もあり、設計面ではMVC、MVVM、Redux(Flux)、レイアウトではActivity、Fragment、ConstraintLayout、JetpackComposeなど、多くの手法が共存しています。
Android10年分の開発手法がギュッと詰まっています。

本来、事業開発において「内部のアーキテクチャが何であるか」は直接利益を生むわけではありません。
しかし、その時々の最適な実装方法を採用しているのは、組織として技術の進歩を歓迎している証拠です。
サービスの運用が続く中、常に新しい手法を取り入れ、またより良い製品を目指して果敢に挑戦されたのだろうな、というのが見て分かります。


:::note info
現在はデザインリニューアルと並走しながら、各画面をJetpackComposeに置き換え中です。
:::



## 組織文化について

### フルリモートだけどコミュニケーションが盛ん

RNIは基本リモートワークですが、必要に応じたコミュニケーションが盛んに行われています。
リモートだとつい黙々と作業しがちですが、[Gather](https://ja.gather.town/)というコミュニケーションツールの導入により、ちょっとした質問や認識合わせなどの会話がしやすくなりました。

https://ja.gather.town/

また、「あの人は業務委託だから会議に呼ばない」のような境界が無く、フラットな関係性です。

詳細は後述しますが、週に一度社内勉強会があり、普段あまり関わることのない領域のエンジニア同士で会話する貴重な機会になっています。

### どの役割のエンジニアも互いに尊重しあっている

RNIの開発部はリスペクトフルな文化が根付いていると感じます。

（あくまで私の過去の体験ですが）大規模サービスを開発していく中では、エンジニア同士の利害バランスがうまく取れず、`インフラvsサーバーサイドvsフロントvsアプリ` のような対立構造になってしまうことがありました。

そういった調整事も私自身のマネージャーとしての役割だったわけですが、弊社内で敵対が起こらないのは、事業や技術の課題に目を向け失敗を恐れない、全員でグロース＆サバイブしようというアジャイル的な思考が備わっているのだろうと感じます。


### めっちゃ親切

RNIの開発部はまだまだ小規模な組織ということもあり、誰かの経験や知識を頼る場面があります。

初日、ローカル環境の構築がうまくいかず、近くに居た先輩エンジニアに雑に聞いてみたところ、終業時間ギリギリまで付き合ってくれただけでなく、翌日には不穏な空気を察したサーバーチームの皆さんが集結してくれました。
結果、無事に環境構築が完了しました🙌

日々の業務でも「こういうことで困ってます、誰か分かる人いませんか？ちょっと見てもらえませんか？」と問いかけると、誰かしら助けに入ってくれます。
毎日多くのタスクをこなす中、誰かの「困り感」の解決に意識を向けるのは決してラクなことではないので、ホスピタリティの高い組織だと感じます。



### 毎週開催の勉強会でコミュニケーションの時間を確保

弊社では、毎週金曜日の夕方から勉強会を開催しています。
RNIはフルリモートなので、PMチーム・サーバーチーム・アプリチーム関係なくコミュニケーションが取れる機会は貴重です。
普段どんなことを気にしながら仕事しているのか、どういった点に技術課題があるのか等、自分とは違う視点での気付きを得たり、理解を深める良い機会になっています。

あと、時々差し込まれる専門性の高い雑談ネタが面白いです🤖



### 穏やかな人が多い

転職サイトで読んだら間違いなく信用できないフレーズですｗ
が、RNIに関しては「みんな人として成熟してるな〜🤔」と思うことが多いです。

過去の現場では、ハラスメントや不当な要求からチームメンバーを守るための対話であったり、組織体制の再調整、メンバーのメンタル的なところのフォローを行うこともありました。
世の中には色々な特徴を持った人がいますし、良い組織文化を醸成するためにはトラブルに対処していくことが重要です。
しかし、組織づくりの目標は「それらの課題に常に目を光らせておかなくても良い環境を作ること」だとも思います。

その点、既に「良い塩梅」の関係性を構築しているRNIはかなり珍しく、人の良さという点でもRNIに入社して良かったな〜と思います。


## 最後に

RNIに入社するまでは仕様調整や採用といった管理業務がメインだったので、久しぶりの開発を新鮮に感じています。

特に[JetpackCompose](https://developer.android.com/jetpack/compose?hl=ja)は業務で使うのが初めてで、まだまだ分からないことだらけですが、幅広くキャッチアップして早く役に立てるよう頑張ります。

:::note info
現在、RNIではエンジニアを積極採用中です！（業務委託可）
少しでも興味がある方はぜひご連絡ください。

◆会社ホームページ
https://r-n-i.jp/

◆ご応募はこちらより
※カジュアル面談も受付中です。
https://r-n-i.jp/recruit/engineer/
:::