プロジェクトに途中参加した時、どのようにキャッチアップするか
エンジニアの内山です。
最近、安城市周辺エンジニアを対象としたGo言語コミュニティを作りました。
10月にはもくもく会を実施する予定です。
ご近所の方は、よろしければ、ご登録お願いします。
概要
プロジェクトの途中で、新たにエンジニアが増えることがあると思います。
その時に、スムーズにキャッチアップしてもらえるように、環境を整備しておきたいと考えています。
そこで、自分自身がプロジェクトに途中参加した時に、どのようにキャッチアップしているのかを思い起こしてみました。
そうすることで、環境を整備する立場として、どういった施策を行えば良いか考察してみました。
1. システムの全体像を把握する
プロジェクトに途中で参加した場合、まずは全体像を把握します。
全体像を把握していれば、プログラムを書く際にどのようなことを考慮すべきか、想像しやすくなります。
以下のような資料を探して確認するようにしています。
- 企画書
- 要件定義書
- システム構成図
- サーバ構成図
施策
上記の資料を用意しておくと良さそうですね(当たり前にあるものが多いですが)。
また、資料が置いてある場所のリンク集ページを作って、参照しやすいようにしておくと良さそうです。
2. どのような関係者が関わっているかを把握する
プログラムを書く際に、仕様の細かい部分については、誰かに確認する必要があります。この場合に、関係者について把握しておくと、誰に何を確認すれば良いかが分かります。
メールやプロジェクト管理ツールのやり取りを確認したりしながら、以下の点を把握していきます。
- 社内のプロジェクトメンバーの構成
- 自社を含め、各関連会社の役割はどのようになっているか(発注元?システム開発?フロントエンド開発?バックエンド開発?デザイン?)
- 窓口にいる人はどういう役割で、どういった人か
施策
上記の点を簡単な資料として、まとめておくと良さそうですね。
各関係者の趣味や好きなものなど、人柄が分かるような特徴も書いておくと意外と役に立つかもしれません。
3. 実際に動いているシステムを確認する
プログラムを読む時には、実際にプログラムを動かしながら確認したほうが把握しやすいです。
以下のような方法でシステムの動作を確認します。
- Webシステムでブラウザから確認できるのであれば、一通り操作してみる
- テストコードがあれば、テストの実行方法を調べて、テストを実行してみる
施策
以下のようなことを記載したREADMEファイルを用意すると良さそうですね。
- 手元のPCでWebシステムを動かす方法
- テストコードの実行方法
4. 使用している技術を確認する
プログラムを詳細に読む前に、以下の点を意識しながら、ざっと見ていきます。
- どのような言語/フレームワーク/モジュールを使っているか
- どのようなミドルウェアを使っているか
- コーディング規約
- バージョンはいくつを使っているのか(言語やモジュールなど)
施策
以下のようなことをすれば良さそうです。
- lintツールを使用して、コーディング規約チェックの自動化する
- GemfileやGopkg.tomlなど、依存モジュールを記載できるツールを使用する
- TerraformやCloudFormationなど、Infrastructure as Codeなツールを使用する
5. プログラムを詳細に確認する
ざっとみてきて全体像や背景が掴めたら、プログラムを詳細に読んでいきます。
実行方法は分かっている状態なので、実際に少しコードを改修してみて確認することもします。
以下の点について意識して読んでいきます。
- 自分に割り当てられたタスクに関連する箇所を起点に読む
- 分かりやすそうな箇所のコードを読む
- テストコードを確認する
施策
プログラムを把握しやすい状態にするために以下のことに気をつけます。
- 読みやすいコードを書く
- テストコードを書く
- 適切なコメントを書く
最近、以下のツイートを発見しました。
コードには How
テストコードには What
コミットログには Why
コードコメントには Why notを書こうという話をした
日々これを意識して開発をしていると良さそうですね。
6. 割り振られたタスクをこなしていく
あとは割り振られたタスクをこなしていきつつ、必要な知識を身につけていきます。
プロジェクトのメンバーとして自律的に動けるようにしていきます。
施策
参加してもらった直後は、以下のことを意識してタスクを割り振るようにすると良さそうです。
- 動作を把握してもらうために、動作テストをしてもらう
- 開発難易度が低いタスクで慣れてもらう
まとめ
今回は、自分がプロジェクトに途中参加した時を思い起こしながら、どのような施策を行えば良いかを考察してみました。
施策をまとめると以下のようになります。
- 全体を把握するための資料を作る
- 資料を見つけやすく参照しやすいようにする
- プログラムの実行方法を明示する
- lintツールでコーディング規約チェックについて自動化する
- GemfileやGopkg.tomlなど、依存関係を列挙しておけるツールを使用する
- コードやコミットコメントを書くときは、読む人に配慮する
- 最初期のタスクの割り振りに気をつける
MMMでは、すでにできている点が多くあるように感じました。
今後は、まだできていない点については実践していきつつ、フィードバックを得ながら、より良い環境を整えていきたいです。