5days #インターンシップ 2025 を開催しました (Team02) #AI駆動開発

はじめに

2025年8月4日(月) ~ 8月8日(金) の 5 日間、「AI 駆動開発での AI エージェント開発」を体験していただくためのインターンシップを開催しました。参加していただいた 6 名の学生さんには、2つのチーム (Team01, Team02) に分かれてもらい、それぞれのチームメンバーで課題に取り組んでもらいました!

各チームで、成果の報告と感想をブログにまとめてもらいましたので、ここでは Team02 のブログを公開させていただきます。

※顔写真の掲載に関しては、学生のみなさんから許可をいただいております


インターンシップで学ぶこと

AI駆動開発を用いて、チャット形式のAIエージェントを作る

  • AI駆動開発
    • GitHub Copilot
    • Microsoft Copilot (GPT-4o)
  • 開発環境構築
    • VSCode with GitHub Copilot
    • Docker と DevContainer
    • Git と GitHub
  • フロントエンド開発 (TypeScript, React)
    • バックエンドとの接続
  • バックエンド開発 (C#, ASP.NET)
    • RESTAPI
    • AIエージェント開発 (Semantic Kernel)
    • MCP (Model Context Protocol)
    • ソフトウェアアーキテクチャ (レイヤード)
    • テストコード (Unit Test, Integration Test)
  • 開発の特徴
    • モブプログラミング(1人ドライバー、2人ナビゲータ)

1日目の内容と感想

初日は、所長からのメッセージがあり、拍手とともに、5日間のクリエーションラインさんのインターンが始まりました。僕たちは、最初に名札である名前とあだ名を書き、「あだ名」を書くのはなかなか珍しいなと感じました。それから、自己紹介カードで「好きなものハッシュタグ#」「推しAIツール」「インターンへの意気込み」を綴りました。それをもとに、社員さんの自己紹介があった後、僕たちインターン生の自己紹介があり、とても緊張しましたが、何とか切り抜けました(^^)/

そのあと、経営理念、事業内容等の会社説明会があり、HRT+JOYを意識した取り組みと、働き方でフルリモートを採用していて、全国各地にエンジニアの方々がいらっしゃっていることを聞き、変わっている会社だなと感じたのが第1印象でした!!

そのあと、社長さんの壮絶な昔の話をお聞きして、そこから立ち上がったのはすごいなと感じました。

ロジ周りの説明が終わった後、いよいよ技術研修が始まります!!

技術研修開始 -アーキテクチャって難しい!

「イケタク」さんこと「池田」さんを筆頭とした「ゆーた」さんこと「福永」さん、「むらっち」さんこと、「村上」さんの自己紹介があり、研修が始まりました。最終発表で作るWebアプリの説明があり、それから池田さんのお話を聞いていくのですが、「アーキテクチャ」というものを説明されて、図を見ても最初はちんぷんかんぷんでした。

私は、これを理解しつつアプリを作って行くの?いけるの?という不安感を感じながら、1日目は、池田さんのお話を聞いていました。

それから、AIエージェント、AI駆動開発、AI開発する上での適用範囲等の説明があり、AIは積極的に使ったほうが、いいけどシステムレベルごとに開発生産性が違うというものSLA、機密情報・個人情報の有無の取り扱いで、使い方が変わってくるので、AI全頼りは危険!!とのこと

そのAI駆動開発の「歴史」についても、対話型から進化していき、いまでは「自立型」があるほど成長してきている。その成長スピードに度肝を抜かれました…

そしてまず手を実際に動かして行った最初の作業が、「開発環境構築」です!!それは、2日目に向けて、開発環境を整えていくのが1日目の最終目標隣となり、バージョン管理、履歴追跡ができる「Git」、開発時のコード公開・共有ができる「Github」の環境構築から始めました。「福永」さんを中心に環境構築説明が始まり、仕組みを日常生活に例えてくれたので、とてもわかりやすく、頭の中でイメージしながらできました。

2日目の内容と感想

環境構築の続きをしました。DockerとDevcontainerについてのメリットを主に勉強しました。誰でもプロの人たちと同じ環境でプログラムを動かすことができる、独立しているためほかの環境に影響しない、といったことを学びました。Dockerはコマンド操作があり少し複雑ですが、Devcontainerを使うとVScodeで左下の><の部分をクリックしてコンテナを切り替えるだけで操作でき、とても楽にコンテナの立ち上げを行うことができます。

環境構築の話が終わると、いよいよ本格的な開発に入っていきます。はじめはフロントエンド開発で、チャット画面に自分が作成したメッセージ(テキスト+画像の複数のアイテム)を一つにまとめて送信し、それを画面上で表示させるということを行いました。はじめはメッセージを作成して送信ボタンを押してもチャット画面に何も表示されませんでした。そこで、プロジェクトの sendMessage 関数を以下のように実装することでメッセージの送信を可能にしました。

ポイントとしては、今回はMicrosoftが提供するAIChatProtocolを利用したので、それに準拠した形で実装する必要があることです。4行目にあるAIChatMessageというものが role, content, context?(あってもなくてもいい)からなるものなのでその通りに実装してあげましょう。テキストは必ず必要ですが、画像は必ずしも必要ではないため画像のURLが存在していればメッセージを pushするという形で実装しています。

updateMessageは今までの会話と新たな会話をまとめる処理を記述しており、ここでテキストと画像を一つのメッセージにまとめる処理を書きます。これがそのコードで、今までのメッセージに、テキストデータ(userMessage[0])と画像(dataUrl)をひとまとめにする処理が書かれています。

次に、ユーザとAIの会話履歴を保存し、新たな会話が発生したときにそのメッセージも含む新しいメッセージリストを作成します。updateMessageを定義し、ユーザのメッセージをサーバに送信、AIからの応答を格納するなどの処理を書きます。ここでポイントになるのが、「AIからの応答をストリーミングで出力させる」ということです。ストリーミングとは簡単に言うとメッセージを部分部分で返すことです。AIがすべての返答を用意して一斉に送信するよりもユーザ体験が向上します。以下のコードは複雑ですが、 for 文の部分がストリーミングの処理となっています。

以上の処理を書いてあげると、ユーザからのメッセージは以下のようにテキストと画像がひとまとまりで送信できているかと思います!AIからのストリーミング返答は画像に収めるのは難しいですが、きちんと送信できていました。フロントエンドの実装は以上になります。

次にバックエンド開発にも少し入りました。初めに自分たちが使用する Copilot に与える指示ファイルの作成をしました。 .github/insrtructions/general.instructions.mdファイルに以下の記述をしました。ポイントとしては最初に褒めること、関西弁で答えてくれることです笑

すると、以下のように愉快なAIエージェントが爆誕しました。

そして、バックエンドの座学に入りました。ここでは特にレイヤードアーキテクチャについて詳しく学び、各層ごとの役割と、依存関係をできるだけ疎結合にするような実装をすることの重要性について学びました。

3日目の内容と感想

3日目はDI実装、Semantic Kernel (SK) の学習をしました。

レイヤードアーキテクチャの、関心ごとに応じて複数の層に設計するということを学習しました。実際に足し算アルゴリズムをアプリ層に書き直し、DI(Dependency Injection)の実装についても体験しました。DI実装とは依存性注入というプログラムに注入する行為です。

<DI実装のメリット>

  • 疎結合にすることで変更への柔軟性
  • テストを行う際にコードの変更を最小限に抑えることができる
  • 独立性を保ったまま開発ができること

そのことを実際に足し算アルゴリズムで体験しました。初めて学習する内容だったので、理解に時間はかかりましたが、DIは大規模な開発ではコードの品質を保つうえで有効な手段である!結果はSwagger Uiを使い確認。結果が見やすくて感動しました。

例:コントラクラスタから取得したサービスインスタンスをメンバに注入

  直接newを行わない!

次に SK AIアプリケーションの構築支援フレームワークを学習しました。

SKInmemorySessionというチャットの履歴管理を行うクラスを作成し、SKチャットメッセージからAIの応答を差分で返す関数作成。AIが順に返す応答を生成していく実装を完成させました。

3日目は2日目に学習したレイヤードアーキテクチャで、Interfaceレイヤー層、Applicationレイヤー層を意識しながら実装することができました。

4日目の内容と感想

MCPサーバについての技術研修と、グループ課題をしました。

まず初めに、MCPについて説明します。MCPは Model Context Protocol の略で、LLMにコンテキストを与えるプロトコルになります。AIに追加で天気の情報やGoogle検索能力を与えることができますが、それらを与える方法がLLMやツールによらず共通化されたことで開発者側の負担が軽減されるメリットがあります。

上の画像の例がわかりやすかったです。MCPを経由することで線の数が圧倒的に減っているのがわかります。

MCPの実装ではGoogle検索を行う機能を追加しました。Backendの program.cs の中で記述されていた AI_ASSISTANT_CONTENT の部分を変更することでさまざまなAIアシスタントを作成することができます。とりあえず、僕たちは夏休みということもあり「読書感想文を書いてくれるエージェントです」というように指示を与え、本の名前と作者を与えると読書感想文を書いてくれるエージェントにしました。小学生の強い味方が誕生しました。午前の活動は以上となります。

午後はいよいよグループ課題です。与えられたテーマは「MCPツールを最低一つ追加し、なにかを解決してくれるAIエージェントを作成すること」です!

僕たちが課題で作成しようとしたものは「Slack上で、ユーザが送ったタスク(タスクの概要、締切などを含めたもの)のスケジュール管理とリマインドを行うAIエージェント」です。作戦会議の段階では、位置情報と天気を取得して逆にタスクがなくて暇なときに予定の提案までしてくれるというのも考えていました。

SlackのAPIは、フリープランのワークスペースを作成して使用しました。

次に、MCPツールに追加するためのBotTokenを取得し、GoogleSearchAPIなどと同様に user-secret に追加しました。Google検索の追加と同様に、MCPServer/Tools/slackChat.cs というファイルを作成し、Copilot Agent、を用いてゴリゴリコードを書いてもらいました。AIの使い方の部分で、プロンプトをマークダウンファイルにまとめて Step by Step コーディングをするように指示したのですが、いきなり100行を超えるプログラムを出力し、確認するのがとても大変で、よく確認せずに進んでしまいました。グループ課題での反省点です。そしてBackend/program.cs の AI_ASSISTANT_CONTENT の部分を以下のように書いて、タスク管理エージェントであることを意識してもらいました。

結果として、エージェントはSlack上でサンプルで作ってもらったタスクのリマインドはしてくれたのですが、自分たちが設定したタスクのリマインドまではうまく動きませんでした。ただ、チャット画面ではタスクのスケジューリングはしっかりと行ってくれました。

5日目 成果発表会

成果物の発表を行いました。自分たちが作りたいもののイメージ通りにはならなかったけど、一定の成果は出せることはできたと思います!

クリエーションライン(株) 富山事業所
〒939-8201 富山県富山市花園町3-2-9 池田ビル 2F,3F
お問い合わせはこちら
Twitter: CL_toyama

新規CTA