各トラックの最初の演習は、とてもシンプルな「Hello, World!」の演習です。
この演習の目的は、すべてが正しくつながっているかをすばやく確認することです。 これにより、ユーザーがプログラミング環境を正しくインストールできているか、テストの実行方法を理解しているか、そしてテストに合格できるかを確認できます。 さらに、Exercismのコマンドラインクライアント(CLI)については、CLIが正しくインストールされ設定されているか、そしてサイトが不要な生成物を含めずに演習に必要な正しいファイルを配信しているかも確認できます。 最後に、CLIを使って演習をダウンロードし、ローカルの開発環境で問題を解き、その解答をサイトに提出するという流れに、ユーザーが慣れているかを確認できます。
言い換えると、まだ言語そのものについて何かを学ぶための演習ではありません。 とにかくシンプルであることを目指します。
また、演習を実装するには多くの要素が関わってくるため、トラックのリポジトリを正しくセットアップするうえで、おそらくここが最も難しい部分になります。
「Hello, World!」の演習には、いくつかの特別なルールがあります。
prerequisitesがありませんpracticesがありません「Hello, World!」の演習(そして実はExercismの_すべての_演習)には、決まったファイル一式が必要です。
「Hello, World!」の演習を作成する前に、トラック固有のファイル名とファイルパス(テストスイート、スタブ実装、実装例、追加ファイル)を決める必要があります。
目安は、その言語で慣用的な名前を使うことです。
強いこだわりがない場合は、より浅いディレクトリ構造を選びましょう。
実装例はCIスクリプトから識別できる必要があるので、すべての演習で使える汎用的なベース名を選ぶとよいでしょう。たとえばexample、sample、reference-solutionなどです。
トラック固有のファイルパスを決めたら、ルートのconfig.jsonファイルにあるfilesキーでそれらを設定します。
filesキーはすべての演習のテンプレートとして機能し、これにより各種ツール(このあと少し使います)がファイルの場所を把握できます。
さまざまなプレースホルダーを使うと、演習のスラッグ(ここではhello-world)を簡単に設定できます。
トラックがファイル名にパスカルケースを使っている場合、filesキーは次のようになります。
"files": {
"solution": [
"%{pascal_slug}.cs"
],
"test": [
"%{pascal_slug}Tests.cs"
],
"example": [
".meta/Example.cs"
]
}
実装例のファイルは.metaディレクトリ内に置いてください。
詳しくは、filesキーのドキュメントを参照してください。
ファイルパスのテンプレートを指定したら、トラックのルートディレクトリで次のコマンドを実行すると、「Hello, World!」の演習のファイルをすばやく生成できます。
bin/fetch-configlet
bin/configlet create --practice-exercise hello-world
サイトに演習の作者として表示されるようにするには、次の手順を行います。
演習の.meta/config.jsonファイルで:
authorsキーにGitHubのユーザー名を追加しますこれが機能するには、ExercismのアカウントをGitHubに連携する必要があります。 これはサイトの設定ページの連携セクションで行えます。
演習の作者にはレピュテーションも付与されます
新しいトラックのリポジトリでは、bin/add-practice-exerciseスクリプト(ソース)を使って新しい演習を追加できます。
bin/add-exercise -a <github_username> two-fer
このファイルがないトラックのリポジトリで作業している場合は、上のソースリンクから自分のリポジトリにコピーしてかまいません。
生成されたファイルが作成できたら、次に次のことを行います。
演習を追加するうえで重要なのが、テストを追加することです。 おおまかに言うと、上記のような演習を実装する方法は2つあります。
canonical-data.jsonにあるテストケースを使って、テストを一から実装するhttps://exercism.org/exercises/hello-worldにアクセスすると、どのトラックがその演習を実装済みかを一覧できます)。「Hello, World!」の演習にはテストケースが1つしかないので、どちらの方法でも問題ありません。
実装例のファイルには、テストを解くのに必要なコードを書きます。
スタブファイルには、テストに対して_ほぼ_動作する解答を用意しますが、「Hello, World!」というテキストを「Goodbye, Mars!」に置き換えます。 ヒント:実装例をコピーして貼り付け、少し手を加えるだけでかまいません。
演習ができたら、演習の.meta/config.jsonファイルにある"authors"配列にGitHubのユーザー名を追加してください。
これにより、演習を作成したのがあなたであることが正しく記録されます。
演習が正しく設定されているかを確認するには、configletツールの組み込みのリント機能を使います。
まずはconfigletツールを取得します。そのために2つのスクリプトを用意しています。
bin/fetch-configlet:*nixまたはmacOSで使う場合はこれを実行しますbin/fetch-configlet.ps1:Windowsで使う場合はこれを実行しますトラックのリポジトリのルートディレクトリでこれらのスクリプトのいずれかを実行すると、bin/configletまたはbin/configlet.exeバイナリがダウンロードされます。
その後、bin/configlet lintを実行すると、演習が正しいかどうかを確認できます。
configletが次のエラーを報告する可能性があります。
The `tags` array is empty:
/path/to/track/config.json
このエラーは公開の準備のステップで修正されるので、次のいずれかを行います。
configletワークフローは、mainにプッシュされたとき、またはプルリクエストにプッシュされたときに、自動的にconfiglet lintを実行します。