2022 年度新卒研修で「コードリーディング」の研修を担当しました

「コードリーディング」という研修の内容と、実施にあたって考えたことの共有
2022.07.13

クラスメソッドの 2022 年度新卒研修において、「コードリーディング」という研修を実施しました。 ここで実施にあたって考えたことや資料など、すべての情報を共有します。

目的

既存プロジェクトにおいて迅速に立ち上がるためのスキルを獲得する、およびアクセス可能な知の幅を大きくする

達成水準

  • 目的の処理を見つけ出すことができる
  • どのように機能を実現しているかがわかる
  • インフラについてはどこに何を設定すればいいかがわかる

研修構成

IaC から目的の構成を見つける

項目 内容
実施形式 講義 + モブワーク
目的 仕様変更や機能追加などを短時間で実施できるようにするため
達成水準 目的とする構成を設定している箇所を見つけ、設定値を読み取ることができる

内容

  1. IaC: Infrastructure as Code とはなにか
  2. IaC の基礎的な考え方
  3. CDK とはなにか
  4. 例題: CDK のコードを読む

発展課題

既存コードから目的の処理を見つける

項目 内容
実施形式 講義 + モブワーク
目的 仕様変更やバグ修正、機能追加などを短時間で実施できるようにするため
達成水準 目的とする処理を実現している箇所を見つけ、どのように変更すれば良いかがわかる

内容

  1. ツール
    • git grep <keyword>
    • git ls-files | grep <keyword>
    • 辞書
    • 言語のドキュメント
    • Google 検索
    • 書くもの ( エディター / 紙とペン / ホワイトボード )
  2. コードを読むことの意味
    • 現状の処理を理解する
      • 的確な変更をするため
        • 壊さないため
      • 変更にかかる見積もりをするため
    • テクニックを盗む
      • どうやって実現しているんだろう?
      • センスを磨く
        • センスとは引き出しの多さ
  3. 目的設定の大切さ
  4. みんなでコードを読む準備
  5. 例題 -gh: label を編集するコードを探してみよう
  6. 課題
    • みんなでやってみよう
      1. gh: 特定の label がつけられた issue を検索するコードを探してみよう
      2. vscode: language server とのやりとりがどのようになされているかを追ってみよう
      3. react-native: JavaScript 層からネイティブ層へどのようにデータが渡されるのかを追ってみよう

発展課題

発展課題

興味のある OSS プロジェクトにコントリビュートしてみよう

新卒メンバーからのフィードバック

良かった点

  • モブワークでコードを読んでいくのは面白かった
  • 存在するツールの実装を追うのは楽しかった
  • コードの追い方は現場でも使える知識だった
  • IDE ではなく、 git コマンドから実装を追っていく知識は参考になった
  • gh コマンドは身近なため、挙動がイメージしやすくコードを理解しやすかった
  • OSS からの学びも大きいことに気づいた

伸びしろ

  • モブワークは途中でついていくのが大変だった
  • IaC は実際に構築するほうが身につくのではないか?
  • チームをふたつにわけて、各自が関与しやすくすると良いのではないか?

やってみて

クラスメソッドでは OSS へのコントリビュートも業務の一環です。また、普段から OSS にお世話になりながらシステムやサービスを開発しています。そのため、 OSS へ慣れ親しんでもらおうというテーマも持たせた研修としました。

どこかで OSS の考え方や精神についても学んでもらえればと思うのですが、新卒研修の段階ではないな、と考え、より実践的かつ面白いと感じてもらえる内容に倒した結果、こうなりました。

講義についてはスライドを作る時間がなく、ブラウザー上で関連情報を見せながらの実施となりましたが、それでもみなさんから理解しやすかったとおっしゃっていただけました。もしかしたら僕がスライドを見せながらしゃべるのが苦手なのかもしれません。が、それは個人によりすぎているので、誰でも再現可能な形にしたいですね。

IaC については例題に適したコードがなかなか見つからず、自分で書くことも検討しました。が、おりよく AWS が出しているサンプルを見つけたため、活用させていただきました。

IaC は構築したほうが身につきやすいと思いますが、この研修はあくまでリーディングを身に着けてもらいたかったため、範囲外としました。前段の研修で IaC を用いて構築する時間がとれれば、理解が進むかもしれません。

gh コマンドの中身を読むところは好評でしたが、時間配分が難しくドライバーをお願いできたのがひとりだけでした。「途中でついていくのが大変だった」とのフィードバックはドライバーではなかった方からのものです。ドライバーが一番学びがあるのがモブワーク / モブプログラミングですので、全員がドライバーをやっていただけるよう、タイムキープに気をつける必要がある形式だと感じました。

モブプログラミングを取り入れた「読みやすいコード」の研修に比べると、モブワークは機能していたと思います。よりきめ細やかなフォローをするために TA さんを配したり、最大 3 名ていどなどドライバーとナビゲーターを経験してもらいやすくするチーム分けをするなどが考えられます。来年度の検討課題です。

課題については想定より早く解けてしまった際に備え、ボスとして Visual Studio Code の language server とのやりとり、およびラスボスとして React Native のネイティブ層と JS 層とのデータのやり取り部分をおきました。研修に依らず、この辺を読んでいくと確実にレベルアップできますのでおすすめです。