<?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>バイブコーディング | じじぃの引出し</title>
	<atom:link href="https://www.kazuban.com/blog/tag/%E3%83%90%E3%82%A4%E3%83%96%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kazuban.com/blog</link>
	<description>なにかしら、皆さんの参考になれば幸いです！</description>
	<lastBuildDate>Sat, 10 Oct 2026 09:16:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://www.kazuban.com/blog/wp-content/uploads/2020/05/cropped-ICON-1-32x32.png</url>
	<title>バイブコーディング | じじぃの引出し</title>
	<link>https://www.kazuban.com/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Gコード分析ライブラリ for Python・Ncワード編【Vol.1】</title>
		<link>https://www.kazuban.com/blog/ncdata-library-nc-word/</link>
					<comments>https://www.kazuban.com/blog/ncdata-library-nc-word/#respond</comments>
		
		<dc:creator><![CDATA[kazuban]]></dc:creator>
		<pubDate>Sat, 10 Oct 2026 09:16:12 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[NC]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Claude]]></category>
		<category><![CDATA[ＮＣデータ]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[バイブコーディング]]></category>
		<guid isPermaLink="false">https://www.kazuban.com/blog/?p=13041</guid>

					<description><![CDATA[Ncワード編【Vol.1】 こちらでも、自作ソフトを公開していますが、ほとんどC++Builderで開発しています。 ライブラリも独学なので、動作はしていますが、自分で見直しても綺麗なコードではないですこちらも、AIに頼 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading has-text-align-center">Ncワード編【Vol.1】</h1>



<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/free_soft/">こちらでも、自作ソフトを公開</a>していますが、ほとんどC++Builderで開発しています。</p>


<a href="https://www.kazuban.com/blog/free_soft/" title="自作ソフト" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://www.kazuban.com/blog/wp-content/uploads/2025/02/freesoft-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2025/02/freesoft-160x90.png 160w, https://www.kazuban.com/blog/wp-content/uploads/2025/02/freesoft-120x68.png 120w, https://www.kazuban.com/blog/wp-content/uploads/2025/02/freesoft-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">自作ソフト</div><div class="blogcard-snippet internal-blogcard-snippet">サイト内記事で紹介した、自作ソフトやデータをダウンロードできます。</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2021.07.11</div></div></div></div></a>


<p class="wp-block-paragraph"><br>ライブラリも独学なので、動作はしていますが、自分で見直しても綺麗なコードではないです<br>こちらも、AIに頼んで見直してもらえば、綺麗になると思いますが、いろんな関数がからみあってて、あまりに量が多いです<br>python学習もかねて、pythonに置き換えてみようと思っています<br>テーマとして、NC用ライブラリのpython化を、無料版Claudeでバイブコーディングを始めました<br>生産性を意識する企業の場合は、Claude Codeが定番なのでしょうが、プログラム言語の学習もかねてAIを利用する場合では、逆にこちらがいい先生になるような気もしてます<br>まずは、NCデータを分解・解析するライブラリを複数回に分けて、記事にする予定です<br>pythonだけでなく、NC言語の説明もしています<br></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"></li><li><a href="#toc1" tabindex="0">NCデータ分析ライブラリ、構造</a><ol><li><a href="#toc2" tabindex="0">NC言語の基本</a></li><li><a href="#toc3" tabindex="0">ライブラリ構成</a></li></ol></li><li><a href="#toc4" tabindex="0">NCワード構文解析「NcWordParser」</a><ol><li><a href="#toc5" tabindex="0">NCブロックの構造</a></li><li><a href="#toc6" tabindex="0">NcWordデータクラス：「Class NcWord」</a></li><li><a href="#toc7" tabindex="0">NCワードパーサー（構造分割）：「class NcWordParser:」</a></li></ol></li><li><a href="#toc8" tabindex="0">NCワードクラス</a></li><li><a href="#toc9" tabindex="0">NC分析ライブラリ、記事一覧</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">NCデータ分析ライブラリ、構造</span></h2>



<h3 class="wp-block-heading"><span id="toc2">NC言語の基本</span></h3>



<p class="wp-block-paragraph">NCデータを分析するには、ある程度、NCデータ構造の理解は必要だと思います<br>コーディングだけなら、言語は知らなくても、AIがコーディングしてくれると思いますが、<br>実際の利用を考えるなら、基本的な理解はしておいたほうがいいと思います<br>NC言語の基本はこのサイトでも、記事にしているので、興味ある方は覗いてみてください<br></p>


<a href="https://www.kazuban.com/blog/nc-gcode-01/" title="NCプログラム／プログラム構造" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="203" height="180" src="https://www.kazuban.com/blog/wp-content/uploads/2019/11/NcData-1.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/11/NcData-1.png 879w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/NcData-1-300x266.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/NcData-1-768x681.png 768w" sizes="(max-width: 203px) 100vw, 203px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">NCプログラム／プログラム構造</div><div class="blogcard-snippet internal-blogcard-snippet">最近の投稿は、覚書きとしても残しておきたかったので、素人ながらLinux系の投稿が連続していましたが、今回は気分を変えて、今まで携わってきたＮＣ関連の記事を書こうと思います。ＮＣプログラムとは？ＮＣ工作機械のコントローラへの指令の集まりです。プログラムとありますが、ファナック系は基本的には命令コード&#8230;</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://www.kazuban.com/blog" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">www.kazuban.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2019.11.30</div></div></div></div></a>


<h3 class="wp-block-heading"><span id="toc3">ライブラリ構成</span></h3>



<p class="wp-block-paragraph">今回は、C++Builderからの移行と共に、python学習も目的なので、<br>ライブラリ設計はAIに丸投げせず、Claudeに既存のライブラリを添付して、python化をお願いし、コードの意味を説明してもらいながら進めます<br>出力されたコードは、<strong>三項演算子</strong>や<strong>リスト内包表記</strong>など、python特有な書き方の場合もあります<br>今までだったら、参考書開いたり、ネットで検索していましたが、ＡＩは疑問点を聞けばかなり詳細に教えてくれるので、とても便利です</p>



<p class="wp-block-paragraph">まずは、下記３つのライブラリを作成します<br></p>



<div class="wp-block-cocoon-blocks-blank-box-1 blank-box block-box has-background has-watery-green-background-color">
<ul class="wp-block-list">
<li>「NCワード構文解析」：NCワードをアドレスと数字：数値に分解する</li>



<li>「NCコメントを分解」：NCブロックの純粋なコード部分とコメントに分割</li>



<li>「NCブロックを分解・解析」：純粋なNCコードを、「NCワード」に分解し、行の状態（位置座標など）保存・取り出し</li>
</ul>
</div>



<h2 class="wp-block-heading"><span id="toc4">NCワード構文解析「NcWordParser」</span></h2>



<h3 class="wp-block-heading"><span id="toc5">NCブロックの構造</span></h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="262" src="https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-1024x262.png" alt="" class="wp-image-1338" srcset="https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-1024x262.png 1024w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-300x77.png 300w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1-768x197.png 768w, https://www.kazuban.com/blog/wp-content/uploads/2019/11/図1.png 1385w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">「NCブロック」は「NCワード」の集まり<br>「NCワード」は「アドレス（英文字）」と「数字（数値）」で構成されている</p>



<h3 class="wp-block-heading"><span id="toc6">NcWordデータクラス：「Class NcWord」</span></h3>



<p class="wp-block-paragraph">NCワードの変数を格納するクラスを定義します<br>NCワードとしては、データクラスで定義したいを思います<br>４つの変数、<br>「ワード全体」「アドレス」「数値・数字」「Gコード場合、グループ番号」で構成します<br></p>



<pre class="wp-block-preformatted has-black-color has-watery-red-background-color has-text-color has-background">@dataclass
class NcWord:
    word: str = ""  # 元の文字列
    address: str = ""
    value: str = ""
    group: int = -1</pre>



<h3 class="wp-block-heading"><span id="toc7">NCワードパーサー（構造分割）：「class NcWordParser:」</span></h3>



<p class="wp-block-paragraph">NCワード文字列を受け取り、「NcWord」データクラスに分割格納します<br>分割するには、AIは正規表現を教えてくれましたが、NC言語構造には例外もあります<br>通常は「アドレス（英大文字一文字）」+「数値・数字」ですが、特殊な表現が存在します</p>



<blockquote class="wp-block-quote has-watery-yellow-background-color has-background is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">例えば、「G04X10.」の指令・・・１０秒のドウェル指令です<br>これを、「G04」「X10.」と分解すると、「X軸１０mm移動」と誤認識する事になりかねません</p>
</blockquote>



<p class="wp-block-paragraph">他にもあるかもしれませんが、とりあえず思いあたるものは、こんな感じでしょうか？</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">G05P****<br>G54.1P**<br>M98P****<br>M198P****<br>G65P****<br>G66P****<br>G04X****<br>G04P****</p>
</blockquote>



<p class="wp-block-paragraph">この場合、どこまでをアドレスとして扱うか？<br>意見は分かれるところだと思いますが、筆者は上記の英数文字部分（****以外）をアドレスにすることにしました<br>このような判断は、AIに勝手に任せると、後々理解が大変になりそうです<br>やはり、作者の意図をよく伝えて、今のうちからコードに反映させておくのが大事だと思います</p>



<pre class="wp-block-preformatted has-black-color has-watery-red-background-color has-text-color has-background">G_CODE_RE = re.compile(r"G0?5P|G54\.1P|M1?98P|G65P|G66P|G0?4[XP]|[A-Z]")<br><br>def get_NcWord(self, word: str) -&gt; NcWord:<br>    match = self.G_CODE_RE.search(word)<br>    address: str = match.group(0) if match else ""<br>    value: str = word.replace(address, "")<br>    nc_word = NcWord(<br>        word=word,<br>        address=address,<br>        value=value,<br>    )</pre>



<p class="wp-block-paragraph">正規表現で上記の特殊表現と英文字をアドレスと取り出し、アドレス以外を数字として「NcWord」に格納します</p>



<p class="wp-block-paragraph">さらに、面倒くさいのが、モーダルという概念と、Gコードのグループ分けです<br>NCワード単体では判断はできませんが、一行のNCブロックには、同じグループのGコードはNGです<br>また同じグループ番号の場合違うグループ番号が来るまでそのGコードは維持されます。<br>したがって、NcWordデータクラスにはグループ番号も持たせておこうと思います<br>このような、データ構造設計も、作者の考えで違いが出てきます<br>この機能を、AIに聞きながらコード化していきます<br>まずは、Gグループを辞書でデーター化しておきます<br></p>



<pre class="wp-block-preformatted has-black-color has-watery-red-background-color has-text-color has-background">G_GROUPS = {
    "GROUP00": {4, 5, 7, 8, 9, 10, 27, 28, 29, 30, 31, 52, 53, 60, 65, 92},
    "GROUP01": {0, 1, 2, 3},
    "GROUP02": {17, 18, 19},
    "GROUP03": {90, 91},
    "GROUP06": {20, 21, 70, 71},
    "GROUP07": {40, 41, 42},
    "GROUP08": {43, 44, 49},
    "GROUP09": {73, 74, 76, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89},
    "GROUP10": {98, 99},
    "GROUP12": {65, 66, 67},
    "GROUP14": {54, 55, 56, 57, 58, 59},
    "GROUP16": {68, 69},
}</pre>



<p class="wp-block-paragraph">この「G_GROUPS」をもとに、「NcWord」の「group」にグループ番号を入力します<br></p>



<pre class="wp-block-preformatted has-black-color has-watery-red-background-color has-text-color has-background">def get_group(self, word: NcWord) -&gt; None:<br>    """word:NcWord に解析したgroupを設定"""<br>    # _ は一つ目の返り値を無視する意味。<br>    # _analyzeの返り値は、tuple[str, int]<br>    _, group_number = self._analyze(word.address, word.value)<br>    word.group = group_number<br><br>def _analyze(self, address: str, number: str) -&gt; tuple[str, int]:<br>    group_number = -1<br>    group_name = ""<br><br>    match = re.search(r"(G)(0?4|54|65|66)", address)<br>    if match:  # G04X10. / G54.1P1 / G65P9613 対応<br>        address = match.group(1)<br>        number = match.group(2)<br>    if address != "G":<br>        return group_name, group_number<br>    for n, v in self.G_GROUPS.items():<br>        if int(number) in v:<br>            group_number = int(n.replace("GROUP", ""))<br>            group_name = n<br>            break<br>    return group_name, group_number</pre>



<h2 class="wp-block-heading"><span id="toc8">NCワードクラス</span></h2>



<p class="wp-block-paragraph">実際の、コード「<strong>nc_word.py</strong>」を添付します</p>



<pre class="wp-block-code has-white-color has-black-background-color has-text-color has-background has-link-color wp-elements-1"><code>import re
from dataclasses import dataclass
from typing import Optional 


@dataclass
class NcWord:
    word: str = ""  # 元の文字列
    address: str = ""
    value: str = ""
    group: int = -1


class NcWordParser:
    G_CODE_RE = re.compile(r"G0?5P|G54\.1P|M1?98P|G65P|G66P|G0?4&#91;XP]|&#91;A-Z]")

    def get_NcWord(self, word: str) -> NcWord:  # -> Optional&#91;NcWord]:
        # if not word:
        #    return None
        match = self.G_CODE_RE.search(word)
        address: str = match.group(0) if match else ""
        value: str = word.replace(address, "")
        nc_word = NcWord(
            word=word,
            address=address,
            value=value,
        )
        GroupAnalyzer(nc_word)
        return nc_word


class GroupAnalyzer:
    """NCワード文字列のGコードからGグループを解析"""

    G_GROUPS = {
        "GROUP00": {4, 5, 7, 8, 9, 10, 27, 28, 29, 30, 31, 52, 53, 60, 65, 92},
        "GROUP01": {0, 1, 2, 3},
        "GROUP02": {17, 18, 19},
        "GROUP03": {90, 91},
        "GROUP06": {20, 21, 70, 71},
        "GROUP07": {40, 41, 42},
        "GROUP08": {43, 44, 49},
        "GROUP09": {73, 74, 76, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89},
        "GROUP10": {98, 99},
        "GROUP12": {65, 66, 67},
        "GROUP14": {54, 55, 56, 57, 58, 59},
        "GROUP16": {68, 69},
    }

    def __init__(self, nc_word: Optional&#91;NcWord] = None) -> None:
        if nc_word:
            self.get_group(nc_word)

    def get_group(self, word: NcWord) -> None:
        """word:NcWord に解析したgroupを設定"""
        # _ は一つ目の返り値を無視する意味。
        # _analyzeの返り値は、tuple&#91;str, int]
        _, group_number = self._analyze(word.address, word.value)
        word.group = group_number

    def _analyze(self, address: str, number: str) -> tuple&#91;str, int]:
        group_number = -1
        group_name = ""

        match = re.search(r"(G)(0?4|54|65|66)", address)
        if match:  # G04X10. / G54.1P1 / G65P9613 対応
            address = match.group(1)
            number = match.group(2)
        if address != "G":
            return group_name, group_number
        for n, v in self.G_GROUPS.items():
            if int(number) in v:
                # group_number = int(util.extract_numbers(n, 2))
                group_number = int(n.replace("GROUP", ""))
                group_name = n
                break
        return group_name, group_number


# test code
if __name__ == "__main__":
    gcode = &#91;"G54", "G00", "G17", "G54.1P5", "G01", "G04X10.", "X20.325"]
    print("「実行結果」")
    for word in gcode:
        ncw: NcWord = NcWordParser().get_NcWord(word)
        print(ncw)
</code></pre>



<p class="wp-block-paragraph">取り込んだ、NCワードデータを、アドレスと数字に分解し、アドレスが　&#8221;G&#8221;の場合、Gコードグループ番号を「NcWord」にセットします。<br>テストコード（test code）をライブラリ末尾に付加して実行してみます</p>



<pre class="wp-block-preformatted">python nc_word.py<br><br>「実行結果」<br>NcWord(word='G54', address='G', value='54', group=14)<br>NcWord(word='G00', address='G', value='00', group=1)<br>NcWord(word='G17', address='G', value='17', group=2)<br>NcWord(word='G54.1P5', address='G54.1P', value='5', group=14)<br>NcWord(word='G01', address='G', value='01', group=1)<br>NcWord(word='G04X10.', address='G04X', value='10.', group=0)<br>NcWord(word='X20.325', address='X', value='20.325', group=-1)</pre>



<p class="wp-block-paragraph">希望通り、渡したNCワード文字列から、NcWordクラスのフィールドに格納されました</p>



<h2 class="wp-block-heading has-vivid-cyan-blue-to-vivid-purple-gradient-background has-background" style="border-style:none;border-width:0px"><span id="toc9">NC分析ライブラリ、記事一覧</span></h2>



<div class="wp-block-columns has-watery-red-background-color has-background is-style-bottom-margin-1em has-bottom-margin is-layout-flex wp-container-core-columns-is-layout-cb1de518 wp-block-columns-is-layout-flex" style="border-style:none;border-width:0px;border-radius:0px">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:15%">
<figure class="wp-block-image size-full is-resized"><a href="https://www.kazuban.com/blog/ncdata-library-nc-word/"><img loading="lazy" decoding="async" width="1376" height="768" src="https://www.kazuban.com/blog/wp-content/uploads/2026/09/ncdata-library-nc-word.jpg" alt="" class="wp-image-13070" style="object-fit:cover;width:100px;height:70px" srcset="https://www.kazuban.com/blog/wp-content/uploads/2026/09/ncdata-library-nc-word.jpg 1376w, https://www.kazuban.com/blog/wp-content/uploads/2026/09/ncdata-library-nc-word-300x167.jpg 300w, https://www.kazuban.com/blog/wp-content/uploads/2026/09/ncdata-library-nc-word-500x279.jpg 500w, https://www.kazuban.com/blog/wp-content/uploads/2026/09/ncdata-library-nc-word-767x428.jpg 767w, https://www.kazuban.com/blog/wp-content/uploads/2026/09/ncdata-library-nc-word-799x446.jpg 799w, https://www.kazuban.com/blog/wp-content/uploads/2026/09/ncdata-library-nc-word-240x135.jpg 240w, https://www.kazuban.com/blog/wp-content/uploads/2026/09/ncdata-library-nc-word-320x180.jpg 320w" sizes="(max-width: 1376px) 100vw, 1376px" /></a></figure>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<p class="wp-block-paragraph"><a href="https://www.kazuban.com/blog/ncdata-library-nc-word/">NCワード編</a></p>
</div>
</div>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kazuban.com/blog/ncdata-library-nc-word/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
