はじめに
こんにちは、クラウドハウス労務でバックエンドエンジニアをしているtitti-008です。
本記事は Techouse Advent Calendar 2024 9日目の記事です。
昨日は Kaffff さんによる localStorage の値を Zod で安全にパースする でした。本日は、ChatGPTを活用した社内勉強会の継続開催の取り組みについて書きます。
背景
弊社Techouseには、素質ある多くのエンジニアインターンが在籍しています。エンジニアインターンの文化については、こちらの記事をご参照ください。彼らは将来優秀なエンジニアになることが期待される「金の卵」であり、各事業部に配属されています。しかし、基本的に実務経験がない状態でのスタートとなります。
実務経験を通して成長できる部分は多々ありますが、それだけでは補いきれない知識やスキルが求められる場面も多くあります。さらに、弊社の各事業部のサービスは規模が大きいため、勉強不足だと大規模開発に求められる以下のような知識が不足しがちです。
- パフォーマンスチューニング
- クリーンアーキテクチャ
- ドメイン駆動設計
- TDD(テスト駆動開発)
- ポリモーフィズム
- 依存性注入
この課題を解決するために、これらの基礎的かつすぐに使える技術を提供するための勉強会を定期的に開催したいと考えました。
しかし、日々の業務に追われて発表資料の作成に時間をかけられないという問題や、扱う内容の奥が深いためスピーカーのハードルが高くスピーカーを募集するのが難しいという課題があります。その結果、継続して勉強会を開催することが困難になることが懸念されます。
さらに、私自身の問題として、教えたいことはたくさんあるものの、資料作成がとても苦手で、時間がかかる上にクオリティが低いという悩みを抱えています。
(同様の悩みを抱えるエンジニアは多いのではないでしょうか)
ChatGPTを使ってみた
これらの課題を解消するために、ChatGPTを使って、その場で勉強会資料を自動生成させて、発表・議論することにしました。
事前準備
発表資料はChatGPTに生成してもらうため、準備しなくても問題ありません。
ただし、ChatGPTが生成できない以下のものは準備しておく必要があります。
テーマ
スピーカーが伝えたいこと
失敗例などはソースコードのリンク
勉強会の流れ
ChatGPTに資料作成を依頼する。
プロンプトの例:
Rubyエンジニア向けの勉強会で用いる解説資料を作成してください。 テーマ: 依存性注入 内容: * 意味 * 用途 * 歴史 * 使わない例 * 使った例 * JestでJQueryのテストを追加するために、既存の依存性注入が使われていないコードを リファクタリングしてテストをしやすくする例 * RSpecでRailsのテストを追加するために、既存の依存性注入が使われていないコードを リファクタリングしてテストをしやすくする例
生成された資料を元に、勉強会を開催する。
以下に、実際に生成された資料の一部を示します。
ChatGPTに資料作成を依頼する際には、話したい内容をプロンプトで指示します。そうすることで、その内容に沿った資料が生成されます。
(※ ここではChatGPT o1-previewを利用しました。)
以下に、上述のプロンプトを元に生成された資料の一部を示します。## 依存性注入(Dependency Injection)に関する解説資料 ### 目次 1. 意味 2. 用途 3. 歴史 4. 使わない例 5. 使った例 6. JestでjQueryのテストを容易にするためのリファクタリング例 7. RSpecでRailsのテストを容易にするためのリファクタリング例 ### 意味 **依存性注入(Dependency Injection, DI)**とは、オブジェクト指向プログラミングにおけるデザインパターンの一つで、クラスやオブジェクトが必要とする依存関係を外部から提供する手法です。これにより、コードの再利用性やテスト容易性が向上し、モジュール間の結合度を低減します。 ### 用途 テスト容易性の向上: 依存関係を外部から注入することで、モックやスタブを使用したテストが容易になります。 モジュールの再利用性: 依存性を持たないモジュールは、他のコンテキストでも再利用しやすくなります。 結合度の低減: モジュール間の直接的な依存を減らし、コードの柔軟性を高めます。 ### 歴史 依存性注入の概念は、2000年代初頭にマーティン・ファウラーが提唱したもので、ソフトウェア開発における設計原則の一部として広く認知されるようになりました。特に、JavaのSpring FrameworkやRubyのRailsなど、多くのフレームワークで採用されています。
15分程度時間を取り、その技術が使えそうな例や失敗例を、参加者に探してもらう。
日頃見ているプロダクトコードから探してもらうと、より実践的な例が見つかり、議論が深められます。
その後、その内容を紹介・議論して、技術選定の考え方・トレードオフなどを共有する。
よかったこと
資料作成にかかる時間をゼロにできた
従来、資料作成には数時間から場合によっては数日を費していました。ChatGPTを利用することで、その時間を大幅に削減し、他の重要な業務や学習に時間を充てることができました。また、資料作成のストレスから解放され、発表内容に集中できるようになりました。
スピーカーのハードルを下げることができた
資料作成の負担が軽減されたことで、発表者の心理的なハードルが下がりました。その結果、「次回は僕が発表しようかな…」と名乗り出てくる人も現れました。(以前はスピーカー探しに苦労していました)
その割に、十分な内容の資料が生成された
ChatGPTが生成した資料は、基本的な概念から具体的なコード例まで網羅しており、初学者にも理解しやすい内容でした。説明が足りない部分は、発表者が補足説明を加えることで十分に質の高い勉強会を実施できました。
気軽に勉強会を開催できるようになった
資料作成の負担が軽減されたことで、気軽に勉強会を開催できるようになりました。これにより、持続的な勉強会運営が可能になりました。
参加者が自分で考える時間を持つことで、理解度が向上した
理論だけでなく実践的なスキルも身につき、日々の業務にも直結する効果が得られました。(これはChatGPTとは直接関係ありませんが)
プロンプトのフォーマットを作っておけば、色々な人が楽に発表できるようになった
汎用的なプロンプトテンプレートを作成することで、誰でも簡単にChatGPTに資料作成を依頼できるようになりました。このテンプレートを社内で共有することで、新しい発表者もスムーズに勉強会の準備ができるようになりそうです。
プロンプトテンプレートの例:
Rubyエンジニア向けの勉強会で用いる解説資料を作成してください。 テーマ: 対象者: * 社内のRubyエンジニア * 実務経験半年~3年程度を想定 内容: * 意味 * 用途 * 歴史 * トレードオフ * 使い方/使わない方が良い例 * 使った例 * (必要に応じて追記する)
課題
ChatGPTが出力する資料の信頼性(ハルシネーションのリスク)
事前にある程度勉強しておかないと、生成された資料が間違っていても気づけない可能性があります。ただし、人間が資料を作っても間違えることはあるので、これは許容範囲内と考えています。
参加者が楽しめるような内容になるかは、ChatGPTは保証してくれない
こちらはプロンプトの型をブラッシュアップしていけば安定してよい資料を生成してくれるのではないかと思います。
まとめ
ChatGPTを活用することで、資料作成の負担を大幅に減らし、スピーカーのハードルを下げることができました。
また、ゆるい雰囲気で発表できたので、参加者が自発的に補足してくれる様子も見られました。
これにより、継続的な勉強会運営が可能になり、参加者の理解度向上も期待できそうです。
皆さんもぜひ試してみてください。
ちなみに…
ちなみに、この記事も ChatGPT(o1-preview)の力を借りて執筆しています。
書く内容は自分でざっくり箇条書きでまとめる(ですます調などは適当で良い)
記事の書式、社内ルールブックも含めて、プロンプトを作成
ChatGPTにプロンプトを投げて、生成された文章を元に、肉付け・修正して最終的な文章を作成
私は資料・記事作成は苦手なので、本当にありがたいです。
明日のTechouse Advent Calendar 2024は rei_fujise さんによる 金曜日の夜は自然とエンジニアが集まって技術を語り合う、そんな会社にしたいんです。 です。
Techouseでは、社会課題の解決に一緒に取り組むエンジニアを募集しております。ご応募お待ちしております。