Unipos engineer blog

Uniposの開発者ブログ

UniposチームにおけるElmエンジニア達の成長環境

どうもみなさん、おはこんばんちは。Fringe81ソフトウェアエンジニアの泉です。

この記事はFringe81アドベントカレンダー2019の15日目の記事になります。私の方からはUniposチームに所属するElmエンジニアたちが、いかにしてオンボーディングし、そしてElmを学んでいるのかについてを簡単にお話させてください。

UniposとElm

弊社のプロダクトであるUniposではElmをそれなりの規模(現時点で5万行から7万行)でプロダクト開発言語として採用しています。これは現時点では日本国内ではほぼ最大です。

最初にUniposのフロントエンドがElmで書き始められてから、かれこれ2年近くが経ちました。開発初期と比べて、すくなからずElmそのもののプラクティスも変化し、そして0.19がリリースされるなど、UniposはElmとともに多くの変化の歩みを進めてきたと言えます。

Elmは一般的には言語仕様の小ささや、そもそもElmという言語がフロントエンド領域に閉じた言語であるという特性からも、さほど学習にかかる労力は大きくないという印象が強いです。 とはいえ、いきなりほったらかしでプロダクトのElmコードを書いてもらうよりも、少しづつでも基礎的な部分からElmに慣れ親しんでもらい、学習曲線の角度を無理なく上げていくのほうが理想的です。このような理由から、Fringe81では誰もがElmエンジニアとしてのステップを踏み出せるようになるためのラダーが用意されています。

というわけで、具体的にどのような取り組みが存在しているのかを紹介します。

Elmアカデミー

Fringe81の技術開発本部にはアカデミー制が存在しています。これはElmに限らずScalaJavaScriptなどでも同様です。

プロダクトでElmを書き始めたい!という場合には、まずは社内にいるスペシャリストと呼ばれる人たちのメンタリングを受けながら、基礎的なElmの文法からSPAの開発までを学びます。最終的にCRUDができるSPAを完成させることができるまでがゴールです。もしWebpackやNode.jsなどElm以前の基礎的なツールチェインの知識がなければ、そこからの学習も行います。

ElmのSPAサンプルとしてあまりにも有名なものはRichard Feldmanのelm-spa-exampleかと思いますが、やはり初っ端からあのコードベースを読み解くのはかなりタフです。Elmアカデミーではそれよりも、より基礎に近い形でSPAを作ってみるという目標の達成に向かって取り組みます。

github.com

基本的には既存のメンバー/新卒問わず、まずはこのアカデミーから始まります。このアカデミーを終えるだけでも、ほぼ全員がある程度Elmをプロダクトレベルで書けるようになるまでの準備が整う形になります。

びわ会(Elmエンジニアたちの情報共有会)

Uniposチームでは半年ちょっと前から「びわ会」と呼ばれるElmエンジニアのための情報共有会を毎週30分間やっています。 もともとはもう少しミーティングの体をとる存在でしたが、そこから舵切りをして、よりウェットで柔軟な「楽しくElmに強くなれる会」という方針の時間としました。

f:id:fringeneer:20191215173859p:plain
びわ会発足時のメッセージ

びわ会ではフロントエンドでコードを書いているエンジニア全員が、チームのみんなに聞きたいこと、教えたいこと、話し合いたいこと、などを持ち寄ってそれぞれのトピックでワイワイしていく形になります。例えば、びわ会で話されたトピックは以下のようなものです。

- ビルド速度を50%カイゼンしたよ、のはなし
- lazyの使いドコロ再確認
- ドメインモデルが共用になっているせいでモデルが歪んでいる件の共有
- ElmでのSVGの扱いについて
- ViewModelsディレクトリの使い方、どんなものを入れるべきか?が曖昧なので定義したい!!
- CustomTypeを定義するときの注意点を発見したので共有

この会の運用として気をつけていることのひとつは、まずはみんなが「楽しいと思える」ようにするということです。年長者や技術のある人間だけが盛り上がるような排他的な会ではなく、もっとカジュアルに気軽に質問したり問題提起できるような、そんな場所です。

楽しくなければわざわざ会に来るモチベーションも沸かないし、みんなでElmを学ぼうという気持ちもなくなります。参加できる頭数が揃わなかったり、全体でリリース作業などの忙しさが見える場合には潔く会をスキップすることもあります。とにかく、みんながモチベーション高くいられる会であることが一番です。

初期の取り組みでは、NoRedInk社のエンジニアであるRichard Feldmanによるカンファレンスでのトーク動画をみんなで観てディスカッションする会を実施したりもしました。その際見たトークに関しては、私の個人ブログとなりますが以下の記事にてご紹介しています。興味があれば御覧ください。どれも実践的で有用なものばかりです。

www.izumisy.work

まとめ

こんな感じでFringe81ではエンジニアたちがElmを学んでいます。ここ最近ではサーバーサイドがメインだったエンジニアがフロントエンドへとコンバートしElmを書き始めるケースもあります。自分もそのうちのひとりでした。

Elmは学習曲線のゆるやかな言語として有名ですが、それでもスケーラビリティやElmらしさを追求したアプリケーション開発をしていくためには、間違いなくチームでのディスカッションやベストプラクティスの発見などが必要だと言えます。弊社におけるアカデミー制やびわ会は、持続的な開発組織を支えるためのひとつの方法です。

今回の記事の内容と親しいトピックを私がElm Europe 2019で話したものがありますので、興味があればご覧ください。英語の発音が微妙なのはご容赦いただけると幸いです。

次回予告

Fringe81アドベントカレンダーの気になる明日は、我らがUniposチームをレペゼンするスーパーデザイナー@miyabt_による「デザインレビューの体制をつくった話」です。どうぞお見逃しなく。