【集中講座】Python: 外部IDE (VSCode/PyCharm) でスタブを設定してコード補完を利用する

※このページは Rhino 8 を使用することを前提としています。

はじめに

Rhino 8 がリリースされてから時間がたち、スクリプト開発で Python を活用する場面が増えてきました。またRhino 8 から標準となった [ ScriptEditor ] コマンドは機能が増え使いやすくなっています。

ですが、普段使い慣れている外部の IDE ( VSCodeやPyCharm など) でコードを書きたい開発者の方もいらっしゃるかと思います。外部IDEを使えば、Git連携やリファクタリング機能を活用し、Pythonで素早くモデリングのプロトタイプを作成し、完成後にAI( ChatGPT や Claude など)を活用してC#へ変換・移植するといった運用も可能になります。

ただしPythonだと外部 IDE を使用するとき、RhinoCommon や Grasshopper 、rhinoscriptsyntax  などの Rhino の独自のライブラリが認識せずコード補完や型を確認できません。本記事では C# と Python の違いをふまえつつ、 Rhino に含まれている最新のスタブ ( .pyi )ファイルを各種 IDE に設定する手順を解説します。

この記事は、2026 年 10 月に書かれています。各種ソフトの対応状況やスクリーンショットなどは、現時点のものでお考えください。

C# と Python の違いと IDE について

C#(静的型付け)の場合

C# は静的型付け言語であり、コードを記述する段階で変数や関数の型があらかじめ決定しています。そのため Visual Studio や VSCode などの外部 IDE でも手軽に コンパイル済みの DLL からRhinoCommon の型情報を取得し、コード補完が利用できます。

上図は、新規プロジェクトを作成して、記述している図。特に難しい設定など行わずにRhinoCommonのクラスや構造体、またそれらのメソッドなどが取得できます。

C#での初期設定については、下記リンクの Installing Tools や Your First Plugin などを参照ください。

https://developer.rhino3d.com/guides/rhinocommon

Python(動的型付け)の場合

 一方、 Python は動的型付け言語であり、プログラムを実行する瞬間まで型が確定しません。

 add という関数を例としてみます。

# 関数の定義
def add(a, b):
    return a + b

以下は、上記の関数を使用した例です。名前だけみるとただの足し算ではないか?と思いますが、入力に数値(整数)が入れば「整数の足し算」となりますが、テキスト(文字列)が入れば「文字列の結合」を行う処理となります。

# パターン1: 数値を渡す場合(戻り値は int)
result_num = add(10, 20)  // 結果は30

# パターン2: 文字列を渡す場合(戻り値は str)
result_str = add("10","20")  // 結果は文字を結合した 1020 

上記のようにコードを記述した時点では、外部 IDE 側では入力を決めることができません。そのため、結果 ( 戻り値 ) に対してどのようなメソッドやプロパティを候補として表示すべきかを判断できません。

 Python の型ヒントとスタブ(.pyi)の仕組み

ただしRhino 8 内蔵の [ ScriptEditor ] は、API 情報が後述するスタブが統合されています。そのため特別な設定をせずとも、補完や型表示を活用して快適に Python コードを記述できます。

これは以前の Python には型を明示する標準の仕組みがありませんでしたが、Python 3.5 から関数の引数や戻り値の型を記述できる Type Hints (型ヒント) が導入されたからになります(Rhino 8 の CPython のバージョンが 3.9 なので利用可能です)。

先に例であげた add 関数を型ヒントをつけて記述すると下記のようになります。

# 関数の定義 入力と出力それぞれに整数である型を明示
def add(a: int, b: int) -> int:
    return a + b
【補足】型ヒントの役割と注意点

このように型を明示することで、「戻り値は int 型だ」と判断できるようになり、適切なメソッドの補完や型チェックを行えるようになります。

ただし、Python の型ヒントはあくまで「IDE や開発者のための情報」であり、実行時の強制力はありません。型ヒントと異なる型のデータを入力して実行しても、Python 自体はそのまま処理を進めてしまいます。

スタブファイル(.pyi)の役割

型ヒントを Python コード(.py)内に直接書くことができれば IDE での補完が効くようになります。ただしRhinoCommon などの C# で実装されたライブラリには、 Python コード自体が存在しません。こういったときに使用できるのが「スタブ(.pyi)ファイル」です。

スタブファイルには実際の動作(実装)コードは書かれず、クラス名・メソッド名・引数・戻り値の型ヒント(定義)のみが記述されます。

下図は RhinoCommon の Curve クラスの箇所のスタブです。ClosestPoint メソッドは、testPoint という Point3d 型を入力し、上手くいったかどうかを bool と 近接点のパラメータをfloat (ないし int ) のタプルで戻り値を取るのがわかります。

実装そのものは書かれておらず、使い方だけを列挙しているのがわかります。この「型ヒント情報だけをまとめた定義ファイル」を IDE に読み込ませることで、ソースコードを書き換えることなく支援機能が利用できるようになります。

サンプルコードによるスタブ設定後

設定がすんだ後はスタブ(.pyi)経由で型定義が読み込まれ、入力候補や引数の型ヒントがコードの記述時に表示されます。下図は Python で型補完を行いながら記述しているイメージです(型やメソッドが補完されているのを分かりやすくするために、IDE 内の AI が自動で提示してくれる機能はオフに設定しています)。

またIDE 側の静的解析機能を使うと、スタブに登録された型と異なるデータを入力していると実行前にエラーを出すこともできます。下図は複数の曲線、連続性となる整数を順に入れなくてはいけないところにU方向の曲線、V方向の曲線を順に入れたため使用方法が違うとエラーが出ている図。

スタブファイルの場所と準備(Rhino 8)

スタブの入手方法

Rhino 7 時点では、GitHubにRhino 7 までのスタブファイルがGitHubにアップロードされていましたが、2024年頃で更新が止まっており、対応されているメソッドなども最新のものに比べると少ないです。

Rhino 8 では、 [ ScriptEditor ] コマンドを初めて実行した際に、裏側(バックグラウンド)で自動的に隠しフォルダー( .rhinocode )以降のフォルダーが生成され、その中にスタブが作成されます。

まずは、この仕組みを利用して、スタブを用意してみましょう。

配置されるフォルダーについて

OS ごとに RhinoCommon や Grasshopper の API のスタブが配置されるフォルダーは、次のファイルパスに作成されます。

Windows

 C:\Users\<ユーザー名>\.rhinocode\py<Pythonのバージョン>-rh<Rhinoのバージョン>\site-stubs\rhino3d-<Rhinoのサービスリリースのバージョン>

macOS

 /Users/<ユーザー名>/.rhinocode/py<Pythonのバージョン>-rh<Rhinoのバージョン>/site-stubs/rhino3d-<Rhinoのサービスリリースのバージョン>

です。上記のうち

  • <ユーザー名> 自分が使用しているPC名
  • <Pythonのバージョン> Rhinoが使用しているPythonのバージョン
  • <Rhinoのバージョン> Rhinoのメジャーバージョン名 (8や9といった数字)
  • <Rhinoのサービスリリースのバージョン> RhinoのSRのバージョン名

がそれぞれ入ります。サービスリリースはひと月に一度更新されるバグフィックスなどを主としたより細かいバージョンです。サービスリリースの詳細は下記リンクを参照ください。

Rhino: サービスリリース(SR)とは
https://www.applicraft.com/qanda/rhinoceros/rhinoceros-sr/

Rhino 8 にはPythonは 3.9 が入っているため、.rhinocode 以下のパスは下記のようになります(rhino3d- 以降はサービスリリースによりフォルダー名は異なります)。

.rhinocode\py39-rh8\site-stubs\rhino3d-8.34.26223.11001

現在開発中のRhino9のBetaにはPython 3.13 が搭載予定なので下記のような表示となります。

.rhinocode\py313-rh9\site-stubs\rhino3d-9.0.26272.12303

また rhinoscriptsyntax は次のフォルダーにあります。rhinoscriptsyntax を使いたい場合はこちらを追加する必要があります。.rhinocode 以下は、下記のようなファイルパスになります。

.rhinocode\py39-rh8\site-rhinopython

注意
  1. スタブファイルが作成されるのは Rhino のインストール時ではありません。Rhino で一度も [ ScriptEditor ] を実行していない場合は、スタブのフォルダー自体が存在しません。まずは Rhino で [ ScriptEditor ] コマンドを実行してください。
  2. .rhinocode フォルダーは隠しフォルダーになっているため、 隠しファイル/フォルダーを表示するよう設定する必要があります。
Windows :

エクスプローラー上部の[ … ] > [ オプション ] を押し、 [ 表示 ] > [ 隠しファイル、隠しフォルダー、および隠しドライブを表示する ] にチェックを入れます。

macOS :

Finder で Command + Shift + .(ピリオド) を同時に押して、隠しファイルを表示します。自分のユーザーフォルダー以下に配置されています。また RhinoCommon や Grasshopper の API が入っている  site-stubs 以下は、実行した SR ごとに作成されるため複数フォルダーがある可能性があります。

各種IDEでのスタブ追加手順

A.VSCodeでのスタブ追加手順

VSCode の設定ファイル( settings.json )にスタブのパスを追加します。ここでは VSCode での Python を記述する設定がすんでいる前提でスタブのパスのみ設定を行っています。未設定であれば、メニュー [ 表示 ] > [ 拡張機能 ] から

  • Japanese Language Pack for Visual Studio Code : 表示を日本語化する
  • Python : Python を使う上での基本設定

などを検索してインストールしてください。ともに Microsoft が作成して公開している拡張機能があります。また下記の設定は、VSCode の現時点の標準である言語サーバー Pylance での設定となります。

  1. VSCode を開き、 Shift + Ctrl + P ( macOS : Shift + Command + P )を押して [  settings.json ] と入力。ここではプロジェクトごとに設定を行う [ 基本設定 : ワークスペース設定を開く ( JSON ) ] を選択します。

※特定のプロジェクトだけでなく、PC全体のVSCodeで常にRhinoスタブを有効にしたい場合は『基本設定 : ユーザー設定を開く ( JSON )』を選択してください。

 2. 開いた settings.json ファイルに先ほどのスタブフォルダーのパスを追加します。

Windows の場合、JSON形式ではバックスラッシュ(円マーク)が特殊文字(エスケープシーケンス)として扱われるため、\ を \\ に書き直してください。もしくは \\ の箇所をすべて / としても動作します。

また site-stubs にパスを通すとRhinoCommon や Grasshopper のAPIも使用できます。rhinoscriptsyntax も補完したい場合は、, で区切った後に site-rhinopython のパスも追加します。

{
    "python.analysis.extraPaths": [
        "C:\\Users\\<ユーザー名>\\.rhinocode\\py39-rh8\\site-stubs\\rhino3d-8.34.26223.11001",
"C:\\Users\\<ユーザー名>\\.rhinocode\\py39-rh8\\site-rhinopython"
    ],
}

macOS の場合、フォルダを分ける記号は / なのでそのまま使用でき、下記のようなパスとなります。

{
   "python.analysis.extraPaths": [
        "/Users/<ユーザー名>/.rhinocode/py39-rh8/site-stubs/rhino3d-8.35.26251.13002",
        "/Users/<ユーザー名>/.rhinocode/py39-rh8/site-rhinopython",
    ],
}

VSCode の設定をした後の図。Rhino.Geometry と Grasshopper 、rhinoscriptsyntax を呼び出してLine クラスのコンストラクタを呼び出している図。使用方法がスタブから取得できています。

B.PyCharmでのスタブ追加手順

PyCharm のインタープリターパス一覧に Rhino のスタブフォルダーを追加します。

  1. PyCharm でプロジェクトを作成し、任意の仮想環境など ( venv など) でセットアップします。

2. [ ファイル ] > [ 設定 ] ( macOS は [ PyCharm ] > [ 設定 ] ) から [ Pythonインタープリター ] を選択。ドロップダウンから [ すべて表示… ] をクリックします。

3. 設定したい Python 環境を選択し、上部の [ インタープリターパスの表示 ] アイコンを押します(プロジェクトに任意の Python を使用した場合、Python 環境が複数ある可能性があります。自分が使用している Python 環境を選択してください)。

4. [ 追加 ] ( + ) アイコンを押し、.rhinocode 内の site-stubs 以下にある対象の Rhino スタブフォルダー ( 例: rhino3d-8.xx… )を指定します。

また + アイコンを再度押して site-rhinopython も追加することで、rhinoscriptsyntax も補完できます。下は Windows での画像ですが、macOS でも同様にフォルダーを選択することで設定できます。( ユーザーが追加 )と文字が書かれた箇所が、今回追加した箇所です。

下記は PyCharm での設定後の画像。RhinoCommon と rhinoscriptsyntax のどちらも補完できているのがわかります。

トラブルシューティング

「補完が効かない!」ときのトラブルシューティング

スタブの設定を行っても補完が機能しない場合は、以下を確認してください。

  • チェック 1 : スタブのフォルダーが、作成されていない

対処法: Rhino 8 を立ち上げ、コマンドプロンプトに [ ScriptEditor ] と入力して実行し、バックグラウンドでの自動ダウンロードを完了させてください。

  • チェック 2 : 隠しフォルダー( .rhinocode ) が表示されない

 対処法: OS の隠しフォルダー表示設定が表示状態にできているか確認してください。

  • チェック 3 : スタブを設定したのに反映されない

対処法: 反映後に解析を実行しています。といったメッセージが出て処理に時間がかかることがあります。その場合は解析が実行後に機能が使えるようになります。

PyCharm  はインターフェイスからフォルダーを指定するというものなので、間違いづらいですが、VSCode はファイルパスを記述するので、パスの指定方法を間違えないように気を付けてください( Windows の場合は上述の通り、特に注意が必要です)。

  • チェック 4 : プロジェクトの仮想環境( venv )の選択ミス

 対処法: 設定を追加したインタープリターが、現在開いているプロジェクトに正しく適用されているか確認してください。

実際の挙動確認と既知の注意点

Python のスタブは改良が加えられていますが、現時点( 2026/10 時点)では、対応していないものもあるようです。

スタブの定義はライブラリの記述そのものではなく、後から生成したものなので実際のAPIと異なる・現時点では対応ができていない場合があります。動作しないときは公式のドキュメントも参照してください。

未対応のものが見つかれば、ご報告いただければ開発元に報告し改善を図ります。よろしくお願いいたします。

まとめ

Rhino 8 内の [ ScriptEditor ] での手軽さと、お好みの外部 IDE ( VSCode / PyCharm ) +スタブ設定により開発環境を使い分けることで、効率的に Rhino Python の開発を進めることができます。

また例として2つの IDE をご紹介しましたが、VSCode をベースに開発・フォークした IDE でも似た設定を行うことは可能なようです。

VSCode だと python.analysis.extraPaths の箇所を、Cursor だと cursorpyright.analysis.extraPaths とすれば使用できるようです( 言語サーバーが VSCode とは異なる Cursor の設定のため。それ以外のパスの設定などは VSCode と同じです)。

Windows であれば、下記のような設定です。

{
    "cursorpyright.analysis.extraPaths":"C:\\Users\\<ユーザー名>\\.rhinocode\\py39-rh8\\site-stubs\\rhino3d-8.34.26223.11001"
    ,
}

下図はスタブ設定後に Cursor で RhinoCommon のLineクラスのコンストラクタメソッドを確認している図です。

ぜひご自身の開発環境に合わせて、スタブ設定を試してみてください。