静的サイトジェネレータが話題だったので、去年からGatsby.jsを学んでたのですが、
ただ単にチュートリアルやるだけではつまらないので、プロジェクト型学習でやってみることにしました。
前々から私は、プログラミングはテスト勉強的なやり方では身につかないと思っていて、
いきなりプロトタイププロジェクトで作りながら学ぶのが一番だと思ってましたが、
今回やってみて問題点も色々わかりました。
プロジェクト型学習とは
プロジェクト型学習とは、教科書を読んで練習問題を解く学校型の学習ではなく、
実際にソフトウェアを開発しながら学習していく実践型の学習方法です。
今回は、まずJavascriptの知識をアップデートして、Reactはプログラムを作りながら学ぶ戦略を取りました。
Gatsby.js学習の経緯
まずはGatsby.jsの基本的なことをサイトのドキュメントで学んで、いきなりコードを書きはじめました。
最初はローカルPCで動かして、AWS関連のコードを書き出したころに、AWS AmplifyにGitHub経由でプッシュする環境に移しました。
ただ、実際にやってみると結構タフで、自力で不具合を特定して修正するのは何回も心が折れかけました。
そんな悪戦苦闘の中での学習だったから、理解も進んだのかなと思います。
とりあえず、当初考えていた基本機能が正常に機能することを確認したので、フェーズの区切りとしました。
プロジェクト学習の良い点
まずは、プロジェクト型学習の良い点 としては、
コードの意味を理解することができる
テスト勉強では、テストで点数を取ることが目的なので丸暗記になりがちですが、
プロジェクト学習では、自分の作りたいものがはっきりしているので、
コードがどういう意味なのかを理解しながら学ぶことができます。
ただ、コードが入り組んでくると訳が分からなくなるので 、
コードを機能ごとに分割して依存関係をできるだけなくすような工夫が必要でした。
Reactは、自然とそういう設計を強制するので、いいフレームワークだと思います。より実践的なスキルが身に付く
チュートリアルにあるサンプルは、事前に動くことが確認されているのでエラーになることはありませんが、
プロジェクトのコードは、自分で原因を突き止めてデバッグしていく必要があります。
いきなりそれは敷居が高いと思うかもしれませんが、現実のプロジェクトでは当たり前に起こることなので、
最初から体験しておいたほうがいいでしょう。やってて楽しいので継続しやすい
チュートリアルのサンプルを動かしても感動はありませんが、
自分が考えたプロトタイプが動くと「動いたー!」という喜びがあります。
そういう体験をすると、長く続けることができますし、学ぶ楽しさも感じることができます。
プロジェクト学習の悪い点
行き当たりばったりな学習になりがち
プロジェクト型学習では、教科書のように基礎から応用に網羅的にやるのではなく
実装に必要な知識から学んでいきますので、どうしてもあちこちつまみ食いみたいな状態になります。
プログラムを動かすためには、設定手順やどのライブラリ 使うかといった周辺の知識も必要になります。
そのため、なかなか本題に入っていけないという場面も結構ありました。基礎ができてないので、問題特定に時間がかかる
Gatsbyは、JavascriptとReactを知っておく必要がありますが、今回のプロジェクトではReactの知識がなかったために
不具合の原因特定に時間がかかったことが何回かありました。
具体的には、Javascriptの非同期処理とReactのHookについてよく分かってなかったのでなかなか不具合特定ができませんでした。
エラーのたびに勉強すればいいかと思っていましたが、基本的なことは事前に学んでおいた方が効率はいいですね。うまく動作しないことが続くとモチベーションを維持するのが難しい
なぜうまく動かないかわからない状況が続くと、モチベーションも下がってしまいます。
そんな時、私は違う作業をしたり、動画をみて気晴らししたりして気分を変えるようにしました。
ただ、できるだけそういう状況にならないよう学習プランをたてたほうがベターでしょうね。
今回のケース特有の問題
あと、Gatsby.js特有の問題とAWS絡みの問題もありました。
JavascriptとReactを前提知識として求められる
再度言いますが、Gatsby.jsはJavascriptとReactによって作られています。
なので、JavascriptとReactの基礎は事前に学んでおくべきです。
ただ、フロントエンド技術は一番変化の激しいので学びにくいジャンルでもあります。
特に、Reactの変化は、ついていくのが大変ですね。
また、他のIT技術も、複数の技術の基本知識が必須となっていることがありますので、
事前に学ぶべきことを知ることは、新しい技術を学ぶ上で重要なことです。環境構築が大変
今回、AWS上に実行環境を作りましたが、これがかなり面倒臭かったです。
認証機能をAWS Cognitoを使ってやったので、テストもローカル環境でできなかったのが失敗でした。
認証などAWSに依存する部分は切り離してやるべきでした。 ただ、後で機能追加する場合は、それも難しいのでちゃんとテスト環境を作るべきでしょうね。
今回は、時間の関係でそこまでできませんでした。
こういうのも、やってみないとわからないものですね。
このように、プロジェクト型学習は問題はありますが、プログラミングの学習方法としては正しい方向だと思います。
では、どう実行していけばいいでしょうか?
前提となる基礎知識を事前に一通り学ぶ
いきなりプロトタイプを作り出すのではなく、とりあえず基礎知識は一通り学んだ方がいいです。
今回のケースでは、Reactの知識のアップデートをしなかったのがよくなかったです。
ただ、暗記する必要はなく、一通り流して後でそういうのもあったな程度でいいと思います。
別に、テストで正解する必要がないのですから、うる覚えなら後でまた調べればいいだけです。最初は、環境依存部分をできるだけ排除する
ローカル環境で、ビルド、テストできる環境を作ります。
データベースなど、ものによってはクラウド上で実行したほうがいいものもあるでしょうが、 極力ローカルで開発できるようにしたほうがいいと思います。できればアドバイスしてくれるメンターがいるのが理想
これはなかな難しいでしょうが、聞ける人がいたら方向修正できますし、そのほうが効率はいいでしょう。
ただ、メンターがいる人なんてレアケースなので、独学でやる場合はネットで調べながら試行錯誤するしかないでしょう。
ネット上の情報は英語で書かれていることが多いので、英語はいやがらずどんどん読んでいきましょう。
今は機械翻訳のサービスがあるので簡単に日本語にできますが、IT技術の英語はちょっと頑張れば読めますので、
この際英語も読めるようになりましょう。
結論
プロジェクト型学習は、難易度は少し高いですが、成果物ができますので、オープンソースで公開したり、
サービスで使ったりできます。
とにかく、失敗を恐れずプロジェクト型学習をどんどんやっていったほうがいいですね。