Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
チームで開発するための環境を整える
Search
onozaty
March 14, 2024
Programming
350
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
チームで開発するための環境を整える
onozaty
March 14, 2024
More Decks by onozaty
See All by onozaty
Dev Containers のススメ
onozaty
0
32
リモートワーク中に買って良かったものベスト3
onozaty
0
200
情報を表現するときのポイント
onozaty
0
32
Selenium入門(2023年版)
onozaty
1
220
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
0
79
Java8から17へ
onozaty
0
29
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
0
270
Redmine issue assign notice plugin の紹介
onozaty
0
270
最近作ったもの
onozaty
0
38
Other Decks in Programming
See All in Programming
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
170
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
220
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
310
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.2k
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
1.7k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.5k
AI駆動開発で崩れていくコードベースを立て直す
kyoko_nr_nr
1
440
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
200
net-httpのHTTP/2対応について
naruse
0
450
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
120
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.1k
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
460
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
190
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Utilizing Notion as your number one productivity tool
mfonobong
4
320
Tell your own story through comics
letsgokoyo
1
950
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Un-Boring Meetings
codingconduct
0
310
Rails Girls Zürich Keynote
gr2m
96
14k
Thoughts on Productivity
jonyablonski
76
5.2k
Abbi's Birthday
coloredviolet
2
7.9k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Transcript
チームで開発するための 環境を整える 2024-03-14 社内勉強会 onozaty
チームで開発するための環境を整える • チームで開発するために整えておくべきと思うことを紹介 • どんなアプリケーション、開発言語でも共通する基本的なこと • 『こういうのもやっておいた方が良いよ』といったことがあれば、 後で教えてください
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
1. 情報共有できるようにする • チームで作業を行う上で、情報共有できる仕組みが必要になる • チャットだけではなく、情報を整理/ストックできるような仕組み を用意し、そこを見れば(検索すれば)プロジェクトに必要な情報に たどり着けるようにする • 新しいメンバが増えた場合にも、そこを見れば済むようにしておく
• チャット • Slack、Teams、Google Chat、Rocket.Chat など • 情報をストックできるもの • Confluence、GitHub/GitLabのWiki、Redmine/BacklogのWiki など
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
2. タスクを確認できるようにする • 各メンバのタスク状況を確認できるように • タスクを管理できるようなものを用意し、そこをみれば、メンバの 作業状況(どこまで作業進んでいるか、何が解決している/していな いのか)がわかるように、アップデートしていく • 作業をしている人は、他のメンバが見てもわかるように情報を残していく
• チャットで確認したようなことも、タスク側に残していくと良い • GitHub、GitLabのIssue など • Jira、Redmine、Backlog など (プロジェクト管理ツール的なもの)
2. タスクを確認できるようにする • チケット管理をメイン機能としたものに比べ、GitHubやGitLabの Issueは簡易的なものなので、そのプロジェクトで管理したいタスク に応じて、何を使うか決めると良い • コードに関するタスクしか管理しないならば、GitHubやGitLabのIssueでも 十分 •
それ以外のタスクも管理するならば、タスク管理がメインとなっているJira やRedmine、Backlogを使った方が出来ることが多く、管理しやすいと思う
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
3. コードレビューができるようにする • ソースコードのレビューを行うことで、コードの品質を担保する • コードを書いた人以外がチェックすることで気が付けることも多い • チーム内での知識の共有や教育にも繋がる • レビュー依頼、レビューコメントのやりとりが行えるものを利用
• Pull RequestがApproveされないとマージできないようなフローとし、 マージ先には直接pushできないように設定すると、フローが強要で きて良い • GitHub、GitLab、Bitbukect など
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
4. ローカル開発環境を統一する • 各メンバが開発するためのローカル開発環境は、できるだけ同じ状 態にしておかないと、ビルドやテストなどの動作で差が出てしまい、 余計な工数がかかることになる • 同じような状態の環境が作れるようにしておく • 手順をWikiなどにまとめて、後から参画したメンバでも同じような環境が作れるように
• 設定等もソースコードと一緒に管理し、同じ設定で開発できるように • 構築のための手数自体もできるだけ減らし、差が生まれる可能性を減らす&より短い時 間で構築できるように • DockerやVagrantなどの仮想化技術も活用
4. ローカル開発環境を統一する • Visual Studio Code の DevContainer という仕組みがおすすめなので、 まずはそちらを利用可能か検討すると良い
• DevContainerは、Dockerコンテナ上でVSCodeを通じて開発するための機能 • DockerとVSCodeがインストールされていれば、VSCodeを起動するだけで、必要な環 境が構築できるようになる • 各種設定やミドルウエアをコンテナに押し込める(Dockerfileで記述)ので、各メンバ間 の環境の差異を無くせる • DBなども別のコンテナとしてセットで起動可能(Docker Composeで定義) • VSCodeの設定(インストールする拡張機能など)もファイルで定義でき、コンテナ 側で用意される • DevContainerの設定はファイルとして定義するので、何か環境周りが変わったときは、 そのファイルを各メンバで取り込んでもらった(git pullしてもらった)うえで、コンテ ナを再度ビルドすれば反映される
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
5. コードのフォーマットを統一する • チーム内でコードのフォーマットを統一することで、コードが読み やすくなる • 無駄な宗教戦争も減らせる • フォーマットを設定し、その設定はソースコードと一緒に管理して、 各担当者で同じ設定となるように
• ファイルを保存した際に、自動的にフォーマッタが実行されるよう にするのも忘れずに
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
6. 静的解析ツールを利用する • 静的解析ツールを利用すると、コードを静的に解析して潜在的な問 題点などを検出することがる • 実行前やコードレビューに回す前に問題点に気が付くことができるので、 後の工程で余計な工数がかかるのを防ぐことができる • 様々なツール、チェック項目が提供されているが、もしも何を設定
して良いのかわからない場合には、デフォルトの設定を試しながら、 プロジェクトにあった設定にしていく • 何か問題が見つかった場合に、それを静的解析で検出できないか調べて、 項目として追加して改善していくと良い
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
7. ビルドの手間を減らす • ビルドをするのに手作業が入ってしまうと、繰り返しビルドするの が手間になる • ビルドが手間になってしまうと、ビルドの頻度が落ち、ビルドが失敗する ことに気が付くのが遅れかねない • 1コマンド(or
1アクション)でビルドが完了するようにする • ソースコードをリポジトリからチェックアウト後、1つのコマンドでビルド が完了するような形になっていることが望ましい
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
8. デバッグできるようにする • デバッグ実行可能とすることで、コードを追いやすくなる • IDE上からブレイクポイントを張って、デバッグ実行できるように • 何か問題があって、それがどういった状態で発生したのかを確認す る際にも、デバッグ実行できることが開発効率をあげることになる
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10. CIで定期的にチェックし、フィードバックを得る
9. ユニットテストを書けるようにする • コーディングを行う上で、ユニットテストには多くのメリットがあ る • 生産性向上 • ユニットテストを書くことで、小さな単位でコードを書いて動作を確認すると いったことができる
• 一通りコードを書ききってから確認するより、手戻りも減らせることになる • リグレッションテストによる問題の早期発見 • ユニットテストがあることで、変更箇所が意図せずに他の箇所に影響を与えてし まうようなこと(リグレッション)にすぐに気が付くことができる • リファクタリングしやすくなる • ユニットテストがあることで、振る舞いが変わらないことを保証できるので、リ ファクタリングが行いやすくなる
9. ユニットテストを書けるようにする • ユニットテストは繰り返し実行できる状態にしておく • ビルド含めて繰り返し実行できる状態になっているとよい • ユニットテストの網羅性を確認するために、カバレッジレポートも 確認できるように •
カバレッジレポートを確認することで、足りていないテストに気が付くこ とができる • ユニットテストでもデバッグ実行できるようにしておく
1. 情報共有できるようにする 2. タスクを確認できるようにする 3. コードレビューができるようにする 4. ローカル開発環境を統一する 5. コードのフォーマットを統一する
6. 静的解析ツールを利用する 7. ビルドの手間を減らす 8. デバッグできるようにする 9. ユニットテストを書けるようにする 10.CIで定期的にチェックし、フィードバックを得る
10. CIで定期的にチェックし、フィードバックを得る • CIツールを導入し、定期的にビルド、テストなどを行う • 結果はチャットなどに通知し、すぐに問題に気が付けるように • branchで問題無くても、mainにマージされたタイミングで他のマー ジとの組み合わせによってビルドやテストが壊れるといったことは 良くあるので、それをすぐに検知したい
• mainをチェックアウトした人が気が付くのではなく、CIで自動的に検出す ることで、どのマージによって壊れたのかといったことを把握して、すぐ に対応することができる • GitHub Actions、GitLab CI/CD (GitLab Runner)、CircleCI、Jenkins