メインコンテンツまでスキップ
バージョン: 開発中

dicksコマンド

bin/dicks は開発用の統合コマンドです。.dicks ファイルを直接渡すか、プロジェクト用のサブコマンドを使います。コマンドを取りまとめる処理は現在Nodeで動作し、アプリケーションとセルフホストのコンパイラはDicksで書かれています。Rustはブートストラップのシードのビルドと、コンパイラの動作の独立した検証にだけ使います。

npm ci
./bin/dicks toolchain
./bin/dicks init ../hello
./bin/dicks --project ../hello lock
./bin/dicks --project ../hello run
./bin/dicks ../hello/lib.dicks

toolchain はシードをコンパイルし、セルフホストのコンパイラを2回コンパイルして、3つのJavaScript生成物すべての一致を要求します。検証済みの一式はGit管理対象外の target/toolchain/ に置きます。検証記録にはNodeのバージョンも完全一致で固定します。通常のビルドではRustを実行せず、コード生成にTypeScriptの検査器を使うこともありません。

dicks init はmainとライブラリを別のファイルとして作り、インポート・エクスポートを明示します。独立した名前空間と型の共有はモジュールで説明しています。

dicks.json は名前、エントリー、ターゲット(module、cloudflare、discord)、モジュール、依存、エフェクト、リソース、テストのソースパスを宣言します。エフェクト宣言がないモジュールで許可するのは、バッファへの出力だけです。Cloudflareのプロジェクトでは使用するエフェクトを明示的に許可します。ライブラリが暗黙にエフェクトを許可することはありません。Discordターゲットは、生成するDicksディスパッチャーと汎用Durable Objectアダプターを追加します。

依存​

dicks add ../library は package.json を持つローカルパッケージを受け取ります。マニフェストには name、セマンティックバージョンの version、明示的な files、省略可能な types パス、modules マップ、hosts ABIのパス、dependencies マップを記述します。dicks remove NAME は直接の依存を削除します。ローカルソースは { "path": "../library" } で指定します。同梱パッケージの一覧は標準ライブラリを参照してください。同梱のCloudflareアダプターは、@dicks/cloudflare に対して { "builtin": "cloudflare" } を指定します。

lock は間接的な依存もたどり、循環と内容の競合を拒否して、全パッケージファイルのSHA-256、コンパイラの検証記録、コマンド実装を記録します。パッケージのファイルはルートの外を参照したり、シンボリックリンクで迂回したりできません。sync はこれらの一致を確認してから .dicks/packages/ を用意し、依存先のスクリプトは実行しません。ファイルを変更した場合は明示的に lock し直します。ビルド中に暗黙の更新はしません。

dicks add @scope/name@1.2.3 はパッケージレジストリから完全一致のバージョンをダウンロードします。dicks pack はパッケージを検証し、dicks publish は名前空間のトークンを使って公開します。レジストリのバージョンとファイルのバイト列は不変で、SHA-256により固定します。検証済みのキャッシュはオフラインでも使えます。バージョン範囲と自動アップグレードは未実装です。

ビルドと調査​

build と check はlockとコンパイラの来歴を検証し、明示的なモジュールのインポートを解決して、非公開シンボルと名目的な型のIDを再配置します。その後、検証済みのセルフホストコンパイラでコンパイルします。出力は入力のハッシュごとに保存します。build.json はソース、生成物、依存、リソースのダイジェストを記録します。ビルド中のソースやツールの同時変更も検出します。Cloudflare向けの出力は静的なESモジュールで、evalや実行時コンパイルは使いません。

run はモジュールを実行するか、プロジェクトにインストールしたCloudflare CLIをローカル開発用に呼び出します。test は宣言済みのDicksテストソースをそれぞれコンパイルして実行し、アサーション失敗時はトラップします。fmt --check は記号の正規の整形を検査します。inspect は独立したTypeScript検査器であることを表示したうえで、ソース位置、型付きスタック、ローカル変数の初期化、エフェクト、呼び出し先を報告します。

どのコマンドも、デプロイ、データベースのマイグレーション、secret登録を行いません。これらは明示的な運用操作として行います。