【ChatGPT】0. 生成AIサービスを用いたソースコーディングサポート

# 概要
生成AIを活用して作業工数を削減したいと考えています。
また、AIサービスの利用を広め、AIに関する理解を深めることを目指します。

# 目的
生成AIサービスの普及と利用方法の周知を図ります。
さらに、AIサービスを利用してソースコードの運用や改修を行います。

# 方法
実際にAIサービスを使用し、その結果が有用かどうかを評価します。
既存のソースコードに対して複数のアプローチを試み、
生成AIが運用・改修手段の一つとして活用できるかを検証します。

##### 主な観点
- 他の開発者が書いたコードの解説を依頼する
- コードにコメントを追加してもらう
- 問題点や改善提案を提示してもらう
- リファクタリングを行ってもらう
- 処理の共通化や不足部分の対応を依頼する

AIサービスにリファクタリングについて質問したところ、以下の回答が得られました。
この回答を基に、実際のソースコードの運用や改修を依頼します。

<details><summary>コードリファクタリングについて</summary>

コードリファクタリングは、コードの機能を変えずに内部構造を改善するプロセスです。
以下の観点を考慮することで、より効果的なリファクタリングが可能になります：

1. **可読性**:
   \- コードが理解しやすく、他の開発者が簡単に読めるようにする
   \- 意味のある変数名や関数名を使用する
   \- 適切なコメントを付ける
　
2. **保守性**:
   \- コードの変更が容易であるように設計する
   \- 複雑なロジックを簡潔にし、分かりやすくする
   \- モジュール性を高め、関連する機能をグループ化する
　
3. **再利用性**:
   \- コードの重複を排除し、共通の機能を再利用できるようにする
   \- 汎用的な関数やクラスを作成し、他の部分でも使えるようにする
　
4. **テスト性**:
   \- コードの変更がテストに影響を与えないようにする
   \- ユニットテストや自動テストを容易にするための設計を行う
　
5. **パフォーマンス**:
   \- 無駄な処理や冗長な計算を削除する
   \- 効率的なアルゴリズムやデータ構造を使用する
　
6. **整合性**:
   \- コーディング規約やスタイルガイドに従う
   \- コードの一貫性を保ち、プロジェクト全体で統一感を持たせる
　
7. **依存性管理**:
   \- 外部ライブラリやモジュールとの依存関係を明確にする
   \- 依存性が変わる場合にコードの変更を最小限に抑える
　
8. **エラーハンドリング**:
   \- エラーや例外処理を適切に行う
   \- エラーメッセージやログが有用であることを確認する
　
9. **設計の原則**:
   \- SOLID原則（単一責任原則、開放/閉鎖原則、リスコフ置換原則、インターフェース分離原則、依存性逆転原則）などの設計原則に従う
   \- デザインパターンやベストプラクティスを活用する

リファクタリングの際は、これらの観点をバランスよく考慮し、コードの品質を向上させることが重要です。また、変更を加える前にバックアップを取り、変更後に十分なテストを行うことも大切です。

</details>

# 検証情報
期間　　　： 2024年09月
サービス　： ChatGPT 4o mini（無料版）
言語　　　： Vue 2 / javascript / html / css

# 検証結果
1. **可読性**:
   :o: 適切な変数名や関数名となるように修正し、簡潔にコメントを挿入した
　
2. **保守性**:
   :o: ロジックを役割毎に整理し、処理と表示を分割した
   :o: ファイルを分けることでモジュール性を高めた
　
3. **再利用性**:
   :o: コードの重複を排除し、共通関数を生成した
　
4. **テスト性**:
   :o: テスト環境用のコンポーネントやテストコードを作成した
   :x: エラーを解消しテストを実行することができなかった
　
5. **パフォーマンス**:
   :o: 初期化処理をとりまとめ、不要な計算や処理を整理した
　
6. **整合性**:
   :o: リセットメソッドを作成し、状態管理を一貫して扱うようにした
   :o: バリデーションチェックを追加し、入力データや計算結果を保証した
　
7. **依存性管理**:
   :o: 依存パッケージをアップデートし、セキュリティを強化した
   :x: vueのバージョン違いによりエラーが発生した
　
8. **エラーハンドリング**:
   :o: エラーメッセージの表示やログ出力を追加した
   :x: ０除算など発生するであろうエラーに対応ができなかった
　
9. **設計の原則**:
   :o: 計算ロジックとUIロジックを別々のコンポーネントやファイルに分けた

# 所感
今回は ChatGPT を利用することで生成AIサービスの使用感と課題解決能力を測りました

##### 生成AIサービス利用の所感
- 生成AIによる回答のうちメソッド共通化やコンポーネント分割など
既に記述されたものの改修や目的が明確な対応などの**回答精度は高かった**
</br>

- 明確に指示を与えられていない質問や大幅に構成が変わる修正案や
開発環境などに関するテキスト外の問題の**回答精度は低かった**
</br>

- 元々の記述が間違っているものを提示すると正しい形に修正しようとするため
意図していない部分の変更があった場合、**エラー調査に時間がかかった**
</br>

- 生成AIの回答がMarkdown記法になっておりQiitaの記事作成時にフォーマットがサポートされていたためコピー&ペーストで同じ記述が再現できた
</br>

##### プロンプト入力時に意識した点
- 簡潔な内容かつ命令形であること
- 出力結果やエラー内容の原文を提示すること

##### エラー解決ができなかった回答の傾向
- 複数の質問に対して同じ回答が返る
- 質問と問題を正しく認識させることが難しい場合もある

このような場合、プロンプト履歴をリセットすることで回答方針を変更した。

総じて、初回の大まかな方針を立てた後に複数回の質問を通じて問題を解決する方法が良いと感じました。主に中間仕様の決定や具体的な改善方針は利用者が提示し、生成AIには仮の構成を示しつつ実際の処理を記述させると、より利用しやすかったです。

- - -

各項目に対する質問と回答の詳細については、以下の記事内に記載します

https://qiita.com/y-k_20337/items/61a67f1e47580cd44e90

https://qiita.com/y-k_20337/items/112a3c116c7ae0042faf

https://qiita.com/y-k_20337/items/5b70778372d6f891a93d

https://qiita.com/y-k_20337/items/df113671875adb30ccc1

https://qiita.com/y-k_20337/items/a4b5df72493508e6d7a4

https://qiita.com/y-k_20337/items/a53017eb75b98bf80beb


# 参考
- お借りしたプロジェクト

https://qiita.com/morioka1206/items/ccdf77570bda8c8a1c77