<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>エコシステム | imakat.com</title>
	<atom:link href="https://imakat.com/tag/%e3%82%a8%e3%82%b3%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0/feed/" rel="self" type="application/rss+xml" />
	<link>https://imakat.com</link>
	<description>工夫と改善で人生をちょっと豊かに</description>
	<lastBuildDate>Fri, 19 Jun 2026 07:33:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://i0.wp.com/imakat.com/wp-content/uploads/2023/07/cropped-80d64ecd340db4e2ca3224859b04caed.png?fit=32%2C32&#038;ssl=1</url>
	<title>エコシステム | imakat.com</title>
	<link>https://imakat.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">160909258</site>	<item>
		<title>【Gem活用】コード(スクリプト)作成のエコシステムを作ってみた</title>
		<link>https://imakat.com/2026/02/16/28530/</link>
		
		<dc:creator><![CDATA[imakat]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 05:11:51 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[ものづくり]]></category>
		<category><![CDATA[スクリプト]]></category>
		<category><![CDATA[Gemini]]></category>
		<category><![CDATA[エコシステム]]></category>
		<guid isPermaLink="false">https://imakat.com/?p=28530</guid>

					<description><![CDATA[はじめに コード作成って何？なんとも刺さりの悪い言葉なのですが、昔からある言い方に直せば、「コンピュータプログラム」のことです。これが長ったらしいので、コードと呼んでいます。英単語ではcodeです。音楽で使う和音を意味す [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">はじめに</h3>



<p class="wp-block-paragraph">コード作成って何？なんとも刺さりの悪い言葉なのですが、昔からある言い方に直せば、「コンピュータプログラム」のことです。これが長ったらしいので、コードと呼んでいます。英単語ではcodeです。音楽で使う和音を意味するコードはchordですね。綴りが違います。能書はこのくらいにして中身に入ります。</p>


<div class="sc-dynamic-embed">
  <style>
  /* リンクの見た目を整える */
  .sc-dynamic-embed .sc-link-container { 
      display: flex; 
      margin-bottom: 10px; 
      flex-wrap: wrap; 
      align-items: center; 
  }
  .sc-dynamic-embed .sc-link { margin-bottom: 0; }
  .sc-dynamic-embed .sc-link a {
    font-size: 15px; 
    font-weight: normal;
    text-decoration: underline;
    color: #0073aa;
  }
  .sc-dynamic-embed .sc-link a:hover { text-decoration: none; color: #000; }
  
  @media (max-width: 500px) {
    .sc-dynamic-embed .sc-link a { font-size: 13px; }
  }

  .sc-dynamic-embed .imk-line {
      display: inline-block;
      width: 100%;
      border-radius: 2px;
      transition: background-color 0.1s;
  }

  .sc-dynamic-embed #subtitleOverlay,
  .sc-dynamic-embed #scSubtitleOverlay,
  .sc-dynamic-embed .overlay-cue,
  .sc-dynamic-embed .band {
      display: none !important;
      opacity: 0 !important;
      visibility: hidden !important;
      pointer-events: none !important;
  }
  </style>

  <div class="sc-link-container">
    <p class="sc-link">
      <a href="https://imakat.com/ds62/?drid=72" target="_blank"
         onclick="return scStopAndGo(event, this);">
        👉低画質・枠外字幕はこちら
      </a>
    </p>
  </div>

  <br />
<b>Warning</b>:  file_get_contents(https://imakat.com/gd_proxy/?f=videoct.json): Failed to open stream: HTTP request failed! HTTP/1.1 429 Too Many Requests
 in <b>/home/imakat/imakat.com/public_html/wp-content/themes/cocoon-child-master/dr52emd.php</b> on line <b>32</b><br />


  <script>
  (function(){
    var me = document.currentScript;
    var wrapper = me ? me.closest('.sc-dynamic-embed') : null;

    function protectVideo() {
      var target = wrapper ? wrapper : document;
      var mediaEls = target.querySelectorAll('video, audio');
      mediaEls.forEach(function(v){
        if(v.dataset.protected === 'true') return;
        v.dataset.protected = 'true';
        v.setAttribute('controlsList', 'nodownload');
        v.oncontextmenu = function() { return false; };
        v.addEventListener('contextmenu', function(e){ e.preventDefault(); return false; }, false);
      });
    }

    function initSubtitles() {
      var target = wrapper ? wrapper : document;
      var video = target.querySelector('video, audio');
      var listContainer = target.querySelector('details > p');
      
      if (!video) return false; 
      
      if (video.dataset.subInit === 'true') return true; 
      video.dataset.subInit = 'true';

      var oldOverlay = target.querySelector('#subtitleOverlay') || target.querySelector('#scSubtitleOverlay');
      if (oldOverlay) {
          oldOverlay.style.setProperty('display', 'none', 'important');
          oldOverlay.innerHTML = ''; 
      }

      function isSpecialMode() {
        var isFs = !!(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement);
        var isPiP = !!(document.pictureInPictureElement && document.pictureInPictureElement === video) || (video.webkitPresentationMode === "picture-in-picture");
        var isIOSFs = !!video.webkitDisplayingFullscreen; 
        return isFs || isPiP || isIOSFs;
      }

      // 初期状態のセット（リストがなければ最初から showing に）
      try {
        if(video.textTracks && video.textTracks.length > 0){
          for(var i=0; i<video.textTracks.length; i++){
             if(video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions'){
                 video.textTracks[i].mode = (!listContainer) ? "showing" : "hidden";
             }
          }
        }
      } catch(e){}

      // 字幕一覧が存在する場合のみ、リストのフォーマット処理を行う
      if (listContainer) {
          var detailsEl = target.querySelector("details");
          if (detailsEl) {
              detailsEl.open = true; 
              var summaryEl = detailsEl.querySelector("summary");
              if (summaryEl) summaryEl.textContent = "字幕(シーン)はここをクリック";
          }

          if (!listContainer.dataset.formatted) {
              var html = listContainer.innerHTML;
              var lines = html.split(/<br\s*\/?>/i);
              var newHtml = "";
              for(var j=0; j<lines.length; j++) {
                  if(lines[j].trim() === "") continue;
                  newHtml += "<span class='imk-line'>" + lines[j] + "</span><br>";
              }
              listContainer.innerHTML = newHtml;
              listContainer.dataset.formatted = "true";
          }

          var rootSublist = target.querySelector(".dr5-sublist") || listContainer.parentElement;
          if (rootSublist) {
            rootSublist.addEventListener("click", function(e){
              var a = e.target.closest && e.target.closest("a.imk-cue[data-seek]");
              if(!a) return;
              e.preventDefault();
              var ts = a.getAttribute("data-seek");
              if(!ts) return;
              var p = ts.trim().split(":").map(function(x){return parseInt(x,10)||0;});
              var sec = (p.length===2) ? p[0]*60+p[1] : (p.length===3 ? p[0]*3600+p[1]*60+p[2] : null);
              if(sec==null) return;
              try{ video.currentTime = sec; if(video.paused) video.play(); }catch(_){}
            });
          }
      }

      // ★ dr52.php と全く同じ「常時監視」のロジック
      // これにより、Safariが読み込み遅延を起こしても確実にONになります
      video.addEventListener("timeupdate", function(){
        var hasList = (listContainer !== null);
        var desiredMode = (isSpecialMode() || !hasList) ? "showing" : "hidden";
        
        try {
            if(video.textTracks && video.textTracks.length > 0){
                for(var i=0; i<video.textTracks.length; i++){
                    if((video.textTracks[i].kind === 'subtitles' || video.textTracks[i].kind === 'captions') && video.textTracks[i].mode !== desiredMode) {
                        video.textTracks[i].mode = desiredMode;
                    }
                }
            }
        } catch(e){}

        // リストがない場合はこれ以降のハイライト処理をスキップ
        if (!hasList) return;

        var cues = listContainer.querySelectorAll("a.imk-cue");
        if(cues.length === 0) return;
        var cur = video.currentTime;
        var activeA = null;

        for(var i=0; i<cues.length; i++){
            var ts = cues[i].getAttribute("data-seek");
            if(!ts) continue;
            var p = ts.trim().split(":").map(function(x){return parseInt(x,10)||0;});
            var t = (p.length===2) ? p[0]*60+p[1] : (p.length===3 ? p[0]*3600+p[1]*60+p[2] : null);
            if(t !== null && cur >= t - 0.5){ activeA = cues[i]; } 
            else if(t > cur){ break; }
        }

        if(activeA){
            var activeLine = activeA.closest(".imk-line");
            if(!activeLine) activeLine = activeA;

            if(activeLine.classList.contains("active-hl")) return;

            var allLines = listContainer.querySelectorAll(".imk-line");
            for(var k=0; k<allLines.length; k++) {
                allLines[k].classList.remove("active-hl");
                allLines[k].removeAttribute("style"); 
            }
            var allLinks = listContainer.querySelectorAll("a");
            for(var m=0; m<allLinks.length; m++) {
                allLinks[m].classList.remove("active-hl");
                allLinks[m].removeAttribute("style"); 
            }

            activeLine.classList.add("active-hl");
            activeLine.style.setProperty("background-color", "#ffff00", "important");
            activeLine.style.setProperty("color", "red", "important");
            activeLine.style.setProperty("font-weight", "normal", "important");
            
            var newLinks = activeLine.querySelectorAll("a");
            for(var n=0; n<newLinks.length; n++) {
                newLinks[n].style.setProperty("color", "red", "important");
                newLinks[n].style.setProperty("text-decoration", "none", "important");
            }

            if(listContainer.offsetParent !== null){
                var containerRect = listContainer.getBoundingClientRect();
                var activeRect = activeLine.getBoundingClientRect();
                var targetScroll = listContainer.scrollTop + (activeRect.top - containerRect.top) - (listContainer.clientHeight / 2) + (activeLine.clientHeight / 2);
                listContainer.scrollTo({ top: targetScroll, behavior: "smooth" });
            }
        }
      });

      return true;
    }

    var checks = 0;
    var checkTimer = setInterval(function(){
      protectVideo();
      var success = initSubtitles();
      checks++;
      if (success || checks > 20) { 
        clearInterval(checkTimer);
      }
    }, 500); 

    if (!window.scStopAndGo) {
      window.scStopAndGo = function(event, link){
        try{
          var mediaEls = document.querySelectorAll('video, audio');
          mediaEls.forEach(function(m){
            try{
              if (!m.paused) m.pause();
              if (document.pictureInPictureElement === m && document.exitPictureInPicture) {
                document.exitPictureInPicture().catch(function(){});
              }
            }catch(e){}
          });
        }finally{
          event.preventDefault();
          setTimeout(function(){
            if (link.target === '_blank') {
              window.open(link.href, '_blank');
            } else {
              window.location.href = link.href;
            }
          }, 50);
        }
        return false;
      };
    }
  })();
  </script>
</div>



<a rel="noopener" target="_blank" href="https://docs.google.com/drawings/d/1_65TflS4kAJ6xf7RoGl22oAYRljreVTvBjsnmbcZQQ8/edit?usp=sharing" 
>
<img decoding="async" src="https://docs.google.com/drawings/d/e/2PACX-1vQW9KCkzFbj3Zaa4sZPLjInUUHwKJ2FdpFW388svQ82AkWComAKJSEDe5VbT8z1w0uqnoSeq00BuiUf/pub?w=1920&#038;h=1440"
></a>



<div class="wp-block-cocoon-blocks-toggle-box-1 toggle-wrap toggle-box block-box not-nested-style cocoon-block-toggle"><input id="toggle-checkbox-202606191633250" class="toggle-checkbox" type="checkbox"/><label class="toggle-button" for="toggle-checkbox-202606191633250"><strong><span class="marker">コードと要約</span><span class="marker">(クリック)</span></strong></label><div class="toggle-content">
<figure class="wp-block-flexible-table-block-table"><table class="has-fixed-layout"><tbody><tr><td><span class="red"><strong>❶</strong></span>公開用スクリプト作成_pub.txt：<br>要約：この workflow は、選択した *_exe.txt ファイルから公開用 *_pub.txt を生成する自動処理である。保存先は M1 側ボリュームに固定し、Dropbox へは直接書き込まない。メタ情報が無い場合は自動付与し、既存メタでは更新日時を除去、状態を「公開用」に変更する。本文から個人情報・キー・パス等を匿名化し、key_patterns.txt に基づく追加置換も行う。未置換の秘密候補を抽出して警告し、生成後は公開 URL とエンコード URL を表示・コピーする。付属のシェルスクリプトで生成物を Dropbox に rsync 同期する。</td></tr><tr><td><a href="https://imakat.com/script_list/?pubtxt=公開用スクリプト作成_pub.txt" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=zrU95MiY.png" alt="" style="width:120px; height:auto;"></a></td></tr><tr><td><span class="red"><strong>❷</strong></span>公開用スクリプトのリスト表示_pub.txt：<br>要約：WordPressのショートコードによる公開用TXT一覧を生成するコード。?pubtxt_dir パラメータで階層移動、見出しクリックで sort/order 切替が可能。pmedia/scripts_pub 配下のTXTのみ対象とし、@eaDir やドット始まり・key_patterns.txt を除外。<br>更新日時（mtime desc）→名前→サイズの優先順でソートし、パンくず表示も実装。各TXTはクリックで閲覧または &amp;dl=1 でUTF-8添付ダウンロード可。ディレクトリトラバーサル防止のため realpath 検証を行う安全設計。</td></tr><tr><td><a href="https://imakat.com/script_list/?pubtxt=公開用スクリプトのリスト表示_pub.txt" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=zrU95MiY.png" alt="" style="width:120px; height:auto;"></a></td></tr><tr><td><span class="red"><strong>❸</strong></span>scripts_pubフォルダからgドキュメントを生成_pub.txt：<br>要約：このシステムは、ローカルのスクリプトファイルをGoogleドキュメントに自動同期し、公開するためのものです。Googleドキュメント化することによりGemの読み込みが自動になります。<br><code>sync_docs.py</code>は、設定されたローカルフォルダから特定の拡張子を持つファイルを読み込み、更新日時順に整理します。これらのファイル内容を目次と共に整形し、Google Docs API経由で、指定された複数のGoogleドキュメントに分割して書き込みます（1ドキュメントあたり最大50ファイル）。既存内容を認証後に更新する機能を持ちます。<br><code>watcher.py</code>は<code>sync_docs.py</code>と連携し、監視対象フォルダ内のファイル変更をリアルタイムで検知します。変更後クールダウン期間を経て、自動的に<code>sync_docs.main_sync()</code>を呼び出し、Googleドキュメントへの同期処理を実行。ローカルファイルの更新を自動的にクラウドへ反映させます。<code>com.xxxxxxxx.docsupdater.plist</code>はmacOSのLaunchAgents設定ファイルで、システムの起動時に<code>watcher.py</code>を自動実行し、バックグラウンドでファイル監視とGoogleドキュメント同期プロセスを常駐させる役割を担います。<br>全体として、このシステムはローカルで管理するスクリプトやテキストファイルを常に最新の状態でGoogleドキュメント上に保ち、ウェブ公開可能な自動化ワークフローを提供します。</td></tr><tr><td><a href="https://imakat.com/script_list/?pubtxt=scripts_pubフォルダからgドキュメントを生成_pub.txt" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=zrU95MiY.png" alt="" style="width:120px; height:auto;"></a></td></tr><tr><td><span class="bold-red">❹</span>Antigravity(AIエージェント)に処理を指示するときの基調プロンプト：<br>XXXXXXシステムの実行局FACTORYは、Mac mini M1上の「ITスクリプト管理」を拠点に、設計図を現実環境に適合・定着・記録するAIアシスタントです。FACTORYはITスクリプト管理フォルダを徹底検索し、既存ファイルへの追記・修正を優先。コードは自律テストでエラー修正します。安全基準として、ITスクリプト管理フォルダ内は自律操作可ですが、他での削除等はオーナー承認必須。<code>rm -rf</code>等の破壊的コマンドは禁止、ゴミ箱へ移動等に置換します。機密情報は<code>.env</code>で管理し、報告は汎用形式で行います。記録では新規ファイル名はオーナーと相談、メタ情報と350～400字の要約を付与し、指定形式で出力。完了後、更新箇所をオーナーに報告します。<br>※XXXXXXは、ご自分の名前に変えてください。</td></tr><tr><td><a href="https://imakat.com/script_list/?pubtxt=AIエージェントに処理を指示するときの基調プロンプト_pub.txt" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=zrU95MiY.png" alt="" style="width:120px; height:auto;"></a></td></tr><tr><td>コード(スクリプト)をもっと知りたい方はこちらへ↓</td></tr><tr><td><a rel="noopener" target="_blank" href="https://gemini.google.com/gem/1Dp-NLSA5j5OXE3B1Ki2IaBRCvq4CGa6t?usp=sharing"><img decoding="async" src="https://imakat.com/rd.php?id=s7BMZHhB.png" alt="" style="width:120px; height:auto;"></a></td></tr></tbody></table></figure>
</div></div>



<h3 class="wp-block-heading">ポイント解説</h3>



<h4 class="wp-block-heading"><strong>ChatGPTからGeminiへ</strong></h4>



<p class="wp-block-paragraph">私のプログラム作成のパートナーは、はじめはChatGPTでしたが、最近になってGeminiへと移行しました。 その理由は開発してきたコードが増えて全部を記憶させて開発に利用することが困難になってきたからです。単価あたりの知識記憶容量がGeminiはChatGPTの約10倍あったのが決め手でした(2026年1月時点)。従って、これから説明する「知識の循環システム」が低コストで実現できるからです。</p>



<p class="wp-block-paragraph">ただし生成AIの選択ですが、将来どうするか全く分かりません。というのは、毎月くらい各社から高性能のモデルが登場して目移りするからです。ただ、GeminiはGoogle製なので、デジタルアセットの作成から利用、廃棄に至るインフラをほぼ全て提供できるGoogle内にいるので、今のところ一番底力があると思えます。Appleが本気を出せば別ですが。</p>



<p class="wp-block-paragraph">それでは、私が実践している**「コード（スクリプト）作成のエコシステム」**について、お話ししようと思います。</p>



<h4 class="wp-block-heading">１　<strong>開発：AIとの対話から生まれる「動く形」</strong></h4>



<p class="wp-block-paragraph">私のプログラム開発は、Geminiとの「対話」から始まります。 実現したいアイデアを、そのままAIに投げかけてみる。そこから質疑応答を重ね、ロジックを磨き、コードを作ってもらいテストを繰り返すというやり方です。</p>



<p class="wp-block-paragraph">最大のメリットは、自分の都合のいい時間に作業ができること、構文のエラーに悩まされる時間が減り仕組みづくりに集中できることでしょう。まずは**「動く形」を迅速に作り上げる**ことができる。これが、このシステムの第一の魅力です。</p>



<h4 class="wp-block-heading">２　<strong>見える化：情報を「資産」に変えるひと手間</strong></h4>



<p class="wp-block-paragraph">完成したコードをただ保存しておくだけでは、後で活かせません。「あれ、このpythonは何をするものだったかな？」と迷子になってしまいます。</p>



<p class="wp-block-paragraph">そこで私は、必ず**「コードの見える化」<strong>という工程を挟みます。 具体的には、Geminiにコードの</strong>「日本語要約」**を作成させ、それを冒頭に添付したtxtファイルを生成し、「ITスクリプト管理」フォルダへ収めます。</p>



<p class="wp-block-paragraph">さらに重要なのが<strong>セキュリティ</strong>です。 独自のルール（key_patterns.txt）に基づき、個人情報やAPIキーを機械的に「XXXXX」などへと置き換えます。こうして生成されたクリーンなファイルを、公開用の scripts_pub フォルダへ移動させます。 少し手間に見えるかもしれませんが、この工程が、「誰でも使える汎用的な知識資産」へと変身させるのです。</p>



<h4 class="wp-block-heading">３　<strong>公開と共有：ブログと「自分専用Gem」</strong></h4>



<p class="wp-block-paragraph">こうして整えられた知識資産は、2つのルートで新しい価値を生み出します。</p>



<p class="wp-block-paragraph">一つは、このブログです。 WordPress上の「公開スクリプト一覧」として整理し、訪問者に自由に役立てていただけるリソースとして開放しています。</p>



<p class="wp-block-paragraph">そしてもう一つが、**Geminiへのフィードバック（還流）**です。 これらのスクリプト群を「知識ソース」としてリンクした、私専用のGem（カスタムAI）を構築します。これはユーザーへのサポート窓口になると同時に、私自身が次のコードを生成するための、最強のデータベースになってくれるわけです。</p>



<p class="wp-block-paragraph">26年4月時点、Geminiに「ノートブック」という機能が追加になっています。ここにもセッションが使えますが、マルチモーダル機能が弱いため、画像の中身を読み取ることができないです。その意味でも、コード開発他で頻繁にスクショを添付する場合は、つまり<strong>画像を使うときは、マルチモーダル機能の強いGemまたはGemini本体のセッションを使うべき</strong>です。</p>



<h4 class="wp-block-heading"><strong>４　終わりなき進化のループ</strong></h4>



<p class="wp-block-paragraph">このシステムを運用していて改めて気づく最大の利点は、**「予習が不要」**になったことです。 プログラムに不具合が見つかったり、改善したくなったりした時、私のGeminiには既に過去のコードが「知識」として埋め込まれています。特段の準備をすることもなく、速やかに修正や拡張の開発に着手できるのです。</p>



<p class="wp-block-paragraph">修正して得られた新たな知見は、またシステムを通って知識ソースへ戻っていく。 回せば回すほど、AIは私の意図やコーディングの癖を深く学習し、精度が増していきます。まさに、終わりなき進化のループと言えるでしょう。</p>



<h4 class="wp-block-heading"><strong>5　</strong>ファイル管理系のアプリの生成・実行を、Antigravity任せにするのは禁物</h4>



<p class="wp-block-paragraph">動画を作った後で、改善として、「Antigravity」という、コードを作るだけではなくて実行テストから完成までやってくれるアプリを使えるようにしました。見てるだけで勝手に作業をしてくれる夢のようなアプリです。こういうアプリはAIエージェントと呼ばれています。ちなみにmodelとして大人気のClaudeも指定できます。しかしですね、非常に怖い側面を持っています。<strong>エンタメあるいは書類作成用途は、この「Antigravity」をぼおっと見てるだけでいいかも知れません。しかし、ファイル管理系のアプリ作成の場合は、作業を丸投げするのは、やめた方がいい</strong>です。「大事なファイルを消された！」という大失敗があちこちで起きているようです。</p>



<p class="wp-block-paragraph"><strong>ファイル管理系のシステムを生成する場合は、Antigravityは使わないで、</strong></p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-yellow-background-color">
<p class="wp-block-paragraph"><strong><span class="marker-under">Geminiにコードを書いてもらう→コードを実行ファイルにペーストする→Geminiに作ってもらったコマンドをターミナルに貼り付け実行する→ターミナルの返答をGeminiに報告する→正常に動くまで修正する→完成→コードをローカルのtxtファイルに保存して日本語要約を更新する→公開用ファイルを生成する</span></strong></p>



<p class="wp-block-paragraph"><span class="bold-red">※注意：コードに秘匿性のある文字列が含まれる場合は、そのチャットを、あとで削除するのが望ましいです。</span></p>
</div>



<p class="wp-block-paragraph">といったようにバトンリレーに人が挟まるような、慎重な形がよいと考えます。</p>



<p class="wp-block-paragraph"><br>Antigravityは、現在は無料ですが、いつ有料化されるかわからないので、そこも頼りきらないほうがいい理由でもあります。<br></p>



<h4 class="wp-block-heading"><strong>６　</strong>コード保存の最適解：なぜ「txtファイル」が最強なのか？</h4>



<p class="wp-block-paragraph">上記2で、要約とコードを「txtファイル」にまとめて保存する手順をご紹介しました。実はこの非常にシンプルで原始的な保存方法こそが、私が考えるエコシステムの「要」であり、最強の解決策です。</p>



<p class="wp-block-paragraph">上記5で触れたように、Antigravityのような便利なAIエージェントが登場しても、それに完全に依存するのは危険です。AIツールは凄まじいスピードで進化しており、数年後には全く別の会社の、全く新しいAIエージェントに乗り換えている可能性が十分にあります。</p>



<p class="wp-block-paragraph">そんな時、特定のアプリ専用のフォーマットや複雑なデータベースでコードを管理していると、移行時に解読できなくなるリスクが伴います。しかし、プレーンな「テキストファイル（.txt）」は、コンピューターの世界で最も普遍的なフォーマットです。要約と様々な言語のコードが1つのtxtファイルにまとまっていれば、将来どのようなAIエージェントをパートナーに選んだとしても、必ず解読・読み込みが可能です。<br><br>例えば、ノーコードツールは便利ですよ確かに。しかし、この作業方法を人に説明するのが難しいという、笑えない欠点があります。有名なAppSheetを使ったとします。しかしこれを、「どんな画面を開いて、どの項目を選んで、そこへどのような算式を書き込んで、どうする」といった手順は、文章の手順書として記述することにならざるを得ません。なにせノーコードですから。このノーコードツールでの内容も、一つにまとめたいシステムの一部なのです。そうしたものもtxtファイルなら含むことができます。</p>



<figure class="wp-block-image size-large is-resized"><a href="https://imakat.com/rd.php?id=gbFJyujp.png" target="_blank"><img decoding="async" src="https://imakat.com/rd.php?id=gbFJyujp.png" alt="" style="aspect-ratio:1.8333606154853495;width:800px;height:auto"/></a></figure>



<p class="wp-block-paragraph">目まぐるしく変わるAI時代において、環境の変化に左右されず、確実に自分の資産を守り継承できる。シンプルゆえに、このtxtファイルでの保存方法が「最強」だと言えます。</p>



<h4 class="wp-block-heading"><strong>【おわりに】</strong>まだまだ混沌とした領域、to be continued</h4>



<p class="wp-block-paragraph">今回は「プログラム作成」を例に挙げましたが、この**「情報の整理・変換・再学習」という循環**は、文章作成や研究、あるいは趣味の記録など、あらゆる分野に応用が可能だと感じています。</p>



<p class="wp-block-paragraph">作業の進め方は、ゴールまでの間をステップ化して、少しずつ着実に進む方法がベストです。</p>



<p class="wp-block-paragraph">一つの記事には、「おわり」があるわけですが、このコード生成のエコシステムの構築は、実は、今、始まったばかりで、この記事を書き終えた今、もう、リフォームを考えています。私にとってAntigravityは専門的過ぎるし勝手に動くので全くのブラックボックスになることはリスクが大きいです。</p>



<p class="wp-block-paragraph">ちょっと方向を変えて。</p>



<p class="wp-block-paragraph">具体的には、Gemini、Gem、 NotebookLM、 GoogleAIStudioの連携を使って、コード生成工房をもっと便利に改造したいです。</p>



<p class="wp-block-paragraph">実際、ほとんど毎日のように、エラーや不具合を直したり、小道具のようなアプリを作ったりしていますが、それを行う、私の作業小屋ですね。それを改造したいと思います。</p>



<p class="wp-block-paragraph">私は高齢者ではありますが、こういった新しい技術は、若者だけのものではありません。むしろ、これまで蓄積してきた多くの知識や経験を整理し、形にするためにこそ、AIというパートナーは大きな力を貸してくれるようにも思えます。企画する力、構想する力は、 高齢者こそ備わっているのでは、と思っています。</p>



<p class="wp-block-paragraph">to be continued.</p>



<p class="wp-block-paragraph"><br>以上</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">28530</post-id>	</item>
	</channel>
</rss>
