Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Claude vs GitHub Copilot Vueのコード変換丸投げしてみた

Kazuki Shimamoto
October 31, 2024
92

Claude vs GitHub Copilot Vueのコード変換丸投げしてみた

Kazuki Shimamoto

October 31, 2024
Tweet

Transcript

  1. 25 Claude / GitHub Copilot それぞれの特徴 Claude と GitHub Copilot

    Claude GitHub Copilot chat 汎用的な対話型AIアシスタント • 複雑な指示や長文の処理が得意 • 数学、分析、コーディング等、 幅広いタスクに対応可能
  2. 26 Claude / GitHub Copilot それぞれの特徴 Claude と GitHub Copilot

    Claude GitHub Copilot chat 汎用的な対話型AIアシスタント • 複雑な指示や長文の処理が得意 • 数学、分析、コーディング等、 幅広いタスクに対応可能 開発に特化したリアルタイムコーディング支援AI • VSCodeなどのIDEに統合され、コードの補完や提案 を行う • コンテキストを理解したコード生成が可能 • プログラミング以外の用途には特化していない
  3. 27 Claude / GitHub Copilot それぞれの特徴 今回利⽤したバージョン Claude GitHub Copilot

    chat 高精度な理解力と正確性を備えた汎用AI • 複雑な指示や長文の処理が得意 • 数学、分析、コーディング等、 幅広いタスクに対応可能 開発に特化したリアルタイムコーディング支援AI • VSCodeなどのIDEに統合され、コードの補完や提案 を行う • コンテキストを理解したコード生成が可能 • プログラミング以外の用途には特化していない Claude 3.5 Sonnet v2 GPT-4oがベース
  4. 29 Claude / GitHub Copilot それぞれの特徴 • Amazon Bedrock •

    GitHub Copilot Amazon Bedrock / GitHub Copilotどちらも再学習しない いいえ。AWS およびサードパーティーのモデルプロバイダーは、 Amazon Bedrock への⼊⼒または Amazon Bedrock からの出⼒を使⽤して Amazon Titan またはサードパーティーのモデルをトレーニングすることはありません。 ※「Amazon Bedrockのよくある質問」より Prompts are only transmitted to the AI model to generate suggestions in real-time and are deleted once the suggestions are generated. Copilot for Business also does not use your code to train the Azure OpenAI model. ※「How to responsibly adopt GitHub Copilot with the GitHub Copilot Trust Center」より
  5. 32 コード変換精度⽐較 <script setup> • atomsコンポーネント ◦ 73⾏ • moleculesコンポーネント

    ◦ 339⾏ • organismsコンポーネント ◦ 1052⾏ コンポーネントの⼤きさ毎に⽐較
  6. 33 コード変換精度⽐較 <script setup> atomsコンポーネントの変換結果 Claude GitHub Copilot <script setup

    lang="ts"> interface Props { label: string disabled?: boolean // 省略 } withDefaults(defineProps<Props>(), { disabled: false, // 省略 }) </script> <script setup lang="ts"> import { defineProps, withDefaults } from 'vue'; const props = withDefaults(defineProps<{ label: string; disabled?: boolean; // 省略 }>(), { disabled: false, width: '', // 省略 }); </script>
  7. 34 コード変換精度⽐較 <script setup> 変換精度に⼤きな差はない Claude GitHub Copilot <script setup

    lang="ts"> interface Props { label: string disabled?: boolean // 省略 } withDefaults(defineProps<Props>(), { disabled: false, // 省略 }) </script> <script setup lang="ts"> import { defineProps, withDefaults } from 'vue'; const props = withDefaults(defineProps<{ label: string; disabled?: boolean; // 省略 }>(), { disabled: false, width: '', // 省略 }); </script>
  8. 35 コード変換精度⽐較 <script setup> 不要なコードはあるが、プロンプトで対応できるだろう Claude GitHub Copilot <script setup

    lang="ts"> interface Props { label: string disabled?: boolean // 省略 } withDefaults(defineProps<Props>(), { disabled: false, // 省略 }) </script> <script setup lang="ts"> import { defineProps, withDefaults } from 'vue'; const props = withDefaults(defineProps<{ label: string; disabled?: boolean; // 省略 }>(), { disabled: false, width: '', // 省略 }); </script> 不要な import ⽂
  9. 36 コード変換精度⽐較 <script setup> moleculesコンポーネントの変換結果 その1 Claude GitHub Copilot <script

    setup lang="ts"> (省略) const fromImage = () => { imageFileInput.value.click() opened.value = false } const fromVideo = () => { videoFileInput.value.click() opened.value = false } (省略) </script> <script setup lang="ts"> (省略) const fromImage = () => { // 画像を追加する処理 }; const fromVideo = () => { // 動画を追加する処理 }; (省略) </script>
  10. 37 コード変換精度⽐較 <script setup> moleculesコンポーネントの変換結果 その2 Claude GitHub Copilot <script

    setup lang="ts"> const emit = defineEmits<{ (e: 'createStep', payload: any): void (e: 'createStepList', payload: any[]): void }>() </script> <script setup lang="ts"> (定義がない) </script>
  11. 53 変換結果 抜粋その1: actionの定義 Claude GitHub Copilot actions: { async

    loadBookmarkList(params: LoadBookmarkListParams) { // スライド都合で省略 }, async deleteBookmarkList(idList: number[]) { // スライド都合で省略 } } actions: { async LOAD_BOOKMARK_LIST(payload: { page?: number; perPage?: number; sortKey?: string; sortOrder?: string }) { // スライド都合で省略 } }
  12. 54 GitHub Copilotはあるべきメソッドがない Claude GitHub Copilot actions: { async loadBookmarkList(params:

    LoadBookmarkListParams) { // スライド都合で省略 }, async deleteBookmarkList(idList: number[]) { // スライド都合で省略 } } actions: { async LOAD_BOOKMARK_LIST(payload: { page?: number; perPage?: number; sortKey?: string; sortOrder?: string }) { // スライド都合で省略 } } // deleteBookmarkListがない!!
  13. 55 変換結果 抜粋その2: エラーハンドリング Claude3 GitHub Copilot catch (error) {

    createErrorHandler(error) throw error } catch (error) { console.error('Failed to load bookmarks:', error); }
  14. 56 Claude の⽅が元のコードを参照するのが得意 Claude GitHub Copilot catch (error) { createErrorHandler(error)

    throw error } catch (error) { console.error('Failed to load bookmarks:', error); }
  15. 57 • Vueコードの変換においては Claude 3.5 Sonnet v2 の⽅が良かった ◦ 複雑‧⻑⽂の指⽰を漏れることなく反映させている

    ◦ まとまった量のコードを変換するタスクに向いている • GitHub Copilotはリアルタイム‧少ない⼊⼒でコーディ ングを補助してくれるものだと改めて理解した やってみての感想
  16. 60