Feedforce Developer Blog

フィードフォース開発者ブログ

TypeScript 社内勉強会 完遂報告

この記事は feedforce Advent Calendar 2017 の 8 日目の記事です。昨日は id:phiitakes の『フィードフォースのスポーツ系活動紹介 - phiitakesのなにか』でした。弊社こんなに運動部あったんだ!?w

こにゃにゃちわ(世代)id:tmd45 です。

ちょうど今週、社内で開催していた TypeScript 勉強会が一段落したので、それについて書きたいと思います。TypeScript の話というよりは社内勉強会のやりかたのひとつという話になりますのでご了承ください。

きっかけ

今年の夏頃から担当プロダクトで AWS Lambda を利用するようになりました。当初開発に取り組んでくれたサーバサイドメンバーが JavaScript 学んでいたり、強力なフロントエンド開発メンバーがいたりということで実装に Node.js を選択しています*1

フロントエンドチームでは静的型付け(と関数型)の導入が進んでおり、とくに新しいプロダクトでは Flow を用いた開発が行われています。

そんなこんなで Lambda function の実装でも静的型付けの可能な言語で開発したいという向きがあり、とはいえ JavaScript の基礎もあやふやなチームメンバー(主に私)がいる状況でしたので Pure JavaScript から大きく逸脱することがなく最新の仕様にも触れられる TypeScript でやってみようという選択になりました。

仕事でやるからにはしっかり勉強せねばと思いつつ、自力だけで学ぶことになると最初に開発に取り組んでくれたメンバー以外(主に私)は意識が下がりがちになると思い、社内勉強会という名目で取り組むことにしました。

やりかた

仕事ですぐに使う技術を学ぶという名目でしたので、週一でゆっくりというよりは、短時間で刻んでどんどんやっていこうという気持ちでセッティングしました。

導入を決めた自分のチーム(のサーバサイドメンバー)の参加は必須として、ミーティングの日程を避けて 1 イテレーション= 2 週間のなかでミーティングの無い日を中心にスケジュールしました。

曜日 予定
スプリントプランニング
なし
TypeScript 勉強会
なし
TypeScript 勉強会
TypeScript 勉強会
なし
TypeScript 勉強会
なし
スプリントレビュー、レトロスペクティブ、KPT

回数を増やしたぶん、1 回の実施時間を短めに 30 分〜 45 分 としました(それでも後半は白熱して 1 時間いっぱい使ってしまいましたが)。

開催時間は毎朝の デイリースクラムを終えたあとの、午前中 にしました。夕方は日によって早く帰りたいこともありますが、朝は普段からチームで集まることが決まっているので時間確保がしやすかったためです。

そんな感じでスケジューリングしつつ、参加したいひとはお気軽にご参加ください、というスタンスで進めました。結果、参加人数は 3 〜 7 人と幅がありました。

f:id:tmd45:20171207132757p:plain はじめるまえにお気持ちを表明してみた

教材は市販の書籍も検討しましたが TypeScript Deep Dive というオンラインドキュメント を利用しました。浅すぎず深すぎず、最新の JavaScript のことも学べる適度な教材はなんだろう?と投げかけたところ、先に TypeScript を自主学習していたメンバーフロントエンドの元老院の方からオススメしてもらいました。英語だけど、みんなで読むならこわくない。

また Promise の部分では追加で JavaScript Promiseの本 の前半も読みました。どちらのドキュメントでもこの勉強会では基礎部分だけ実施しました。仕事で使いながら、あとは自分で応用編も読み進めていく予定です。

よかったこと

学習した内容からとくに思ったのは、言語の設計思想を理解して学ぶと納得感が違うなということです。 Deep Dive の冒頭には TypeScript がどういうスタンスの JavaScript Transpiler であるか?という解説がありました*2

また、参加メンバーは普段主に Ruby を書いているひとが多いので「Ruby ではここはこういうやりかたになってるね」という話をしたり、いろんな言語を触ってよく学んでいるメンバーから「別の言語ではこういう思想でこういう実装がされているよ」とか、たとえば「Flow では(思想が違うので)ここは勝手に推論してくれるんですよ」みたいな話をしてもらったりしました。

Slack で疑問点を共有しながら進めていると「先生」になるような社内メンバーたちが説明をくれたり議事録*3にもコメントをもらったり、とても助かりました。

f:id:tmd45:20171207133707p:plain Qiita:Team でかんたんな議事録を作っていました

「先生」レベルの人たちが毎回勉強会に参加するのは、どうしても(お互いに)無駄に感じてしまうこともあると思います。興味のある章だったり時間のあるときには気軽に参加してもらって、そうでないときも助けてもらうことができて大感謝でした 🙏

まとめ

勉強会を実施した成果として、実際に TypeScript で書いているリポジトリが最低限読めるようになりましたし、他のフロントエンドのリポジトリでも「呪文かコレ」って思うことがなくなりました!開発の入り口に立つことが出来たように思います。大成功 😊

年明けには業務で利用している外部の JS SDK の TypeScript ソースコード・リーディング会をやってみたいと考えています(๑•̀ㅂ•́)و✧

f:id:tmd45:20171207151404j:plain 最終回の参加メンバー!おつかれさまでした!!

〜〜〜

さて、明日は弊社には結構多い(!)既婚者勢の id:tsub511 による 結婚して半年が経ったので工夫していることとか です。おたのしみに〜

*1:隣のチームでは Python を利用していますね。開発のメインは Ruby ですが、それ以外の言語はチームによって検討している感じです

*2:あくまでも Pure JavaScript がそのまま記述できる(ように設定できる)ように設計され、既存の JavaScript コードを部分的に移行していけるものである、とか

*3:業務時間中にやっている勉強会だったので「真面目に勉強してますよ〜」と報告する理由で書いていたのですが(笑)あとで見返すこともできて良かった