この記事はkdnaktの1人 Advent Calendar 2020の1日目の記事です。
KotlinでHTTPサーバーを作っていきます。
[私はなぜここにいるのか]
初日なので、なぜこのプロジェクトに取り組むのかについて書いておきます。
▼Kotlinで何かを作りたい
私はこれまで9年ほどサーバーサイドをJavaで、フロントエンドをJavaScriptで実装してきました。途中、PythonやGoなどに手を出したりもしましたが、基本的にサーバーサイドを実装するときはJavaを使うことが多かったです。
Javaといっても、最新のLTSバージョンを常に利用できるかというとそういう訳にもいかず、さまざまな事情によりJava 8以下を相手にすることがほとんどでした。そもそも私がプログラミングを始めた2012年当時の最新のJavaのバージョンは7で、最初のバグ修正を任されたソフトウェアはJava 1.4で実装されていました。
そんな状態からのスタートだったので、新しいバージョンのJavaを学んでいくに連れて、「拡張for文すげー」「try-with-resources文便利!」「Stream APIめっちゃ楽」といった具合に、モダンになっていくJavaにより魅力を感じるようになりましたが、NullPointerException
だけは好きになれませんでした。
そうした中、2017年頃にKotlinの存在とNullPointerException
のリスクが低い言語であるという性質を知り、いつか学ぼうと思っていました。結局、いつかやろうと言っていつまでもやらないのが私という人間で、そこから2年ほどかかって2020年の初めごろからようやくKotlinを学び始めました。
Kotlinを学び始めたきっかけについては、以下の記事にまとめてあります。
そうして会社の同僚と始めた勉強会も先日40回を超え、勉強会発足当初に諦めたKotlin Hands-Onも無事1つ目のハンズオン・エクササイズをクリアすることができました。
約1年間通してKotlinを学んできたものの、週1回30分程度、基礎文法と演習問題、コピペで終わるハンズオン・エクササイズを終わらせただけ。いざ何かを作ろうとなったときにはたして本当にKotlinを(上手く)使えるだろうか、という不安がありました。
この不安を払拭するには「Kotlinで何か作ってみるしかない」と思ったのがこのプロジェクトに取り組むきっかけでした。
▼HTTPの仕組みを理解したい
Kotlinで何かを作りたい。その「何か」をHTTPサーバーにした理由は、HTTPS通信に関するチケットをいくつかこなしてきた中で、もっと基礎的な部分をきちんと理解したいと思ったことが大きいです。
- HTTP/2とかHTTP/3って耳にするけどHTTP/1.1ってそもそもどういうもの?
- HTTPレスポンスのステータスってどういうのがあったっけ?
- TLSってどういうプロトコル?
- セキュリティ関連のHTTPヘッダーってどう扱われてるんだろう?
などなど、わからないことは山ほど。もちろん、アドベントカレンダーの期間でHTTPの仕組みすべてを実装できるとは考えていませんが、いろいろ試して理解を深めたいと思います。
また、HTTPに限らず、実装を進めていく中で何かしら学べることがあればいいな、と考えています。
[夜も眠れなくなるような問題]
とまあ「やっていくぞ!」と宣言をしてはみたものの、正直な話まだまったく実装できていないので、どうなることやら……。実装しながらアドベントカレンダーも書いていかなければいけないので、本当に夜も眠れなくなるかもしれません*1。
[まとめ]
インセプションデッキ風に、プロジェクトに取り組む理由をまとめました。
- Kotlinで何か作りたい
- HTTPの仕組みを理解したい
ということで、「Kotlinを実戦投入してHTTPサーバーを実装する」というテーマで、1人アドベントカレンダーに取り組んでいきます!
*1:仕事に支障のない範囲でやっていきます。