RevComm Tech Blog

コミュニケーションを再発明し 人が人を想う社会を創る

エンジニアとして社会に貢献し続けるために生成AIを使ってやっていること

はじめに

生成AIの急速な発展により、エンジニアを取り巻く環境は激変しています。特に注目すべきは、Coding Agentの登場によって多くの場面で生成AIが実用的なコードを書けるようになったことです。実際、単純な機能実装からバグ修正まで、Coding Agentに任せる仕事が日々増えています。 一方で、Coding Agentを効果的に使いこなすには、エンジニア自身の高い技術力が不可欠です。適切な指示を出し、生成されたコードの品質を評価し、システム全体の整合性を保つためには、従来以上の深い理解が求められます。また、アーキテクチャ設計、技術選定、チームマネジメントなど、未だにCoding Agentには任せられない重要な業務も数多く存在しています。 さらに重要なのは、Coding Agentが人間の成長速度を大きく上回るペースで発展し続けていることです。エンジニアとして社会に貢献する活動を続けたいなら、自身もこれまで以上のスピードで成長することが不可欠になっています。

そこで本記事では、このような時代背景を踏まえ、私がエンジニアとして社会に貢献し続けるために生成AI(主にChatGPT)を活用している手法を紹介します。

1. 自分には何が足りていないか、何をやるべきかをChatGPTを使って考える

1.1 エンジニアグレードの客観的評価

まず、自分の現在地を正確に把握するために、ChatGPTにエンジニアのグレード判定を依頼しました。以下のプロンプトを使用しています。

私に質問をしながらソフトウェアエンジニアとしてのレベルを把握し、シニアになるために必要な知識や技術を整理してください。 質問は問題でも構いません。 質問は20問として、1回に1つ行なってください。似たような質問にならないようにしてください。

このプロンプトの特徴は、対話式で進行し、ChatGPTが1つずつ質問を出してくることです。1回に1つ、という指示を入れることで1回のやりとりで大量に質問してくるのを防いでます。例えば以下のような質問がありました。

  • 「システム設計でキャッシュを導入する際に、キャッシュの有効期限(TTL)を設定する場合、どのような考慮事項がありますか?具体例を交えて説明してください。」
  • 「データベースにインデックスを作成する際、インデックスを追加することによる利点と欠点をそれぞれ1つずつ挙げ、具体的なシナリオを用いて説明してください。」
  • 「分散システムで 'CAP定理'(Consistency, Availability, Partition Tolerance)の3つの要素を簡単に説明し、それぞれがトレードオフとなる理由を述べてください。」

回答後、ChatGPTからは以下のような評価を受けました:

あなたのスキルは、すでに中堅エンジニアとして高いレベルにあります。ただし、シニアエンジニアとして求められる「より大規模で複雑なシステムの設計」や「チーム全体を見据えた意思決定」のスキルをさらに伸ばす余地があります。

このような客観的な評価により、自分の現在地と次のステップが明確になりました。

1.2 マンダラチャートによる成長戦略の立案

次に、エンジニアリングマネージャー、ソフトウェアアーキテクト、スタッフエンジニアの3つのキャリアパスを想定したマンダラチャートの作成を依頼しました。 マンダラチャートとしたのは、必要だと思われる要素を網羅的に抽出したかったからです。

5年目のSaaS開発のソフトウェアエンジニアが、*** になるためのマンダラチャートを作成してください

※ *** の部分には、ソフトウェアアーキテクト、エンジニアリングマネージャー、スタッフエンジニアなどのキャリアパスを入れて実行します。

このプロンプトは非常にシンプルで、キャリアパスごとに別々に実行することで、それぞれに特化したマンダラチャートを生成できます。SaaS開発の経験を前提としているため、より実践的で具体的なスキルセットが提案されます。

例えばソフトウェアアーキテクトでは以下のようなチャートが生成されました。

マンダラチャート

1.3 ポジショニングマップによる現状分析

マンダラチャートの各項目を抽象化し、強み・弱みを横軸、機会の多さを縦軸にしたポジショニングマップを作成しました。また、NLP(神経言語プログラミング)の学習5段階をカスタムした成熟度の自己評価を各項目に対して行いました。

  1. 無意識的未経験(知らないしやったこともない)→ 緑色
  2. 意識的未経験(知っていてもやったことがない)→ 青色
  3. 意識的経験(知っていてやったことはある)→ 黄色
  4. 意識的有能(考えるとできる)→ 赤色

この評価をマッピング時の色に反映させることで、優先的に取り組むべき領域を視覚化しました。 3,4ヶ月くらい前に作成したのですが、青色も業務でやっていないことはないので、もっとやっていないといけないという厳し目の自己評価だったのだろうと思います。

ポジショニングマップ

1.4 実践への落とし込み

ポジショニングマップの分析結果から、主に真ん中よりも左側にある青色の項目は比較的機会もあり伸ばす領域なのでここに注力すると良さそうなことがわかります。これによって業務では以下の2点を意識してタスクを取ったり、課題を探したりしやすくなりました。

  1. 課題が明確で、取り組めるもの x 自分が伸ばしたい領域のもの
  2. 課題がありそうだが明確ではなく、調査が必要なもの x 自分が伸ばしたい領域のもの

加えて、設計は開発と比べてたくさんやれる機会があるわけではないので、後述する Architectural Katas を始めることにも繋がりました。

2. Architectural KatasとChatGPTを使ってシステムデザインを学ぶ

2.1 Architectural Katasとは

Architectural Katas(https://www.architecturalkatas.com/)は、プログラマーがプログラマーとしての実践の機会を必要とするのと同じように、ソフトウェアアーキテクトにはソフトウェアアーキテクトとしての実践の機会が必要であるという願望から生まれたサイトであり実践方法です。社内で設計を学びたいならこういうものがある、と教えていただきました。

Architectural Katas 自体はグループで行う前提となっていますが、私は試しに ChatGPT とやってみて一定価値を感じたのでその方法を共有します。

2.2 ChatGPTによるシステムデザイン面接の実践

ChatGPTで Architectural Katas を実施する方法は、海外のBig Tech 企業でもよくあるシステムデザイン面接を参考にしています。ChatGPT を面接官としてどのように振る舞って欲しいかをプロンプトで指定します。

私はソフトウェアエンジニアとして優れたアーキテクトになるべくArchitectural Katas を活用して勉強したいです。
あなたは以下の指示に従い、ソフトウェアデザインの試験官のように振る舞って私の学習をサポートしてください。
 - まず、私が Architectural Katas の設問をソフトウェアデザインの試験官であるあなたに与えます。
 - 与えられた設問について曖昧な部分は、試験官であるあなたが定義する必要があります。定義をするだけで私が質問するまで公表する必要はありません。
 - 私が設問について質問した場合にソフトウェアデザインの試験官として適切な返答をしてください。
- その返答を参考に、私は設問に対して設計を行い、回答を仕上げます。
- 私の回答に対してレビューを行い、良い点、更に考慮すべき点、改善案を提示してください。更に考慮すべき点、改善案については、その考慮をしたり案を出したりすることが、どれくらいのレベルのソフトウェアエンジニアに求められるか、難易度がわかるようにしてください。

このプロンプトによって、ChatGPT は問題を把握しても質問や回答があるまでは、何かをユーザーに教えるようなことはありません。ユーザーは問題を確認し、前提条件や想定されるユーザー数やリクエスト数やデータサイズなどを見積って ChatGPT に認識の確認するとズレていないか回答してくれ、設計をして提出するとフィードバックを得ることができます。

2.3 実際のイメージ

オンラインでドキュメントを作成・編集・バージョン管理・印刷でき、手動・自動決済もできるサービスをつくるというような問題が出たときの、実践模様を書いていきます。

システムプロンプトを渡したあと、問題を渡します。

次の問題

ChatGPT が返事をしてきます。(確認の観点を先回りして発言していますが、そういうときもあります。)

ChatGPTの返事

以下のように前提条件を確認すると、ChatGPTから返事が来ます。長いので割愛します。

前提条件の確認

実際に設計してみた回答を ChatGPT に送ります。

設計してみた回答

ChatGPT からフィードバックが返ってきます。 良い点も挙げてくれますが、改善すべき点もレベルと一緒に教えてくれます。 以下はフィードバックの抜粋です。

総評

スコープ内のコア機能(ドキュメント編集・バージョン管理・印刷ジョブ・決済)を 4 つのサービスに分割しており、役割も明確です。

エッジに CDN を置き、リアルタイム更新は WebSocket 専用サービスに任せる設計も理にかなっています。

初期利用者「数千 → 数百万」を見据え、キューで印刷ジョブを非同期化しているのもスケールに有効です。

~~~ さらに考慮すべき点 & 改善案

  • バージョン管理の実装(Mid)
    • S3 バージョニング+version_id を RDS に参照保存差分保存(delta/DDS)で容量削減
  • リアルタイム編集方式(Senior)
    • 単独編集ならロック制御 (optimistic/pessimistic)
    • 将来協調編集を見込むなら OT/CRDT ライブラリ採用
  • 印刷ゲートウェイ不足(Senior)
    • Print Job Service の下に Printer Gateway を追加:IPP over TLS、Secure Release (PIN/NFC)、ドライバー隔離 (コンテナ)
  • 決済の信頼性(Mid)
    • PSP からの Webhook 受信 → 冪等キーで payment_status 更新
    • サービス間通信は Outbox/Polling で二重送金を防止

更に考慮すべき点 & 改善案 で知らなかったものについてはチケット化し、別でインプットしたり掘り下げることで、幅広い知識と観点を養えることを期待しています。

週1回を目安に始めて、まだ1ヶ月程度ですがそれでも知らなかった技術に出会い、自分が見落としやすい観点を見つけ、どこの知識が足りないのか、知っていると思っていて実はちゃんと知らなかったものは何かがわかるので、とてもおすすめです。

3. 英会話をChatGPTとやる

3.1 背景と課題

生成AIによるサービスが急増するなかで英語を学ぶことに時間を使うかどうかは、人によって判断が分かれると思います。私自身は、特に予定はありませんが社会に貢献し続けるために将来的に海外で働いたり大学院に進学したりを、自分のしたいタイミングでできるよう、IELTS を定期的に受験しています。IELTSは Reading、Listening、Writing、Speaking 全てのテストがあり、Speaking は自己紹介とインタビュー、スピーチ、ディスカッションという3つのパートに分かれています。現在の私のスコアはOverall 6.0ですが、Speaking だけが5.0とボトルネックになっている状況です。弊社には英語話者も在籍していますが、私が所属しているチームや関わる方々の多くは日本語話者なので、日常的に英語を話す機会はありません。

3.2 ChatGPTをIELTS試験官として活用

弊社には多言語学習・会話レッスン補助制度があるので、オンライン英会話を受けていた時期もありましたが、ChatGPTに音声による会話機能が出てから、ChatGPTに移行しました。現在は以下のようなプロンプトを利用しています。

IELTS Speaking Testの練習を行います。以下の条件に従って練習を全力で手伝ってください。
 - "OK, I'm ready for {パート番号}" と入ったらそのパートの問題を1つランダムに出題してください。
 - 私が英語で回答するので、それに対してAnswer(私の回答), Mistakes and Corrections, Natural Corrections, High Score Rephrasing, Additional Points, Example Answer を整理して教えてください

このプロンプトによってフィードバックが6つの項目に体系化されます。 スピーキング力の向上のためには、話す内容が思いついていないのか、英語に変換できないのか、を分離するため、英語で話す以前にそもそも日本語で同じ質問をされたときに十分な回答ができるのか?ということを振り返る必要があります。 このプロンプトでは、「Additional Points」を挙げるよう指示しており、そのとき自分が思いつかなかった観点を教えてくれるので、話す内容を思いつけていないことを自然と振り返れるようになっています。 また、話す内容を思い付いているけれどもっと他の言い回しはなかったのだろうか、というときには「High Score Rephrasing」で、同じ内容をより高いスコアが期待できる表現に変換してくれるため、自分では思いつかなかった表現を教えてくれます。

3.3 実際のイメージ

技術進歩がコミュニケーション方法にもたらした影響について聞かれたときの模様を書いていきます チャット形式になっていますが、実際は音声でやりとりしています。

ChatGPTとのやりとりの模様

回答を終えるとChatGPT からフィードバックが返ってきます。 実際に私が話した内容について、三人称単数形になっていないことや、より自然な言い回しを教えてくれています。加えて私が言及していない内容に触れ、それらを含めた回答を作成してくれています。 以下はフィードバックの抜粋です。

Mistakes and Corrections

  1. Instead of "technology enable us," it should be "technology enables us."
  2. "Communicate remotely" is great, but you can simplify "in the past, we could not communicate with other people remotely" to "in the past, we couldn't communicate over long distances."
  3. Instead of "bring our content of talking or texting," you can say "transmit our conversations and messages."

~~ Additional Points

You could also mention how technology has introduced new forms of communication, like video calls, social media, and instant messaging.

~~

Example Answer

“In my opinion, the most significant impact of technology on communication is the removal of physical barriers. In the past, people had to be in close proximity to interact, but today we can instantly transmit our conversations and messages across the globe. Furthermore, innovations like instant messaging, social media platforms, and video calls have transformed how we connect: we can chat in real time via apps, share life updates and multimedia on social networks, or hold face-to-face conversations with someone thousands of miles away. These developments have made communication more seamless, diverse, and engaging than ever before.”

3.4 実践結果

ChatGPTから添削された文章を音読して空で言えるようにする、というのを始めてからボキャブラリーが増えたと思います。優先度が下がって数ヶ月やらない期間があったりしながら、1年くらいこの方法でやっています。定期的に、といいましたが1年弱はIELTSを受けていない気がするので、そろそろ受けようかと思います。

まとめ

本記事では、エンジニアとして社会に貢献し続けるための、私の実践例を紹介しました。 おそらく似たようなアプローチを取っている方も多いでしょうし、中にはこれらの手法をアプリケーション化して運用している方もいらっしゃることと思います。

生成AIを業務に取り入れることはもちろん、うまく使って継続的に成長し続けることが重要だと思うので、ぜひ何かの参考になれば幸いです。