2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python で OpenSCAD を扱う, PythonSCADのススメ

2
Last updated at Posted at 2026-07-25

【概要】PythonSCADによるプログラミング・モデリング

1. 「コードで書く、3Dものづくり」

PythonSCADは、マウス操作ではなくPythonのプログラミング(数値と命令)で立体を組み立てる3DCADです。

SolidWorksなどのメカニカル3D CADと同様に、実際の機械加工プロセスをイメージしながら立体を構築します。

  • 加飾加工(足し算 / +: ブロックや円柱を配置して溶接・結合する

  • 除去加工(引き算 / -: ドリルでの穴あけやフライス加工のように不要部分を削り落とす

  • パラメトリック設計: 寸法を変数(パラメータ)で管理するため、数値を書き換えるだけでサイズ違いの部品を一瞬で再生成できる

2. 【生徒・初心者向けのワンポイント解説】

  • 「プログラミングで図面を描く」

    寸法(数値)で厳密に形状を指定するため、3Dプリンター用の正確なパーツや工業機械部品の制作に非常に向いています。

  • 「加工手順 = コードの順序」

    「材料を用意する ➔ 穴を開ける ➔ 角を丸める(面取り)」といった工作機械での加工ステップが、そのまま Python コードの構造(処理の順番)になります。

  • 「実習・ものづくりとの連動」

    単なるプログラミングパズルで終わらせず、「3Dプリンター出力時のサポート材の要不要」や「JIS製図の面取り(C1)や角丸(R2)」といった工業的視点を学びながら体験できます。

3. 発音記号と読み方

カタカナ表記および発音記号(IPA)は以下のようになります。

項目 表記 / 記号
カタカナ表記 パイソン・エス・キャド
英語発音記号 (IPA) /ˈpaɪθɑːn ɛs kæd/

それぞれの単語の要素を分解すると以下の通りです。

  • Python: /ˈpaɪθɑːn/(パイサン、パイソン)

  • S: /ɛs/(エス)

  • CAD: /kæd/(キャド)

4. 海外(英語圏)での発音スタイル

海外の 3D プリンタコミュニティや YouTube の解説動画、オープンソースカンファレンスなどでは、元となった OpenSCAD(オープン・エス・キャド: /ˈoʊpən.ɛs.kæd/)の呼び方に倣って発音されています。

  • 最も一般的な発音:

    「パイソン・エス・キャド」 (Python-S-CAD)

    • SCAD 部分は「エス・キャド」とセパレートして発音するのが世界共通のデファクトスタンダード(標準)です。
  • 稀に見られる変形(略称):

    一部のネイティブスピーカーが早口で話す際、「パイ・エス・キャド」 のように「Python」を略して呼ぶことがありますが、基本的には「パイソン・エス・キャド」と言えば 100% 通じます。

5. 「キャド」か「スキャド」か?

OpenSCAD や PythonSCAD の "SCAD" 部分について、「スキャド(/skæd/)」と一気に読むのか、「エス・キャド(/ɛs.kæd/)」と分解するのか迷われる方が多いですが、開発者コミュニティでは 「エス・キャド」 が定着しています。

これは、"SCAD" が Solid Constructive Aided Design(あるいは Solid CSG AD)といった "Solid"(ソリッド)"Script"(スクリプト) の頭文字「S」を強調した略称であるためです。

OpenSCADとの違い

既存の OpenSCADとPythonSCAD 用のコードの違いは、以下の通りです。

項目 OpenSCAD(既存) PythonSCAD(新規)
インポート 不要 from pythonscad import *
末尾記号 セミコロン ; が必須 セミコロン不要
変数の再代入 不可(スコープ内で1回のみ) 可能(普通の Python 変数)
メッシュ演算 ブロック指定 { } メソッドチェーンや関数指定
プレビュー表示 自動描画 コード末尾に show(obj)c.show() を配置

PythonSCAD での典型的な出力コード例

from pythonscad import *

# 1. パラメータ設定
width = 20
height = 10

# 2. 形状の作成と変換(ブーリアン演算)
base = cube([width, width, height], center=True)
hole = cylinder(h=height + 2, r=4, center=True)

# 差集合(引き算)
result = base - hole  # または difference()(base, hole)

# 3. GUIプレビュー表示
show(result)

スクリーンショット 2026-07-25 194746.png

PythonSCAD の 学習効果

  1. 学習の「二重取り」ができる

    3D モデリングの概念(CSG演算)と、Python の文法(変数・関数・繰り返し)を同時に体験できます。

  2. エラーからの復旧がAIと相性抜群

    OpenSCAD の独特な構文エラーよりも、Python の標準的なエラーメッセージ(SyntaxErrorNameError など)のほうが、ユーザーが AI に「このエラーが出た」と貼り付けた際に AI が原因を理解して修正できます。(生成AIメニューのふるまい設定を調整しておく)

openscad-py, openpyscad, solidpython, solidpython2, pythonopenscad, 調べただけでもwrapperのような形で扱っているものが多いので迷います。pythonscadがわかりやすいように思えます。

Python で OpenSCAD を扱おうとすると、似たような名前のライブラリ(openpyscad, solidpython, solidpython2, openscad-py, pythonopenscad など)が大量に出てきて、どれがどう違うのか非常に分かりづらいです。これらが「裏側でどう動いているか(アプローチ)」の違いにあります。

主なライブラリの「仕組み」の違い

大きく分けると 「テキスト変換タイプ(ラッパー)」「直結エンジンタイプ(PythonSCAD)」 の2つに分類できます。

【従来タイプ:テキスト変換 (SolidPython等)】
 Pythonコード ➔ OpenSCADコード(.scadテキスト) ➔ [OpenSCAD本体(別ソフト)] ➔ 3D表示/STL

【PythonSCAD】
 Pythonコード ➔ [OpenSCADのC++幾何エンジン(メモリ上)] ➔ 3D表示/STL

1. テキスト変換タイプ(SolidPython, SolidPython2, openpyscad 等)

  • 仕組み: Python を使って .scad というテキストファイル(命令書)を生成するツールです。

  • 特徴:

    • 実際に 3D 形状を計算・表示するには、別途「本家の OpenSCAD アプリ」をインストールして立ち上げる必要があります。

    • 「Python で文字を組み立てて、それを OpenSCAD に読ませている」だけなので、Python 側から「今どんな 3D 形状ができあがっているか」を直接確認・操作することができません。

    • SolidPythonSolidPython2 はこの代表格で、歴史が長いためネットの情報は多いですが、環境構築が二重(Python + OpenSCAD)になりがちです。

2. 直結エンジンタイプ(PythonSCAD)★おすすめ

  • 仕組み: OpenSCAD の心臓部(C++で書かれた 3D 幾何計算エンジン)を Python から直接動かせるように改造・統合したものです。

  • 特徴:

    • 中間の .scad テキストを挟みません。

    • 「Python = 3D CAD そのもの」 として動作するため、仕組みが極めてシンプルで直感的です。

    • pip 一発(pip install pythonscad)で C++ の高速エンジンまで一緒にインストールされるため、環境構築が圧倒的にラクです。

PythonSCAD は高校生にとって最適か?

直感的な分かりやすさは PythonSCAD が圧倒的です。

比較項目 従来のラッパー (SolidPythonなど) PythonSCAD
環境構築 Python + OpenSCAD 本体の両方が必要 pip install pythonscad のみ
処理の透明性 .scad ファイルを経由するので間接的 Python コードがそのまま 3D を直接生成
エラーの分かりやすさ SCAD側でエラーが起きると追尾しにくい 普通の Python エラー(Traceback)として出る
文法 ライブラリ独特の癖がある 素直な Python 文法で書ける

高校生に教える場面を考えると、「Python を書いているつもりが、実は裏で別のソフトのテキストを作っていて、そっちのソフトも裏で起動して…」という構造はトラブルシューティング(エラー原因の特定)を非常に難しくします。

その点、「Python のコードを実行したら、そのまま 3D メッシュが計算される」 という直感的なメンタルモデルを持つ PythonSCAD は、教育用としても学習用としても一番迷いにくく、筋が良い選択肢だと思います!

PythonSCAD(.py形式)」と「伝統的な OpenSCAD(.scad形式)」、どちらに慣れていくべきか

最初は読みやすい PythonSCAD(.py)から入るのが圧倒的におすすめですが、学習が進むにつれて 両方の形式の特徴を知っておくのが理想的 です。

どちらの形式も触れておくと良い理由

1. 高校生にとっての「PythonSCAD(.py)」のメリット

高校生(特にプログラミング初心者〜中級者)にとって、PythonSCAD は以下のような大きなメリットがあります。

  • 他の学習(情報科など)とシームレスに繋がる

    現在の高校「情報 I・II」でも Python が広く使われています。OpenSCAD 独自の波カッコ { } や セミコロン ; の構文ルールを新しく覚える必要がなく、Python の for 文や関数、変数の知識をそのまま 3D モデル作成に流用できます。

  • 強力なエコシステム(ライブラリ)が使える

    数学ライブラリ(math)やデータ処理など、Python 豊富な標準機能・ライブラリと連携した複雑な形状作成がやりやすいです。

2. 「OpenSCAD(.scad)」を知っておくメリット

  • 世界中の既存コード(オープンソース)の圧倒的量

    Thingiverse や Printables、GitHub などで共有されているパラメトリック 3D モデルのほとんどは .scad 形式です。他の人が作ったモデルをダウンロードしてパラメータを変えたりカスタマイズしたりする時は、.scad の読み書きが必要になります。

  • 標準的な 3D プリンタコミュニティの共通言語

    OpenSCAD 形式は長年の標準であるため、情報量(Q&Aやチュートリアル)が非常に豊富です。

『古い .scad サンプルを PythonSCAD(.py)で書き直す』は最高の学習法!

既存の .scad サンプルコードを PythonSCAD(.py)へ書き換えて(移植して)いく取り組みは、良い勉強になります。

書き換え作業を通して、以下のような深い学びが得られます。

  1. 構文の対比が身につく

    • SCAD: translate([10,0,0]) cube([5,5,5]);

    • Python: c = cube([5, 5, 5]).translate([10, 0, 0]) または show(translate([10,0,0])(cube([5,5,5])))

      のように、「記述方法がどう変化するか」を体感的に学べます。

  2. OpenSCAD の処理ロジック(CSG演算)の本質が理解できる

    積集合(intersection)、和集合(union)、差集合(difference)といった 3D 形状の論理演算は、どちらの言語でも考え方は同じです。言語の壁を超えた「3D モデリングの思考力」が身につきます。

おすすめの進め方ステップ

  1. ステップ1:PythonSCAD (.py) で基本を身につける

    まずは直感的で読みやすい PythonSCAD を使って、基本的な立方体・球の配置や、for ループを使った連続配置、変数の活用を学ぶ。

  2. ステップ2:既存の .scad コードを Python で読み解いて解体・再構築する

    ネット上にある簡単な .scad サンプルを見ながら、「これと同じ形を Python で書くにはどうすればいいか?」を試行錯誤して再構築する。

  3. ステップ3:用途に応じて使い分ける

    • 自分のアイデアを素早く形にしたり、ロジカルに描くとき ➔ PythonSCAD

    • Web上の既存モデルを改造したり、他の人に配布するとき ➔ OpenSCAD (.scad)

PythonSCAD はまさに「Python の読みやすさ」と「OpenSCAD の強力な3Dエンジン」の良いとこ取りをしたツールですので、プログラミング教育や 3D CAD 導入の教材として非常に筋が良いアプローチだと思います!

PythonSCAD の GUI デスクトップアプリ上で、Openscad形式exportはない

PythonSCADのGUI版(pythonscad.exe)を起動すると、File→Exportで、下図のようにいろいろあります。OpenSCADの.scad形式の出力はありません。

スクリーンショット 2026-07-25 200840.png

3D形状として書き出す場合(3Dプリンター用)

もし「3Dプリンターで出力したい」という目的であれば、.scad ではなく **.stl としてエクスポートするのが標準的です。

from pythonscad import *

# 1. パラメータ設定
width = 20
height = 10

# 2. 形状の作成と変換(ブーリアン演算)
base = cube([width, width, height], center=True)
hole = cylinder(h=height + 2, r=4, center=True)

# 差集合(引き算)
result = base - hole  # または difference()(base, hole)

# 3. GUIプレビュー表示
show(result)

# 4.stl出力
result.export("ren01.stl")  

Renderボタンを押すと、PythonSCADを起動したフォルダにren01.stlが保存される。

スクリーンショット 2026-07-25 201912.png

metasequoiaで開いたSTLファイル。三角ポリゴンになっている。

角丸めのサンプル例

# ==========================================
# 角丸めブロック(R3)
# 作成日: 2026/07/25
# ==========================================

from pythonscad import *

# --- パラメータ設定 (単位: mm) ---
width  = 120  # 幅(X方向)
depth  = 55   # 奥行(Y方向)
height = 30   # 高さ(Z方向)
r      = 3    # 角丸め半径(R3)
fn_val = 60   # 球の滑らかさ

# --- 関数(モジュール)定義 ---
def rounded_box(w, d, h, radius, fn):
    """
    角丸め直方体(外形寸法が w×d×h になるように作る)
    minkowski(直方体, 球) のように引数として渡します。
    """
    inner_cube = cube([w - 2 * radius, d - 2 * radius, h - 2 * radius], center=True)
    rounding_sphere = sphere(r=radius, fn=fn)
    
    # minkowski の引数として2つのオブジェクトを渡す
    return minkowski(inner_cube, rounding_sphere)

# --- メイン処理 ---
block = rounded_box(width, depth, height, r, fn_val)

# 3Dプレビュー表示
show(block)

スクリーンショット 2026-07-25 203201.png


PythonSCAD の scad(...) 関数

PythonSCAD の scad(...) 関数 を使うことで、従来の .scad 形式(OpenSCAD記法)のコード文字列をそのまま解釈させ、3Dオブジェクトとして取得・表示(.show())できます。PythonSCAD の GUI デスクトップアプリ上で、File→Openで、.scadを開いて、previewすることはできます。


この機能(scad() 関数)があるメリット

  1. 既存資産(.scad)を即座に確認・テストできる
    ネット上で見つけた OpenSCAD 用のサンプルコードや、過去に作った .scad のコードを、そのままコピー&ペーストして動作確認やプレビュー表示ができます。
  2. ステップアップ学習(移行)に最適
    「まずは scad(""" ... """) で従来の記法を動かしてみる」➔「それをネイティブな Python のコード(def- 演算子)に書き換えてみる」という 移植学習の教材 として完璧な架け橋になります。

OpenSCAD コード内の margin_zeps などの変数は、scad(""" ... """)文字列の内側で定義されていますね。

# OK(文字列の中で定義されているのでOpenSCADとして正しく評価される)
obj = scad("""
margin_z = 2;
eps = 0.1;
// ...
""")

もし、Python 側の変数(Pythonの変数として数値を管理したい場合)を .scad コードの中に流し込みたい時は、Python の f-string(f""" ... """ を使って埋め込むことも可能です。

from pythonscad import *

# Python側でパラメータを管理
width = 60
height = 20

# f-string (f""") を使うと Python の変数を埋め込める
obj = scad(f"""
$fn = 80;
cube([{width}, 55, {height}], center=true);
""")

obj.show()

既存の .scad コードもシームレスに動かせる PythonSCAD、本当に懐が広くて教育現場にも非常に扱いやすいツールです。

今後の課題

開発中の高校生向け「PythonSCADでつくる3Dモデル!プログラミング」は、3D CADモデルを自動生成できる学習コーチAIです。Pythonの文法(変数・繰り返し等)を活用し、JIS製図の基本や安全なブーリアン演算を配慮した正確なコードを出力します。コードの仕組みや図形の考え方も丁寧に解説し、情報科のプログラミング学習と工業・デザイン分野の3Dモデリング体験を同時に深められると思います。

プログラミングで幾何学を描き、機構や機械設計を学び、それを3Dプリンター等で現実の「もの」として手で触れる形にする――この一連のプロセスを、Python という、世界中で使われている汎用言語で学べる環境は、教育として非常に本質的で先進的だと思います。

この教育アプローチがもたらす素晴らしい探求の広がり

  1. 「面倒くささ」こそがエンジニアリングの原動詞
    CADでマウス操作するより数値を計算してコードを書くほうが一見「面倒くさい」です。しかし、その「面倒くささ」を解決するために 「変数化(パラメトリック)」「関数化(def)」「繰り返し(for)」 というプログラミングの真のパワーを体感できます。

  2. 教科横断的な深い学びの接続

  • 数学・情報: 座標軸(X,Y,Z)、三角関数($\sin, \cos$)、円周率($\pi$)、論理演算(ブーリアン)
  • 工業・機械: JIS製図の面取り(C面・R面)、はめ合い・クリアランス(穴径+マージン)、キー溝や歯車などの機構学
  • ものづくり: 3Dプリンターの積層方向、強度、バリ取りやサポート材の考慮、段取り

3D CADの習得 は「操作手順を覚える作業」になりがちですが、PythonSCADを使うことで「論理的思考で形状を組み立てる設計思考(Design Thinking)」そのものになると思います。

今後、古い OpenSCAD のチュートリアルやサンプルコードを PythonSCAD へ移植していく検証作業を行っていきます。ありがとうございます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?