Slide 1

Slide 1 text

ジュニアエンジニアの僕のAI Assistantの使い方と心構え 神本 直人

Slide 2

Slide 2 text

自己紹介 Deep Learning 生成AI 2012/4月 2017/4月 2023/1月

Slide 3

Slide 3 text

Agenda ・自己紹介 ・Today’s Goal ・生成AIを用いた仕事の進め方 ・意識するべきポイント/心構え ・生成AIがジュニアエンジニアにもたらす懸念 ・まとめ

Slide 4

Slide 4 text

Today’s Goal ・生成AIを用いた仕事の進め方を共有し認知してもらう ・その際に意識するべきポイント/心構えを知ってもらう ・生成AIがもたらす懸念への僕の見解を知ってもらい感想をいただく

Slide 5

Slide 5 text

生成AIを用いた仕事の進め方 ①データ取得 ②データ整形 ③データ返却 DB Rails BFF ① ② ③ [ { 'hoge_id' => 'uuid1', 'fuga_data' => [ { '2023-01-01' => 0.1 }, { '2023-01-02' => 0.2 } ] }, { 'hoge_id' => 'uuid2', 'fuga_data' => [ { '2023-01-03' => 0.3 }, { '2023-01-04' => 0.4 } ] } ] [ { 'uuid1' => { '2023-01-01' => 0.1 , '2023-01-02' => 0.2 }, 'uuid2' => { '2023-01-03' => 0.3 , '2023-01-04' => 0.4 } } ] 取得したデータ 返却するデータ データ整形がAPI実装業務の大部分を占める

Slide 6

Slide 6 text

生成AIを用いた仕事の進め方 [ { 'hoge_id' => 'uuid1', 'fuga_data' => [ { '2023-01-01' => 0.1 }, { '2023-01-02' => 0.2 } ] }, { 'hoge_id' => 'uuid2', 'fuga_data' => [ { '2023-01-03' => 0.3 }, { '2023-01-04' => 0.4 } ] } ] [ { 'uuid1' => { '2023-01-01' => 0.1 , '2023-01-02' => 0.2 }, 'uuid2' => { '2023-01-03' => 0.3 , '2023-01-04' => 0.4 } } ] Function Input Output 命題 : 次のInputをOutputに変換するFunctionを作成せよ ? 🤔❓ 生成AIを用いた仕事の進め方

Slide 7

Slide 7 text

生成AIを用いた仕事の進め方 これまで ・Functionを考える ・Functionを作る ・テストをpassさせる ・PRを出す ・PRレビュー修正 ・マージ これから ・FunctionをAIに考えさせる ・Functionを修正する ・テストをpassさせる ・PRを出す ・PRレビュー修正 ・マージ

Slide 8

Slide 8 text

生成AIを用いた仕事の進め方 次の#inputを#outputに変換するメソッドを rubyで作って下さい。 その際に、each_with_objectメソッドを用いて下さい # input ```ruby [ { 'hoge_id' => 'uuid1', 'fuga_data' => [ { '2023-01-01' => 0.1 }, ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ ] ``` #output ```ruby [ { 'uuid1' => { '2023-01-01' => 0.1 , ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ ] ``` プロンプト例 def convert_data(input) output = [{}] input.each do |hash| hoge_id = hash['hoge_id'] fuga_data = hash['fuga_data'].each_with_object({}) do |element, new_data| element.each do |date, value| new_data[date] = value end end output[0][hoge_id] = fuga_data end output end 出力例

Slide 9

Slide 9 text

生成AIを用いた仕事の進め方 [ { 'hoge_id' => 'uuid1', 'fuga_data' => [ { '2023-01-01' => 0.1 }, { '2023-01-02' => 0.2 } ] }, { 'hoge_id' => 'uuid2', 'fuga_data' => [ { '2023-01-03' => 0.3 }, { '2023-01-04' => 0.4 } ] } ] [ { 'uuid1' => { '2023-01-01' => 0.1 , '2023-01-02' => 0.2 }, 'uuid2' => { '2023-01-03' => 0.3 , '2023-01-04' => 0.4 } } ] Function Input Output 命題 : 次のInputをOutputに変換するFunctionを作成せよ ? 🤔❓

Slide 10

Slide 10 text

生成AIを用いた仕事の進め方 [ { 'hoge_id' => 'uuid1', 'fuga_data' => [ { '2023-01-01' => 0.1 }, { '2023-01-02' => 0.2 } ] }, { 'hoge_id' => 'uuid2', 'fuga_data' => [ { '2023-01-03' => 0.3 }, { '2023-01-04' => 0.4 } ] } ] [ { 'uuid1' => { '2023-01-01' => 0.1 , '2023-01-02' => 0.2 }, 'uuid2' => { '2023-01-03' => 0.3 , '2023-01-04' => 0.4 } } ] Function Input Output 命題 : 次のInputをOutputに変換するFunctionを作成せよ def convert_data(input) output = [{}] input.each do |hash| hoge_id = hash['hoge_id'] fuga_data = hash['fuga_data'].each_with_object({}) do |element, new_data| element.each do |date, value| new_data[date] = value end end output[0][hoge_id] = fuga_data end output end 😏 🎉

Slide 11

Slide 11 text

ポイント ・①Input/Outputをちゃんと定義して渡す ・②適切なConditionを添加する 心構え ・①受け取ったFunctionをちゃんと理解する ・②ConditionをPRレビューから習得し増やす 意識するべきポイント/心構え

Slide 12

Slide 12 text

次の#inputを#outputに変換するメソッドを rubyで作って下さい。 その際に、each_with_objectメソッドを用いて下さい # input ```ruby [ { 'hoge_id' => 'uuid1', 'fuga_data' => [ { '2023-01-01' => 0.1 }, ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ ] ``` #output ```ruby [ { 'uuid1' => { '2023-01-01' => 0.1 , ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ ] ``` プロンプト例 意識するべきポイント/心構え Function Input Output ポイント ・①Input/Outputをちゃんと定義して渡す ・②適切なConditionを添加する

Slide 13

Slide 13 text

次の#inputを#outputに変換するメソッドを rubyで作って下さい。 その際に、each_with_objectメソッドを用いて下さい # input ```ruby [ { 'hoge_id' => 'uuid1', 'fuga_data' => [ { '2023-01-01' => 0.1 }, ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ ] ``` #output ```ruby [ { 'uuid1' => { '2023-01-01' => 0.1 , ~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ ] ``` プロンプト例 意識するべきポイント/心構え Function Input Output Condition ポイント ・①Input/Outputをちゃんと定義して渡す ・②適切なConditionを添加する

Slide 14

Slide 14 text

意識するべきポイント/心構え 心構え ・①受け取ったFunctionをちゃんと理解する ・②ConditionをPRレビューから習得し増やす 出力例 def convert_data(input) output = [{}] input.each do |hash| hoge_id = hash['hoge_id'] fuga_data = hash['fuga_data'].each_with_object({}) do |element, new_data| element.each do |date, value| new_data[date] = value end end output[0][hoge_id] = fuga_data end output end Q: 〇〇メソッドって何ができるの ? Q: n行目のデータの状態はどうなる ? Q: なんで〇〇メソッド使う ? ◇◇メソッドでよくね?

Slide 15

Slide 15 text

意識するべきポイント/心構え 心構え ・①受け取ったFunctionをちゃんと理解する ・②ConditionをPRレビューから習得し増やす (生成AIを駆使することで) ・PRを早く作れる ・多くレビューを受けられる ・レビューで受けた指摘から学ぶ ・次の命題でConditionとして活かす 慣れ/経験 => Conditionの辞書

Slide 16

Slide 16 text

ポイント ・①Input/Outputをちゃんと定義して渡す ・②適切なConditionを添加する 心構え ・①受け取ったFunctionをちゃんと理解する ・②ConditionをPRレビューから習得し増やす 意識するべきポイント/心構え

Slide 17

Slide 17 text

time proficiency time proficiency time proficiency 生成AIを用いた実装 人による実装 「生成AIを用いた実装」 vs 「人による実装 」  を考えてみる vs 比較 生成AIがジュニアエンジニアにもたらす懸念

Slide 18

Slide 18 text

time proficiency 比較 生成AIを用いた実装 の方が早い領域 人による実装 の方が早い領域 懸念 ・境界線 : time[AIを用いた実装] == time[人による実装] ・このグラフは「命題」によって異なる ・「命題」と「熟練度」次第で境界線を超えることはおおいにある ・その場合、人による実装の方が生産性が高い ・生成AIによる実装だけだと、人による実装の成熟度が上がりにくい – :生成AIを用いた実装 – :人による実装 生成AIがジュニアエンジニアにもたらす懸念

Slide 19

Slide 19 text

僕の結論(今のところ) 業務中においてジュニアエンジニアは ・生成AIを駆使してでも早くアウトプットを出すべき 一方でプライベートでは ・これまでの方法で人による実装の習熟度も高める 生成AIがジュニアエンジニアにもたらす懸念

Slide 20

Slide 20 text

まとめ ・生成AIを用いた仕事の進め方を共有し認知してもらう ・その際に意識するべきポイント/心構えを知ってもらう ・生成AIがもたらす懸念への僕の見解を知ってもらい感想をいただく

Slide 21

Slide 21 text

Thank you!!