1. HOME
  2. テックブログ
  3. 無料で使える高品質なプログラミング学習サイト“Exercism”のはじめ方

無料で使える高品質なプログラミング学習サイト“Exercism”のはじめ方

2022/03/16 テクノロジー

Exercismの紹介

アスリートが毎日のワークアウトを欠かさないように、プログラマにもトレーニングが必要です。技が鈍ってしまうと、仕事で必要な課題にぶつかった時、課題が強靭すぎて太刀打ちできない!ということになりかねません。

そのため日頃から新しい言語を覚えたり、問題集などを解いたりしているプログラマは多いです。今回は、そのような日々のワークアウトにぴったりのウェブサービスを紹介したいと思います。

Exercism(エクサシズム)というサービスです。

プログラミングを学習するサイトはたくさんありますが、このサイトの特徴は次の通りです。

  • 無料
  • 回数制限はあるものの、ボランティアによるメンタリングも無料
  • 演習課題の質が高い
  • コマンドラインツールも整備されていて、使い慣れたIDEなどからの操作も簡単

サービスのコンセプトもしっかりしていて、共感できる部分が多いので、しっかり紹介します。

Exercismのコンセプト

設立目的は次のように書かれています。

We’re here to help everyone get really good at programming, regardless of their background. We want to share our love of programming, and help people upskill as part of their upward social mobility.

どんな経歴の人でも、プログラミングが本当に上手になるように支援します。プログラミングへの愛を共有し、社会的地位の向上の一環として、人々のスキルアップを手助けしたいと考えています。

「プログラミングへの愛をシェアする」というのが響きますね。
さらにそれをブレークダウンした「行動原理」も紹介されています。特に最後のものは共感できますね。

Exercism focusses on the learning journey, not the destination. The process and enjoyment of learning is more important than absolute factual correctness.

Exercismはゴールではなく学習の過程にフォーカスする。学習の過程が楽しいものであることは、絶対的事実の正しさよりも重要だ。

プログラミング学習にとって正確であることより成長過程を楽しむことが重要であり、そのようにデザインされているということかと思います。

良いコンセプトがあるだけでなく、実際にそのコンセプトを体現するようにサイトの全体のデザイン(設計)に一貫した潔さがあり、個人的に好感が持てるポイントです。

もう少し具体的なおすすめポイントを紹介しましょう。

高品質な演習課題

Exercismの主要コンテンツは言語毎に用意された「演習そのもの」(Exercise)です。演習ページの説明はカジュアルで学習者の興味を惹くようになっています。一方で課題の質は高く、各演習ごとに「こういうことを学ばせたいんだろうな」ということが、解いている最中にも感じられる様になっています。

CLIを使って演習のファイル(プロジェクト)をダウンロードすると、言語セットごとに、実際の現場で使われているテストライブラリとテストコードが用意されていて、すぐに課題に取り組めます。この様に実際の開発環境を使って、テストドリブンな開発を体験できますので変な癖もつきません。

Exercismを始めてみよう

利用にはGithubのアカウントが必要になりますので、持っていない人はまずGithubのアカウントを用意しましょう。ExercismにはGithubのアカウント連携でログインします。そして、学びたい言語のトラックに参加して、あとはExerciseを順番に解いていくというだけです。
(演習は必ずしも順番にやらなくても良いですが、順番の制約がある演習もあります)

では「StandardML」という言語のトラックに参加して、実際に演習を解く手順を示しつつ、Exercismの使い方をご紹介します。

事前準備

実際に問題を始める前に、事前準備が必要です。ちょっと面倒ですが一度だけですのでしっかりセットアップしましょう。

1: CLIのインストール

まずCLI(コマンドラインツール)をインストールする必要があります。インストール方法は、ウィザード(質問に答えていくと良いインストール方法を教えてくれる)ページで紹介されています。お使いの環境に合わせてインストールしましょう。

★インストールガイド
https://exercism.org/cli-walkthrough

2: CLIのセッティング

CLIをダウンロードしたら、CLIにご自身のアカウントの情報(トークン)を登録し、CLIから各トラックの問題をダウンロード、回答をアップロードできるように準備します。

トークンは自分のアカウントのセッティングページで表示されています。

★セッティングページ
https://exercism.org/settings/api_cli

トークンをコピーしておいて、ターミナルから設定コマンドで登録します。

exercism configure --token=<your-api-token>

これで基本準備は完了です。簡単ですね!

3: 言語環境のセットアップ

その言語を扱うのが初めてであれば、ローカルにその言語の環境をセットアップしなければなりません。そのセットアップ方法については言語ごとに次のページで紹介されています。

★ドキュメント一覧
https://exercism.org/docs/tracks

ここでは、StandardMLを使いますので見てみるとローカル環境のセットアップについて書かれていますね。この指示に従ってインストールします。新しい処理系を入れる場合でも、最新の環境になるようにメンテされていますので安心感がありますね。

課題を解いてみよう

さて、準備ができましたので問題をダウンロードして解いてみましょう。

演習ファイル(プロジェクト)のDLリンクはExercismの演習画面の右側にありますのでここからコピーしてターミナルで実行します。

exercism download --exercise=leap --track=sml

ダウンロードができました。自動的にExercism用のフォルダができて、その中に整理された形で演習のプロジェクトが作られていきます。プロジェクトフォルダをIDEで開きます。この例ではVisual Studio Codeを使っていますね。

中にHELP.mdとREADME.mdが見つかると思います。HELP.mdの方にはトラック全体の説明(この例だとStandardMLの問題を解く時の普遍的なインストラクション)、README.mdの方はウェブサイトで見られる説明と同等です。

次にtest.smlを開いてみます。Exercismの演習問題は、この与えられたテストに合格するプログラムを書くという形式になっています。そのため、「まずはテストを読む」というのが肝心です。テストを読めば大まかに仕様が大体分かりますので、この癖をつけることが大切です。

そして、次にコードの形式は正しいものの、テストに合格しないコードを書いてテストを実行し、テストに失敗することを確認します。

Exercismでは元々そのような構成で課題が与えられますので、実際は特に何も書かなくても良い場合が多いですが「型」などが省略されている場合がありますので、そのような部分をまず整備して準備を整えます。これも慣しです。

そして最終的に。テストに合格するようにコードを書いて、テストを通します。このように「動作するがテストは通らないコード」を「動作するしテストを通るコード」に変えていく。常に動作はすることを担保しながら、テストに通る様に直していくというプロセス。これを繰り返すことがトレーニングには大切なのです。

この時オンラインエディタでなく、ダウンロードして演習に取り組むと、IDEのデバッガを使うなど実際の仕事と同じ環境を使えるのが便利です。

最終的にテストに合格するコードが完成したら、そのコードをExercismにアップロードします。こちらもCLIから行えます。

exercism submit <program-file>

今は「閏年」を判定する課題のleap.smlを解いたのでそのファイルをアップロードします。

exercism submit leap.sml

そして、Exercismの問題ページに飛び、WEBページ上でもテストをパスしたことを確認します。問題なければ「Mark as Complete」のボタンを押します。

すると、このイタレーション(今回提出したプログラム)を公開するかどうか?と尋ねられます。お好きな選択肢を選んでください。

ここで学習者コミュニティに自分の解答を公開すると、Exercismへの貢献度に応じた、Reputationというポイントが与えられ蓄積されます。(これを蓄えていくと受けられるメンタリングの数などが増えます。)

学習のアドバイス

わからなくて先に進めない場合に、その問題の意図がわかって解決できる様になるまで、何日かかっても良いので、しつこく同じ問題に取り組むのが良いと思います。

全くどこから考えて良いのかわからん!という場合は、全く知識が足りないということでしょうから、その言語の入門書を買ってきて一通り終わらせてから、再トライするのが良いでしょうね。

慣れてくるとパズル感覚で楽しんで学べます。

初心者の方はeasyの問題を一つずつこなしていきましょう。hardの問題はベテランのプログラマでもなかなか難しいものもありますので、それぞれのレベルに合わせて楽しんでトレーニングできます。

おまけ:おすすめ問題

TypeScriptのトラックから、解いてみて面白かった「難易度:中」の問題をご紹介します。

Rectangles
与えられた図形の中に、四角形が何個あるか数える課題です。

Two Bukets
二つの決められたサイズのバケツを使って、決められた量の水を測り分ける方法を導きます。

Alphametics
覆面算(SEND + MORE = MONEYなど)のソルバーを作る課題です。

OCR Numbers
アスキーアートで作られた数字を読み取る課題です。

Wordy
”What is 3 plus 2 multiplied by 3?”のような計算文を解釈して、答えを数値で返す問題です

ファブリカコミュニケーションズで働いてみませんか?

あったらいいな、をカタチに。人々を幸せにする革新的なサービスを、私たちと一緒に創っていくメンバーを募集しています。

ファブリカコミュニケーションズの社員は「全員がクリエイター」。アイデアの発信に社歴や部署の垣根はありません。

“自分から発信できる人に、どんどんチャンスが与えられる“そんな環境で活躍してみませんか?ご興味のある方は、以下の採用ページをご覧ください。

◎ 新卒採用の方はこちら
◎ キャリア採用の方はこちら

この記事を書いた人

大西 秀典
プロダクト開発本部 IT戦略統括部長兼CDO
大西 秀典

おすすめの記事