コンテンツにスキップ

Nimで始めた2つのプロジェクト:NiminoとNimculus

Nimの魅力は、Pythonのような書き味とCに近い配置自由度を同時に扱えることです。最近、その特徴を実際のアプリケーション開発で検証するために、Nim言語で2つのプロジェクトを始めました。

  • Nimino — Nimをホスト言語にした、軽量なクロスプラットフォームWebViewデスクトップアプリケーション基盤。
  • Nimculus — NimとNimNUIで作る、高速なGPUネイティブコードエディタ。

どちらも「Nimでどこまで実用的なGUI/デスクトップ基盤を作れるか」を探るための実装です。単なるサンプルではなく、OS API、WebView、GPU描画、パッケージング、開発体験まで含めて、Nimの強みと弱点を確かめるための実験場にしています。

実装の方向性は、Rustエコシステムの先行事例も参考にしています。Niminoでは軽量なWebViewデスクトップアプリケーション基盤としてのTauriを、NimculusではGPUアクセラレーションを前提にしたエディタアーキテクチャと開発体験の参考としてZedを重視しています。ただし、どちらも単純な移植やクローンではなく、それぞれの設計思想をNimの言語特性に合わせて再解釈することが目的です。

なぜNimなのか

Nimは、デスクトップアプリケーション基盤を作るうえで面白い位置にあります。

  • ネイティブコードへコンパイルできるため、VM前提の配布物より小さくしやすい。
  • C ABIとの相性が良いため、Win32、GTK、WebKitGTK、WebView2のようなOS/GUI APIへ直接届きやすい。
  • マクロやテンプレートで抽象化できるため、低レベルFFIの上に薄く安全なAPIを重ねやすい。
  • Python風の構文により、実験の初速を上げやすい。

一方で、NimのGUI・デスクトップ領域は、巨大な既製フレームワークにすべてを任せるというより、必要なレイヤーを自分で選び取る場面が多いと感じています。そこで、まずはWebViewアプリ基盤とGPUネイティブエディタという2方向から検証を始めました。

Nimino:薄いFFIで作るWebViewデスクトップ基盤

Niminoは、Nimをホスト言語にして、OS公式APIに近い薄いFFIでネイティブWindowとWebViewを扱うためのフレームワークです。

目標は、ElectronのようにChromiumを丸ごと同梱するのではなく、WindowsではWebView2 Evergreen Runtime、LinuxではWebKitGTKなど、OS側のWebView基盤を活用することです。これにより、軽量な配布物、ネイティブな統合、Nim側からの制御しやすさを両立させます。この意味で、Tauriはプロダクト形態の重要な参考例です。小さなネイティブシェル、プラットフォームWebView、明示的な権限管理、Web UIとネイティブホストの境界設計をNiminoでも意識しています。

想定コンポーネント

Niminoは、次のような責務分離で進めています。

コンポーネント 役割
nimino-native Win32/WebView2、GTK/WebKitGTKを直接利用する薄いWindow/WebView層
nimino-core アプリライフサイクル、RPC、プロファイル、ナビゲーション・権限ポリシーを提供する基盤
nimino-wsl WSL上のNimプロセスとWindows GUIホストを接続するアダプター
nimino-pack URLまたはマニフェストからアプリを生成するCLI

初期ターゲットはWindows、ネイティブLinux、WSLです。macOSは将来の拡張点として考えています。

Niminoで試したいこと

Niminoでは、次のようなテーマを検証しています。

  • WebViewを「巨大なアプリケーションランタイム」ではなく、OS提供のUI部品として薄く扱う。
  • Nim側にライフサイクル、RPC、権限、プロファイル、パッケージングの責務を置く。
  • WSLでもWindowsホスト側のGUIを安全に操作できる構成を作る。
  • Web UIの開発速度と、ネイティブ配布物としての軽さを両立する。

Niminoが安定すれば、社内ツール、管理画面、ローカルAIツール、開発者向けユーティリティのような「Web UIで十分だが、ブラウザタブではなくデスクトップアプリとして配りたい」用途に使える基盤になります。

Nimculus:GPUネイティブなコードエディタへの挑戦

Nimculusは、NimとNimNUIで作るGPUネイティブコードエディタです。

コードエディタは、テキスト処理、描画、入力、ファイル監視、LSP、拡張機構、設定、テーマ、パフォーマンスなど、多くの要素が詰まった総合的なアプリケーションです。Nimでこの領域に挑戦することで、言語・ランタイム・GUIスタックの実用性をかなり広い範囲で確認できます。Nimculusでは、GPU描画、応答性、コラボレーションを見据えた設計、現代的な開発ワークフローという点で、Zedを主な参考にしています。

Nimculusで重視する方向性

Nimculusでは、次のような方向性を意識しています。

  • GPUを前提にした高速な描画パイプライン。
  • Nimらしい軽量なネイティブ実行ファイル。
  • エディタコア、UI、プラグイン境界をできるだけ明確に分ける設計。
  • LSPや外部ツールとの連携を前提にした開発体験。
  • NimNUIを通じて、Nim製GUIアプリの可能性を検証する。

まだ初期段階ですが、Nimculusは「Nimで本格的な開発者向けデスクトップアプリを作る」ためのベンチマークプロジェクトとして位置づけています。

2つのプロジェクトの関係

NiminoとNimculusは、別々の方向を向いたプロジェクトです。

  • Niminoは、WebViewを使って軽量なデスクトップアプリ基盤を作るプロジェクト。
  • Nimculusは、GPUネイティブUIで高性能なコードエディタを作るプロジェクト。

しかし、どちらも共通して「Nimで実用的なデスクトップ体験を作れるか」を検証しています。Niminoで得たOS統合、パッケージング、RPC、ライフサイクル管理の知見は、Nimculusにも活かせます。逆に、Nimculusで得た入力処理、描画、エディタコア設計の知見は、NimのGUIエコシステム全体の理解につながります。

今後の進め方

まずは小さく動くものを積み上げます。

  1. NiminoでWindow/WebView/RPC/パッケージングの基本導線を固める。
  2. Nimculusで描画、テキストバッファ、入力、ファイル操作の最小構成を作る。
  3. Windows、Linux、WSLで実際に動かしながら、NimのFFI、非同期、メモリ管理、ビルド体験を検証する。
  4. 得られた知見を、このNim Architecture Guideにも反映していく。

Nimは、巨大なエコシステムに乗る言語というより、低レベルから高レベルまでを自分で接続できる言語です。NiminoとNimculusは、その接続力を実際のプロダクト形態で試すためのプロジェクトです。

リポジトリ