701
718

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

プログラマのためのChatGPT掻甚 - コヌディング線 -

701
Last updated at Posted at 2023-02-09

この蚘事に぀いお

爆発的な話題ずなっおいるChatGPTですが、そのあたりのシンプルさ、適甚範囲の広さ、掻甚方法の倚圩さから、その胜力を十分に匕き出すこずはなかなか難しいものです。ChatGPTは゜フトりェア開発の倚くのプロセスに掻甚できたすが、この蚘事ではコヌディングフェヌズでの掻甚に぀いおたずめたす。

応答は長い物が倚いので、基本的に蚘茉したせん。ぜひChatGPTに入力しおみおください。

ChatGPTの䜿い方に関するコツ

  • 背景や前提を十分に䌝える。
    ChatGPTに質問の背景や前提を䌝えるこずでより粟床の高い結果が返りたす。「このプログラムは〜を目的ずしたものの䞀郚です。䜕をしおいるか説明しおください。」のように質問に背景・前提を付け足すこず重芁になるこずがありたす。応答の粟床が䜎いず感じた堎合は、こういった前提条件などを付加しお䜕床も質問しおみたしょう。

  • スレッド内では文脈を掻甚しおシンプルに質問する。
    「䞋蚘のコヌドをRustに曞き盎しお」 ず質問した埌に 「Javaの堎合は」 のように質問しおも文脈からChatGPTに䜕を求めおいるか刀断しおくれるので、同皮の内容のバリ゚ヌションを芁求したい堎合は入力の手間を省くこずができたす。ChatGPTは日本語でだいたい8000文字皋床の過去の察話を蚘憶しおいたす。

  • 公匏ガむドを読む
    うたくChatGPTを扱うための詳しい公匏情報が存圚したす。参考文献に蚘茉したすので、時間のある方は読んでみおください。

掻甚䟋

簡単なナヌティリティやアルゎリズムをコヌディングしおもらう

ちょっずしたナヌティリティやアルゎリズムなど、小さく䟝存のない凊理であれば、仕様を䌝えるこずで䞞ごずコヌディングをお願いするこずができたす。

JavaでList型のパラメヌタを受け取り、先頭が"A_"たたは"B_"で始たる芁玠だけを返す関数を䜜成しお。

既存のコヌドを高速化やリファクタリングしおもらう

間違ったコヌドを生成しおしたうこずもあるの泚意が必芁ですが、なぜした方が良いかずいう説明も出力しおくれたすので、そのアむディアを参考にするこずができたす。

䞋蚘の〜蚀語のコヌドを高速化しおください。

Code:"""
コヌドを貌る
"""
䞋蚘の〜蚀語のコヌドをリファクタリングしおください。

Code:"""
コヌドを貌る
"""

既存のコヌドを別の蚀語で曞き盎す

ChatGPTは䞻芁なほずんどの蚀語で別の蚀語ぞの曞き盎しができたす。アセンブラやWebAssemblyに倉換するこずもできたす。

䞋蚘のJavaコヌドをRubyで曞き盎しお。

Code: """
List<String> filteredList = new ArrayList<>();
for (String element : list) {
    if (element.startsWith("A_") || element.startsWith("B_")) {
        filteredList.add(element);
    }
}
return filteredList;
"""

コヌドの内容を説明しおもらう

プログラムが䜕をしおいるか説明しおもらうこずができたす。ChatGPTはコヌドに぀いおの背景をなるべく教えおあげるこずで粟床を䞊げるこずができたす。党䜓ずしお䜕を目的ずしたプログラムのコヌドであるかなど。

䞋蚘はPyTorchを䜿ったPythonのコヌドです。䜕をしおいるか説明しおください。

Code: """
for epoch in range(20):
    running_loss = 0.0
    for i, data in enumerate(train_loader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = model(inputs.float()/255.0)
        loss = criterion(outputs, labels.view(-1,1).float())
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
"""

ラむブラリの䜿い方や萜ずし穎に぀いお教えおもらう

ReactのuseEffect()の䜿い方ず萜ずし穎を教えお。

HTMLやJSXのテンプレヌトを出力しおもらう

HTMLの䟋

チャット甚のメッセヌゞ入力UIずしお適切なHTMLずCSSを出力しお。アむコンにはfont awesomeを䜿っお欲しい。

JSX(Styled Component)の䟋

チャット甚のメッセヌゞ入力UIずしお適切なJSXず適切に分割されたStyled Componentを出力しお。アむコンにはfont awesomeを䜿っお欲しい。

DSLのパヌサヌを曞いおもらう

ChatGPTはBNFを解釈しおくれたす。BNFず蚀語を指定しおパヌサヌを出力させるこずで、簡単なDSLを玠早く䜜るこずができたす。

䞋蚘はドメむン固有蚀語の構文を衚すBNFです。この蚀語のパヌサヌをTypeScriptで実装しおください。

BNF: """
<additive-expression> ::= <multiplicative-expression>
                        | <additive-expression> + <multiplicative-expression>
                        | <additive-expression> - <multiplicative-expression>
<multiplicative-expression> ::= <primary-expression>
                              | <multiplicative-expression> * <cast-expression>
                              | <multiplicative-expression> / <cast-expression>
                              | <multiplicative-expression> % <cast-expression>
<primary-expression> ::= <identifier> | <constant>
"""

SQLを曞いおもらう

ChatGPTはデヌタベヌスのスキヌマを理解しおSQLを曞いおくれたす。JOINもできたすし、英和のマッピングやコメントなども考慮しおくれるので、自然な質問ができたす。

䞋蚘のデヌタベヌススキヌマがありたす。この時、名前が"山田"で始たる人のうち、幎霢が30歳以䞊のアカりントの奜きな゚ディタヌを抜き出すSQLを曞いおください。

Schema: """
CREATE TABLE account(
    id INTEGER,
    attr1 INTEGER NOT NULL,
    /* 奜きな゚ディタヌ */
    attr2 VARCHAR(255) NOT NULL,
);

CREATE TABLE profile(
    account_id INTEGER,
    name varchar(255),
    age integer,
    constraint fk_person_id foreign key(person_id) references account(id)
);
"""

Linuxコマンドを曞いおもらう

パむプや耇雑なオプションを䜿っお芁望を叶えるLinuxコマンドを出力しおくれたす。初心者は盞圓助かるのではないでしょうか。たた、「別の方法はある」のように聞いお耇数の解法を匕き出すこずもできたす。ベテランの方もより効率的な解法を芋぀けるのに圹立ちたす。

ディレクトリhogeから再垰的に拡匵子が".txt"ず".js"のファむルを怜玢しお、"foo"から始たる行のみを出力するLinuxコマンドを曞いおください。

出力䟋:

以䞋のコマンドを䜿甚するこずで、芁件を満たすこずができたす。

find hoge/ -name "*.txt" -o -name "*.js" -print | xargs grep "^foo"
このコマンドは、以䞋のように動䜜したす。

find hoge/ で hoge ディレクトリから再垰的に怜玢したす。
-name "*.txt" -o -name "*.js" で、拡匵子が ".txt" たたは ".js" のファむルを怜玢したす。
-print で、怜玢結果を暙準出力に衚瀺したす。
暙準出力を xargs で grep にパむプしたす。
grep "^foo" で、"foo" から始たる行だけを抜出したす。

仕様曞䞊のリストや衚などをプログラムコヌドに敎圢する

Mapに敎圢する

䞋蚘の衚のNameずDescriptionをScalaのMapにしお。

CSV: """
Name,Description
Hoge,これはHogeです
Fuga,これはFugaです
"""

Scalaのcase class(他蚀語の構造䜓のようなもの)に敎圢する

Scalaで䞋蚘の衚に適切なcase classを定矩しおSeq型に詰めお。

CSV: """
Name,Description
Hoge,これはHogeです
Fuga,これはFugaです
"""

゚ラヌに぀いお教えおもらう

䞀般的な゚ラヌに぀いおは原因や解決方法を教えおくれたす。良い回答が埗られない堎合は、どういった目的で䜕をしようずしたのか、゚ラヌが発生したコヌドなどを提瀺しお再床聞くず良い回答が埗られる堎合がありたす。

䞋蚘の゚ラヌが出たした。どうすればいいですか

Error: """
"(<class 'RuntimeError'>, RuntimeError('Given groups=1, weight of size [32, 3, 3, 3], expected input[11, 4, 512, 512] to have 3 channels, but got 4 channels instead'), <traceback object at 0x11db1bfc0>)"
"""

コヌドにコメントを付加しおもらう

䞋蚘のTypeScriptのコヌドにコメントを付加しおください。

Code: """
<<゜ヌスコヌドを貌る>>
"""

倉数名や関数名を考えおもらう

TypeScript蚀語で、課金ガチャを回しすぎおお金がなくなっお困っおいる人であるか刀定する関数の名前の候補を個考えお。

応答䟋

isGachaSpendingTooMuch
hasGachaBudgetRunOut
isGachaExpenditureExcessive
hasGachaFundsDepleted
isGachaFinancialStrain

ダミヌデヌタを䜜っおもらう

日本人の名前をフルネヌム(挢字)で適圓に5個考えお。名字ず名前はカンマで区切っお。リストで衚瀺しお。

応答䟋

䜐藀, 矎智子
田侭, 淳䞀
䞭村, æ­©
山本, 侀雄
石川, 恵矎子

コヌドレビュヌしおもらう

プログラム蚀語だけでなくSCSSやHTMLなどマむナヌな蚀語でなければほが察応しおくれたす。

䞋蚘のTypeScriptのコヌドに぀いお、問題や改善すべき点がありたすか

Code: """
<<゜ヌスコヌドを貌る>>
"""

テストを曞いおもらう

䞋蚘のTypeScriptの関数に察するjestを䜿ったテストコヌドを出力しおください。

Code: """
type Person = {
  name: string;
  age: number;
};

function isArasa(person: Person): boolean {
  return person.age >= 28 && person.age <= 32;
}
"""

テクニック

コヌディング芏玄を䞎える

ChatGPTが文脈を理解する特性を掻かしお、事前にコヌディング芏玄を䞎えおおくこずで䜿いやすいコヌドを生成させるこずができたす。シンプルなルヌルの矅列にし、念抌しの文章などを入れるず指定通りの結果が埗られやすいです。

1回めの入力で文脈を䞎える

今埌の回答は䞋蚘の文脈に埓っお行なっおください。

Context: """
TypeScriptでプログラミングしおください。

䞋蚘のコヌディング芏則に埓っおください。
 - 型アノテヌションはすべおanyにしおください。他の型は䜿甚犁止です。
 - 関数名は党おsnake caseを䜿っおください。
 - 倉数名は党おsnake caseを䜿っおください。

可胜な限りコヌディング芏則に埓っおください。
"""

回目以降で具䜓的な指瀺

䞋蚘の関数を実装しおください。
1. ぀の文字列を受け取っお、文字列内にある数倀を正芏衚珟を䜿っお抜き出したす。
2. 抜き出した数倀をnumber型に倉換したす。
3. もっずも倧きい数倀を関数の返り倀ずしたす。

䟿利ツヌル

VSCodeプラグむン

VSCode䞊で遞択した゜ヌスコヌドに察しおテストの生成や解説、コメントの远加を実行しおくれるプラグむンです。
詳しい解説蚘事があるので芋おいただくず蚭定方法などがわかりたす。

shell_gpt

GPTのAPIを読んでくれるCLIツヌルです。Linuxコマンドを生成しお実行する機胜を備えおいたす。
https://github.com/TheR1D/shell_gpt

その他のChatGPT関連蚘事

AI時代の゜フトりェア開発に関するコミュニティ

  • AI駆動開発Discord : AIを䜿った゜フトりェア開発に぀いお共有するコミュニティ

参考文献

701
718
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
701
718

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?