トークン数を減らして、より良いコーディングができるように新しいプログラミング言語を作った

Dev.to / 2026/3/26

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical Usage

要点

  • この記事では、Dusoという新しいオープンソースのスクリプト言語を作る動機が説明されており、コーディングの信頼性と効率を高めることで、時間とコストを削減することを目指している。
  • どこかを巧みに表現できる言語(例:Python/JavaScript)は見えにくい実行時バグにつながりやすい一方で、より堅牢な言語(例:Go)は多くのエラーをより早い段階で検出できるが、複雑さゆえに開発全体を遅らせる場合がある、と主張している。
  • 開発者の摩擦を解消するため、特にプロジェクトに大量の依存関係が含まれる場合に備え、著者はLuaの提供範囲を超える、より充実したランタイムと言語機能を追加する。ただし中核はシンプルに保っている。
  • 重要な発見として、Claudeは事前にDusoを学習していなくても効果的にコードを書けるようで、エラーが少なく、デバッグやテストのサイクルも短くなるとしている。
  • 著者は、AIによる高速な開発は結果としてトークン数の削減、支出の抑制、そしてより信頼性の高いアプリケーションにつながると主張し、Dusoは標準ライブラリ(crypto、regex、ファイルI/Oなど)に加えて、WebサーバーやRedisに似たデータストアといった構成要素を含むものだとして位置づけている。

TL;DR: 時間とお金を節約しながら、より良いコーディング習慣を促すスクリプト言語を作れるのか?はい、できると思います: duso.rocks で、オープンソースです。

最高のプログラミングモデルでも、これらの痛点には苦しむ

  • PythonやJavaScriptのような表現力の高い言語は、微妙な実行時エラーの地雷原です。デバッグセッションは悪夢になりがちです。

  • Goのようなより堅牢な言語は、コンパイル時に大量のエラーを捕捉します。ですが、内部の複雑さのせいで、全体の開発時間は遅くなります。

  • 依存関係が数百、あるいは数千もあるスタックだと、AIボットにそれらの中から理解して選ばせることになります。さらに、バグがしがみつくための表面積も増えてしまいます。

Dusoを作る

最初は、私がGoで書いた別のシステムに、ちょっとしたスクリプト機能を追加するだけのつもりでした。埋め込み用に設計されているLuaは自然な選択でした。ですが、ビルドプロセスにCを足さなければならないという発想はあまり好きではなかったので、純粋なGoの実装を調べました。しかし、私が本当に必要としていた点で不足していました。

なので、普通のプログラマがやることをやりました。自分のプログラミング言語を作ることにしたのです。

数時間後に気づきました。え、どうせこれを書くなら、いくつか調整したらどうだろう?より良いエラーハンドリング、筋の良いデータ構造、現代的な言語の便利さ、そして必要なものを実際に同梱してくれるランタイムが欲しかったのです。Luaは素晴らしい言語ですが、最小限であることを意図して作られています。私はそれよりももっと完成度の高いものが必要でした。そこで、これらすべての課題に取り組むことにしました。

その過程で、あることに気づきました。ClaudeはDusoでうまくコードを書けます。ClaudeはDuso、あるいはその拡張されたランタイムについて学習されていなかったにもかかわらず、うまくいっていました。コーディング中のエラーは減り、デバッグやテストのサイクルも短くなりました。私がClaudeで使ってきた他の言語(Luaを含む)より、開発が明らかに速いのです。

これで興味が湧き、使命が変わりました。開発が速いほどトークンが減る。トークンが減れば、時間とお金がより少なくて済む。コードが減れば、信頼性の高いアプリになる。うわ、今はもうハマっています。

なので、普通のプログラマがやることをやりました。完全なWebサーバー、Redisっぽいデータストアの仕組み、そして文字列、数学、正規表現、ファイルI/O、データ変換、セキュリティ、暗号をカバーする完全なランタイムのような“ごっつい”機能を追加することにしたのです。

ランタイムを拡張しながら、私はコアをシンプルに保ち続けました。Luaライクな構文を、もっと「普通で、退屈な」やり方で洗練させました。次に、他のスクリプト言語から良い要素を追加し、悪いものは避けようとしました。そして最後に、自分の小さな発明をいくつか加えました。

私はClaudeと一緒に作業を始めました。「これを書いて、次はこれをテストして」ではなく、「Claude、どのパターンのほうがあなたにとって自然に見える?」「ねえ、あなたならこのランタイム関数を何と呼ぶ?」のように聞くようになりました。やり方が違うだけでなく、もっと楽しいものでした。

2週間後

最初のパブリックリリースまでに、私が設計とアーキテクチャ上の意思決定の90%を行い、Claudeがコード、ドキュメント、そして例の約90%を作っていました。とても素晴らしい共同作業でした。でも、うまくいったのでしょうか?

最初の大きなテスト

私はArlandというモバイルアプリを持っています。これはAIチャットボットで、あなたの目標に向けて軌道に乗るのを手助けする“クールな同僚”のように振る舞います。ArlandサーバーはClaude Codeを使ってGoで書かれていました。メンテするのは気が進みませんでした。とても個性的で、たとえ小さな変更でもClaudeとの複雑なセッションが必要だったからです。私のLLMに関する経験では、特にコードベースが育っていくとリファクタリングが苦手です。

Go版は8,200行以上のコードです。いくつかのファイルは巨大です。Claude自身もそれらを編集するのが難しいようです。スパゲッティコードではありませんが、理想には程遠いです。

そこで質問しました。ArlandサーバーをDusoで書き直せるだろうか?動くのか?コードはどんな感じになるのか?

4時間後

本当に4時間後です。正直に言うと、ClaudeにはGo版がモデルとしてありました。とはいえ、これはなかなか複雑なJSON APIサーバーで、Apple認証、購入の承認、スケジューリングシステム、そしてチャットボット本体があります。おもちゃのプロジェクトではありません。

Duso版は?1,400行。 80%以上も行数が減っています!しかも構造も良い。エンドポイントごとに別のスクリプトがあり、Dusoが自然にするべき形になっています。コードはすべてトップダウンで書かれ、共通機能はモジュールにまとめられています。各スクリプトは分離され、データはHTTPサーバー経由でのみ共有されます(スレッド安全性のためにディープコピー)か、セッションキャッシュ用のデータストアを使う形です。

よりクリーンです。より短いです。追加のテストをいくつか済ませた後、Arlandのクローズドベータに投入します。

Dusoは違う

  • AIファーストのアーキテクチャ
  • クセのないLuaにインスパイアされた構文に加え、現代的な言語の便利さ
  • シンプルでパワフルな並行性(コンカレンシ)モデル
  • 組み込みのフル機能Webサーバー
  • キャッシュ、永続化、プロセス間通信のための組み込みスレッドセーフなデータストア

でも、LLMはDusoで学習されていない!

本当です!なので私はこの点に対処することにしました。Dusoのバイナリには、すべてのライブラリ、ドキュメント、そして例を埋め込みました。LLMを duso -read で実行すれば、ディレクトリのような体験が返ってきて、解析したり操作したりしやすくなります。純粋なテキスト、純粋なMarkdownです。

また、Webサイトには同じことを行う /text エンドポイントもあります。

人間にもLLMにも向けて、Dusoはランタイム、キーワード、モジュールについてのクイックリファレンスドキュメントを備えています。duso -doc http_server と入力するだけで、組み込みWebサーバーについて知りたいことがすべて見られます。

さらに私は、Claudeや他のLLMに対してDusoでの作業についてクイズのように聞いて回る時間も取りました。どれも、同様のタスクで使われるトークン数が減ったと報告しました。コードベースを理解する時間が減る。出力トークンが減る。これに寄与する要因はいくつかあります:

  • プレーンテキストのキーワードと、組み込み関数名。関数は function です。doend のようなブロック識別子は、LLMにとって処理が軽いです。略語なし、句読点が少ない、トークンが少ない。
  • “マジック”がない。Dusoは退屈です。つまり、すべてが「言っている通り」に動きます。たぶん、調べる前にキーワードを当てられるはずです。
  • 実用的なアーキテクチャ上の意思決定。すべては、「より作りやすく、デバッグしやすく、リリースしやすいコードが生まれる方向はどれか」に基づいています。
  • 完全に機能する組み込みランタイム(120以上の呼び出し)と、シンプルなモジュールのエコシステムにより、意思決定の疲労が減ります。基本的に重要なことを行う方法がほぼ1つにまとまっているので、すべてが単純になります。

便利さ

  • duso -init では、開始に使う例のプロジェクトを選べます(チャット、Web、スウォームなど)
  • duso -repl は、コマンドを1つずつ実行できる良いインターフェースです
  • duso -c では、任意のDusoスクリプトをインラインで実行できます
  • DusoにはLSPサーバーが組み込まれており、VS Code、Zed、Sublime、そしてVim/NeoVim向けに、構文ハイライト、自動補完、ポップアップヘルプを提供するプラグインを動かします
  • duso -debug はインタラクティブなデバッガを有効化します。エラーやブレークポイントで任意のスクリプトプロセスを停止し、それらを1つずつキューに積むので、狂いそうになることなく並行して起きる問題に対処できます

今後

Dusoは約7週間前に生まれました。私はまだ機能とドキュメントを磨いている最中ですが、土台はしっかりしています。ぜひ初期のフィードバックが欲しいです。特に、これを使って作り始める勇気のある人たちからのものが嬉しいです。

返却形式: {"translated": "翻訳されたHTML"}

このウェブサイトではLinux、macOSm、Windows向けに簡単な ダウンロード を用意しています。あるいは、github.com/duso-org/duso からDusoのソースコードにアクセスすることもできます。DusoはApache 2.0ライセンスのもとでオープンソースです。

私は、Dusoを導き、より良くしていきたいと考える志を同じくする開発者のコミュニティを築きたいと思っています。ドキュメント、バグ修正、例、モジュール、Goレイヤーでの改善など、また、親切な提案や友人への共有といったことでも、あなたが思っている以上に役立ちます。

ここまで読んでいただきありがとうございます。コメントを読めることを楽しみにしています! .