Slide 1

Slide 1 text

ChatGPTを最強の学習ツールにする方法 2023/04/21 @tak001

Slide 2

Slide 2 text

自己紹介 「tak001」としてQiitaで活動中 https://qiita.com/tak001 ツイッターアカウント https://twitter.com/5HdM6WlLVaazBV7

Slide 3

Slide 3 text

記事の対象者 プログラミング初学者で学習効率をあげたいと思っている方向けになります 回答の質をあげるプロンプトの考慮については対象外です 今回はプログラミングに絞っていますが、質問の単語を変えれば英語学習や様々な分野 に活用できると思います

Slide 4

Slide 4 text

アジェンダ カリキュラム編 読書時の活用編 コーディング時の活用編 図や表で視覚的にわかりやすく表現してもらう方法 番外編 注意点とこれからの開発について

Slide 5

Slide 5 text

皆さんは学習される時どうしていらっしゃいますか? 公式ドキュメントを読み込む 書籍を購入して読む Udemyなどのオンライン学習を活用する 周りの詳しい人に聞く 今回ChatGPTの役割としてはこの領域

Slide 6

Slide 6 text

これからはChatGPTを学習ツールとして活用してみませ んか?

Slide 7

Slide 7 text

なぜ、ChatGPTが登場しても学習が必要なのか? 便利で色々なことに回答をしてくれるChatGPTですが、間違っている回答をすることがある ので、しっかりと自分の中で正解を持っておくことが重要。 なので、ChatGPTを使うからといって全く勉強しない、という訳にはまだまだいかないし、 到底実務では耐えられないような所もあります。 ただ、補助的にChatGPTに頭出ししてもらい効率化するには物凄く有効。 ChatGPTとうまく付き合って活用していきましょう。

Slide 8

Slide 8 text

カリキュラム編 カリキュラムをChatGPTに作ってもらいます。 以下のように質問してみます 私はプログラミングの初心者です。3ヶ月でLaravelでの開発が可能なレベルまで習得するた めの学習カリキュラムを作って下さい。

Slide 9

Slide 9 text

回答内容 ---------------ここから回答内容 プログラミング初心者が3ヶ月でLaravelを習得するための学習カリキュラムを以下に提案し ます。このカリキュラムは、基本的なPHPの知識から始め、Laravelの基本機能を習得し、最 終的には実践的なプロジェクトに取り組むことを目標としています。

Slide 10

Slide 10 text

【週1-4: PHPの基礎】 週1: 1. PHPとは何かを学ぶ 2. PHPの基本的な構文と制御構造を習得する 3. 変数、データ型、演算子について学ぶ 4. 関数、オブジェクト指向プログラミングの基本概念を理解する 週2: 1. 配列と連想配列を使いこなす 2. ループと条件分岐の理解を深める 3. クラス、インスタンス、継承、インターフェースについて学ぶ 4. 例外処理とエラー処理の基本を学ぶ

Slide 11

Slide 11 text

週3: 1. PHPでのファイル操作とディレクトリ操作を習得する 2. セッション、クッキーの管理方法を学ぶ 3. データベース接続とSQLの基本を理解する 4. PHPでのデータベース操作(CRUD操作)を習得する 週4: 1. PHPの組み込み関数を使いこなす 2. PHPでのデータ検証とサニタイズ 3. WebサーバーとPHPの連携方法を理解する 4. 実践的なプロジェクトで学んだことを適用する

Slide 12

Slide 12 text

【週5-8: Laravelの基本概念と機能】 週5: 1. Laravelとは何か、MVCアーキテクチャについて学ぶ 2. Laravelのインストールと環境構築を行う 3. Laravelのディレクトリ構造と名前空間を理解する 4. ルーティングの基本を習得する 週6: 1. コントローラーの作成と使い方を学ぶ 2. ビューとBladeテンプレートエンジンの使い方を習得する 3. モデルとEloquent ORMの基本を学ぶ 4. バリデーションとフォームリクエストについて理解する

Slide 13

Slide 13 text

週7: 1. ミドルウェアの作成と利用方法を学ぶ 2. セッションと認証機能を実装 3. マイグレーションとデータベースのシーディングを理解する 4. リレーションシップとEloquent ORMの応用を学ぶ 週8: 1. メール送信機能と通知機能を習得する 2. イベントとリスナーを理解し、実践的に使う 3. キューとジョブの基本を学ぶ 4. ユニットテストと機能テストの基本を理解する

Slide 14

Slide 14 text

【週9-12: 実践的なプロジェクトでLaravelを活用】 週9: 1. プロジェクトアイデアを検討し、要件定義を行う 2. データベース設計とマイグレーションの準備を行う 3. ルーティングとコントローラーを設計する 4. ビューの設計と実装を開始する 週10: 1. モデルを実装し、データベース操作を行う 2. バリデーションとフォームリクエストを実装する 3. セッションと認証機能を実装する 4. リレーションシップを設定し、Eloquent ORMを活用する

Slide 15

Slide 15 text

週11: 1. メール送信機能と通知機能を実装する 2. イベントとリスナーを活用し、アプリケーションロジックを整理する 3. キューとジョブを使って非同期処理を行う 4. ユニットテストと機能テストを実施する 週12: 1. プロジェクトのデバッグと最適化を行う 2. デプロイの準備と実施を行う 3. 本番環境でのテストと検証を行う 4. 3ヶ月間の学習を振り返り、今後の学習計画を立てる

Slide 16

Slide 16 text

このカリキュラムはあくまで一例ですが、3ヶ月間でLaravelを習得し、開発ができるレベル まで学ぶための指針として役立てられることを願っています。効果的な学習のためには、理 論を学ぶだけでなく、実践的なプロジェクトにも積極的に取り組むことが重要です。また、 適宜リファレンス、ドキュメントやコミュニティを参考にしながら、自分の理解を深めるこ とが大切です。さらに、以下の学習リソースやサポートも活用してください。

Slide 17

Slide 17 text

【学習リソース】 1. 公式ドキュメント: PHP: https://www.php.net/manual/ja/ Laravel: https://laravel.com/docs/ 2. オンライン教材: Laracasts: https://laracasts.com/ Udemy: https://www.udemy.com/ Coursera: https://www.coursera.org/ 3. オープンソースプロジェクト: GitHub: https://github.com/ GitLab: https://gitlab.com/ 4. 技術書籍: Packt: https://www.packtpub.com/ Apress: https://www.apress.com/

Slide 18

Slide 18 text

【サポート】 1. スタック・オーバーフロー: https://stackoverflow.com/ 2. オンラインフォーラムやコミュニティ 3. ローカルの技術イベントやミートアップ 4. 仲間のプログラマーやメンターと情報交換

Slide 19

Slide 19 text

このカリキュラムに従って学習を進めることで、3ヶ月間でLaravelでの開発が可能なレベル まで習得することができるでしょう。しかし、継続的な学習と実践を重ねることで、さらに スキルを向上させることができます。どんな状況でも諦めず、常に前進し続けることが、成 長を加速させる鍵となります。 ---------------ここまで回答内容

Slide 20

Slide 20 text

ふんわりとした内容は例題を作ってもらい理解を深める ここからは、提示された内容をより具体的にしていくために、理解が及んでいない箇所や 「具体的に何をしたら良いかわからない」箇所に対して質問を繰り返していきます。

Slide 21

Slide 21 text

質問内容 第週2の「配列と連想配列を使いこなす」の例題を作って下さい。

Slide 22

Slide 22 text

回答内容 ---------------ここから回答内容 第2週の「配列と連想配列を使いこなす」に関する例題を以下に示します。この例題では、配 列と連想配列の作成と操作方法を学ぶことができます。 問題1: 配列の作成 以下のような数字の配列を作成し、出力してください。 $numbers = [1, 2, 3, 4, 5]; 問題2: 配列の要素にアクセス 問題1で作成した配列$numbersの2番目の要素にアクセスし、出力してください。

Slide 23

Slide 23 text

問題3: 連想配列の作成 以下のような連想配列を作成し、出力してください。 $student = [ 'name' => ' 山田太郎', 'age' => 20, 'city' => ' 東京' ];

Slide 24

Slide 24 text

問題4: 連想配列の要素にアクセス 問題3で作成した連想配列$studentの'name'キーの要素にアクセスし、出力してください。 問題5: 配列に要素を追加 問題1で作成した配列$numbersに新たな要素として6を追加し、配列を出力してください。 問題6: 連想配列に要素を追加 問題3で作成した連想配列$studentに新たなキーと値のペアとして、'major' => '情報工学'を 追加し、連想配列を出力してください。

Slide 25

Slide 25 text

問題7: 配列の要素を削除 問題1で作成した配列$numbersの最後の要素を削除し、配列を出力してください。 問題8: 連想配列の要素を削除 問題3で作成した連想配列$studentの'city'キーの要素を削除し、連想配列を出力してくださ い。 これらの問題を通じて、配列と連想配列の基本的な操作方法を習得することができます。例 題に取り組むだけでなく、自分で様々な操作を試してみることで、より深く理解することが できるでしょう。 ---------------ここまで回答内容

Slide 26

Slide 26 text

質問のサイクル ChatGPTが回答 → 不明点をそのままChatGPTに聞く → ChatGPTが回答 → 不明点を….

Slide 27

Slide 27 text

読書編 次に、技術書を読む時にもChatGPTを活用してみましょう。

Slide 28

Slide 28 text

章ごとに詳しく解説してもらう 深掘りしたい箇所や、理解が及ばないような箇所はChatGPTに質問してみましょう。

Slide 29

Slide 29 text

読書中に出てきたわからない単語などを教えてもらう 読書中に出てくる分からない単語もChatGPTに教えてもらい、効率的に学ぶことができま す。

Slide 30

Slide 30 text

書籍に記載されているサンプルコードを別の言語へ変換し てもらう 書籍を読んでいると実装例としてコードが掲載されていたりします。 そのコードを実務で使っている言語や普段慣れ親しんでいる言語へ変換してもらい、学習に 役立ててみます。

Slide 31

Slide 31 text

質問例 ここでは、「Java言語で学ぶデザインパターン入門」をPythonへ変換してもらいます。

Slide 32

Slide 32 text

以下のJava コードをPython に変換してください。 # Java コード / Singleton パターン */ // Singleton クラス: Singleton.java public class Singleton { private static Singleton singleton = new Singleton(); private Singleton() { System.out.println(" インスタンスを生成しました"); } public static Singleton getInstance() { return singleton; } }

Slide 33

Slide 33 text

// Singleton クラスを利用するクラス: Main.java public class Main { public static void main(String[] args) { System.out.println("Start."); Singleton obj1 = Singleton.getInstance(); Singleton obj2 = Singleton.getInstance(); if (obj1 == obj2) { System.out.println("obj1 とobj2 は同じインスタンスです。") } else { System.out.println("obj1 とobj2 は同じインスタンスではありません。"); } System.out.println("End."); } }

Slide 34

Slide 34 text

回答内容 ---------------ここから回答内容 以下のようにJavaコードをPythonに変換しました。

Slide 35

Slide 35 text

class Singleton: _singleton = None @classmethod def __new__(cls): if cls._singleton is None: cls._singleton = super().__new__(cls) print(" インスタンスを生成しました") return cls._singleton @classmethod def get_instance(cls): return cls()

Slide 36

Slide 36 text

def main(): print("Start.") obj1 = Singleton.get_instance() obj2 = Singleton.get_instance() if obj1 == obj2: print("obj1 とobj2 は同じインスタンスです。") else: print("obj1 とobj2 は同じインスタンスではありません。") print("End.") if __name__ == "__main__": main()

Slide 37

Slide 37 text

Pythonでは、Javaと同様にSingletonパターンを実現できます。 ただし、Pythonの場合は__new__メソッドを使用してインスタンス生成の処理をカスタマイ ズし、 クラスメソッドget_instanceを使ってシングルトンインスタンスを取得します。 ---------------ここまで回答内容

Slide 38

Slide 38 text

コーディング編 コーディングの勉強にもChatGPTを活用します。

Slide 39

Slide 39 text

回答情報が古い場合や、どうしても全体を俯瞰した回答は得られないためより注意が必要 です。また、普通に間違った情報を提供される場合もありますので鵜呑みにせずしっかりと リソースやコードを確認しましょう。

Slide 40

Slide 40 text

変数名やメソッド名を提案してもらう 変数名やメソッド名の命名で英語に迷った時に、次のように質問すると候補をあげてくれま す。

Slide 41

Slide 41 text

質問例 変数名の場合:同意済みというboolean値を持つ役割の変数名の候補をいくつか教えてくださ い。JavaScriptで一般的な命名にしてください メソッド名の場合:ファイルに出力という処理を行うメソッド名の候補をいくつか教えてく ださい。JavaScriptで一般的な命名にしてください

Slide 42

Slide 42 text

回答内容 ---------------ここから回答内容 JavaScript で一般的な命名規則に従って、同意済みという意味を持つboolean 型の変数名の候補を以下に示します: 1. isApproved 2. hasConsent 3. consentGiven 4. agreementAccepted 5. permissionGranted これらの変数名は、キャメルケース(camelCase )を使用し、 動詞と名詞を組み合わせて明確な意味を持たせています。 適切な変数名は、コードの可読性と保守性に寄与します。

Slide 43

Slide 43 text

JavaScript で一般的な命名規則に従って、ファイルへの出力を行うメソッド名の候補を以下に示します: 1. writeFile 2. outputToFile 3. saveToFile 4. exportToFile 5. writeDataToFile これらのメソッド名は、キャメルケース(camelCase )を使用し、 動詞と名詞を組み合わせて明確な意味を持たせています。 適切なメソッド名は、コードの可読性と保守性に寄与します。 ---------------ここまで回答内容

Slide 44

Slide 44 text

エラーコードを貼り付けて解決方法を教えてもらう 最初のうちはエラーが発生しても表示されている内容がわかりずらかったりで壁にぶち当た ってしまうこともあります。 今までですと、自分でわかるまで調べる、もしくは先輩に聞いてみる、でしたが今後は ChatGPTに聞くという選択肢があります。 コーディング中に発生したエラー内容をそのまま貼り付けて質問してみます。

Slide 45

Slide 45 text

質問例 以下のエラーの解決方法を教えて下さい。 Expected 1 arguments, but got 0.ts(2554)

Slide 46

Slide 46 text

回答内容 ---------------ここから回答内容 このエラーは、TypeScriptで関数またはメソッドが引数を期待しているにもかかわらず、呼 び出し時に引数が渡されていないことを示しています。エラーの修正には、期待される引数 を関数またはメソッドに渡すことが必要です。 以下の例で説明します:

Slide 47

Slide 47 text

function greet(name: string) { console.log("Hello, " + name + "!"); } greet(); // ここでエラーが発生します。Expected 1 arguments, but got 0.

Slide 48

Slide 48 text

このケースでは、 greet 関数は name 引数を期待していますが、関数呼び出しで引数が渡 されていません。このエラーを解決するには、引数を関数呼び出しに追加します。 greet("John"); // エラーが解決され、"Hello, John!" と出力されます。 エラーメッセージにある関数名や引数の数を参考にして、適切な引数を関数またはメソッド に渡してください。 ---------------ここまで回答内容

Slide 49

Slide 49 text

より具体的なバグの質問方法 先ほどはかなりざっくりとした「問題点があれば教えてください」という質問内容でした が、期待値と実際に返ってくる値がわかればそれをそのままChatGPTに聞いても回答してく れます。

Slide 50

Slide 50 text

質問例 期待値と実際の値に乖離があります。 解決方法を教えてください。 # コード export const double = (num: number): number => { return Math.ceil(num) * 2; }; # 期待値 num = 10.1 の場合、20 # 実際の取得値 num = 10.1 の場合、21

Slide 51

Slide 51 text

回答内容 ---------------ここから回答内容 期待値と実際の値に乖離がある原因は、 Math.ceil 関数によって引数 num が切り上げられ ているためです。この問題を解決するには、 Math.ceil の代わりに Math.floor を使用 し、引数を切り捨てるように変更すれば、期待通りの結果が得られます。 修正したコードは以下のようになります。 export const double = (num: number): number => { return Math.floor(num) * 2; }; この修正により、 num = 10.1 の場合、20が得られます。 ---------------ここまで回答内容

Slide 52

Slide 52 text

ChatGPTとペアプロする(AIペアプロ) この手法はペアプロのような形で、こちらがナビゲーターを行い、ドライバーをChatGPTに 任せるという手法です。 簡単にいうと、要件だけ伝えてChatGPTにコード書いてもらいます。

Slide 53

Slide 53 text

質問例 あなたは優秀なプログラマーです。 以下の要件を制約に従いコードを記述してください。 # 要件 - React.js / TypeScript で記述すること - ボタンを設置してクリックするとページ最下部まで移動すること # 制約 - モダンでシンプルな記述にすること - リーダブルなコードにすること - メソッドの責務は小さく分割すること - 命名はリーダブルで適切に行うこと - 条件分岐は早期return などを使ってネストを浅くすること - 二重ループを避けるロジックにすること - クリーンアーキテクチャに則りレイヤーが一方向で上位レイヤーが守られるようにすること - マジックナンバーは使わないようすること - let などのミュータブルな変数は使用しないこと

Slide 54

Slide 54 text

回答内容 ---------------ここから回答内容 こちらの要件と制約に基づいて、React.js と TypeScript を使用したコードを記述いたしま す。まず、 ScrollToBottomButton.tsx コンポーネントを作成して、ボタンをクリックす るとページ最下部に移動する機能を実装します。

Slide 55

Slide 55 text

// src/components/ScrollToBottomButton.tsx import React from 'react'; interface Props { scrollTarget: React.RefObject; } const ScrollToBottomButton: React.FC = ({ scrollTarget }) => { const scrollToBottom = () => { if (!scrollTarget.current) { return; } scrollTarget.current.scrollIntoView({ behavior: 'smooth', block: 'end' }); }; return ( 最下部へスクロール ); }; export default ScrollToBottomButton;

Slide 56

Slide 56 text

次に、 App.tsx ファイルに以下のようにコンポーネントを使用します。 // src/App.tsx import React, { useRef } from 'react'; import ScrollToBottomButton from './components/ScrollToBottomButton'; const App: React.FC = () => { const bottomOfPageRef = useRef(null); return (
{/* ここにページのコンテンツを配置します */}
); }; export default App;

Slide 57

Slide 57 text

このコードは以下の要件と制約を満たしています。 React.js / TypeScript で記述されています。 ボタンをクリックするとページ最下部まで移動します。 シンプルでモダンな記述がされています。 リーダブルなコードになっています。 メソッドの責務は小さく分割されています。 命名はリーダブルで適切です。 早期 return を使用して条件分岐のネストを浅くしています。 二重ループを使用していません。 クリーンアーキテクチャに従っています。 マジックナンバーを使用していません。 ミュータブルな変数( let )を使用していません。 ---------------ここまで回答内容

Slide 58

Slide 58 text

ChatGPTにレビューしてもらう 個人開発や自習でコーディングしていると、レビューが欲しい時があると思います。 そんな時にもChatGPTに聞いてみます。

Slide 59

Slide 59 text

質問例 あなたは優秀なプログラマーです。 以下の制約に従いコードをレビューしてください。 レビュー後は修正後のコード全体を書いてください。

Slide 60

Slide 60 text

# 前提 - Next.js v13 / TypeScript v4 で記述している # 制約 - モダンでシンプルな記述にすること - KISS の原則を守ること - 複雑な処理を避けるために高階関数は使用できることとする - バグを起こしそうな懸念点は指摘すること - リーダブルなコードにすること - メソッドは動詞始まりにすること - メソッドの責務は小さく分割すること - 単一責任の原則を守ること - 命名がおかしい箇所は指摘すること - 条件分岐は早期return などを使ってネストを浅くすること - 多重ループ処理を極力避けるロジックにすること - オニオンアーキテクチャに則り各レイヤーの責務が適切であること - テスタビリティであること - マジックナンバーは使わないように指摘すること - let などのミュータブルな変数は指摘すること - ミュータブルな変数を避けるために即時関数は使用可能とする

Slide 61

Slide 61 text

# コード import { NextPage } from 'next'; import React, { useState } from 'react'; const IndexPage: NextPage = () => { const [image, setImage] = useState(undefined); const onChangeImage = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; const reader = new FileReader(); reader.onload = () => { setImage(reader.result as string); }; reader.readAsDataURL(file); }; return (
{image && }
); }; export default IndexPage;

Slide 62

Slide 62 text

要件定義やユースケースは図で教えてもらう GPT-4からですが、要件定義やユースケースなどで「図で教えて」と聞くと図や表で教えて もらうこともできます。 視覚的にとても見やすいです。

Slide 63

Slide 63 text

図の質問例 Webアプリで勤怠管理システムを作ろうと思います。 画面フローに落とし込んで図で教えて下さい。

Slide 64

Slide 64 text

回答内容 ---------------ここから回答内容 以下は、勤怠管理システムの画面フローを示すテキストベースの図です。 +------------------+ +-----------------+ | ログイン画面 | | 管理者ログイン画面 | +------------------+ +-----------------+ | | | | v v +------------------+ +-----------------+ | 従業員ホーム画面 | | 管理者ホーム画面 | +------------------+ +-----------------+ | | | | +--------v----------+ +---------v-------+ | 勤怠情報一覧画面 | | 従業員一覧画面 | +--------+----------+ +---------+-------+ | | | |

Slide 65

Slide 65 text

+--------v----------+ +---------v-------+ | 勤怠情報編集画面 | | 従業員詳細画面 | +------------------+ +---------+-------+ | | +---------v-------+ | 休暇申請一覧画面 | +---------+-------+ | | +---------v-------+ | 休暇申請詳細画面 | +-----------------+

Slide 66

Slide 66 text

1. ログイン画面: 従業員と管理者がログインするための画面です。 2. 従業員ホーム画面: 従業員が各機能にアクセスするためのメニュー画面です。 3. 勤怠情報一覧画面: 従業員が自分の勤怠情報を一覧で確認できる画面です。 4. 勤怠情報編集画面: 従業員が勤怠情報を修正できる画面です。 5. 管理者ログイン画面: 管理者がログインするための画面です。 6. 管理者ホーム画面: 管理者が各機能にアクセスするためのメニュー画面です。 7. 従業員一覧画面: 管理者が従業員の一覧を確認できる画面です。 8. 従業員詳細画面: 管理者が個別の従業員の勤怠情報を確認・編集できる画面です。 9. 休暇申請一覧画面: 管理者が従業員の休暇申請を一覧で確認できる画面です。 10. 休暇申請詳細画面: 管理者が個別の休暇 ---------------ここまで回答内容

Slide 67

Slide 67 text

ユースケースを図で教えてもらう質問例 webアプリでtodoリストのユースケースを教えて下さい。 できれば図で教えて下さい。

Slide 68

Slide 68 text

回答内容 ---------------ここから回答内容 ウェブアプリのToDoリストは、ユーザーがタスクや目標を管理し、日常業務を効率化するた めに使用されることが多いです。以下に、ToDoリストの典型的なユースケースを示すフロー チャートを示します。

Slide 69

Slide 69 text

┌────────────────┐ │ ユーザー登録 │ └───────┬────────┘ │ │ 新規登録 or ログイン │ ┌───────▼────────┐ │ ユーザー認証 │ └───────┬────────┘ │ │ ┌───────▼───────────────────┐ │ ToDo リスト表示 ( タスク一覧) │ └───────┬───────────────────┘ │ ├───── 新規タスク追加 ────────┐ │ │ ┌───────▼────────┐ ┌──────────▼─────┐ │ タスクの詳細設定 │ │ タスクの削除 │ └───────┬────────┘ └──────────┬────┘ │ │ ├───── タスクの編集 ──────────┤ │ ┌───────▼────────┐ │ タスクの完了 │ └────────────────┘

Slide 70

Slide 70 text

1. ユーザー登録: ユーザーがアカウントを作成し、ウェブアプリにアクセスします。 2. ユーザー認証: ユーザーが登録情報を入力してログインします。 3. ToDoリスト表示 (タスク一覧): ユーザーが現在のタスクのリストを閲覧できます。 4. タスクの詳細設定: ユーザーが新しいタスクを追加し、期日や優先度などの詳細を設定で きます。 5. タスクの編集: ユーザーが既存のタスクの詳細を編集できます。 6. タスクの削除: ユーザーがタスクを削除できます。 7. タスクの完了: ユーザーがタスクを完了としてマークできます。 このフローチャートは、ウェブアプリでのToDoリストの基本的なユースケースを示していま す。アプリによっては、タスクのカテゴリ分けや共有機能、通知機能、タイムラインビュー などの追加機能が提供されている場合があります。 ---------------ここまで回答内容

Slide 71

Slide 71 text

番外(ネタ)編 番外(ネタ)編として、「レビューコメントを傷つけないような優しい言い回しに変換してもら う」というのをやってみます。

Slide 72

Slide 72 text

質問例 以下のレビューコメントを相手の尊敬と敬意を払って傷つけない言い方に変えて下さい。 なんで、こんな汚いコードを書くのか理解できません。今すぐ修正して下さい。 こんなコードを平気で書いてしまうようではあなたは プログラマとして才能がないです。

Slide 73

Slide 73 text

回答内容 ---------------ここから回答内容 相手に尊敬と敬意を示しながら、レビューコメントを再構成してみます。 このコードは少し改善の余地があるように感じます。 もしよろしければ、修正していただけますか? また、より良いコードを書くための支援を提供することができますので、 必要であれば遠慮なくご相談ください。 あなたのポテンシャルはまだ見逃せないと思っています。 ---------------ここまで回答内容

Slide 74

Slide 74 text

その他にもこんなことができます。 コードの解説をしてもらう リファクタリングしてもらう テストコードを書いてもらう おすすめの書籍をレベル別で提案してもらう バージョン違いによる記述方法の違いを教えてもらう、書き直してもらう watchやwatchEffectなどの使用用途に悩む機能の違いを教えてもらう

Slide 75

Slide 75 text

型を伝えてダミーデータを大量に作ってもらう 設計時の提案をしてもらう データベース設計を提案してもらう アーキテクトのサンプルコードの提案をしてもらう 言語別デザインパターンのサンプルコードを教えてもらう DDDでドメインモデリングをしてもらう ペルソナ設定をしてもらう サービスのアイデア出しをしてもらう

Slide 76

Slide 76 text

今回紹介しきれなかった内容はQiita記事にて公開中で す。 https://qiita.com/tak001/items/7605f0be7b424118e5a5 こちらの記事は随時追加更新しております。 もし少しでもご興味を持っていただけましたら、いいねして頂けますとモチベーションにも つながりますし、ストックして頂ければ記事更新時にチェックできると思いますので、是非 お願いいたします。

Slide 77

Slide 77 text

注意点 データは2021年9月までのデータなので、情報が古かったりそれらしく嘘をつく時があ るのでちゃんと見極めることが必要 ChatGPT Pluginでこのあたりが解消されるかも? Copilot X は公式ドキュメントを参照してくれるようになるので期待

Slide 78

Slide 78 text

これからのサービス開発について 設計、フロントエンド、バックエンド、インフラ、等々とエキスパート毎に分業してサービ スを作っている所がほぼほぼだと思いますが、ChatGPTなどのAIサービスの台頭により、各 領域への参入障壁が低くなっていると感じる。 そのため、個人開発のように少ないリソースでも開発ができるようになり、市場のニーズを 満たせる面白いアイデアさえ持っていれば、効率的に作れてしまう時代に突入。 個人でもマンパワーのある大企業に勝負できるかもしれない?

Slide 79

Slide 79 text

ご清聴有難うございました!