Compiler Explorer について
Compiler Explorer は、コードをリアルタイムでコンパイルし、生成されたアセンブリを確認できるインタラクティブなWebサイトです。30以上の言語と言語ごとの複数のコンパイラに対応しており、コンパイル結果を比較したい開発者に向いています。C++ の構文がアセンブリにどう変換されるかを確認する小さな仕組みから始まり、現在は公開サイトとして提供されています。
主な機能
- 01リアルタイムのコンパイルとアセンブリ出力
- 0230以上のプログラミング言語に対応
- 03言語ごとに複数のコンパイラを選択
- 04設定可能なUIレイアウト
- 05コンパイルとコンパイラ一覧取得のためのRESTful API
活用シーン
- 01異なるコンパイラのアセンブリ出力の比較
- 02言語の構文が低水準コードに変換される過程の学習
- 03コードとコンパイル結果のリンクによる共有
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://godbolt.org/mcpclaude mcp add --transport http compiler-explorer-compiler-explorer https://godbolt.org/mcp{"mcpServers":{"compiler-explorer-compiler-explorer":{"type":"http","url":"https://godbolt.org/mcp"}}}Cursor で開く{"servers":{"compiler-explorer-compiler-explorer":{"type":"http","url":"https://godbolt.org/mcp"}}}VS Code で開く{"mcpServers":{"compiler-explorer-compiler-explorer":{"type":"http","url":"https://godbolt.org/mcp"}}}{"mcpServers":{"compiler-explorer-compiler-explorer":{"serverUrl":"https://godbolt.org/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
7| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| stdin | string | いいえ | 実行時の標準入力(execute=true が必要) |
| source | string | はい | コンパイルするソースコード |
| execute | boolean | いいえ | アセンブリを返す代わりにプログラムを実行します。`asm` は空になり、実行時の出力はトップレベルの `stdout`/`stderr` に、コンパイル診断は `buildResult.stdout`/`stderr` に移動します。 |
| filters | object | いいえ | 出力フィルター |
| filters.trim | boolean | いいえ | 空白を削除します(デフォルト:false) |
| filters.intel | boolean | いいえ | Intel アセンブリ構文を使用します(デフォルト:true) |
| filters.labels | boolean | いいえ | 未使用のラベルを除外します(デフォルト:true) |
| filters.demangle | boolean | いいえ | シンボル名をデマングルします(デフォルト:true) |
| filters.directives | boolean | いいえ | アセンブラーディレクティブを除外します(デフォルト:true) |
| filters.commentOnly | boolean | いいえ | コメントのみの行を除外します(デフォルト:true) |
| filters.libraryCode | boolean | いいえ | ライブラリコードを除外します(デフォルト:false) |
| options | string | いいえ | コンパイラーフラグ(例:"-O2 -std=c++20 -Wall") |
| compiler | string | いいえ | list_compilers の一覧にあるコンパイラー ID(例:"g161")。省略した場合は、list_languages にある言語の `defaultCompiler` を使用します。 |
| language | string | はい | 言語 ID(例:"c++"、"c"、"rust"、"python") |
| libraries | array | いいえ | リンクするライブラリ。 |
| maxAsmLines | integer | いいえ | アセンブリ出力を制限します(デフォルトは 500 行)。 |
| maxStderrLines | integer | いいえ | コンパイルと実行それぞれの標準エラー出力を制限します(デフォルトは各 100 行)。 |
| maxStdoutLines | integer | いいえ | コンパイルと実行それぞれの標準出力を制限します(デフォルトは各 100 行)。 |
詳細
Compiler Explorer
Compiler Explorer は、コンパイラーをインタラクティブに探索できるウェブサイトです。C、C++、C#、F#、Rust、Go、D、Haskell、Swift、Pascal、 ispc、Python、Java、またはその他の 30 以上の対応言語でコードを編集すると、コンパイル後のコードをリアルタイムで確認できます。
バグ報告 · コンパイラーのリクエスト · 機能のリクエスト · 言語のリクエスト · ライブラリのリクエスト · 脆弱性を報告
概要
各言語で複数のコンパイラーを利用でき、さまざまなツールや可視化機能が用意されています。また、UI のレイアウトは設定可能です(GoldenLayoutのおかげです)。
godbolt.orgで試すか、独自のローカルインスタンスを実行してください。このサイトでできること、その有用性、使い方についての概要は、こちらまたはこの講演でご覧いただけます。
Compiler Explorer は、開かれた、誰もが参加しやすい環境を育むことを目的とした行動規範に従っています。
Compiler Explorer は、C++の構文がアセンブリコードにどのように変換されるかを示すため、2012 年に始まりました。最初は、一方のペインで vi を実行し、もう一方のペインで watch gcc -S foo.cc -o - を実行する tmux セッションでした。
それ以来、公開ウェブサイトへと成長し、現在は毎週 3,000,000 件を超えるコンパイルを提供しています。
Patreon、 GitHub、 Paypalでこのプロジェクトを金銭的に支援したり、Compiler Explorer ストアで素敵なグッズを購入したりできます。
Compiler Explorer の使い方
FAQ
リポジトリの Wikiに FAQ セクションができました。ご質問がそこにない場合は、下記の方法でお問い合わせください。サポートいたします。FAQ に重要な情報が不足している場合は、ぜひ追加にご協力いただくか、内容の明確化をお尋ねください。
動画
Compiler Explorer の機能を紹介する動画をいくつかご覧いただけます。
- Compiler Explorer 2023:新機能は?:CppNorth 2023 でのプレゼンテーションです。
- プロジェクトについての CppCon 2019 でのプレゼンテーション
- 2 部構成の旧シリーズ動画では、あまり知られていない機能について、もう少し詳しく解説しています。
- Compiler Explorer に必要なアセンブリの基礎:Compiler Explorer の使い方に焦点を当てた、アセンブリの実践的な入門です。CppCon 2021 で発表されました。
- プレイリスト:Compiler Explorer:Compiler Explorer の使い方やインストール方法、用途などを紹介する動画集です。
Compiler Explorer の今後の計画については、ロードマップをご覧ください。
開発
Compiler Explorer は Node.js 上で動作する TypeScript で書かれています。
互換性のあるバージョンの node がインストールされている場合、Linux では make を実行するだけで、ローカルマシンのポート 10240 で動作する Explorer を起動できます:
http://localhost:10240/。うまく動作しない場合は、お問い合わせください。すぐに簡単に起動できることを重視しています。Compiler Explorer の実行には、少なくとも
node の .node-version で指定されたバージョンが必要です(それより新しいバージョンであれば問題ありません)。PATH から node を探します。これには、システムへのインストールに加え、シェル統合を備えたバージョンマネージャー(fnm、asdf、nodenv、volta、または有効な nvm)も含まれます。PATH 上の node が見つからない、または古すぎる場合は、nvm/fnm/nodenv/asdf を使って .node-version で指定されたバージョンを直接解決することも試みます。特定のインストールを指定するには、NODE_DIR(環境変数または make のパラメーター)にそのパスを設定してください。その場合は $NODE_DIR/bin/node を使用します。
make EXTRA_ARGS='--language LANG' を実行すると、lib/languages.ts で定義された言語 ID/エイリアスのいずれかである LANG だけを読み込めます。たとえば、Compiler Explorer を C++ のみで実行するには、make EXTRA_ARGS='--language c++' を実行します。複数の言語に絞り込む場合は、--language 引数を複数指定できます。Makefile は、実行に必要なサードパーティーライブラリをすべて自動的にインストールします。サーバー側とクライアント側のコンポーネントのインストールには npm を使用します。
開発時には、ファイル変更時の自動再読み込みや起動時間の短縮など、便利な機能を有効にする make dev の使用をおすすめします。
お使いのマシンで make dev が動作しない場合は、npm run dev でも起動できます。
UI を変更する際は、すべてのコンポーネントが正しく動作するよう、UI テストチェックリストに従うことをおすすめします。
rust、d、haskell など、一部の言語では名前の修飾を解除するための追加ツールが必要です。これらのツールはツール用リポジトリに分けて保管されています。
Compiler Explorer の設定は、etc/config ディレクトリ内の設定ファイルで行います。値は key=value の形式です。{type}.local.properties ファイル({type} は c++ など)内のオプションは、{type}.defaults.properties ファイル内のすべての設定より優先されます。*.local.* ファイルを無視する .gitignore ファイルがあるため、これらが git にチェックインされることはなく、git pull 時に更新されたバージョンとの競合に悩まされることもありません。詳しくはコンパイラーの追加をご覧ください。
Compiler Explorer への貢献方法の詳細については CONTRIBUTING.md を、コンパイラーや言語をサイトに追加する方法など、各種作業の詳細については docs フォルダーをご覧ください。
ローカルインスタンスの実行
独自の GCC などのバイナリを指定する場合は、etc/config/LANG.defaults.properties を編集するか、LANG を適宜置き換えて LANG.local.properties という名前のファイルを新しく作成してください。プロパティの読み込み時は、*.local.properties ファイルが最も優先されます。
ローカルコンパイラーをすばやく簡単に追加するには、CE Properties Wizard を使用してください。30 以上の言語のコンパイラーを自動的に検出して設定します。詳しくはコンパイラーの追加をご覧ください。
godbolt.org のように複数のコンパイラーと言語をサポートする場合は、infra プロジェクトの bin/ce_install install compilers コマンドを使用して、コンパイラーのすべて、または一部をインストールできます。この方法でインストールしたコンパイラーは、etc/config/*.amazon.properties の設定を通じて読み込めます。完全にオフラインの環境にデプロイする場合は、www.godbolt.ms@443 から取得される設定の一部を削除する必要がある場合があります。
企業環境で実行する際、デフォルトのストレージドライバーが適切でなければ、URL 短縮サービスを社内のものに置き換えられます。その場合は、lib/shortener/myservice.js に新しいモジュールを追加し、設定で urlShortenService 変数を指定してください。このモジュールは単一の関数をエクスポートする必要があります。例については、tinyurl モジュールをご覧ください。
RESTful API
アセンブリーへのコンパイルやコンパイラーの一覧取得に使用できる、シンプルな RESTful API があります。
API のドキュメントはこちらをご覧ください。
お問い合わせ
Compiler Explorer の利用や開発について話し合える場として、Compiler Explorer Discord を運営しています。また、cpplang Slack チャンネルの #compiler_explorer にも参加しており、公開メーリングリストもあります。
Discord には開発チャンネルがあり、開発者向けメーリングリストもあります。
お困りの場合は、github で Issue を作成するか、Matt に直接メールしてください。
公式ドメイン
以下は Compiler Explorer の公式ドメインです。
これらのドメインでは任意のサブドメインを使用できます。たとえば、https://foo.godbolt.org/ のようにすると、各サブドメインで独立したローカル状態を保持できるため便利です。また、https://rust.compiler-explorer.com/ のような言語別サブドメインにアクセスすると、その言語があらかじめ選択された状態で読み込まれます。
クレジット
Compiler Explorer は、AUTHORS ファイルに記載されている素晴らしい人々によって保守されています。
Compiler Explorer の発展に貢献してくださった、CONTRIBUTORS ファイルに記載されている皆さまに感謝いたします。
また、Compiler Explorer への貢献に対し、以下の方々に特に感謝いたします。
- Gabriel Devillers (Kalray に勤務していた際の貢献)
- Johan Engelen
- Joshua Sheard
- Andrew Pardoe
個人・企業を問わず、Compiler Explorer の資金提供や普及にご協力いただいた多くの素晴らしいスポンサーの皆さまに感謝いたします。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
