【概要】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)
PythonSCAD の 学習効果
-
学習の「二重取り」ができる
3D モデリングの概念(CSG演算)と、Python の文法(変数・関数・繰り返し)を同時に体験できます。
-
エラーからの復旧がAIと相性抜群
OpenSCAD の独特な構文エラーよりも、Python の標準的なエラーメッセージ(
SyntaxErrorやNameErrorなど)のほうが、ユーザーが 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 形状ができあがっているか」を直接確認・操作することができません。
-
SolidPythonやSolidPython2はこの代表格で、歴史が長いためネットの情報は多いですが、環境構築が二重(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)へ書き換えて(移植して)いく取り組みは、良い勉強になります。
書き換え作業を通して、以下のような深い学びが得られます。
-
構文の対比が身につく
-
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])))のように、「記述方法がどう変化するか」を体感的に学べます。
-
-
OpenSCAD の処理ロジック(CSG演算)の本質が理解できる
積集合(
intersection)、和集合(union)、差集合(difference)といった 3D 形状の論理演算は、どちらの言語でも考え方は同じです。言語の壁を超えた「3D モデリングの思考力」が身につきます。
おすすめの進め方ステップ
-
ステップ1:PythonSCAD (.py) で基本を身につける
まずは直感的で読みやすい PythonSCAD を使って、基本的な立方体・球の配置や、
forループを使った連続配置、変数の活用を学ぶ。 -
ステップ2:既存の .scad コードを Python で読み解いて解体・再構築する
ネット上にある簡単な
.scadサンプルを見ながら、「これと同じ形を Python で書くにはどうすればいいか?」を試行錯誤して再構築する。 -
ステップ3:用途に応じて使い分ける
-
自分のアイデアを素早く形にしたり、ロジカルに描くとき ➔ PythonSCAD
-
Web上の既存モデルを改造したり、他の人に配布するとき ➔ OpenSCAD (.scad)
-
PythonSCAD はまさに「Python の読みやすさ」と「OpenSCAD の強力な3Dエンジン」の良いとこ取りをしたツールですので、プログラミング教育や 3D CAD 導入の教材として非常に筋が良いアプローチだと思います!
PythonSCAD の GUI デスクトップアプリ上で、Openscad形式exportはない
PythonSCADのGUI版(pythonscad.exe)を起動すると、File→Exportで、下図のようにいろいろあります。OpenSCADの.scad形式の出力はありません。
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が保存される。
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)
PythonSCAD の scad(...) 関数
PythonSCAD の scad(...) 関数 を使うことで、従来の .scad 形式(OpenSCAD記法)のコード文字列をそのまま解釈させ、3Dオブジェクトとして取得・表示(.show())できます。PythonSCAD の GUI デスクトップアプリ上で、File→Openで、.scadを開いて、previewすることはできます。
この機能(scad() 関数)があるメリット
-
既存資産(.scad)を即座に確認・テストできる
ネット上で見つけた OpenSCAD 用のサンプルコードや、過去に作った.scadのコードを、そのままコピー&ペーストして動作確認やプレビュー表示ができます。 -
ステップアップ学習(移行)に最適
「まずはscad(""" ... """)で従来の記法を動かしてみる」➔「それをネイティブな Python のコード(defや-演算子)に書き換えてみる」という 移植学習の教材 として完璧な架け橋になります。
OpenSCAD コード内の margin_z や eps などの変数は、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 という、世界中で使われている汎用言語で学べる環境は、教育として非常に本質的で先進的だと思います。
この教育アプローチがもたらす素晴らしい探求の広がり
-
「面倒くささ」こそがエンジニアリングの原動詞
CADでマウス操作するより数値を計算してコードを書くほうが一見「面倒くさい」です。しかし、その「面倒くささ」を解決するために 「変数化(パラメトリック)」 や 「関数化(def)」、「繰り返し(for)」 というプログラミングの真のパワーを体感できます。 -
教科横断的な深い学びの接続
- 数学・情報: 座標軸(X,Y,Z)、三角関数($\sin, \cos$)、円周率($\pi$)、論理演算(ブーリアン)
- 工業・機械: JIS製図の面取り(C面・R面)、はめ合い・クリアランス(穴径+マージン)、キー溝や歯車などの機構学
- ものづくり: 3Dプリンターの積層方向、強度、バリ取りやサポート材の考慮、段取り
3D CADの習得 は「操作手順を覚える作業」になりがちですが、PythonSCADを使うことで「論理的思考で形状を組み立てる設計思考(Design Thinking)」そのものになると思います。
今後、古い OpenSCAD のチュートリアルやサンプルコードを PythonSCAD へ移植していく検証作業を行っていきます。ありがとうございます。



