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
12k
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
350
生成AI時代のエンジニア育成 変わる時代と変わらないコト
starfish719
0
15k
【Claude Code】Plugins作成から始まったファインディの開発フロー改革
starfish719
0
1.1k
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
3.9k
生成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
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
1
500
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.9k
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
230
自作OSでスライド発表する
uyuki234
1
3.6k
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
0
110
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
240
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
430
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
630
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
450
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
330
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.9k
Performance Engineering for Everyone
elenatanasoiu
0
250
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Code Review Best Practice
trishagee
74
20k
Paper Plane
katiecoart
PRO
1
52k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Mind Mapping
helmedeiros
PRO
1
270
Evolving SEO for Evolving Search Engines
ryanjones
0
230
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
WCS-LA-2024
lcolladotor
0
670
Raft: Consensus for Rubyists
vanstee
141
7.6k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
170
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
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