Exercismとは
メンターからコードレビューを受けられるサービスです。
あらゆるプログラミング言語に対応しています。
GitHubアカウントで登録可能です。
良いところ
無料
それな。
英語を学べる
2019年7月現在、サービス自体に日本語版はありません。
コードレビューも海外メンターから受けるので、当然英語です。
しかし、翻訳ツールを使って適宜わからない単語を調べれば、ほとんど問題はないです。
英語を学べるのも良いですが、海の向こうの人たちとプログラミングについて語り合えるのが嬉しい。あと単純にカッコいい。
他人のコードが読める
- この実装、もっと良い書き方ないかな?
- 他の人はどういう書き方をしているんだろう・・・
課題完了後は他の人のコードが読めます。新たな発見があるかもしれません。
UIが使いやすい
課題のダウンロードから提出までCUIで進められるのが良いです。
シンプルなサイトデザインも含め、1つのサービスとして素晴らしいと思います。
悪いところ
進み方が遅い
課題はメインのcore track
と、追加演習のExtra exercises
に分かれています。
core track
はメンターの承認を受けないと次の課題がアンロックされません。基本24時間以内にメンターからレビューを受けられますが、時間がかかる場合もあります。
自己判断で課題を完了することもできます。
が、一度完了させてしまうと、その課題について再度メンターと交流することができなくなります。
ちなみにindependent-mode
という設定でガンガン進めることもできますが、コードレビューの優先順位が下がるそうです。
Mentored Mode vs Independent Mode
アルゴリズムはあまり学べない
まだ課題をあまり進めていないので断言はできませんが、アルゴリズムはあまり学べない印象です。
それより組み込み関数を如何に上手く使えるか
が問われると思います。
課題を進めれば印象が変わるかもしれません。
課題の内容が分かりにくい
課題によっては、説明文だけでは内容がわからないものがあります。
具体的な仕様はテストコードから判断するしかありません。
テストコードを理解する練習にもなるので、逆にメリットかもしれません。
設定から課題完了まで
サイトでチュートリアルを見ることができますが、メモしておきます。
exercismの設定
パッケージ管理システムのHomebrew
を使用してインストールします。
$ brew install exercism
$ exercism version
exercism version 3.0.11
マイページから個別に割り当てられたトークンを確認できるので、それを設定します。
演習に必要なファイルは、ここで表示されるWorkspace
に生成されます。
$ exercism configure --token=my_token
You have configured the Exercism command-line client:
Config dir: /Users/yuki/.config/exercism
Token: (-t, --token) my_token
Workspace: (-w, --workspace) /Users/yuki/Exercism
API Base URL: (-a, --api) https://api.exercism.io/v1
課題のダウンロード
$ exercism download --exercise=hello-world --track=php
Downloaded to
/Users/yuki/Exercism/php/hello-world
Workspace配下に言語毎のディレクトリ、その配下に課題毎のディレクトリが生成されます。
テストツールのインストール
PHPを選択した場合、PHPUnit
を使用することができます。
最初の演習時に設定します。
wgetコマンド
を使える状態にしておきます。
$ brew install wget
Workspaceの場所を確認し、配下にあるphpディレクトリ
に移動します。
$ exercism debug | grep Workspace
Workspace: /Users/yuki/Exercism
PHPUnitをインストールします。
$ wget --no-check-certificate https://phar.phpunit.de/phpunit.phar
phpunit.phar
に実行権限を付与します。
$ chmod +x phpunit.phar
演習
課題名のディレクトリが生成されているので、その中に課題名.php
を作成し、課題を進めます。
README.md
に課題の内容が書いてありますが、わからない場合は既存の課題名_test.php
を読みながら詳しい仕様を把握します。
作成が完了したら、テストを実行します。
$ ./phpunit.phar hello-world/hello-world_test.php
提出
テストが通ったら、課題を提出します。
$ exercism submit /Users/yuki/Exercism/php/hello-world/hello-world.php
コードレビュー
課題提出後、メンターからコードレビューがもらえるのでマイページで確認します。
修正がある場合は再度提出します。
メンターから承認が下りた後は課題を完了することができ、次の課題がアンロックされます。
どんどん進めていきましょう〜