【AI活用】第4弾!コード生成エコシステムを成功させる3つのポイント 〜AI連携をハンドメイドする〜

はじめに 

まずは、動画をご覧ください。

字幕一覧(クリック)

(00:00:00) 〜コード生成エコシステムを成功させる3つのポイント〜
(00:00:08) これまで
(00:00:09) コーディングを生成AIで行う方法を
(00:00:13) 記事にしてきたことがあるわけですが、
(00:00:17) 今回は一応一つの節目というか、
(00:00:20) 区切りとして整理しておきたいと思います。
(00:00:25) 生成AIには代表として
(00:00:28) ChatGPT、
(00:00:30) Claude、
(00:00:32) Geminiの3つがあります。
(00:00:34) 私は成り行き上、
(00:00:37) Geminiを今のところ使っています。
(00:00:41) それからクラウドかローカルかという選択の問題もありますが、
(00:00:48) 今回の3つのキモに関しては、
(00:00:51) 両方に共通だと思っています。
(00:00:56) その3つとは、「知識ソースを蓄える」、
(00:01:00) 「秘匿化を行う」、
(00:01:02) 「迅速なエラー対策」ということなのですが、
(00:01:07) 一般に考えたAIの活用ということなら、
(00:01:11) 「知識ソース」必須ということだけで十分かもしれません。
(00:01:17) 私の場合コーディングも非常に比重が大きいので、
(00:01:22) さらにそこに「秘匿化」と
(00:01:24) 「エラー対策」が追加されてきます。
(00:01:28) 1つ目の「知識ソース」です。
(00:01:31) 私は図書館に例えています。
(00:01:38) まず「知識ソースの基盤」です。
(00:01:42) 大手IT企業だと社内Wiki、
(00:01:46) 全社ポータルというような箱というか入れものをですね、
(00:01:51) 情報システム部が用意してくれるでしょう。
(00:01:54) 一方、私は
(00:01:56) GeminiのNotebookに
(00:01:58) 自分用・公開用の図書館を用意します。
(00:02:04) 次に「コンテキストの管理」、
(00:02:07) つまり記事の引き出し方ですが、
(00:02:10) 大手IT企業はベクターDBとか
(00:02:13) 本格的なRAGシステムを使っています。
(00:02:19) RAGは記事をコンピュータが理解しやすい形に
(00:02:22) 変換したもの。
(00:02:25) 料理で言うところの仕込み、
(00:02:28) あるいは御膳立てというのですか、
(00:02:31) その種の物と捉えてください。
(00:02:34) 一方、私はNotebookを使いますが、
(00:02:38) これは幸いにもRAGシステムが
(00:02:40) 使われていますので、
(00:02:42) そのまま役に立ちます。
(00:02:47) 次に「情報区分の統制」というところですが、
(00:02:51) 私はtxtファイルを実行用の
(00:02:55) exe.txtファイルと、
(00:02:57) 公開用の
(00:02:59) pub.txtファイルにシンプルに区分けしています。
(00:03:04) 具体的には目的別に図書館を分けています。
(00:03:10) 自分用imakat図書館、
(00:03:12) 公開用imakat図書館。
(00:03:15) それからソースファイルの厳格な
(00:03:18) 区分ルールをつけています。
(00:03:22) コード類、
(00:03:24) それからimakatブログ、
(00:03:26) それから備忘録の3種類がありますけども、
(00:03:30) コードは
(00:03:32) 実行用コードと公開用コードがあります。
(00:03:36) imakatブログは
(00:03:38) ブログの全記事をテキスト化しています。
(00:03:43) 備忘録ですが、
(00:03:45) 内部備忘録と
(00:03:47) 外部備忘録があります。
(00:03:50) 内部備忘録は個人情報とか
(00:03:52) 外部秘にしたい記録が含まれてますので、
(00:03:57) 今後セキュリティに強いAppleのAIに含めることになると思います。
(00:04:02) とりあえずは使いません。
(00:04:05) それから外部備忘録ですが、これが
(00:04:08) 作業記録とか
(00:04:10) チャットログ、
(00:04:12) 技術アイデアなど、
(00:04:14) そういった知識とか経験の蓄積として
(00:04:17) 自分用の図書館にリンクさせ、
(00:04:20) AIの頭脳にしていきます。
(00:04:23) この外部備忘録をNotebookに入れていくことになります。
(00:04:31) 次に2つ目に大事なのが「秘匿化」です。
(00:04:35) 個人情報が外に漏れると大きな損失につながってきます。
(00:04:42) プログラムを動かす秘密キーやパスワードは、
(00:04:48) 運用上でリミッターをかけて暴走を止めることはできますが、
(00:04:53) それでもその間、無駄な損失を拡大させてしまいます。
(00:05:00) 「機密情報の保管」ですが、大手IT企業ではクラウド金庫サービスで厳格に運用されます。
(00:05:11) 私としては秘密情報はローカルの.envファイルに隔離させます。
(00:05:19) 「パラメーターの払い出し」では、
(00:05:23) 大手IT企業は専任のセキュリティシステムが、
(00:05:29) 一定時間だけ有効な合鍵を発行して認可するような仕組みになっています。
(00:05:36) 私としてはNotebookを管理塔として、パラメーターのみをAIに渡すようにしています。
(00:05:45) 「プライバシー対策」では、大手IT企業は
(00:05:51) GitGuardianなどで監視して自動的な遮断を行うようになっています。
(00:05:58) 私としては誰かとコーディングの共同作業をすることもないので、
(00:06:04) GitHubまでは使わず、ローカルのテキストファイルで管理して、
(00:06:09) その中で固有名詞のマスキングを行なっています。
(00:06:16) 具体的には「ハード秘匿化」ですが、
(00:06:19) 危険度の高い個人情報やキー情報は、
(00:06:23) コードの中には直接には書かないようにしています。
(00:06:28) もしセキュリティの弱いAI Studioなどで作業中に秘匿化が必要な場合は、
(00:06:36) 必ずNotebookにパラメーター化を依頼して、
(00:06:42) Notebookからは設定されたパラメーターだけを返答するようにします。
(00:06:48) 「ソフト秘匿化」については、これを知られても困るようなことはほとんどないのですが、
(00:06:55) マスキングしておきたいような情報、例えば本名のようなものでしょうか、
(00:07:02) これは自分で任意に設定できるようにしてあります。
(00:07:07) それから最後の3つ目に大事なのが「エラー対策」です。
(00:07:13) 実はこれが一番難しいです。
(00:07:18) と言いますのは、私自身にとって、
(00:07:23) まず起きている現象がエラーなのか何なのか分からないということ、
(00:07:29) エラーである場合、何のプログラムが起因してるかが分からないことです。
(00:07:36) 病気と同じで、最初に総合診断をしてもらって専門医に行き、
(00:07:44) 難病なら大病院に行くというような移動が生じるわけですね。
(00:07:51) 今の私のようなクラウド型AIの利用の場合は、
(00:07:58) 初期の総合診断はGemini、
(00:08:02) 専門医の選定はNotebook、
(00:08:06) 簡単な治療ならNotebook、
(00:08:10) 難病ならAI Studioという運びになります。
(00:08:14) ただ私としては、初期の総合診断から簡単な治療までは、
(00:08:21) 地元の医者、つまりローカルAIで済ませて、
(00:08:25) 難病の場合は専門的な大病院、
(00:08:30) つまりクラウドAIというような棲み分けをしたいと思っています。
(00:08:39) それでは最後におまけです。
(00:08:43) Notebookでコーディングを行うことも可能ですが、
(00:08:47) 画面に表示されたコードやコマンドをそのままコピペして
(00:08:52) ターミナルで実行したり、実行ファイルに保存したりすることになります。
(00:09:00) その時に単純なコピペではですね、この様に改行なしのベタ書きになってしまいます。
(00:09:10) そこで、3回クリックした時の3回目を押したまま末尾までもってくる。
(00:09:18) それをコピーする。
(00:09:24) そして、それを貼り付けると、
(00:09:28) ということで正常にペーストすることができます。
(00:09:35) すると、元のままでペーストされます。
(00:09:38) 以上です。
(00:09:43) 〜コード生成エコシステムを成功させる3つのポイント〜でした。

生成AIブームがここ数年急激に発展してきているわけですが、生成AIを個人が利用する場合は、ネットワークを通じてクラウドを使うしかないだろうと最初は見ていましたが、

最近はそれをMac mini上のローカルLLMで行おうとする人も増えています。これは、かつて流行した「自宅Webサーバー」を思い起こさせます。しかし「自宅Webサーバー」ブームは短命でした。というのは、機器のメンテナンスやウイルス感染、災害リスクが重くのしかかって個人が自宅で抱えていくのにはちょっと無理な発想だったわけです。

ローカルとクラウドの長所短所を考え合わせれば、やはりハイブリッド化していくのが合理的に思えてきますね。

私の場合ですが、今のところはクラウドだけを使っています。どの大手のAIにも移行できるように、ソースはtxtファイルをベースにして言語はPythonなどの一般的な言語を中心にしています。現在は成り行き上、Googleを使っています。Googleは何でも揃うのでラクと言うことでしょうか。Notebook・Gemini・Google AI Studioを連携させています。これらをうまく活用するための3つのポイントについて、大手IT企業のアプローチとの対比を交えながら解説します。

ポイント1:Gemini Notebookに「知識」を蓄える

AIを開発パートナーとして機能させるための第一歩は、例えばNotebookへ前提知識(コンテキスト)を溜め込むことだと思います。溜め込みを判断するのはあくまで私です。生成AIに勝手に任せることはしません。やっぱり自分が中身を知っていることは重要ですから。私が生成AIによるコーディングを実行できたのも、imakatブログへの投稿の蓄積、自前でネットから拾い上げながらコツコツ作ってきたプログラムコードの蓄積、その他もろもろ、それらを知識ソースとして投入できたことが非常に大きいです。
古臭いと感じるかもしれませんが、年月かけてブログ投稿を積み重ねるのが役に立つと思います。SNSは瞬間の出来事の切り取りと感じた印象だけを記録するので知見の蓄積としてはちょっと弱い、やっぱりブログがいいと思います。始めるのは若ければ若いほどいいと思います。身近な改善や経験を備忘録のつもりで書いていく、記事の投稿の目標は、ばらつきはあるとしても月1点以上がいいと思います。大事な事は職業上の秘密には絶対に触れないことです。私としてはこのWordPressのブログをコツコツと続けてきて本当によかったと感じています。

Notebookを用途に合わせて明確に区分し、知識資産を分類・配置します。

大手IT企業と個人ハンドメイドの対比

比較項目大手IT企業の通常アプローチ本エコシステムのハンドメイド手法
知識ソースの基盤社内Wiki(Confluence等)や全社ポータルを専任チームが運用・保守Notebookの用途別「図書館」(自分用/公開用)に直接集約
コンテキスト管理ベクターDBや高額な社内RAGシステムをインフラ構築して検索ノートブックのソース投入機能を活用し、追加費用ゼロで即時参照
情報区分の統制複雑なアクセス権限(ACL)と閲覧ロール設定によるアクセス制限exe.txt(実行用)/pub.txt(公開用)/内外備忘録の命名規則でシンプルに統制

具体的な運用設計

  • 目的別に「図書館」を分ける
    • 自分用imakat図書館:日々の開発・ブログ記事執筆、メンテナンス・デバッグを行うためのプライベートな知識ベース。
    • 公開用imakat図書館:外部共有、ブログ記事発信、公開向けのオープンな知恵袋。
  • ソース(ファイル)の厳格な区分ルール
    • 実行用コード(exe.txt):手元で実際に動作するコード。自分用図書館にのみ格納し、公開用には一切含めません。
    • 公開用コード(pub.txt):後述のソフト秘匿化(サニタイズ)を施したコード。両方の図書館で共有します。
    • imakatブログ(公開).txt:オープンな技術ノウハウや趣味雑学他の発信記事。両方の図書館に配置します。
    • 外部備忘録.txt(※重要):
      • 内部備忘録【内】:個人情報や個人的な日記など、外部秘にしたい記録(AI・Notebookには一切連携しない)。今後、セキュリティに強いAppleのAIに含めることになると思います。
      • 外部備忘録【外】:作業記録、試行錯誤のチャットログ、技術アイデアなど。知識や経験の蓄積として自分用図書館にリンクさせ、AIの頭脳を育てます。

ポイント2:ハード秘匿化するモジュールを組み込む

クラウド型生成AIにコードを渡す際、最も恐ろしいのが認証情報や特定ファイルIDの漏洩です。これを防ぐため、「二層秘匿化」を行いました。ただし、この秘匿化の登録もAIに任せるのではなく私が判断します。

大手IT企業と個人ハンドメイドの対比

比較項目大手IT企業の通常アプローチ本エコシステムのハンドメイド手法
機密情報の保管クラウド金庫サービス(AWS Secrets Manager, HashiCorp Vault等)を有料導入ローカルの .env ファイルに隔離し、外部アクセスを物理遮断
パラメータの払い出し専任のセキュリティ基盤がトークンを動的発行・認可管理Notebookを管理塔とし、プロンプト指示でパラメータのみをAIに持ち帰らせる
プライバシー対策リポジトリ監視ツール(GitGuardian等)によるコミット自動遮断ソフト秘匿化ルールにより、公開用コード生成時に固有名詞を自動サニタイズ

具体的な運用設計

  • 第1層:ハード秘匿化(実質的セキュリティ)
    スプレッドシートIDやAPIキーをコード内に直接ベタ書き(SPREADSHEET_F8_ID = “1_ABCDabcd…”)せず、ローカルの .env ファイルへ隔離します。コード側は、Pythonの場合、 os.getenv(“SPREADSHEET_F8_ID”) で環境変数から動的ロードする構成を標準化します。
  • ハード秘匿化モジュールはNoteBookで一元管理
    生成AIのカスタム指示に「プログラムを作成している最中に、秘匿情報の設定が必要になったら、NoteBookへ行って秘匿情報にパラメータを設定してもらってパラメータだけを持ち帰って来ること。」と設定しておきます。AIに直接生データを触らせず、Notebookが安全なパラメータ名だけをコード側に橋渡しします。
  • 第2層:ソフト秘匿化(見た目・見栄えの安全性)
    メールアドレスや氏名などの固有名詞は、認証突破に直結しなくてもコードに残ると不格好で不用心です。公開用コード(pub.txt)を出力する段階で、これらの文字列を安全にマスキングします。

ポイント3:エラー修正プロセスを確実に実行する

実は、エラーへの対処が一番難しいところです。2つの問題があります。一つは、時間が経つと、記憶も薄れ、このエラーはどのプログラムが関係していたのか思い出せなくなることです。突然のエラーは焦りまくるので尚更です。もう一つは、NoteBookが画像動画の解析能力がほとんどないことです。従って、エラー時につきものの、エラーのスクショはGeminiに解析してもらうことが入り口になります。ここは将来はNoteBookにその解析能力がつくことを期待するものですが。そうした得手不得手のある中で、強みを活かした連携フローを敷いてみました。

大手IT企業と個人ハンドメイドの対比

比較項目大手IT企業の通常アプローチ本エコシステムのハンドメイド手法
障害受付(一次切り分け)運用監視ツール(Datadog等)+ヘルプデスク/一次運用オペレーターGeminiによる画像解析(エラー画面のスクショを投げるだけで即座に言語化)
原因特定・影響調査構成管理DB(CMDB)の突合+熟練アーキテクトによる設計書レビューNotebookによる全コード台帳の横断検索+修正指示書の自動起票
修正・リファクタリング大規模リファクタリング専門チームによる設計・テスト・実装作業Google AI Studioの広大なコンテキスト長を活かした一括修正

具体的な運用設計

  • 新規開発・改善のフロー
    • NoteBookに相談:まずは知識が蓄積されているNoteBookで過去資産や影響範囲を照合。
    • 規模に応じた切り分け:軽微な内容はNoteBook内で完結。400行を超える大規模ロジックや複雑な構造刷新は、広大なコンテキスト長を持つ Google AI Studio へ引き継いで一気に生成します。
    • 秘匿化連携:コード生成の途中でキーやIDが必要になったら、常に横の「NoteBook(ハード秘匿化モジュール)」へ依頼してパラメータを取得します。
  • エラー修正のリレー
    • Geminiにエラー画像を投入(一次受付・言語化):画面スクショをGeminiに渡すだけで、根本原因や関連キーワードを正確にテキスト化(短い修正ならそのままGeminiで修正完了)。
    • NoteBookに投げてファイル特定&指示書作成(司令塔):言語化されたキーワードをもとにNoteBookが全コード(exe.txt等)を横断検索し、「該当ファイルの特定」と「AI Studio用の修正指示書」を出力。
    • AI Studioで修正・完結(確実な実行):指示書をAI Studioに流し込み、長文コードの整合性を保ったまま確実に修正を完了。

まとめ

さて、今回は、クラウド型生成AIについてその核心を3つのポイントにまとめたわけですが、こうやって記事を書いていても、まだなお、モヤモヤしているのは、3番目の、エラー処理のところです。Geminiに画像解析をさせてNotebookに引き継いでコードを抽出する、というところです。ここを一つにまとめたいのです。そこで、「画像解析からコード抽出」の部分を、ローカルLLMで処理することに挑戦してみたいと思います。その後で、コードが大規模の場合AI Studioへ引き継ぐのは、これはもう仕方ない事だと思います。だからハイブリッド型になりますね。

ただし挑戦するにしても、私にとって生成AIを含めたデジタル関係の趣味に掛けられるお金は月3000円くらいまでです。YouTubeを見ていると、3社以上の生成AIを契約して月10万円以上かけているような、おそらく本職がデジタル関係の方がたくさんいらっしゃるわけですが、私は生活費の一部から出費するわけですので、身の丈に合ったサービスを利用することになります。

改めて感じることですが、大企業から学ぶ真似ることは面白いと感じます。AIに聞けば、大企業がどのように諸課題を乗り越えているか解説してくれます。それを参考にして、それを小さくして簡単にして自分で作り込む。そのプロセスは結構未知な世界でワクワクするところです。そんなマインドが、個人開発を破綻させず、安全な長期利用につながっていくものと考えます。