TechTrain開発がワクワクする5つの理由

[株式会社TechBowl](https://techbowl.co.jp/#company) が運営している [TechTrain](https://techbowl.co.jp/techtrain/) の開発ディレクションを担当しています手島([@tejitak](https://twitter.com/tejitak))です。[【Mentor Ver.】TechTrain Advent Calendar 2019](https://qiita.com/advent-calendar/2019/techtrain-mentor) 23日目の記事です。

今回の記事では、TechTrain自体の開発の内側について少し書きます。普段TechTrainを使っていただいているユーザーの皆様/ご利用を検討中の方々/メンターの方々向けに、サービスの開発チームが普段どのようにサービス開発を進めているか、少し知っていただければ幸いです。そして、あわよくばTechBowlの開発チームに興味を持っていただいたらジョインも...是非!

## 2019年後半開発チームが行ってきたこと
2019年7月にチーム体制が出来上がり本格的に開発が始まりました。それから現在に至るまでの半年間ほど主に以下のようなタスクに従事していました。

* AWS + Laravel + Nuxt + TypeScriptによる技術スタックの変更
* [ミッション機能](https://prtimes.jp/main/html/rd/p/000000011.000040741.html)の開発
* 新機能の開発
* 管理画面/Slack連携など運用チーム向けの開発
* [Redash](https://redash.io/)を用いたデータ可視化ツールの構築
* ユーザー・メンターヒアリングに基づく継続的改善活動

今現在の開発メンバーはフルタイム1名 + パートタイム3名(私含む)。フロント、サーバー、フルスタックと、それぞれ強みがうまく分かれている開発メンバーが自律的に動き、改善活動と新機能開発が活発、**Trainならぬ機関車のごとく**ワクワクする開発現場となっています。

そんなTechTrainの開発がなぜワクワクするか？その理由を5つ記載します!

# ワクワクする理由1 - 技術スタック**「AWS + Laravel + Nuxt + TypeScript」**が良い
今現在はLaravel + Nuxt + TypeScriptの技術スタックで快適に開発を進められています。この環境になるまで長い道のりがありました。

### TechTrain開発秘話
私が開発に参画した頃には2019年春にβ版として既にサービスは稼働していました。
その時点ではAPIはPythonベース、ユーザー向け画面はNuxt、管理画面はReactで作られており、完成度は中途半端な状況でした。実はβ版の時点で多くの問題が発覚しており、βの開発をパートタイムで担当されていた方も忙しく、それを私が引き継ぐ形になりました。

例えば、既に発覚していた致命的な問題…

- Firebase 認証に関連し一部のユーザーが永遠にログインできない
- ユーザー登録時の一部のフォーム情報が全くDBに保存されていない
- 管理画面が一部の情報の閲覧しかできず、更新機能がない

その他開発者・ユーザー共に悩ませる問題が多数あることが発覚…

「この開発案件は…もしかして…やばい？」

“**_誰がなぜそんなことをしてしまったのか。_
_なってしまったものは、なってしまったもの。_
_責任追求はせずに、改善をすることに決めた。_**“

以下技術スタックの変遷についてまとめます

### APIはPython Flask → PHP Laravelへ
開発チーム体制を作り、まず取り組んだことはLaravelの導入でした。
PHP/LaravelはWebサーバーサイドを実装するにあたって、エンジニア間での共通認識度が高いフレームワークであり、情報も多く担当できるエンジニアの人数も多いです。元々β版のAPIはPython/Flaskで作られていましたが、今後のエンジニア採用も見据えると、β版から正式版にリリースするタイミングで書き換えてしまう方が良いという判断をし、2019年7月技術スタックの大きな変更に着手を始めました。

### 管理画面はReact → Laravel Adminへ
運営チームの使う管理画面はβの時点ではReactで作りかけのものがありましたが、実際に使って運用できるレベルのものではありませんでした。そこでAPIをLaravelに置き換えるのと同時に管理画面はLaravelの管理画面ジェネレーターを使う判断をしました。
管理画面ジェネレーターは多く存在しますが、これまでいくつかLaravelの管理画面ジェネレーターを使ってきた中でオススメの[Laravel Admin](https://laravel-admin.org/docs/#/)を使うことにしました。簡単にDBと紐づいた一覧ページや編集フォームページを作ることができ、かつ、カスタマイズ性が高いものです。2019年8月には、めでたく管理画面とAPIの部分がLaravelに移行完了しました。

### GCPからAWSへ
GCPによりデプロイを行なっていましたが、開発メンバーとしてRDS、S3、Elastickbeanstalk/ECSなどを利用したい気持ちが強く、また、今のところGCPの強みであるBigQueryやコンピューティング周りは使用しないサービスであるためAWSへのインフラの移行を行いました。

幸運にもAWSのスタートアップ支援のクレジットも獲得でき、元々β版をホスティングしていたGCPからAWSへ移行しました。

### JavaScript → TypeScriptへ
TechTrainのユーザーの皆様が使っているフロント側の実装はβ時点でNuxtで作られていまして、そのソースコードを引き継いで開発をすることにしました。

そこでTechTrain開発に参画しているフロントエンドのエキスパート[@y_temp4](https://twitter.com/y_temp4)さんが以下をまるっと行なってくださいました。

- TypeScript化 / Vuex-guardianの導入
- Vueコンポーネントの疎結合化 / 複雑化していた実装のリファクタリング
- デプロイ周りの対応
- DevTools (Lint, Prettierなど)の導入 
- Jestによるフロントエンドテストの導入
- などなど

TS化の恩恵で、型推論によりコードを実際にブラウザで実行する前に多くのコーディングミスの検知が可能になり、堅牢性も高く、生産性も高くなりました！

### SSR(サーバーサイドレンダリング)の導入へ

よりSEO的に効果の高いレンダリング方式であるSSR形式でのデプロイもできるようになりました。
少々ハマりどころも多いですが、TechTrainのSEOやパフォーマンス向上を実現できました。常に新しい技術の取り組みも積極的に行なっています。

### DX（Developer Experience）の向上

このような技術的変遷が数ヶ月で実現され、現在はメンバー自身が快適＆自律的に気持ちよく働きたくなる環境が出来上がりました。
毎日githubのPRがバンバン作られ、レビューがされ今のTechTrainの改善活動・新機能開発が行われています。

# ワクワクする理由2 - フレキシブルな働き方で進められる

### プロフェッショナルが集まったリモート開発チーム
現在Techbowlの開発メンバーはフルタイム社員メンバー1名以外の3名はリモートで開発を行っています（今のところ）。
Slack上の本日宣言のルール（参考: [毎朝のSlack一言発言で劇的に生産性が上がる話 ](https://note.com/tejitak/n/na4c8648399e6)）は必須としていますが、稼働時の厳密なコアタイムは設けておらず、働く場所も自由です。

開発タスクはGithubのProjectとIssueで管理。
開発定例は2週間に一度のペースでzoomにて行い、各開発メンバーが以下のフォーマットでこれから着手するタスクの明確化・発言をしてもらっています。

1. What I did (着手したこと)
2. What I will do (これから着手すること)
3. Blocking issues (何か困っているところ・課題があれば共有)

特に3つ目が重要で、各自困っているところがあれば随時共有して解決策をディスカッションしたりもしています。

現在の開発メンバーはスキルが高く、自律的に動けるプロフェッショナルなメンバーが揃っているため、リモートワークであってもフレキシブルな働き方を実現でき、圧倒的に高い生産性も実現できています。

参考:  [リモートワークがメインのエンジニアが普段意識していること](https://qiita.com/y-temp4/items/88bb2ceeebb2690fc035) (フロントエンド担当の[@y_temp4](https://twitter.com/y_temp4)さんの記事)

# ワクワクする理由3 - 新機能立ち上げの「仮説→検証フェーズ」に携われる

TechTrainでは「ユーザーヒアリング→仮説を立てる→実装する→検証する」を、[おざまさ](https://twitter.com/zawamasa)さん率いるビジネスチームと一緒に開発を迅速に進めています。

TechTrainの開発ではサービスをグロースさせること・成功させることを第一に考えていますので、顧客の意見を反映させていく「仮説→検証フェーズ」は常に意識しなくてはなりません。

スタートアップのサービスに関わる開発者は、開発そのもの自体が目的になってしまわないように注意が必要です。TechTrainでは随時上がってくるビジネス要件やユーザーヒアリングの結果を開発チームがきちんと拾うことを心がけ、優先度を決めて開発タスクに落とし込んでいきます。

例えば2019年10月にリリースしたミッションという機能。ビジネスチームのヒアリングの結果、MVP（Minimum Viable Product）として実装されました。

機能の検証結果を早く知りたいということに注力してリリースを急ぎました。正直いうとリリース時は開発者としてはデザインや細かい点はまだまだ直せるなという点があると認識しつつのリリースです。

どこかのシリコンバレーの格言引用
“**_自分がリリースしたものが恥ずかしくないなら、リリースが遅すぎるということを肝に銘じよう。_**“

結果、ミッションの事業としての仮説は大きく間違っておらず(もちろん改善案は見つかものの)、現在は機能を利用するユーザーも企業側も増え、TechTrainのメイン機能として進めています。

仮に当初の仮説が大きく外れていたとしても、その機能は優先度を落とし別の優先度の高いタスクを強めていけば良い、という「仮説→検証」の考え方に基づいた繰り返しの早い開発を今後も意識的に行っていきます。

# ワクワクする理由4 - サービスが成長しているのを体感できる
ミッションなどの新機能の追加後特に、口コミやビジネスチームの広報アクティビティのおかげもあり、日々ユーザー(ユーザーもメンターもクライアント様)が着実に増えています。

開発メンバーの半数は実はTechTrain上のメンターとしても登録されています。ミッション機能を公開した時期から、私への面談の数も増えて、自分の作っているサービスが使われているな、という実感が持てています。

開発者たるもの、自分が作ったものを誰かに使ってもらえることが楽しみですよね。

# ワクワクする理由5 - メンターと定期的に出会える場が提供されている!

現在TechTrain上に登録されているメンターの数は80名近くいます。[こちら](https://techbowl.co.jp/techtrain/mentor/)からメンター一覧を見ることができます。

TechTrainに登録されている豪華メンター陣は著名な大企業/メガベンチャー/スタートアップに所属している方々がほとんどです。メンターこそがTechTrainの大きなアセットであり、メンター同士のシナジーも生み出したいと考えています。

普段開発担当をしている際にはヒアリングやお知らせなどを通じてオンライン上の付き合いがメインですが、実は定期的に、メンター同士がオフラインで会えるメンター向けmeetupが開催されています。そのほかにも[Hackbowl](https://prtimes.jp/main/html/rd/p/000000009.000040741.html)のメンターとしてメンター同士交流している方も多いです。

メンター同士の横のつながりが強くなる仕掛けも来年以降より増えていくと思います。

## 最後に

TechTrainの開発がどのように進んでいるかについて、現在開発のディレクションを行なっている立場から少しご紹介をしました。来年以降も引き続き機関車のごとく開発を進めていきますのでよろしくお願いします!

サービスに興味を持った方はぜひユーザー登録をしてみてください。

そして、、TechTrainの開発に興味を持っていただいたエンジニアの方は[フルスタック・フロント・サーバー全方面で募集中](https://www.wantedly.com/projects/286357)ですので、ぜひお気軽に一声お願いします!