バックエンドの技術選定、開発フローにおいて重要視した事
どうもーーーー!!株式会社UNDEFINEDでエンジニアをしています、垰尚太朗(@taoshotaro)です。
はじめに
プロダクトを作るにあたって私が担当しているバックエンドでどの様に技術選定をしたのか、また、複数のエンジニアで開発をしているので、開発フローを滑らかにする為に実行した事などを書いていこうと思います。
技術選定
私たちは今回のプロダクトでElixirを使用しています。理由は沢山ありますが、何故Elixirを選んだのか3つ話したいと思います。
1.関数型言語である事
複雑な処理をするバックエンドにおいて最も重要な事は想定外のバグを無くす事です。フロントエンドがどれだけ完璧な実装でもバックエンドが落ちたり、想定外の動作をしたりすると良いサービスとは言えないものができてしまいます。
関数型言語であるElixirを使用する事によって、
- 綺麗でシンプルである
- コードの訂正がしやすい
- デバッグが簡単(テストが書きやすい)
- 関数、処理同士で副作用の無い
コードを実装する事ができます。もちろん関数型プログラミング言語はElixirだけでありませんが、良い選択だったと思います。
2.スケーラビリティ
これは僕が説明するよりもいい記事がたくさん載っているので詳しくは書きませんが、Chat機能であったり、通知機能であったり、アクセスが集中する可能性のある機能を実装する場合リアルタイムに次々と処理を行わなければいけないのでスケーラビリティは大変重要になっていきます。
3.Phoenixの存在
WebアプリケーションやAPIなどを実装するときに使用するフレームワークです。Ruby on Railsなどにインスピレーションを受けて作られたものです。直感的にかけるすごく生産性の良いものになっています。Ectoと言うデータベースを操作するライブラリもPhoenixとよく一緒に使われます。
開発フローについて
前回のNYAGOを開発していた時期は、出来る人ができる所から作って行くと言う感じで全く管理をしていませんでした。その結果直接話し合う時間が多くなってしまい、進みが悪かったと思っています。
今回から、バックエンド、フロントエンド共にGitHubのマイルストーンを使うことにしました。マイルストーンとは簡単に説明すると、GitHubのissueをまとめて一つの大きなissueにすると言う感じです。PM、デザインから回ってきたタスクを一つのマイルストーンとして、そこにissueを追加して行くことによって今誰がどこの部分をコーディングしているのかなどが簡単にわかるようになっています。
また、今回から、デザイン、フロントエンド、バックエンド全てのタスクを1つのところにまとめるためにTrelloを使用しています。終わったタスクのものにはTrelloのToDoリストにチェックを入れて、最後に終わったチームがカラムを動かして終了とい感じになっています。
これにより、エンジニアの出勤時間がバラバラであったり、話す時間が少なくなってしまってもお互いの進捗がPMからも簡単に分かるし同じエンジニアからは詳細までも分かると言う風になっています。
最後に
今回から初めてElixirを使用する事になりましたが、関数型プログラミングの書きやすさ(勿論最初は慣れるまで大変でした)、テストのし易さ、バグの少なさには少し感動しました。また、新しいエンジニアも増えて、開発フローなどについても話し合う事があり最初に少し時間を使いましたが、後々このようにしていたことは必ず役に立つのでは無いかなと思います。
本当に最後になりますが、デプロイ環境をテストと本番に分けて完全に自動化させるとすごく捗ります!!以上です!!