最近のWeb開発の進め方
今回は、最近の、というよりは前職のスタートアップベンチャーで行っていた開発の進め方を振り返って、当たり障りない範囲で紹介しようかなとおもいます。
その上でうちではこうだよ、こっちの方が効率よくない? とうい意見がありましたら教えていただけると嬉しいです!
環境の切り分け
開発環境
開発作業を進めるための環境。ローカルで行う場合もあり。
テスト環境
CIツールを利用してテストを行うための環境。テストデータも最小構成。
ステージング環境
本番環境と同じ構成で構築。データに関してだけ本番の一部分のみを利用することも。
本番環境
本番環境。全てのテストにクリアし、公開しても問題ない環境。
進捗管理
RedmineやPivotaltrackerといった各種ツールを利用。
各Gitのプロジェクト単位で管理し、まずは大分類となるタスクを洗い出し、(親チケット) そのタスクにはどんな作業や手順が含まれるかを全て洗い出してそれを小チケットとして登録し、小チケットに関して時間を見積もり、最終的な各チケットに関してPMと相談し優先度を決定。
Redmineの時は当然、Gitと連携。プラグインでガントチャートを導入して書く作業の可視化。
Pivotaltrackerに関しては、正直なところそこまで使いこなせてはなかったと思う。基本カンバン形式でチケットを切っていくので、Redmineとは考え方は違うのかもしれない。
バージョン管理
基本的にGitを使用。古いシステムではSubversionが残っていた時期もあったが、新規の案件の場合は全てGitで行っていた。
ブランチの切り方
- master ステージング環境で検証後、本番環境へデプロイ
- devlopment テスト環境でテスト後、masterブランチへプルリク、マージ
- isssuexxx チケットの管理番号でブランチを切り、開発後、devlopmentブランチへプルリク、マージ
バージョンの分け方
GitのTagを使用。少数3位まで(0.x.x)。少数2位は機能追加 or バグで加算、2桁になる前にメジャーバージョンを上げる。少数3位は主に修正、リファクタリングで加算。
デプロイ
基本的にCapistranoを使用。(version2系)
小規模プロジェクト、モックアッププロジェクトについては、AWSを使用していたのでAMIを利用してImmutable Infrastructureのような感覚で前バージョンのAMIを残し、予め構築済みのAMIを適用して行っていたこともあったかな。
CI
Jenkinsで構築。テスト、シンタックスチェック、コードカバレッジを管理。
開発
コーディングスタイル
- 各言語について、標準とされているコーディングスタイルを採用
- インデントは2スペース
- 英語は略さず翻訳可能なものを使用
- コメントはJavaDocやPHPDoc、yard等、何のメソッドで、引数の型、returnは確実に記載
コーディングについては、大体は下記の本を見ればいいかも
SQL
- ワイルドカード(*)は、基本的に使わない。
- JOIN系は、LEFT JOINで行う
- 基本的に負荷になりうる可能性があるクエリは極力さける、または必要な部分のデータをローカル等、他の環境へ退避して実行
SQLについても、だいたいアンチパターンを理解して実行するようにしていたので、これもWebや書籍などで学習すればいいかも
最後に
開発の進め方、ルール等についてはやっぱり会社によって違いがあって当然で、前職でこうだったからこれが正しいとか、先入観だけで物を言っても仕方が無く、前の現場と現在の現場と比較して、これはこうだから効率いいよねとか、考え方によっては現在の考え方もありなのかとか、まずは自分で納得し、周りにも納得させられるようなコミュニケーションを図っていくのがやっぱりいいっすね~
あと、開発は楽しく行いたいもんですね^^