私たちチームラボは、近年ではアートのイメージをもたれることが多くなりましたが、クライアントの要望や課題を解決するデジタルソリューション事業が半分を占める組織です。開発分野は金融、EC、スポーツやIoTなど多岐にわたり、様々な業種のクライアントに対して分野を跨いで多種多様な課題解決の手段を提供しています。課題を解決するために様々な取り組みを行い、エンジニアが課題を解決することに全力を尽くせる環境作りに取り組んでいます。
幅広い業種と取引があることの課題と取り組み
私たちは幅広い業種のクライアントの問題を解決しています。クライアントからの様々な問題を解決するにあたり、多岐にわたる知見が得られます。この得られた知見を別業種で起こる問題にも応用することで、より良い解決手段の模索や提案ができるのです。 また、常に新規のプロジェクトが動いており、課題解決手段の改善が求められ続けています。より良い課題解決手段を提供するためには、一辺倒な取り組みでは不十分だと考えており、いくつかの取り組みを行っています。本記事では、その中でも代表的なものについて紹介いたします。
定石に囚われず、常に新しいことを取り入れていく
ライブラリの活用は、プロジェクトの開発効率や品質の向上に加えて、課題解決に集中するために有効な手段です。チームラボでは新しいライブラリの活用を積極的に行っています。常に新規プロジェクトが動いているので、開発と並行して検証に取り組み、プロジェクトの改善を図っています。
Jetpack Compose
近年アプリの画面の状態の複雑さは増すばかりと言っても過言ではなく、Web業界で提案された宣言的UIはそれに対する解決案の1つとされています。宣言的UIをAndroidに持ち込んだJetpack Composeにはチームラボでも注目しており、アルファ版の段階から社内で話題に取り上げ、プロジェクトに取り込んでいます。
Flutter
1つのコードで複数のプラットフォームのアプリを提供でき、GPUレンダリングを直接行うためUI差が起こりづらいFlutterは、チームラボでも開発コストの削減、開発スピードの向上に寄与しています。 プロトタイピングだけではなく、プロダクションに耐えうる仕組みが揃っているので、自社アプリを始め、採用事例も増えています。
Kotlin Multiplatform Mobile(KMM)
プラットフォーム間でのロジックの統一は堅牢なアプリを作る上での課題です。KMMの導入により、ロジックの細かな違いを統一し、手戻りを少なくすることができます。社内外で勉強会を実施し、Kotlinの新しい言語機能についても積極的にキャッチアップを行い、より良いKMMの実装方法を模索しています。
Jetpack、AAC
Android特有の複雑なコードを簡潔に書くための様々なライブラリが提供されているJetpackを積極的に採用しています。ほぼデファクトスタンダードになっているViewModelや、Dagger Hiltを用いたDIに加えて、開発が進んでいるアルファ版のライブラリ群にも注目し、より簡潔に最適なアプリを構築できるように情報収集と検証を行って開発に採用しています。
プロジェクトを超えて取り組む
私たちはプロジェクトを超えて知見を共有し合いながら開発を行い、課題解決に取り組んでいます。
具体的な取り組みを紹介しましょう。
新しい取り組みを全体で進める
以前はオンプレミスのJenkinsで稼働している20以上のプロジェクトがありましたが、契約から2週間でほぼ全てを一斉にCircleCIに移行できました。
事前にリポジトリ構成の違いや成果物の保存方法の違いなど、導入する上での問題点を調査し、テンプレートや資料の作成を行いました。 移行時には対応が完了したメンバーが他プロジェクトのサポートを行いながら知見を全体で共有し、迅速に移行を完了できました。
現在では、CircleCIの新しい知見を全体で共有し、更新のたびにテンプレートの作成と展開を行うことで、組織全体での品質を維持しています。
サービス及び開発体制の定期健康診断
運用期間が長いプロジェクトでは、ライブラリのアップデートや新しい技術への追従が不十分になってしまうことがあります。
チームラボではより良いサービスを作る上で技術や品質の基準を満たせている状態を健康な状態と定義し、プロジェクトがどれくらい健康かどうかを計っています。 チェックリストを元にヒアリングを行うことで、より健康になるためのタスクを整理し、品質向上に取り組み続けられる環境を作っています。
設計・実装パターンを共有するためのTemplate Repository
複数のプロジェクトに対して問題のヒアリングを行っていくと、プロジェクトの成長や継続運用に伴って発生する問題や、立ち上げ時に必要な実装・設計のパターンがある程度見えてきます。
チームラボでは静的解析やCI/CDの設定ファイル、DIの実装パターンなど、コードスニペットやボイラープレートをGitHubのTemplate Repository機能を使って共有しています。 それを利用して、新しい技術を取り入れるためのアーキテクチャと設計パターンの議論と更新を続けています。
役割を超えて、課題の本質に向き合う
与えられたタスクをこなすだけの働き方では、世の中の期待を超える良いサービスを作ることができません。
チームラボでは良いサービスを作るために、カタリストやデザイナーと共にエンジニアが提案や要件定義前からチームの一員としてプロジェクトに関わります。 デザインは社内のデザイナーが作成することが大半なので、デザイナーとエンジニアが一緒にスマホと向き合いながら議論し、プロジェクトを良くするために協力しています。
他にも専門領域を超えた活動として、アプリ・バックエンドエンジニア間でタスクを共有し、各々の専門分野を超えた視点でプロジェクトの課題を捉えながら要件と仕様を決め、開発を進める取り組みも行っています。
フラットなチームだからこそ「課題を解決する」という共通言語で役割を超えて議論を行い、一緒に課題解決に取り組むことができます。
プロジェクトや専門領域の境界を超えていく
チームラボでは職務の境目がありません。 そのためエンジニアだけの職務に囚われることはなく、各々興味のある分野や活かせるスキルがあればいかんなく発揮できます。
今回紹介した事例は取り組みの一部です。他にもプロジェクトや専門領域に縛られずにコミットできる体制を模索し、より良いサービスを作れる組織を目指しています。
エンジニアの視点と知識を活かしながら、デザイナーやカタリストと共により良いサービスを提供できるように、境界を超えてメンバー全員で課題を解決することに全力を尽くせる環境作りに取り組んでいます。
事例紹介・採用情報
- 事例紹介
- 採用ブログ
- 採用情報
著者紹介
チームラボ スマートフォンチーム
スマートデバイス向けアプリの設計、開発を行います。開発分野は金融、EC、スポーツやIoTなど多岐にわたります。頻繁に登場する新しい技術を活用するため、チーム内でのナレッジ共有を密に行っています。