WESEEK Tech Blog

WESEEK のエンジニアブログです

WESEEK がプロジェクトを始めるときに準備していること

こちらは 「SEROKUを支える技術 〜開発準備編〜」からの転載です。(多少編集をしています)

SEROKU の開発スタートを例に、弊社で行っているプロジェクト開始時の準備項目を紹介しています。



こんにちは。haruhikonyan です。 今回は前回のプロジェクト管理編に引き続き、この「SEROKUフリーランス」開発プロジェクトを開始するにあたっての準備にはどういったものが必要だったかを紹介したいと思います。

このSEROKUだけに限らず、何を開発するにも開発準備は必要だと思うので、参考になれば幸いです。

Wiki等情報共有ツールの用意

個人での開発では必須ではないかもしれませんが、チーム開発を行う上ではwikiなどの情報共有のためのツールは不可欠であると思います。

プロジェクト管理編でも紹介しましたが、WESEEKでは wiki には GROWI、チャットには Slack、ITS には YouTrack を使用しています。

プロジェクトの大筋には関係ありませんが、個人でも会社でもメンバーが一番使い慣れていたり、使いたい機能があるものを選定し、何かを始める際にはそのセットをすぐに立ち上げられるように準備しておくことが良いでしょう。

大まかな要件の確認

開発を行う上で要件を確認せずにいきなり開始するプロジェクトはそうありませんよね。とはいえ SEROKU ではウォーターフォール型開発を採用していないので長い長い要件定義フェーズというものがあるわけではありません。

そこで行うのが大まかな要件の確認です。コアとなるサービスの機能や、必要なことが確実にわかっている最低限の要件というものを洗い出していきます。

SEROKU の場合は

  1. フリーランスユーザと企業ユーザの2種類がいてユーザ登録とログインができる
  2. フリーランスユーザはオークション形式で自分のスキルの出品ができる
  3. 企業ユーザは出品されてるオークションに対して入札ができる

といったような具合にシステムの大まかな要件を洗い出していきます。そのほかの要件については、アジャイル開発を進めていくうえで都度優先度を決めて追加していきます。

アーキテクチャ選定

あらかたシステムの基礎となる要件の確認ができたら、実際に開発で使うアーキテクチャの選定を行います。

選定するうえで大事なのは下記のようなものを気にするとよいと思います。

  • 挙がっている要件を実現できるか
  • 流行っているか、コミュニティが成熟しているか
  • 扱える人材がチームにいるか
  • チームメンバーの宗教上扱うことが可能か

挙がっている要件を実現できるか

これは当たり前ですね。作ろうとしているものが技術上の制約で実現できなければ意味がありません。また、言語やフレームワークが作ろうとしているものに対しての向き・不向きも、もちろん考える必要があります。

流行っているか、コミュニティが成熟しているか

流行っているかどうかも技術の選定上では重要なファクターであると思います。

廃れているような技術やもう開発が終了していてコミュニティが盛んでないような技術は、問題が発生した際に対応することが難しかったり、そもそも情報がどこにも無いということがあります。その際に自分達だけで解決しようとすると余計な工数がかかってしまうという危険性があります。

扱える人材がチームにいるか

当たり前のようですが「流行っているから」とか「よさそうな記事を見つけたから」という理由で採用し、学習コストばかりかかってしまっても最終的にハッピーとは言い難かったりします。

とはいえ「最新技術を積極的に取り入れていきたい」という気持ちももちろんあると思います。その場合 WESEEK では技術選定のフェーズで試しに誰かが最新技術を使ってみて、その人がチーム内での先駆者となり主導していくということを行ったりします。

新規プロダクトのシステム開発合宿を試した、その結果・・・ では初めて使う技術を先駆者の導きにより、見事チーム全員が翌日には難なく扱えるようになっていました。

ソースコード管理

使うアーキテクチャの選定が終わったらソースコードの管理についても考える必要があります。これを含めてアーキテクチャ選定と言ってもいいかもしれません。

分散型 vs 集中型

ソースコードの管理にはバージョン管理システムを使っているチームがほとんどだと思いますが、バージョン管理システムには大きく分けて2種類あります。

ほとんどの方はこちらを採用していると思いますが Git や Mercurial などの分散型と、一方で一昔前までは主流であった Subversion (SVN) などの集中型があります。

WESEEK では基本的にはテキストファイル(ソースコードなど)の管理には分散型を用い、バイナリファイル(画像など)は集中型を使う、といったように併用しています。*1

オンプレ vs クラウドサービス

管理するための技術の選定が出来たら、ソースコードのバージョン管理を行うサーバが必要です。

Git でクラウドサービスを選択するのであれば、かの有名な GitHub をはじめとしたホスティングサービスが使えます。しかし大体のサービスはプライベートリポジトリを作成しようとするとお金がかかります。*2

一方オンプレで管理をするのであればサーバの電気代などの諸経費を考えなければ外部にお金を払う必要ありません。しかし万が一問題が起きた場合や構築するための人件費などを考えると必ずしも安上がりではないことに注意したいです。

開発スタートアップ執筆

ここまで割と一般的なことを述べてきましたが、おそらく開発スタートアップというものはどこの開発チームでもやっているものではないと思います。

SEROKU 及び WESEEK で行うプロジェクトにおいては必ず開発スタートアップというドキュメントを用意しています。
このドキュメントを書くことで、個人特有の環境の差異で出てしまうバグなどを未然に防ぐことであったり、新しくチームにジョインしてきた人もスムーズに開発へと参加できます。

ドキュメントを作成するためどうしても最初にコストはかかってしまうのですが、十分にペイできていると思います。

CD/CI 準備

現代においてプロダクトの開発を行う上では CD/CI は必須と言っても過言ではないと言われてきています。もちろん SEROKU でも CD/CI 環境の構築は施されています。

詳しい利用技術や概要については SEROKU を支える技術 ~CI/CD編~ を参照ください。

まとめ

これら上記に挙げたものはすべて必須と言うものではありませんが、 WESEEK がこれまでに「開発をする際に開発者が気持ち良く開発をできるようにするにはどういう準備、どういう仕組みが必要なのか」を吟味した結果です。

もちろんこれらの構成が決定版ということではなく、これからも技術の進歩とともに変化していくものだと思っていますので一例としての参考になればうれしいです。

関連記事

tech.weseek.co.jp

*1:Git ではバイナリファイルを取り扱うとリポジトリが肥大化しがちなので、 asset などの素材管理は Subversion で行っています。最近ではバイナリの扱いを Git LFS に逃がすという手法も一般的になってきています。皆さんは Git でのバイナリファイルの取り扱いはどうされていますか?

*2:2019/09/13 現在、無償化されたことは把握しています