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
360
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
49
リモートワーク中に買って良かったものベスト3
onozaty
0
200
情報を表現するときのポイント
onozaty
0
37
Selenium入門(2023年版)
onozaty
1
230
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
0
83
Java8から17へ
onozaty
0
32
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
0
290
Redmine issue assign notice plugin の紹介
onozaty
0
290
最近作ったもの
onozaty
0
42
Other Decks in Programming
See All in Programming
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
640
今さら聞けない .NET CLI
htkym
0
190
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.3k
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
140
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
910
React本体のコードリーディング
high_g_engineer
1
140
Building a Meta Ray-Ban display app
akkeylab
0
130
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
170
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
330
<title><a id="</title>君はこのHTMLをパースできるか"></a></title> #雑LT_study
pizzacat83
0
140
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
490
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
170
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Writing Fast Ruby
sferik
630
63k
Navigating Weather and Climate Data
rabernat
0
470
The Art of Programming - Codeland 2020
erikaheidi
57
14k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
The Limits of Empathy - UXLibs8
cassininazir
1
600
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
270
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
320
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