フリーランスエンジニア・プログラマのみなさんは、普段どちらでお仕事をされていますか? 自宅だとなかなか作業が捗らない。たまには場所を変えてリフレッシュして仕事をしたい。そんな思いで自宅以外の仕事場を求めている方も多いので […]
SEROKUを支える技術 〜開発準備編〜
こんにちは。haruhikonyanです。
今回は前回のプロジェクト管理編に引き続き、この「SEROKUフリーランス」開発プロジェクトを開始するにあたっての準備にはどういったものが必要だったかを紹介したいと思います。
[adinserter block="1"]
このSEROKUだけに限らず、何を開発するにも開発準備は必要だと思うので、参考になれば幸いです。
目次
Wiki等情報共有ツールの用意
個人での開発では必須ではないかもしれませんが、チーム開発を行う上ではwikiなどの情報共有のためのツールは不可欠であると思います。
プロジェクト管理編でも紹介しましたが、WESEEKでは wiki には GROWI、チャットには Slack、ITS には YouTrack を使用しています。
プロジェクトの大筋には関係ありませんが、個人でも会社でもメンバーが一番使い慣れていたり、使いたい機能があるものを選定し、何かを始める際にはそのセットをすぐに立ち上げられるように準備しておくことが良いでしょう。
[adinserter block="1"]
大まかな要件の確認
開発を行う上で要件を確認せずにいきなり開始するプロジェクトはそうありませんよね。とはいえ SEROKU ではウォーターフォール型開発を採用していないので長い長い要件定義フェーズというものがあるわけではありません。
そこで行うのが大まかな要件の確認です。コアとなるサービスの機能や、必要なことが確実にわかっている最低限の要件というものを洗い出していきます。
SEROKU の場合は
- フリーランスユーザと企業ユーザの2種類がいてユーザ登録とログインができる
- フリーランスユーザはオークション形式で自分のスキルの出品ができる
- 企業ユーザは出品されてるオークションに対して入札ができる
といったような具合にシステムの大まかな要件を洗い出していきます。そのほかの要件についてはアジャイル開発を進めていくうえで都度優先度を決めて追加していきます。
[adinserter block="1"]
アーキテクチャ選定
あらかたシステムの基礎となる要件の確認ができたら実際に開発で使うアーキテクチャの選定を行います。
選定するうえで大事なのは下記のようなものを気にするとよいと思います。
- 上がっている要件を実現できるか
- 流行っているか、コミュニティが成熟しているか
- 扱える人材がチームにいるか
- ~~チームメンバーの宗教上扱うことが可能か~~
上がっている要件を実現できるか
これはあたりまですね。
作ろうとしているものが技術上の制約で実現できなければ意味がありません。また、言語やフレームワークが作ろうとしているものに対しての向き不向きももちろん考える必要があります。
流行っているか、コミュニティが成熟しているか
流行っているかどうかも技術の選定上では重要なファクターであると思います。廃れているような技術やもう開発が終了していてコミュニティが盛んでないような技術は問題が発生した際に対応することが難しかったり、そもそも情報がどこにも無いということがあります。その際に自分達だけで解決しようとすると余計な工数がかかってしまうという危険性があります。
扱える人材がチームにいるか
当たり前のようですが流行っているからとかよさそうな記事を見つけたからという理由で採用し、学習コストばかりかかってしまっても最終的にハッピーとは言い難かったりします。
とはいえ最新技術を積極的に取り入れていきたいという気持ちももちろんあると思います。その場合WESEEKではだいたい技術選定の上で試しに使ってみてチーム内での先駆者となり主導していくということを行ったりします。新規プロダクトのシステム開発合宿を試した、その結果・・・ ではみな初めて使う技術を先駆者の導きにより見事翌日には扱えるようになっていました。
[adinserter block="1"]
ソースコード管理
使うアーキテクチャの選定が終わったらソースコードの管理についても考える必要があります。
これを含めてアーキテクチャ選定と言ってもいいかもしれません。
分散型 vs 集中型
ソースコードの管理にはバージョン管理システムを使っているチームがほとんどだと思いますが、バージョン管理すステムには大きく分けて2種類あります。
まずほとんどの型はこちらを採用していると思いますが git や mercurial などの分散型と、一昔前までは主流であった svn などの集中型があります。
WESEEKでは基本的にはテキストファイル(ソースコードなど)の管理には分散型を用い、バイナリファイル(画像など)は集中型を使うという風に両方を採用しています。
オンプレ vs クラウドサービス
管理するための技術の選定が出来たら実際それらの仕組みを動かすサーバが必要です。
git でクラウドサービスを選択するのであればかの有名な GitHub をはじめとしたホスティングサービスが使えます。しかし大体のサービスはプライベートリポジトリを作成しようとするとお金がかかります。
一方オンプレで管理をするのであればサーバの電気代などの諸経費を考えなければ外部にお金を払う必要ありません。しかし万が一問題が起きた場合や構築するための人件費などを考えると必ずしも安上がりではないことに注意したいです。
[adinserter block="1"]
開発スタートアップ執筆
ここまで割と一般的なことを述べてきましたが、おそらく開発スタートアップというものはどこの開発チームでもやっているものではないと思います。
SEROKU 及び WESEEK で行うプロジェクトにおいては必ず開発スタートアップというドキュメントを用意しています。
このドキュメントを書くことで、個人特有の環境の差異で出来てしまうバグなどを未然に防ぐことであったり、新しくチームにジョインしてきた人もスムーズに開発へと参加できます。
ドキュメントを作成するためどうしても最初にコストはかかってしまうのですが十分にペイできていると思います。
[adinserter block="1"]
CD/CI 準備
現代においてプロダクトの開発を行う上ではCD/CIは必須と言っても過言ではないと言われてきています。
もちろん SEROKU でもCD/CI環境の構築は施されています。
詳しい使用技術や概要については serokuを支える技術 ~CI/CD編~ を参照ください。
[adinserter block="1"]
まとめ
これら上記に上げたものはすべて必須と言うものではありませんが、WESEEKがこれまでに開発を行うにあたって開発者が気持ちよく開発をできるようにはどういう準備、どういう仕組みが必要なのかを吟味した結果です。もちろんこれらの構成が決定版ということではなく、これからも技術の進歩とともに変化していくものだと思っていますので一例としての参考になればうれしいです。
>SEROKUを支える技術 ~開発準備編~
>SEROKUを支える技術~プロジェクト管理編~
>SEROKUを支える技術~社内 Kubernetes 編~
>SEROKUを支える技術~CI/CD編~
>SEROKUを支える技術~社内 Kubernetes トラブルシュート前編~
>SEROKUを支える技術 Angular Tips編 その1
>SEROKUを支える技術 Angular Tips編 その2
>SEROKUを支える技術 Angular Tips編 その3
haruhikonyan
大きな野望を抱くホルン吹き。