Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GitHub CopilotでTypeScriptの コード生成するワザップ
Search
starfish719
December 26, 2024
Programming
7.1k
28
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
December 26, 2024
More Decks by starfish719
See All by starfish719
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
11k
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
340
生成AI時代のエンジニア育成 変わる時代と変わらないコト
starfish719
0
15k
【Claude Code】Plugins作成から始まったファインディの開発フロー改革
starfish719
0
1.1k
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
3.8k
生成AIが出力するテストコードのリアル よくあるコードと改善のヒント
starfish719
0
850
生成AI時代に若手エンジニアが最初に覚えるべき内容と、その学習法
starfish719
2
910
開発生産性を上げるための生成AI活用術
starfish719
3
3.3k
ファインディ株式会社におけるMCP活用とサービス開発
starfish719
0
5k
Other Decks in Programming
See All in Programming
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
270
AIで効率化できた業務・日常
ochtum
0
150
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
190
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.5k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
560
JavaDoc 再入門
nagise
1
430
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Creating Composable Callables in Contemporary C++
rollbear
0
170
act1-costs.pdf
sumedhbala
0
120
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
220
どこまでゆるくて許されるのか
tk3fftk
0
260
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
220
Featured
See All Featured
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
55k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
320
エンジニアに許された特別な時間の終わり
watany
107
250k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
190
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.8k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Agile that works and the tools we love
rasmusluckow
331
22k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
It's Worth the Effort
3n
188
29k
Transcript
© Findy Inc. GitHub Copilotで TypeScriptの コード⽣成するワザップ 1
© Findy Inc. 2 今⽇話すこと • GitHub Copilotのカスタムインストラクションについて • 設定⽅法
• 調整⽅法 • 調整⽅法のワザップ ◦ 不要なものは削除 ◦ ⻑⽂よりも簡潔な階層構造 ◦ 曖昧な表現はNG • まとめ
© Findy Inc. GitHub Copilotの カスタムインストラクションについて 3
© Findy Inc. 4 カスタムインストラクション is 何? • Copilotの⽣成コード、サジェスト内容をカスタマイズすることができる機能 •
2024/12/21現在、VS Codeで利⽤可能 • ⾃然⾔語などで記述しておくとCopilotが読み込む • 設定内容を反映したコード⽣成、サジェストを出すようになる • ⾃組織、チームのコードガイドラインを読み込ませるとどうなる、、、? ◦ ⾃分たちにとって最適なCopilotを⽣み出すことができるはず
© Findy Inc. 設定⽅法 5
© Findy Inc. 6 ファイルを⼀個作成するだけ • `.github/copilot-instructions.md` を作成するだけ • このファイルに⾃然⾔語で保存するだけでOK
# フロントエンドのスタイルガイド ## コーディングルール - 推奨するルール - [TypeScript Deep Dive](https://basarat.gitbook.io/typescript/styleguide) ## ファイル命名規則 - [Angular coding style guide](https://angular.io/guide/styleguide) に倣う - ファイル名はケバブケースに統⼀する
© Findy Inc. 調整⽅法 7
© Findy Inc. 8 まず確認⽤プロンプトを⽤意する 以下の条件を全て満たすコードを⽣成してください - hooksである - 引数は次の通り
- カウント数の初期値 - 任意項⽬ - 次の内容を変数で管理する - カウント数 - 引数で受け取ったカウント数の初期値で初期化する - 次の関数を⽤意する - カウント数をインクリメントする - カウント数をデクリメントする - hooksから次の内容を返す - カウント数 - カウント数をインクリメントする関数 - カウント数をデクリメントする関数
© Findy Inc. 9 カスタムインストラクションの調整無しでプロンプトを実⾏してみる import { useState } from
'react'; function useCounter(initialCount = 0) { const [count, setCount] = useState(initialCount); const increment = () => setCount(count + 1); const decrement = () => setCount(count - 1); return { count, increment, decrement }; } export default useCounter;
© Findy Inc. 10 求める結果とのギャップを、カスタムインストラクションで埋める ## Hooks - hooksから返す値は `as
const` を付けてreadonlyにする ## イベントハンドラの命名規則 - Component が受け取る Props は `on` + `アクション名` + `対象名` - 関数そのものの名称は `handle` + `アクション名` + `対象名` ```tsx export const HogeComponent = () => { const { handleChangeHoge } = useHogeHooks(); return <FugaComponent onChangeHoge={handleChangeHoge} /> } ```
© Findy Inc. 11 確認⽤プロンプトを再実⾏する import { useState } from
'react'; function useCounter(initialCount = 0) { const [count, setCount] = useState(initialCount); const handleIncrementCount = () => setCount(count + 1); const handleDecrementCount = () => setCount(count - 1); return { count, handleIncrementCount, handleDecrementCount } as const; } export default useCounter; • カスタムインストラクションの調整に戻る • 確認⽤プロンプトの実⾏と、カスタムインストラクションの調整を繰り返し • トライアンドエラーを繰り返すだけ
© Findy Inc. 調整⽅法のワザップ 12
© Findy Inc. 13 不要なものは削除 • カスタムインストラクションに記述する内容には、正しい内容のみを簡潔に記述する ## イベントハンドラの命名規則 -
Component が受け取る Props は `on` + `アクション名` + `対象名` - 関数そのものの名称は `handle` + `アクション名` + `対象名` bad case ```tsx export const HogeComponent = () => { const { onChangeHoge } = useHogeHooks(); return <FugaComponent handleChangeHoge={onChangeHoge} /> } ``` good case ```tsx export const HogeComponent = () => { const { handleChangeHoge } = useHogeHooks(); return <FugaComponent onChangeHoge={handleChangeHoge} /> } ``` ## イベントハンドラの命名規則 - Component が受け取る Props は `on` + `アクション名` + `対象名` - 関数そのものの名称は `handle` + `アクション名` + `対象名` ```tsx export const HogeComponent = () => { const { handleChangeHoge } = useHogeHooks(); return <FugaComponent onChangeHoge={handleChangeHoge} /> } ```
© Findy Inc. 14 ⻑⽂よりも簡潔な階層構造 boolean型のPropertyを定義する場合、引数名には `is` をprefixで付け、それが共通コンポーネントの場合はoptionalにする。 - boolean
型のProperty - 引数名に `is` を prefix で付ける - 共通コンポーネントの場合 - optional にする • ⻑⽂よりマークダウンの階層構造のほうがCopilotの理解度が上がることが多かった • ⽂章を分解し、マークダウン形式の段落構造などに書き換えるのをおすすめ
© Findy Inc. 15 曖昧な表現はNG • 曖昧な⾔葉を使うと、Copilotはそれらを無視することが多かった • Copilotが中々理解してくれないケースでは、⾔葉の表現を少し変えるだけで⼀気に理解度が上がるこ とがある
- 親コンポーネントからまとめてテストコードを書く - ⼦コンポーネントへの直接的なテストコードは不要 - 親コンポーネントからまとめてテストコードを書く - ⼦コンポーネントへの直接的なテストコードは書かない
© Findy Inc. まとめ 16
© Findy Inc. 17 まとめ • 利⽤⽅法はファイルを⼀つ作成するだけで簡単 • まず⾃組織、⾃チームのコードガイドラインをコピペして叩き台にするだけでも⼀定の効果は出る •
叩き台をベースに、今回のワザップ集を参考にしながら調整を繰り返すと良い • TypeScriptでカスタムインストラクションを利⽤する場合、特に効果的だったもの ◦ ケースバイケースでの型定義 ◦ テストコードで守るべき内容 • ⽣成AIは友達。共存共栄。
© Findy Inc. ご清聴ありがとうございました 18