初心者向けのおすすめコーディングチャレンジ:簡単なものから難しいものまで、コーディング練習に最適
誰も教えてくれないことですが、1ヶ月間チュートリアル動画を夢中で見て、どの動画にもうなずいていられたとしても、いざ空白のファイルを開いてみると、何を入力すればいいのか全く分からなくなることがあります。私も経験済みです。プログラミングを学ぶ人のほとんどが経験することでしょう。
解決策は退屈だが効果的だ。小さな問題を自分で、最初は下手でも構わないから解いてみよう。このガイドは2部構成になっている。前半は、初心者向けに厳選した最高のコーディング課題(10個、難易度はおおよそ易しいものから難しいものまで)を紹介する。後半では、私が紹介した課題をやり終えた後に、さらに何千もの課題が見つかるサイトを紹介する。
どのプログラミング言語でも構いません。私の例ではPythonと少しだけJavaScriptを使っていますが、これは多くの人が最初に学ぶ言語だからです。可能であれば順番に進めてください。それぞれの問題に新しい概念が少しずつ含まれています。
コーディングチャレンジが真のコーディングスキルを育成する理由
チャレンジと呼べるものとは何か?答えが明白な、ごく小さなもの。「単語を一つ選び、逆から言ってみろ」「ここに数字のリストがあるが、どれが一番大きいか?」といった具合だ。何かをインストールしたり、フレームワークを選んだりする必要はない。せいぜい10行程度の文章を書くだけだ。
チュートリアルを見るということは、他人の思考プロセスを追うことだ。コーディング課題はそれを逆転させる。それは、ある意味で居心地の悪いものだが、有益な経験となる。推測して、エラーが出て、エラーをじっくり見て、また挑戦する。それを数週間続けると、いつの間にか物事が簡単になっていく。
- 構文の流暢さ。もう5回もforループの書き方をGoogleで検索する必要はありません。
- 問題解決能力。キーボードに触れる前に、曖昧なタスクを段階的に分解し始める。
- 論理的思考。空のリスト、負の整数、一文字の単語。あなたはそれらを予測し始める。
- デバッグ中。赤いエラーメッセージが侮辱のように感じられなくなった。
- 自信。問題を解決していくことは、あなたが自分でプログラムを書けるという証拠です。
以前、プログラミングには80/20の法則があると言われたことがありますが、初心者の問題に関してはかなり正確です。ほとんどの問題は、ループ、if/else文、文字列の操作、辞書内の要素数のカウント、配列の走査という5つの基本的な動作に依存しています。これらの動作を習得すれば、多くの「新しい」問題は、実は古い問題が別の形で現れたものだと気づくでしょう。

初心者が最初に挑戦すべき、簡単なコーディング課題10選
これらはどれもオリジナルではありませんが、それが重要な点です。ほとんどすべての初心者向けコースに登場するのは、それらが効果的だからです。最初の5つはループ、条件分岐、そして少しの文字列またはリストの処理だけで済みますが、最後の5つは何かを入力する前にどのデータ構造を使うべきかを考える必要があります。いずれにせよ、たとえ無意味に思えても、少なくとも20分間はGoogle検索をしないように心がけてください。
チャレンジ1:フィズバズ
課題は1から100までの数字を表示することですが、3の倍数はすべて「Fizz」、5の倍数はすべて「Buzz」と表示され、両方の倍数である数字は「FizzBuzz」と表示されます。
あまりにも単純すぎて、侮辱的だと感じたのを覚えています。しかし、実際はそれほど単純ではなく、だからこそ面接官は長い間それを好んでいたのです。コーディングについてたくさん読んだものの、実際に書いた経験がほとんどない人は、チェックの順番でつまずくことが多いです。私のPython版は次のようになります。
python for n in range(1, 101): if n % 15 == 0: print("FizzBuzz") elif n % 3 == 0: print("Fizz") elif n % 5 == 0: print("Buzz") else: print(n)
自分のコードがうまく動作したら、15%の行を一番下までドラッグして実行し、何体のフィズバズが生き残るかを確認してください。ネタバレ:生き残るフィズバズは何体もいません。
チャレンジ2:文字列を反転させる
「hello」を入力すると、「olleh」が出てくる。
ほぼすべての言語にショートカットがあり、Python の s[::-1] や JavaScript の split("").reverse().join("") などです。動作を確認するために一度書いてみても問題ありません。その後は正直なところ削除して、ループを使って一度に 1 文字ずつ追加する退屈なバージョンで済ませます。ここで、ほとんどの言語では文字列をその場で変更できないことに気づきますが、ここでそれを学ばなければ、後々多くの人が混乱することになります。
チャレンジ3:回文チェッカー
回文とは、「racecar」や「noon」のように、どちらの方向から読んでも同じになる単語のことです。したがって、あなたの関数は、これらの単語に対しては「はい」と答え、「hello」に対しては「いいえ」と答える必要があります。
それがうまくいったら、今度は「A man, a plan, a canal: Panama」という文字列を入力して、コーディングスキルをさらに向上させてみましょう。この文字列は、小文字に変換し、スペースと句読点を削除した後にのみ合格します。前回の課題で使用した文字列反転コードを流用できるので、気持ちよく取り組めます。
課題4:フィボナッチ数列
おそらく、0、1、1、2、3、5、8、13という数列を見たことがあるでしょう。この数列では、各数字はその前の2つの数字の合計になっています。あなたの関数は、この数列の最初のn個を返す必要があります。
変数2つとループがあれば十分です。面白さは、関数が自身を呼び出し、n=35を要求するように再帰を使って書き直すところから始まります。ほとんどのノートパソコンではしばらく待つことになりますが、その理由を突き止めることは、動的計画法への穏やかな入門となります。「ああ、そういうことか」と腑に落ちる、そんな小さな発見が記憶に残るでしょう。
チャレンジ5:配列を回転させる
配列と数値 k を用意し、各要素を k 個ずつ右に移動させ、末尾の要素は先頭に回り込むようにします。[1, 2, 3, 4, 5] と k = 2 の場合、最終的に [4, 5, 1, 2, 3] になります。
kがリストよりも大きい場合、最初の試みはほとんどの場合失敗します。5つの項目を7ずつ回転させるというのは、実際には2ずつ回転させるだけであり、一度気づけば明らかですが、それまでは気づきません。
もしこの5つをそれほど苦労せずにクリアできたなら、素晴らしい。次の課題はもう少し難易度が高い。
チャレンジ6:配列内の最大の整数を見つける
max() 関数が使えるなら最大値を見つけるのは簡単ですが、ここでは使えません。代わりにループを使って最大値を見つけ、リストを二度走査することなく二番目に大きい値も見つけましょう。これで二つの値を管理することになるので、どちらを先に更新するか注意が必要です。
重複データや負の数は、多くの初期のソリューションがこれらの問題でひっそりと失敗するため、テスト対象として適しています。
チャレンジ7:文中の母音を数える
母音を数えるのはウォーミングアップです。実際の練習は、各母音を個別に数え、{"a": 3, "e": 5, "i": 1, "o": 2, "u": 0} のような形式で返すことです。
多くの初心者にとって、この瞬間こそが辞書(JavaScriptではオブジェクト)の意味をようやく理解できる時であり、それは重要なことだ。なぜなら、おそらく今後1年間で最も頼りにするデータ構造になるからだ。
チャレンジ8:アナグラムチェッカー
アナグラムは、「listen」と「silent」のように、まったく同じ文字を異なる順序で組み合わせたものです。したがって、2つの文字列がアナグラムに該当するかどうかを判定する関数を作成することになります。
私が知っている合理的な方法は2つあります。1つは両方の文字列をソートして結果を比較する方法、もう1つは各文字の出現回数を数えて比較する方法です。両方を書いてみて、どちらが処理量が少ないかを考えるのは、効率性について考える第一歩と言えるでしょう。
チャレンジ9:ツーサム
リストが [2, 7, 11, 15] で、目標値が 9 の場合、合計が目標値になる 2 つの数値の位置を返します。この場合、目標値は [0, 1] です。
ほとんどの人は、すべてのペアを試す2つのネストされたループから始めますが、短いリストであれば問題ありませんが、すぐに遅くなります。より高速な方法は、既に見た数値を辞書に保持しておき、瞬時に検索できるようにすることです。LeetCodeがこれを最初に掲載したのは偶然ではなく、適切なデータ構造がいかに重要であるかを明確に示しているからです。
チャレンジ10:数字当てゲーム
ここでは、コンピューターが1から100までの秘密の数字を選び、あなたはそれを推測し続け、正解するまで「高すぎる」または「低すぎる」というメッセージと、正解するまでかかった試行回数が表示されます。
これは単純なプログラミングパズルというよりは、ユーザー入力、whileループ、乱数を使った小さなアプリといった方が近いでしょう。誰かが数字の代わりに「バナナ」と入力することもあるので、不正な入力への対処も必要になります。そして、他のものとは違って、これは実際に友達に渡して遊ばせることができるゲームです。
オンラインコーディングチャレンジに最適なウェブサイト
私の10個の問題がなくなったら、自動チェック機能付きの無制限供給が欲しくなるでしょう。オンラインコーディングチャレンジのサイトはどれもそういう機能を備えています。ただ、それぞれ使い勝手が大きく違うだけです。
| プラットフォーム | 最適 | 形式 | 料金 |
|---|---|---|---|
| エダビット | 全くの初心者 | ブラウザ上で楽しめる、手軽に取り組めるコーディングチャレンジ | 無料プラン |
| コードウォーズ | ゲーム化された実践 | コミュニティによる解答付きのランキング「カタ」 | 無料 |
| 運動主義 | 良い習慣を身につける | 言語学習コース(オプションで人間のメンター付き) | 無料 |
| freeCodeCamp | 体系的な学習 | 演習と資格認定が組み込まれたカリキュラム | 無料 |
| ハッカーランク | スキル習得コースと就職準備 | 難易度ラベル付きのトピック別問題 | 学習者向け無料 |
| LeetCode | 面接準備 | アルゴリズム問題(難易度:易/中/難) | 無料プラン |
| コードシェフ | 競技会に向けて | 練習コースと定期的な競技会 | 無料プラン |
| プロジェクト・オイラー | 数学好き | 数学的な要素が強いパズル、解答のみ提出 | 無料 |
| コードの到来 | 季節の楽しみ | 毎年12月に配信される、ストーリー性のある日替わりパズル | 無料 |
エダビット
もし友達にどこから始めたらいいか聞かれたら、Edabitを勧めるだろう。問題は短く、すべてブラウザ上で実行でき、経験値(XP)も貯まる。Python、JavaScript、Java、C++など、いくつかの言語が網羅されており、「非常に簡単」というラベルは文字通り非常に簡単だ。
コードウォーズ
Codewarsでは、問題を「型」(武道用語で訓練を意味する)と呼んでいます。難易度は8級(最も簡単)から1級まであります。このゲームの醍醐味は、解答を提出した後にこそあります。他のユーザーの解答を見ることができ、自分のぎこちない10行のコードを、誰かの洗練された2行のコードと並べてみることで、ほとんどのチュートリアルよりも多くのことを学ぶことができます。
運動主義
Exercismは非営利団体として運営されており、完全に無料です。80以上の言語に対応したコースがあり、希望すればボランティアのメンターがコードを見てくれます。ブラウザ上で学習することも、自分のマシンにダウンロードして学習することも可能です。最終的には、Visual Studio Codeとターミナルに慣れるためにも、ダウンロードして学習することをお勧めします。
freeCodeCamp
厳密にはチャレンジサイトではありません。カリキュラム全体ですが、何百もの小さなコーディング演習で構成されているため、チャレンジサイトという位置づけになります。体系的な学習を好む方には最適です。JavaScript、Python、レスポンシブWebデザインなど、各コースの最後には認定プロジェクトが用意されています。
ハッカーランク
HackerRankは問題をスキルレベル(Python、SQL、データ構造、アルゴリズム)ごとに分類し、それぞれの難易度と解決者数を表示します。多くの企業が候補者の選考にHackerRankを利用しています。今のうちにインターフェースに慣れておけば、後々の緊張を和らげることができます。
LeetCode
ここは面接対策の場です。問題には「簡単」「中級」「難しい」の3段階の難易度が付けられていますが、「簡単」でも基礎知識は身についていることを前提としています。プログラミングの課題は、出発点ではなく、目指すべき目標地点として捉えるべきでしょう。10問をこなせるようになったら、また挑戦してみてください。
コードシェフ
CodeChefは競技プログラミングサイトとして発展してきました。現在では、通常のコンテストに加えて初心者向けの練習コースも用意されているため、時間制限のあるコンテストに興味があるなら、気軽に試してみるのに最適な場所です。
プロジェクト・オイラー
数学の問題を解くにはコードが必要です。サイトにはエディタはありません。好きな場所にプログラムを書いて、最終的な数値を入力するだけです。数学好きには大人気ですが、それ以外の人はあまり興味を示しません。
コードの到来
毎年12月になると、1日2部構成のパズルが、ちょっとおかしなストーリーで繋がって登場します。最近、開催期間が25日から12日に短縮され、世界ランキングも廃止されたため、現在は主に友人や同僚とのプライベートランキングが主流となっています。過去のパズルは一年中公開されており、アーカイブは素晴らしい練習用ライブラリとして活用できます。
また、課題と面接対策コースを組み合わせたCoderbyteや、経験豊富な開発者向けのTopcoderについても耳にするでしょう。
一つ注意点があります。古いリストの多くは、今でもGoogle Code JamとKick Startを紹介しています。Googleはどちらも2023年にサービスを終了しており、残っているのは問題のアーカイブだけです。

燃え尽き症候群にならずにコーディング課題に取り組む方法
10個のサイトをブックマークしたからといって、それだけで上達するわけではありません。習慣化こそが重要なのです。私なら大体こんなことをします。
- プログラミング言語は一つに絞り、それに集中しましょう。Pythonは英語に近い読みやすさから、よく選ばれます。ウェブサイトを構築したいなら、JavaScriptが適しています。
- 本格的なコードエディタをセットアップしましょう。最初の1週間はブラウザエディタでも構いませんが、Visual Studio Codeを早めにインストールすることで、ファイルの実行方法、ターミナルでのエラーの確認方法、デバッガの使い方などを習得できます。
- 1日に1~3問を解きましょう。毎日少しずつコーディング練習をする方が、日曜日に6時間詰め込むよりも効果的です。練習の合間にパターンが身につき、小さな目標なら飛ばすことも難しくなります。
- 解き終わったら、他の解答も読んでみましょう。CodewarsやExercismなどのサイトで、他の解答を2、3個見てみてください。ベストプラクティスや、真似したくなるような本当に賢いテクニックが見つかるはずです。
- 以前解いた問題をもう一度見てみましょう。1週間後、記憶を頼りに1問解いてみてください。もし解けなければ、理解したのではなく、ただ暗記しただけです。
- 次は小規模なプロジェクトに挑戦してみましょう。30 ~50個程度の課題をこなしたら、何かを作ってみてください。例えば、ToDoリスト、無料APIを使った天気予報アプリ、テキストアドベンチャーなどです。そうすることで、個々のスキルが連携して機能し始めるのです。
コーディング課題で行き詰まった時の対処法
行き詰まることは避けられません。ベテラン開発者だって昼食前に行き詰まることがあります。彼らには行き詰まりを打開するためのルーティンがあるので、それを真似してみましょう。
- 問題を自分の言葉で言い換えてみましょう。 「これは解けない」と思う場面の多くは、実は「読み間違えていた」だけなのです。
- 手作業で例題を解いてみましょう。入力データは少量で構いません。ペンと紙を用意して、各手順を書き留めてください。おめでとうございます、それがあなたのアルゴリズムです。
- まず擬似コードを書く。 「それぞれの数値について、それが現在の最大値より大きい場合は、その数値を保持する。」平易な英語の方が、コードよりも修正しやすい。
- すべてを出力してください。ほとんどのバグは、想定していた値とは異なる値を保持する変数が原因です。出力して調べてみましょう。
- 声に出して説明してみましょう。コードを一行ずつ、人やアヒルのおもちゃに向かって説明してみてください。ソフトウェアのバグは、しばしば文章の途中で現れるものです。
- ヒントは段階的に活用しましょう。多くのプラットフォームでは、完全な解答の前にヒントが表示されます。ヒントを参考に、もう一度挑戦してみてください。
何をするにしても、解答をコピーして、それが通過するのを見届けて次に進むのはやめてください。私も以前そうしていましたが、全くうまくいきませんでした。もし解答を読んだとしても、タブを閉じて1時間ほど待ってから、自分で問題を再構築してください。
ブロックチェーン初心者向け、暗号通貨をテーマにしたコーディングチャレンジ
暗号通貨決済やブロックチェーンが、そもそもあなたがプログラミングを学びたいと思ったきっかけだったのかもしれません。それなら、その分野の問題を練習してみましょう。基本的な概念(文字列、整数、API)は同じですが、実際の技術的な作業により近いタスクに取り組むことができます。これらの問題に取り組むのに、コンセンサスアルゴリズムを理解する必要はありません。
- リアルタイムのコイン価格を取得します。無料の公開暗号通貨価格APIにアクセスし、現在のビットコイン価格を表示し、1分ごとに更新します。HTTPリクエストとJSONで始めましょう。
- ウォレットアドレスの形式を検証します。文字列が妥当なアドレスのように見えるか(長さ、接頭辞、許可された文字のみの使用など)を確認します。文字列の扱い方を練習するのに最適なだけでなく、正規表現への入門としても役立ちます。
- 単位変換ツールを作成しましょう。サトシからBTC(1 BTC = 1億サトシ)、ウェイからETH(1 ETH = 10¹⁸ウェイ)への変換が可能です。浮動小数点数と通貨がなぜ相性が悪いのか、そして開発者が金額を整数で扱う理由がすぐに理解できるでしょう。
- 文字列をSHA-256でハッシュ化します。標準ライブラリを使って文章をハッシュ化し、一文字だけ変更して再度ハッシュ化します。すると、全く異なる出力が得られます。この特性こそが、ブロックチェーンを支える重要な要素なのです。
- シンプルなチェックアウトページを作成します。 「暗号通貨で支払う」ボタンを備えた商品ページを作成し、決済ゲートウェイAPIを介してテスト請求書を作成します。
最後の要素が、フォーム、API呼び出し、エラー処理、そして実際のユーザーへの結果表示といった、残りの要素を一つにまとめます。Plisioのようなゲートウェイは、練習用ストアに組み込めるAPIとドキュメントを公開しており、初心者向けの演習を実際のeコマース統合と非常によく似たものにすることができます。
今日からコーディングの練習を始めましょう。まずは1つの問題から始めてみてください。
初心者時代に私が行き詰まりを打開できたきっかけを振り返ってみると、伝説的な難問を解いたわけではありませんでした。初心者にとって最高のコーディング課題は、実は私が夜遅く、ノートパソコンの横で冷たいお茶を飲みながら、実際に解き終えたような、地味で小さな問題だったのです。
今夜はエディタを開いて、FizzBuzzを動かしてみましょう。コードは多少見苦しくても構いません。楽しいうちにリストに沿って進めていき、楽しくなくなったら、表の中で一番使いやすそうなサイトに切り替えてください。習慣化は、飛ばしてしまうと少しばかばかしく感じるくらい小さなものにしましょう。1か月後には、これらのいくつかが退屈に感じるようになるでしょう。そして、その退屈さこそが、真のコーディングスキルを身につけた時の感覚なのです。