Intelligent Technology's Technical Blog

株式会社インテリジェントテクノロジーの技術情報ブログです。

ソフトウェア開発。 Microsoft Copilot にいろいろ手伝ってもらう

生成 AI の台頭と、ソフトウェア開発の現場の変化

こんにちは。中山です。
ここ数年の、 ChatGPT をはじめとする 生成AI の台頭により、ソフトウェア開発の現場においても、大きな変化が到来しています。
AI そのものを、サービスやアプリケーションに組み込む、という面ももちろんですが、 ソフトウェア開発の作業自体を、生成 AI を用いて効率化する 、という使い方も広がってきました。
Github Copilot は、その代表的なサービスの一つでしょう。
しかしながら、です。
実は開発の現場で、「 Github Copilot 自由に使えてますよ」という恵まれた環境にいらっしゃる方、実際のところは、それほど多くはないんじゃないでしょうか?
利用料金も少なからず発生しますし、そもそも Github を利用できない、という現場もあるのではないか、と想像しています。
「これからは AI の時代だ」とうたわれながら、一方で実際の開発の現場では、やはりまだその恩恵を受けるのは難しいのか・・・。
そうあきらめかけていたそのとき。よいのが見つかりました。 Microsoft Copilot です。

Microsoft Copilot とは

Microsoft Copilot とは、 ChatGPT や Google の Gemini 、また最近登場して話題になっているClaude3 などと同様の、自然な会話文でコミュニケーションできる、AI アシスタントです。
2023年までは Bing Chat という名前で限定的にサービス提供されていました。
Microsoft Copilot は、Github Copilot のようにエディタと連携して利用する、という形のものではありませんが、ソフトウェア開発のいろいろな作業を、ちょっとずつラクにしてくれるかもしれない、便利な使い方ができるようです

Microsoft Copilot の特徴としては、

  • 無料で使える
  • アカウント登録なしで使える
  • 最新モデル( GPT-4 )が使える
  • 画像やPDFファイルなどもインプットとして利用できる
  • ウェブ検索と連動している(リアルタイムの情報を取得できる)

という点が挙げられます。
ChatGPT や Claude3 も、無料で利用できるものの、無料版では最新のモデルが使えなかったりしますので、その点、 Microsoft Copilot のメリットはかなり大きいです。

ちなみに、Microsoft Copilot 自身に「Microsoft Copilot について教えて」みたいに聞いてみると、こんな回答が返ってきました。

  • Microsoft Copilot は、 Microsoft が提供するAIアシスタントで、検索エンジン「Bing」に統合されています。 以前は「Bing Chat」として知られていましたが、2023年11月にリブランドされました。
  • Microsoft Copilotは、 OpenAIの言語モデル「GPT-4」をベースにしています。このモデルは、文章生成や質問応答などのタスクにおいて高い性能を発揮します。
  • Microsoft Copilotは、 大規模なコードスニペットのデータセットでトレーニングされており、コードの予測と提案が正確です。関数やクラスの完全な生成も可能です。
  • Microsoft Copilotは、 テキストだけでなく画像やPDFファイルなどのマルチモーダル入力にも対応しています。これにより、さまざまな情報源を活用できます。

しかし、「これまで ChatGPT を使っていたけど、特に不自由は感じなかった」という方もいらっしゃるかもしれません。
そんな方のために、 Microsoft Copilot と ChatGPT の違い についても、Microsoft Copilot 自身に聞いてみました。その回答がこちら。

  1. 言語モデル:
    • Microsoft Copilot: 最新バージョンの「GPT-4」を無料で利用可能。
    • ChatGPT: 無料版は「GPT-3.5」をベースにしており、「GPT-4」を利用するには有料プラン「ChatGPT Plus」が必要。
  2. 情報の鮮度:
    • Microsoft Copilot: Bing検索に基づいた情報を提供し、参考となるサイトをリンク付きで示す。
    • ChatGPT: 具体的な情報源や根拠を提示できないため、ユーザーは回答の正確性を確認する必要がある。
  3. 画像の認識・生成:
    • Microsoft Copilot: 画像を認識し、画像に基づいた質問や生成をサポート。
    • ChatGPT: 画像関連の機能は提供されていない。

・・・ちょっと、Microsoft Copilot のほうを良く言いすぎている、ようにも思えますが、ChatGPT を補完するようないろいろな機能が提供されている、という感じですね。
一方で、最新のモデルが実装されるのは、これまでのところは ChatGPT がいつも先であったように思いますので、 最新の機能を使うのであれば ChatGPT ということになるかもしれません。

Microsoft Copilot 、けっこう使えますよ」と、私のチームのメンバーに教えてもらったのが、ちょうど今年 2024年の最初のあたりでした。
以降、私自身の日々の作業の中でも、この Microsoft Copilot、なくてはならない存在になってきています。

Microsoft Copilot ができること

では Microsoft Copilot で、具体的にどういうことができるのか、どういう場面で役に立つのか、いくつか見ていきたいと思います。

コードのサンプル書いて

プログラムのコードを書くときに、「以前にも書いたことあったけど、あれ、どうやって書いていたかな」というの、私はよくあります。
たとえば私の場合、「Python で datetime と string を変換する」みたいなパターンのコードがこれにあたるのですが、
このようなとき、従来ですと、

  1. 「Python 日時 文字列 変換」みたいなキーワードでウェブ検索して、
  2. 検索でマッチした技術ブログや、あるいは公式のリファレンスページをいくつか参照しながら、
  3. それらしいコードの例があれば採用してみる(思っていたのと違っていたら、また探し直す)

みたいなことをやっていました。

しかしこれ、 Microsoft Copilot に以下のように聞いてみますと、

このように

Python で、日時を文字列に変換するコードを教えて

と聞くだけで、

from datetime import datetime

# 現在の日時を取得
now = datetime.now()

# 月 日, 年 の形式の文字列に変換
date_string = now.strftime("%B %d, %Y")
print(date_string)  # 出力: March 29, 2023 (または現在の日付)

# 形式: YYYY-MM-DD
iso_date_string = now.strftime("%Y-%m-%d")
print(iso_date_string)  # 出力: 2023-03-29 (または現在の日付)

このようなコードのサンプルを教えてくれました。
これまで、

  1. 「Python 日時 文字列 変換」みたいなキーワードでウェブ検索して、
  2. 検索でマッチした技術ブログや、あるいは公式のリファレンスページをいくつか参照しながら、
  3. それらしいコードの例があれば採用してみる(思っていたのと違っていたら、また探し直す)

としていたのが、

  1. Microsoft Copilot に聞く

だけで解決してしまいました。

ついでに、以下のように、任意の日時を文字列に変換するパターンのコードも教えてくれました。

ここでポイントになりますのが、上記の Copilot からの回答の末尾にある「 詳細情報 」という部分です。
ここには Copilot が回答を生成するにあたって参考にしたウェブページの情報が表示されています。
Copilot がウェブ検索と連動して回答を生成してくれるので、 常に最新の情報が取得できる 、ということなのです。

再度の記載になりますが、Microsoft Copilot の特徴として、

  • 無料で使える
  • アカウント登録なしで使える
  • 最新モデル( GPT-4 )が使える
  • 画像やPDFファイルなどもインプットとして利用できる
  • ウェブ検索と連動している(リアルタイムの情報を取得できる)

があります。
これだけの機能を、 無料で、アカウントの登録も必要なく、かつウェブ検索と連動して最新の情報も取得できる 、というところに、Microsoft Copilot の大きなメリットがあると考えます。
特に、ソフトウェア開発に関する技術情報を調べる用途においては、この Microsoft Copilot は、 従来のウェブ検索を置き換えられるだけのポテンシャルはある のかもしれません。

エラー、解決してほしい

もうひとつの使い方として、開発中に発生したエラーを解決してもらう、というのもあります。
たとえば、Docker でコンテナを起動しようとしたときに、「 Error response from daemon: Ports are not available: 」というエラーメッセージが出力された、とします。
これは、答えを先に言うと、コンテナが利用する予定のポート番号が、すでに別のサービスで利用されている、という場合に出力されるものなのですが、
このエラーの原因を調べて、対策を取ろうとすると、やはりこれまでは

  1. エラーメッセージをウェブ検索して、
  2. 見つかったページ( Stack Overflow や技術ブログなど)の内容を確認して、
  3. そのページに書かれている内容を元に対策してみる(解決しなければ、ほかの情報を探す)

といった方法を取っていました。

しかしこれも Microsoft Copilot にお願いしてみると、

"Error response from daemon: Ports are not available: " というエラーを解決して

のように質問すると(あえて雑に質問してみています)、
Microsoft Copilot からは、

Dockerでコンテナを起動する際に、「Error response from daemon: Ports are not available」というエラーが発生することがあります。このエラーは、指定されたポートが他のプロセスで既に使用されているために発生します。以下の対処法を試してみてください。

ポートを確認する: 最初に、使用中のポートを確認します。ターミナルで次のコマンドを実行して、ポート番号を使用しているプロセスのリストを表示します。
sudo lsof -i:<ポート番号>
例えば、ポート番号80のプロセスを調べるには、次のように入力します。
sudo lsof -i:80
このコマンドは、ポート番号80を使用しているプロセスのリストを表示します。
・・・

のように回答が返ってきました。

このエラー解決のパターンでも、前述の「 コードのサンプル書いて 」と同じように、

  1. Microsoft Copilot に聞く

だけで解決してしまいそうです。

もちろん、Copilot の回答を常に鵜呑みにする、ということではなく、 その内容を見て、最終的には人間が判断する という使い方をするべきですが、
これまで私たち自身で探していた情報を、Copilot が代わりに探してきてくれて、判断材料として提示してくれるわけですので、これはやっぱり素直に活用させてもらうのがいいんじゃないか、と考えます。

画面イメージ読み取ってほしい

前述のケースと異なり、このパターンは、ソフトウェア開発の作業の中でも、どちらかというと 設計 に関わる分野で役に立つかもしれません。

あるアプリケーションをこれから開発していこう、というときに、たとえば以下のように画面イメージだけ、先にサンプルとして作りましたよ、というケースがあったとしまして、

※サンプルとして、ここでは Amazon のショッピングサイトの、アカウント新規登録のページを拝借いたしました

この、画面イメージの画像ファイルを、Microsoft Copilot 先生に直接読み込ませて、

その上で、以下のように指示します。

画像を添付するので、分析して画面項目の一覧を作成してください。
その際にjson形式で答えてください

その結果、Microsoft Copilot からは以下のような回答が返されます。

{
  "elements": [
    {
      "type": "logo",
      "description": "Amazon logo"
    },
    {
      "type": "text",
      "description": "アカウントサービス"
    },
    {
      "type": "form",
      "fields": [
        {
          "type": "input box",
          "label": "Eメールまたは携帯電話番号"
        },
        {
          "type": "input box",
          "label": "Amazonパスワード"
        }
      ],
      "buttons": [
        {
          "text": "ログイン",
          "color":"orange"
        },
        {
          "text": "パスワードを表示する",
          "type": "checkbox"
        }
      ],
      "links": [
        {
          "text": "パスワードを忘れた場合はこちら"
        },
        {
          "text": "新しいお客様ですか?アカウントを作成する"
        }
      ]
    }
  ]
}

完全ではないものの、このスクリーンショットに映っている、 メールアドレスやパスワードなど の入力欄の項目をピックアップしてくれていることがわかります。
画像に日本語が含まれていると、その読み取りの難易度が高いのかもしれませんが、おそらくこのあたりの精度は、今後すぐに向上していくことでしょう。

なお、上記で生成された画面項目一覧を元に、 API インタフェース仕様 の作成を依頼してみました。
Microsoft Copilot への指示(プロンプト)はこちらです。
(※以下の「 ### 指示 」のような書き方は、テキストの内容の区切りを明確にするためのもので、生成 AI のプロンプトのベストプラクティスとして知られている書き方です。このあたりはまた別の機会に紹介できればと考えています。)

### 指示
以下の画面項目一覧をもとに、API インタフェース仕様を作成してほしい。
API インタフェース仕様は、OpenAPI のフォーマットで記載してほしい。

### コンテキスト
[画面項目一覧]
{
  "elements": [
    {
      "type": "logo",
      "description": "Amazon logo"
    },
    {
      "type": "text",
      "description": "アカウントサービス"
    },
    {
      "type": "form",
      "fields": [
        {
          "type": "input box",
          "label": "Eメールまたは携帯電話番号"
        },
        {
          "type": "input box",
          "label": "Amazonパスワード"
        }
      ],
      "buttons": [
        {
          "text": "ログイン",
          "color":"orange"
        },
        {
          "text": "パスワードを表示する",
          "type": "checkbox"
        }
      ],
      "links": [
        {
          "text": "パスワードを忘れた場合はこちら"
        },
        {
          "text": "新しいお客様ですか?アカウントを作成する"
        }
      ]
    }
  ]
}

これに対しての回答がこちら。

openapi: 3.0.0
info:
  title: Amazon Account API
  version: 1.0.0
paths:
  /account/login:
    post:
      summary: Log in to an Amazon account
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                email_or_phone:
                  type: string
                  description: Email address or phone number
                password:
                  type: string
                  description: Amazon account password
      responses:
        '200':
          description: Successful login
  /account/forgot-password:
    get:
      summary: Retrieve password reset instructions
      responses:
        '200':
          description: Password reset instructions
  /account/create:
    post:
      summary: Create a new Amazon account
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Full name (in full-width characters, e.g., アマゾン 太郎)
                email_or_phone:
                  type: string
                  description: Email address or phone number
                password:
                  type: string
                  description: Desired password
      responses:
        '201':
          description: Account created successfully

これを見ますと、 ログインやアカウント作成 などの API が定義されており、一見、「それっぽい」雰囲気にはなってきているように見えます。
使い方としては、この回答結果をそのままアプリケーションの設計ドキュメントとして採用する、というのではなく、新規に設計する場合の、 議論・検討の土台 として参考にする、というのがよさそうです。
まったくのゼロから人間が考えていくよりも、 まず Copilot に作成させてみて、それをもとに、人間が調整を加えていく 、という方法を取ることで、効率化につながっていくかもしれません。

なお、Microsoft Copilot に画像を読み込ませる場合、オンラインのパブリックなサービスに画像をアップロードすることになりますので、実際に試す場合は、 外部にアップロードしても良い画像なのかどうか、確認してから 実施してください。

これ、Excel の表にまとめてください

こちらは、Microsoft Copilot のちょっと便利な機能、という感じのものですが、
たとえば以下のように指示すると、

ウェブアプリケーション開発で利用するフレームワークとその特徴を表にまとめて。
Excelで編集できるようにしてください。

以下のように回答が返ってきます。

もちろんです!ウェブアプリケーション開発で利用される人気のフレームワークとその特徴をExcelで編集可能な表にまとめます。
以下が比較表です:

| **フレームワーク** | **特徴** |
|-----------------|---------|
| React           | Facebookとコミュニティによって開発されたフロントエンドのフレームワーク。UI構築に適しており、仮想DOMを採用しています。 |
| Vue.js          | プログレッシブなJavaScriptフレームワークで、シンプルで柔軟な構文を提供。コンポーネントベースのアーキテクチャを採用しています。 |
| Angular         | Googleによって開発されたフロントエンドのフレームワーク。TypeScriptを使用し、大規模なアプリケーションに適しています。 |
| Django          | Pythonベースのバックエンドフレームワーク。高速な開発と堅牢なセキュリティを提供します。 |
| Ruby on Rails   | Rubyベースのバックエンドフレームワーク。シンプルで効率的な開発が可能で、アジャイル開発に適しています。 |

これらのフレームワークは、ウェブアプリケーションの開発において効率的で信頼性のある選択肢です。
Excelで編集できるようになっておりますので、必要に応じて情報を更新できます。

この場合、Microsoft Copilotの画面上では、 この表の右上に Excel のアイコンが表示され 、これをクリックすると、 この表の内容を Excel ファイルとしてダウンロードする ことができます。

ダウンロードした Excel ファイルはこんな感じ。

回答結果を Excel ファイルにも出力してくれる、という Microsoft ならではの機能ですが、意外といろいろな場面で役立ちそうな気はします。

まとめ

繰り返しとなりますが、Microsoft Copilot は、 最新のモデルを、無料で、アカウントの登録も必要なく利用でき、かつウェブ検索と連動して最新の情報も取得できる 、というところに特徴があります。
このように、利用のハードルがとても低い、ということ自体が、大きなメリットになっていると感じました。
ブラウザのテキストボックスに検索ワードを入力する代わりに、Microsoft Copilot のテキストボックスに質問や指示を入力する、というスタイルが、もう普通になってくるのかもしれません。