仕事に爆速でキャッチアップするための10の方法

この記事は [QualiArts Advent Calendar 2021](https://qiita.com/advent-calendar/2021/qualiarts) 5日目の記事になります。

# はじめに
皆さんは異動や配属などによって新たなプロジェクトに参加した際に早くキャッチアップしたいと一度は考えたことがあるのではないでしょうか？
今回は僕が現在のプロジェクトや学生時代のインターンなどこれまでに行った方法で有効だと思ったものを紹介します。

# この記事で伝えたいこと
効率的なキャッチアップ方法について紹介します。
また、効率の定義は以下の二つで考えています

- 時間に対する情報の収集量
- 時間に対する情報の理解度

# 1. プロダクトに触れる
当たり前のことですが、まずはこれから携わるプロダクトについて触れてみなければ何も始まりません。
隅々まで時間をかけて触れてみましょう。
この時に何がドメインモデルとなっているのか（なり得そうか）意識しておくとより今後の理解が深まります。

https://zenn.dev/m10maeda/articles/what-to-bear-in-mind-when-domain-modeling#%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%81%AF


# 2. Slackなどの過去ログを有効活用する
SlackやTeamsなどのコラボレーションツールを用いてコミュニケーションを取っているプロジェクトも多いと思います。
これらのツールは基本的に過去のやりとりを閲覧、検索することが可能です。
同じ会社、プロジェクトに所属している方々も初めは自身と同じようにキャッチアップに勤しんでいたはずです。
質問する前に知りたい内容で一度検索をかけてみると知りたかった情報がすぐに見つかるかもしれません。

また、チャンネルや投稿者、期間などで絞って検索することができます。
過去ログをうまく扱うことで、ググるよりも早く困っていることについて解決策やヒントになる手がかりを得ることが出来るかもしれません。

# 3. 様々なチャンネルに入り、閲覧できるやりとりはなるべく目を通す
現在、そして未来の自分が欲しい情報は自身から遠いところにある事があります。
自分が知らないところで知りたかった内容を他の人がやりとりしていることもあるかもしれないですし、何かトラブルが起きているかもしれません。
その時にどの様にコミュニケーションをとっているのか、解決のためにどんなアクションを取っているのかなど後に必要となる情報がきっとあるはずです。

また、他の部署で起きている出来事は、将来の自分に様々な形で降りかかる可能性があります。
関わっている業務について自分がいない場所で重要な決定を下されていた時に自分しか知らない問題があった場合、
バグの発生や手戻りなどプロジェクトに損失を与えてしまうかもしれません。
様々なことにいち早く行動できるようにこまめに自分が見れる範囲のやりとりには目を通すことをお勧めします。

# 4. 他の人が見える場所で質問する
DMなど限られた人のみが見れる場所での相談や質問については相手の状況に依存してしまい、すぐに返事ができない場合はそれだけ解決のスピードが遅くなってしまいます。
オープンな場所で質問することで閲覧できるすべての人が自分の質問に対しアクションを起こしてくれるかもしれません。
結果として解決のスピードも上がり、他の人が見れる形で情報を残すことができます。

# 5. DBのスキーマや定義されているエンドポイントを見る
ここからは技術的な話になります。

DBのスキーマや定義されているエンドポイントを知るとプロダクトの仕様、ビジネスモデルからコードを見なくてもデータの動きをある程度予測することができます。
どのようなインタフェースを提供し、どんな形の情報を保存 (保持) しているかを知るとより全体像を掴みやすくなると思います。

# 6. 変数名やクラス名などの名前を意識しながらコードを読む
プログラミングにおける名前付けはとても重要なものです。

>適切な名前をつけられると言うことは、その機能が正しく理解されて、設計されているということで、逆にふさわしい名前がつけられないということは、その機能が果たすべき役割を設計者自身も十分理解できていないということなのではないでしょうか。個人的には適切な名前をつけることができた機能については、その設計の8割が完成したと考えても言い過ぎでないことが多いように思います。

[プログラマが知るべき97のこと.com/エッセイ/名前重要](https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E5%90%8D%E5%89%8D%E9%87%8D%E8%A6%81/)

チームの方針などにもよるかもしれませんが、つけられた名前の意味を意識しながら読み進めることで少ない時間でロジックや構成について理解を深めることができます。

また、実際のプロダクト上での名前とシステム上で名前が異なる場合があります。
[QiitaのAPIドキュメント](https://qiita.com/api/v2/docs#lgtm)を見てもLGTMはAPIの定義上ではlikeと表現されています。
開発メンバーだけであれば会話でシステム上の名前を使用する事もあるため、名前に意識を向けることはコミュニケーション上でも役に立ちます。

# 7. GitのコミットやGithubなどのリモートリポジトリの過去のPR (Pull requests) を参照する
コードを読んでいく中で残されているコメントだけでは深く意図を理解をできない箇所も出てきます。
そのような時にGitのコミットやリポジトリのPRを参照するとコミットメッセージやPRのタイトル、説明などから実装の内容をより詳細に知ることができるかもしれません。
また、その周辺コードだけでなくコミットやPR単位での実装を見ることでより広い視野で実装内容を理解することができます。
リファクタリングしたつもりがバグを起こしてしまうなんてことも防げるかもしれません。

エディターなどによってはコードに変更を加えたPRなどを直接参照する機能などもあるため試してみると良いと思います。
下記に便利なVSCodeの拡張機能を貼っておきます。

- [GitLens](https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens)
- [GitHistory](https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory)

# 8. 複雑な処理はデバッグ機能を利用しながら読む
複雑な処理についてはそのままコードを読み進めてもどのようなデータがどう加工されていくのか想像しづらい場面もあると思います。
デバッグ機能などを活用し、実際のデータの動きを細かく追うことで理解を深めることができます。
エディターについているものやライブラリなどで提供されているものなど様々ですが、チームで使っている物がなければ使いやすいものを探してみると良いと思います。

また、デバッグ機能と合わせてテストコードも利用するとさらにロジックについて動きを追いやすくなると思います。

# 9. 現在のスキルに合わせて情報を収集する
参加したプロジェクトが自分のスキルセットに含まれていない技術を使用していることは少なくないと思います。
その際にすべて知ろうとしてもゴールが見えず辛くなってしまうかもしれません。
また、早く全てを理解することがプロジェクトに対しての成果に直結するとも限りません。

自分が得意な部分、業務で必要となる部分から理解を深めていき、業務をこなしていくことでよりドメイン知識と紐づいた状態で新しい技術について調べることが出来るため理解が早まると思います。

# 10. 公式ドキュメントだけでなくまとめ記事も合わせて活用する
これまでに触れたことのない技術について、概要や固有の単語について知らない状態がほとんどだと思います。
すでに近い分野の知識があるとスムーズに理解できるかもしれませんが、そうでない場合、個人的にはいきなり公式ドキュメントを読み進めても間違った認識をしてしまったり、知りたい情報に辿り着くまでに多くの時間を費やす可能性があります。
Qiitaやブログなどに上がっている記事を利用し、大まかな概要や固有の単語について理解を深めた後にそれらの知識を公式ドキュメントで補完していくことでより精度の高い知識を効率よく得ることができます。
できれば初めに見る記事はまとめ記事など広く説明してくれるものを選ぶとより時間効率を高めることができると思います。

# おわりに
キャッチアップを効率的に行うための方法として10つの方法を紹介させていただきました。
これらのことを意識すると自身もSlackやGit、コード上での名前付けなど次の新しく参加する人のために有益な情報を残していきたいと思える様になれるのではないでしょうか？
個人的にキャッチアップが早いなと思う方は様々なところから情報収集をされていることが多く、情報共有も積極的だと思います。

他にも有効な方法があればコメントで教えていただけると嬉しいです。


# 参考文献
- [ドメインモデリングをするときに気をつけていること](https://zenn.dev/m10maeda/articles/what-to-bear-in-mind-when-domain-modeling#%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%A2%E3%83%87%E3%83%AB%E3%81%A8%E3%81%AF
)
- [プログラマが知るべき97のこと.com/エッセイ/名前重要](https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E5%90%8D%E5%89%8D%E9%87%8D%E8%A6%81/)
- [Qiita API v2ドキュメント](https://qiita.com/api/v2/docs)