ヤバいサイト見つけちまったかもしれん。
— ノーン (@nkowne63) 2021年1月5日
52個の主要プログラミング言語について、練習問題がそれぞれ100個くらいあってCLIまで整備されてる。で無料。https://t.co/eFdUnytK9B
Twitterで見かけたのでやってみました。
触った感じだと、Progate的なwebブラウザでプログラミングするタイプではなくて、truckに近く、コマンド経由でローカルに課題をダウンロードし、コマンド経由で回答を提出するという感じのプログラミング入門サイトです。これで無料なのはすごい気がする。
会員登録はGitHubAuthが使えるのでそれでしました。 特に何も打つ必要がないので便利。
課題のダウンロード/提出にはexercism
というコマンド経由で行う必要があり、今はubuntuユーザーなのでsnapでinstallしました。
$sudo snap install exercism
exercismをインストールしたら、トークンを設定する必要がある。
$exercism configure --token=<トークンを貼る>
ちなみにいきなり動かそうとするとエラーがでて、トークンを発行するURLが案内される。
$ exercism download --exercise=hello-world --track=raku Error: Welcome to Exercism! To get started, you need to configure the tool with your API token. Find your token at https://exercism.io/my/settings Then run the configure command: /snap/exercism/5/exercism configure --token=YOUR_TOKEN
exercism
は他にいろいろ設定できるみたいで、作業用ディレクトリも設定可能。
初期設定だと$HOME/snap
以下が作業ディレクトリとなってしまうので、今回は自分で作ったworkspaceディレクトリを設定した。
自分で作ったworkspaceにcdした状態で次のコマンドを実行。
$exercism configure -w=$PWD
これで初期設定が終わるので、あとは問題で指定されているコマンドを打って課題をローカルにダウンロードする。 課題はいろいろな言語があるのだけれど、今回はRaku(Perl6)を選んでみました。
$exercism download --exercise=hello-world --track=raku
今回はraku
の下にhello-world
というディレクトリが作られていました。
$ pwd /home/anatofuz/workspace/exercism/raku/hello-world $ls HelloWorld.rakumod hello-world.rakutest README.md
あとはここで課題に応じてプログラムをしたり、テストを動かしたりすれば良さそう。
僕はRakuだったので、とりあえずRakuでテストをいい感じに動かすprove6
をインストールした。
$zef install App::Prove6
テストを確認するとこんな感じ。Hello, World!
と返すhello関数を作ればいい。
+kajika+anatofuz$ cat hello-world.rakutest #!/usr/bin/env raku use Test; use lib $?FILE.IO.dirname; #`[Look for the module inside the same directory as this test file.] use HelloWorld; plan 1; #`[This is how many tests we expect to run.] # Run the 'is' subroutine from the 'Test' module, with three arguments. is( hello, # Run the 'hello' subroutine, which is imported from your module. 'Hello, World!', # The expected result to compare with 'hello'. 'Say Hi!' # The test description. );
ということでHello.modを編集
$ cat HelloWorld.rakumod #`( This is a 'stub' file. It's a little start on your solution. It is not a complete solution though; you will have to write some code. ) unit module HelloWorld; sub hello is export { return "Hello, World!"; }
prove6でテストを実行。通ってる。
+kajika+anatofuz$ prove6 . hello-world.rakutest .. ok All tests successful. Files=1, Tests=1, 0 wallclock secs Result: PASS
ここまで出来ると課題提出が可能。submit
で提出。
$exercism submit ./HelloWorld.rakumod
通っているとターミナル側でURLが生成されるので、それを開いて答えがあってるかの確認とかを行う。 答えがあってる場合は、自分の回答を公開するかどうかとかを聞かれるのでそのあたりに答えると次の課題がアンロックされる感じでした。
所感
1問くらいしか動かしてないですが、就活でのコーディング面接の雰囲気を知るとかの意味でも結構おすすめです。 全部英語なので読むのは大変かもしれませんが、わかりやすい英語ですし、テストコード見ればだいたい雰囲気がわかる感じなので、暇なときにやってみましょう。