Configlet

Exercismにあるすべてのものの正式な仕様


configletは、トラックのメンテナーがトラックの保守を行うのを助けるツールです。

リント

configletの主な機能は_リント_です。これは、トラックの(設定)ファイルが、構文的にも意味的にも正しく構造化されているかをチェックするものです。 設定が誤っているトラックは、正しく同期できなかったり、ウェブサイトでの表示がおかしくなったり、ユーザー体験を損なったりすることがあります。そのため、configletのチェックはExercismの健全性を保つ上で重要な役割を果たします。 リンターがチェックするルールの一覧はこちらにあります。

ドキュメントの生成

configletの2つ目の機能は、ドキュメントの生成です。configletが生成できるドキュメントには、次の2種類があります。

  1. コンセプト演習のintroduction.mdファイル。
  2. プラクティス演習のinstructions.mdファイル。

これらのドキュメントがどのように生成されるかはこちらにあります。

演習データをproblem-specificationsリポジトリと同期する

configletの3つ目の機能は、プラクティス演習のためのさまざまなデータを提供することです。

Exercismのトラックにあるプラクティス演習は、多くの場合、exercism/problem-specificationsリポジトリの仕様をもとに実装されます。

Exercismでは、たとえその演習がproblem-specificationsに存在していても、すべての演習が特定のファイル(.docs/instructions.mdなど)のコピーを自分で持つことを、意図的に求めています。 そのため、configletにはsyncコマンドがあります。これは、トラック上のこうしたプラクティス演習が上流のソースと同期しているかを確認し、更新があればそれらを更新できます。

problem-specificationsから更新できるデータには、ドキュメント、メタデータ、テストの3種類があります。 また、トラックレベルのconfig.jsonファイルから設定できるデータが1種類あります。演習の設定ファイル内のファイルパスです。

configletのリリース4.0.0-alpha.34以前では、syncコマンドはテストに対してのみ動作していたことに注意してください。

特定のプラクティス演習でどのテストが実装されているかを把握するには、その演習に.meta/tests.tomlファイルが_必ず_含まれている必要があります。 このファイル内のテストはUUIDで識別され、各テストには、その演習で実装されているかどうかを示す真偽値が付いています。

演習の各部分をどのように同期するかの詳細はこちらにあります。

ファイルの作成

Configletを使うと、新しいアプローチ、記事、演習のファイルをすばやく雛形から作成できます。

これらのファイルの作成方法についてはこちらで詳しく学べます。

UUIDの生成

演習、トラック、概念はUUIDで識別されます。

UUIDの生成方法はこちらにあります。

フォーマット

Configletには、トラックリポジトリ内のJSONファイルを一貫した形式でフォーマットするためのfmtコマンドがあります。fmtコマンドは次のファイルをフォーマットします。

  • config.json
  • exercises/{concept,practice}/*/.approaches/config.json
  • exercises/{concept,practice}/*/.articles/config.json
  • exercises/{concept,practice}/*/.meta/config.json

フォーマットコマンドについて詳しくはこちらで学べます。

インストール

configletは、単体で動作するバイナリとして配布されています。各トラックにはbin/fetch-configletスクリプトがあり、bin/fetch-configlet.ps1スクリプトもあるかもしれません。前者はbashスクリプトで、後者はPowerShellスクリプトです。

これらのスクリプトのいずれかを実行すると、configletの最新バージョンがbinディレクトリにダウンロードされます。あとは、それぞれbin/configletまたはbin/configlet.exeを実行すれば、configletを使えます。

CI

すべてのトラックは、CIの設定にconfigletのリント機能を組み込むべきです。 最も簡単な方法は、configlet CI GitHub actionを使うことです。