mosya<TC>でTypeScript型力を鍛えよう!
Type Challengesを活用した実践的学習サービス

目次
TypeScriptの型システム
TypeScriptを使って開発をされている方なら、型の重要性を実感されているのではないでしょうか。TypeScriptの型システムは、コードの品質を保ち、バグを未然に防ぐ強力な味方です。
しかし、TypeScriptの型システムは奥が深く、特に型レベルプログラミングは一筋縄ではいきません。「型の書き方は分かるけど、複雑な型の設計になると自信がない…」という声をよく耳にします。
そんな中で注目したいのが、今回ご紹介する「mosya<TC>」です。これは、TypeScriptの型力を楽しく効率的に鍛えられるオンラインサービス。GitHubで人気の「Type Challenges」という型問題集に、ブラウザ上で手軽に挑戦できます。
私も実際にmosya<TC>を使って学習していますが、問題を解くたびに「へぇ、こんな書き方があったのか!」と新しい発見があって、型レベルプログラミングの面白さにどんどんハマっています。
それでは、TypeScriptの型力アップを目指して、一緒にmosya<TC>の世界を探検してみましょう!
Type Challengesとは?
mosya<TC>の紹介をする前に、まずType Challengesについて説明しなければなりません。
Type Challengesとmosya<TC>は別のサービスで、Type ChallengesがTypeScriptの型問題集(GitHub発)であるのに対し、mosya<TC>はそのType Challengesをブラウザ上で学べるようにした日本発の学習サービスです。
さらに言えば、mosyaという学習プラットフォーム上でType Challengesを学べるようにしたものがmosya<TC>という関係になります。
繰り返しになりますが、TypeScriptの型システムをマスターするための強い味方として注目を集めているのが、「Type Challenges」です。これは、GitHubで公開されている型問題集で、Githubからクローンすることで問題の閲覧や提出、結果の判定などを行うことができます。
現在で全188問の問題があり、初心者向けのEasyレベルでも相当な難易度があります。上級者でも頭を悩ませるような難問まで揃っています。
例えば、Easyレベルでの「Pick」型を自作する問題では、オブジェクトから特定のプロパティだけを選んで新しい型を作る方法を学べますし、「Readonly」型の問題では、オブジェクトのプロパティを読み取り専用にする方法を実践的に学ぶことができます。
また、「Tuple to Object」のような問題では、配列からオブジェクトを生成する型を作成する練習ができ、より実践的なTypeScriptの型操作を身につけることができます。
普段の業務における型理解よりも一歩踏み込みたいときに、このType Challenges(またはmosya<TC>)が役に立つことでしょう。

mosya<TC>とは?
一方のmosya<TC>は、Type Challengesの問題をブラウザ上で手軽に解くことができるオンラインサービスです。「型力」を鍛えたい!という方にぴったりの学習環境を提供しています。
最大の特徴は、環境構築が一切不要なことです。ブラウザを開いてサイトにアクセスするだけで、すぐに問題に取り組めます。TypeScriptの開発環境を整えるのに時間をかけることなく、学習に集中できるのは大きなメリットですね。
問題は初級・中級・上級とレベル分けされており、そのあたりはType Challengesと同じです。
それに加えて使いやすいUIがあり、ヒントや答えの表示、詳しい解説などもついており、なぜその解答が正しいのか、どういった考え方で解くべきなのかがよく分かります。また、提出した解答は履歴として残るため、後から復習することもできます。さらに、TwitterなどのSNSで解答をシェアする機能も備わっており、学習のモチベーション維持にも一役買っています。
このサービスは、ウェブエンジニアのGodai Hori氏によって開発されました。氏自身もType Challengesで学習した経験から、より多くの人が手軽に型の学習に取り組めるようにと考案されたそうです。

mosya<TC>の使い方
TypeScriptの型力を鍛えるサービス「mosya<TC>」の具体的な使い方をご紹介します。
まずはブラウザで「mosya<TC>」と検索するか、直接URLを入力してサイトにアクセスしましょう。トップページでは、初級・中級・上級と3つの難易度に分かれた問題が表示されています。初級と言いながらも実際のところは非常に難易度が高いです。
よくあるプログラミング学習サービスの難易度と考えると手も足も出ないので覚悟したほうがよいです(笑)
問題を選択すると、画面が2つに分割された状態で表示されます。左側には問題文と期待される型の動作が示されており、右側がコードを入力するエディタとなっています。エディタ上部には、問題の制約条件やヒントが表示されることもあります。
エディタでは、TypeScriptの型定義を記述していきます。入力中は自動でコードが保存され、リアルタイムで型チェックが行われるので、すぐに間違いに気付くことができます。行き詰まったときは、画面右上の「リセット」ボタンで初期状態に戻すことも可能です。
解答ができたら、画面右下の「これで提出する!」ボタンをクリックします。数秒後に採点結果がポップアップで表示され、正解なら次の問題へのリンクが表示されます。不正解の場合は、エラーメッセージを参考に修正を重ねていきましょう。
また、mosya<TC>では受講履歴が自動で保存されるので、過去に解いた問題や途中で断念した問題を簡単に確認できます。特に印象に残った解答は、Twitterでシェアすることもできます。シェア機能を使えば、他の学習者との交流も生まれやすくなりますよ。
このように、mosya<TC>は環境構築の手間なく、ブラウザだけでTypeScriptの型について学べる便利なサービスです。実際の開発でもよく使う型パターンが学べるので、日々の業務にも直結する学習ができます。ぜひ、空き時間を見つけて少しずつチャレンジしてみてください。
