軽く自己紹介
私は、現在大学4年生で2019年の11月からWeb(HTML, CSSから)について勉強をはじめました。
そんな自分がこの一年(2019年11月~2020年12月)で、どのような技術を学んだのか、自分の備忘録も兼ねて紹介していきたいと思います。
それでは、早速紹介していきたいと思います。
HTML, CSS, JavaScript(学習期間2019年11月)
この3つは、わざわざいう必要も無いと思いましたが、一応書いておきます。
普段、Webアプリを作っていれば、この3つは必然的に学習すると思いますが、これらだけを学習したのは、1週間くらいしかやって無いです。
あとは、実際にWebアプリを作っていく中で学習していきました。
Ruby, Ruby on Rails(学習期間 2019年11~12月)
自分が1番最初に学習したフレームワークは、Web系では定番のRuby on Railsです。
これを使って、初めてのポートフォリオを作成しました。
このフレームワークを学んで、MVCの概念やRESTfulなどWeb技術の基礎的な考え方を身につけることができたので、初学者の方には、おすすめしたいです。
ただ、最初の頃はフレームワークの処理の手順が正しく追えず、大変でした...
Ruby on Railsは自分の初めて学習したフレームワークなので愛着があり、他の大学生の人たちで使える人が多いので、チーム開発やハッカソンをするときに、よく使います。
Heroku(学習期間 2019年12月)
自分の初めてのポートフォリオをネット上に公開するために使用しました。
簡単にWebアプリケーションを公開することができるので、初めてのデプロイには、とてもおすすめです。
ただ、難点としてアクセス数が一定時間無いと、サーバがシャットダウンするようで、上記で紹介したポートフォリオも最初のアクセスに時間がかかることがわかると思います。
Herokuは最初のポートフォリオをデプロイして以来、使用してなく、今後も使用しないと思います...
Django(学習期間 2019年12月~2020年1月)
次に学習したフレームワークは、Djangoです。
これは、自分の所属している研究室で使用するツールを作成するために、学習しました。
こちらのQiita記事に記載してるので、もし良ければ見てください。
このフレームワークは、MVTパターンという少し変わった概念のフレームワークですが、Railsを学習している方であれば、処理の手順は追いやすいかと思います。
実際に、私も2週間で研究室のツールを作れました。
DjangoはPythonのフレームワークということもあって、少ないコード数でアプリケーションを作ることができます。Pythonを使った経験がある方には、とてもおすすめできるフレームワークです。
Aamazon Web Service(EC2)(学習期間 2020年1月)
上記のDjangoのWebアプリをデプロイするために、使用しました。
Herokuとの違いは、SSH接続してデプロイをしないといけないことや、ミドルウェアの設定などの諸々の設定を手動で行わないといけない点です。
また、ネットワークについての知識も必要となるため、デプロイの難易度がHerokuとは段違いに難しいです。
しかし、メリットとしてアクセスがないときも起動しているため、初回のアクセスに時間がかかることはないのが強いと思います。
AWSのEC2は、インフラ系の知識(SSH接続、ネットワークなど)を学ぶことができるので、Webアプリケーションをある程度作れるようになった方のステップアップとして、良いと思います。
Vue.js(学習期間 2020年2~3月)
Rails, Djangoをやってきて、バックエンドをある程度把握することができたと思ったので、ここでVue.jsを学習しました。
また、アウトプットとして、Gurustagramと言うWebアプリを作成しました。
Vue.jsを学習した時は、正直JavaScriptの知識は全くなかったですが、問題なく学習することができました。HTML, CSSをある程度理解していれば、なんとなくできるようになると思います。ただ、API通信やVuexあたりはJavaScriptの知識が必須になるので、Vue.jsと同時並行してJavaScriptも学習しました。
Firebase(学習期間 2020年2~3月)
Vue.jsでWebアプリを作るときに、どうせならいつもと違う構成にしたいと思い、Firebaseを学習しました。
一時期、サーバーサイドエンジニア不要論が出た通り、これが使えるようになればフロントエンドフレームワークだけである程度のWebアプリは作れてしまいます。
ただ、アプリケーションの規模が大きくなるに連れて、データベース設計などで問題が生じてくると思うので、あくまで個人開発や小規模アプリに限定されると思います。
Firebaseは、ハッカソンなどの短期間でアプリを作るときに、とても使えるので持っておくと何かと便利な技術の1つだと思うので、学習におすすめです。
Node.js, Express.js(学習期間 2020年4~5月)
Vue.jsを学習して、フロントエンドとAPIサーバを分けてシステム設計をするのが、昨今の主流と言うことを知り、手軽にAPIサーバを作成できるフレームワークであるExpressを学習しました。
これまでRuby on RailsやDjangoのようなモノシリックなフレームワークばかり触っていたので、Expressを学習して、バックエンドの世界観がかなり変わりました。Rails, Django, Laravelしか触ったことない方は、ぜひ触ってみて欲しいと思います。
Amazon Web Service(ECS, RDS, S3, Lambda)(学習期間 2020年5月)
Docker(学習期間 2020年4~5月)
ExpressでAPIサーバを作成する際に、一緒にDockerを学習しました。
Dockerはめちゃめちゃ便利で、これを学習して以降Webアプリを開発する時は、必ずDockerを使って、環境構築を行っています。
デプロイもコンテナベースで行うことが多く、ECSなどもコンテナでのデプロイをすることができます。
Circle CI(学習期間 2020年4~5月)
Circle CIは自動デプロイを行うツールです。ただ、コンテナベースのデプロイしか支援してない?ので、Dockerなどのコンテナ仮想化ツールを扱えることが必須になります。
Circle CIは便利ではありましたが、最近はGithub Actionsを多用しているため出番はあまりないツールになってしまいました。
ただ、自動デプロイができると開発効率が格段に上がると思うので、ぜひおすすめです。
Nuxt.js(学習期間 2020年6月)
Nuxt.jsは、Vue RouterやVuexなどがデフォルトで入っているので、めちゃくちゃ便利です。
ただ、SSRの挙動をしっかり理解して制御するのは、難しいのでVue.jsを書く時とは、違う注意点があります。
Nuxt.jsはフロントエンドフレームワークの私のメインウェポンなので、とてもお気に入りです。
Rust(学習期間 2020年7月)
RustはC++の悪いところをカバーしたような言語で、C++を知っている人には、ぜひ触って欲しい言語です。C++の悪いところが、どんどん分かってくると思います。
また、所有権やライフサイクルなどと言った他の言語にはない概念が存在するので、純粋にコーディング能力も向上すると思います。
TypeScript(学習期間 2020年6~7月)
最近のフロントエンド開発には、TypeScriptが主流になっていると聞いて、学習しました。これを使えるようになると、生のJSは書けなくなるくらい型依存症になります。
ただ、Vue.jsとの相性がそこまで良くないので、Vue✖️TypeScriptで使用するときは、若干ストレスに感じる時があります。
Nest.js(学習期間 2020年6~7月)
Nest.jsは私が最も好きなフレームワークです。このフレームワークはDI(依存性の注入)に基づいた構成になっていて、めちゃくちゃ良いなと思ってます。
また、cliでディレクトリやファイルを作成することができる点やTypeScriptでしか書けないため、チーム開発に向いているフレームワークだと思ってます。
Graph QL(学習期間 2020年8月)
React(学習期間 2020年8月)
フロントエンド開発をVue✖️TypeScriptでやっていて、Reactの方がTypeScriptと相性が良いというのを聞いて、学習しました。
確かに、HTMLの部分で型が効くReactの方がTypeScriptと相性が良いし、storeとの相性も良くて、Vueから乗り換えるのもありかなと思いました。でも、Vue.jsは、v-ifやv-forなどがあったり、元々やっていたということもあって、しばらくはVue.jsで良いかなと思います。
自分の印象では、Reactはロジックが書きやすく、VueはHTML部分が書きやすいという印象です。
Go(学習期間 2020年9月)
Goは、流行っているからやってみようという乗りでやってみました。パッケージ管理の仕組みが素晴らしいという印象で、コードの書き味は、そこそこっていう感じです(個人の意見)。
Goでバックエンド開発をする時は、フレームワークにGin, ORMにGORMを使用しています。もし、他に良いのがあれば教えてください。
Next.js(学習期間 2020年11月)
今年、最後に学習したものは、Next.jsです。最近、Nuxt.js vs Next.jsみたいなものをよく見るので、自分自身の手で確かめたく学習しました。
自分的には、Nuxt.jsよりNext.jsの方がいろいろと進んでいるなという印象でした。特に、SSG(静的サイトジェネレーター)の機能がNext.jsの方が圧倒的に良いと感じたので、今後FirebaseやNetlifyにフロントエンドをデプロイするときは、使用したいなと思います。
まとめ
以上で、今年自分が学習した技術の紹介は終わりです。ここに書いたもの以外にも、Riot.js, Svelte, PHP(Laravel), Scala(Play Framework), Swift, Google Cloud Platform, Netlify, Github Actionsなど本当にいろいろなものを触りました。
今年は、1人で技術を探究することに専念しましたが、来年は、いろいろな人と関わりを持って、もっと成長できる1年にしていきたいと思います!