想像すれば形になる時代 - PKSHA Technology のインターンに参加して
執筆日: 25.08.13
PKSHA Technology での 2 weeks インターン
どれだけ情報発信して良いのかわからないので、公開情報以上のことは書けないが、株式会社 PKSHA Technology で2週間のインターンシップに参加させていただいた。 流れとしては、インターン生でチームを組み、PKSHA FAQ というサービスを利用して解決できる課題を定義するところから、実際に実装してプレゼンテーションまで行うというもので、ソリューションのプロトタイプ提案までの業務を体験できるような内容だった。
インターン期間中にはメンターとしてサポートしていただいた社員の方々以外にも、ランチ会や懇親会を通じて多くの社員の方々と交流する機会があり、非常に貴重な経験となった。 特に、お話しした社員の方々のバックグラウンドや、それぞれのキャリアについての考え方などは、今後の自分のキャリアを考える上で大変参考になった。 また、業務の深い部分を掘り下げて質問することができ、それによってその業務の楽しさを知ることが出来た点は、個人的に非常に嬉しかった。
インターンでのプロジェクトでは、我々のチームはなかなか課題定義の部分で意見がまとまらず、他のチームに比べて3日程度遅れて開発をスタートした。 そういうこともあり、ある程度形にまとめることが出来たのも最終日の前日だったし、プレゼンテーションの準備もギリギリまでかかった。 その過程でインターンであるにも関わらず残業して深夜まで作業することもあったが、それが何とかプロダクトとして形になったことは、今回のインターンでの大きな成果だったと思う。 何よりも、これまで人生で培ったリーダーシップや議論をまとめる力、プロジェクトマネジメント能力、問題解決能力、しんどいときの忍耐力などの色々な側面を、このインターン中に要求される環境に置かれたことが、個人的には非常に良い経験になった。
ただ、ここで述べたいことは、AI の優秀さである。 私はこのインターンに参加する前には、ほとんどバイブコーディングをやったことがなかった。 もちろん Copilot のような AI エージェントを出た当初に使ったことはあったが、そのときはあまり大規模開発をしていなかったし、AI の提案はまどろっこしくて好みではなかったため、継続して使おうと思わず、すぐに使うのをやめてしまった。 それから何年か経ち、Claude Code などのニュースを片耳にはさみながら、今回のインターンに臨んだ。 インターンでは Cursor が提供され、人生で初めてまともなバイブコーディングを行った。 本当に exciting な体験だったし、よく巷で言われるような「AI がプログラミングを奪う」というネガティブなイメージよりも、可能性が無限に広がったようなワクワクするポジティブなイメージを持った。
初めてバイブコーディングをしながら感じたこと
インターン中、バイブコーディングをしながら一番面倒だったことは、他のメンバーがバイブコーディングでコミットしたコードをリファクタリングすることだった。 リファクタリングといっても、ほとんどが無駄なコードを削除することだった。 AI が生成したコードのクオリティ自体は、正直言って素晴らしかったし、他人のコードを読んだ時の違和感がほとんどないほどだった。 しかし問題点は、プロンプトにプロンプトを重ねながら、内部のコードを確認していなかったのか、使われていない関数や死んだロジックが大量に残っていたことだった。 このような死んだコードは可読性を著しく下げるし、AI がコードを読んでから思考するという特性を考慮すると、AI に誤解を与える可能性すらある。 このような問題はおそらく既にバイブコーディングを積極的に行っている開発者の中では共通の課題なのだろう。 AI のコーディング能力があがったとはいえ、AI の暴走を止めるためには、まだ人間のコーディングリテラシーが求められるのだということを感じた。
リファクタリング自体もバイブコーディングで実施したが、私が「xxx 関数は使われている?使われていないなら削除して」などのプロンプトを投げ続けると、AI はその意図を汲み取りながら、次に何かを実装する際も、冗長性がないように実装してくれたり、新たな実装によって不要になったコードを削除してくれたりした。 すると、コードのクオリティはみるみる改善されていき、ほとんど不満のないコードが出来上がっていった。 この体験から、AI にコードのクオリティを保つためのコンテキストを与えることの重要性を学んだ。
しかしながら、別の問題として、AI がコンテキストを保持しすぎると、処理が重くなり、AI の応答が遅くなるという問題もある。 なので、いかに凝縮された濃度の高いコンテキストを与えられるかが、バイブコーディングの鍵になると感じた。
最近実践したこと
PKSHA Technology でのインターン中、インターンが終わったら作りたい生成 AI アプリのアイデアがいくつか浮かんでいたので、その1つを早速実装してみることにした。 作ったものは、Slack のスレッド内のチャット内容を読み取って、それに基づいて Canvas を生成する Slack アプリ(リポジトリ)だ。 素早く Canvas の叩き台を作ってくれるので、新たに Cavas を作る時の文章執筆障壁が軽減されると期待している。
この Slack アプリもバイブコーディングで実装したわけだが(ちなみに GitHub Education に加入しているので、無料で使用できる Copilot を使った)、いきなりエージェントモードで実装を始めるのではなく、質問モードで仕様や実装方法についてある程度練った上で、それをエージェントモードで実装していくという方法をとった。 AI は具体的な注文であればあるほど正確な実装をしてくれるが、プロジェクト開始初期の叩き台を作る上では、かなりアイデアを詰めておかないと、自分のイメージした方向とは異なる方向に進んでしまう可能性がある。 また、そのために細かくプロンプトを投げても良いのだが、そうするとコンテキストが膨らんでしまう問題に直面するので、最初の質問モードである程度具体的な仕様や開発の方向性を固めておいて、それを凝縮されたコンテキストとして使用することで、AI の暴走を防ぎながら、ある程度高速な応答の下で開発を進めることができた。 まだまだ様々なエンジニアの事例を参考にして、このバイブコーディングプラクティスを改善していく必要があるが、まずはその土台となるパーソナルプラクティスを確立できたことは、非常に良かったなと感じる。
余談 - なんで Slack アプリを作ったのか?
インターン最終日の成果発表でのフィードバックの中で非常に印象に残っている言葉として、「最新の情報はチャットの中にあったりする」というものがあった。 その言葉は激しく同意せざるを得ないほど、私が研究室で生活する中で身に染みて感じていたことであった。 すなわち重要なことは、どうやってその最新の情報を整理して、共有可能なナレッジとして集約し、活用していくかということだった。 今は、AI の力によって、ナレッジから情報を抽出してエンドユーザーに提供してくれるところまでは RAG のような形で実装できる。 実際 Slack にも AI 検索が導入され、それを利用すれば会話内容や Canvas から情報を抽出して答えてくれる。
重要なことは、その前段階の情報を整理することだった。 会話内容はその会話に参加している人たちにしかわからないような、コミュニケーションのスキーマが存在する。 このスキーマというのは、コミュニケーションを行う個体の中に形成された思考の枠組みであり、スキーマが近い人同士のコミュニケーションにおいては、多少会話や単語を省略してもコミュニケーションが成立するが、スキーマの異なる人同士のコミュニケーションにおいては、会話の内容が正確に伝わらないことが多い。 そのような体験は誰でもしたことがあるはずで、研究室ではよく若い学生たちと私のような老いた学生や教授陣との間で、スキーマが異なるために、会話が噛み合わないことが多い。 つまり、コミュニケーションを円滑にするために必要なことは、スキーマを共有することであり、そのためにはスキーマ形成のための情報リソースが必要である。
それではその情報リソースとは何か? それがチャット内容から抽出された構造的な情報である1。 これは個人の感想に過ぎないが、構造化された情報の方が記憶の定着が早く、スキーマ形成も高速であると感じている。 したがって、チャット内容をそのままナレッジとして置いておくよりは、それを構造化された情報に整形し保管して置いた方が、メンバーのスキーマ形成に寄与するのではないかと考えたわけである。 Slack Canvas を使えば、Slack API とも連携して文章作成が出来るので、今回のアプリの着想に至り、実際にインターンで学んだ内容の記憶の定着も兼ねて実装するに至った。
ちなみに、認知心理学のスキーマという単語を知ったのは、研究で半導体試料を作製するときにラジオとして聞いていた YouTube のゆる言語学ラジオというチャンネルの動画にて、慶応 SFC の教授である今井むつみ先生が出演された回(動画リンク)を拝聴したのがきっかけである。 本当に、人生どこにアイデアが転がっているかわからない。。
想像すれば形になる時代
ここまで色々述べてきたが、結論として現在のバイブコーディングの開発体験は素晴らしく、ある程度表面的なアプリケーションに関しては、想像すれば実装できる時代になったと感じた。 実際フロントエンド経験がほとんどない私でさえも、UI のイメージさえできれば実装できるという経験は、かなり衝撃的だった。
だからといって、上述したようにまだ人間が不要になったわけではなく、課題発見の主体はまだ人間であるし、人間が人間のための社会を作り上げようとする以上、人間という存在は必要であり続けると思う。 また、結局バイブコーディングをするといっても、正確なプロンプトを投げるためには幅広いエンジニアリングに関する知識が要求されるため、全くの素人が今すぐ洗練されたアプリケーションを実装できるかと言われると疑問である。 唯確かな事実は、ちゃんと AI を制御できるエンジニアがバイブコーディングを行えば、アイデアを形にすることは非常に容易になったということである。
だからこそ、私を含む現代の若者たちには想像力や課題発見能力が求められるのではないかと感じた。 どういう未来になっていくのか(というよりなっていってほしいか)を夢想しながら、人間や社会そのものの性質を深く理解するといった、起業家精神が全員に求められるようになっていくのではないかと思う。 あとは、考えた課題を他者に伝えるためのコミュニケーション能力も依然として重要であるが、この点についてはもっと成長しなくてはいけないなと感じた。
-
もちろん構造的な情報がスキーマ形成にどれほど寄与するかの検証は必要である。 ↩