s4naです。
今回はKageuchiというWebサーバーのRuby gemをリリースした話を書いていきます。
作ろうと思ったきっかけ
2020/8/3にKaigi on Railsというイベントが行われました。
イベントの中でAaron Pattersonさんが行っていた発表は、「0から小さなWebサーバーを作り、それに少しづつ機能を追加していってRuby on Railsに近づけることで、Ruby on RailsでViewがレンダリングされるまでを解説する」といった内容のものでした。
この発表を見てビビッ⚡️ときました。
これまで私はPumaサーバーの上にRuby on RailsやGemという壮大で不透明な土台の上でコードを書いてきました。
ですがAaronさんの発表は、発表を聞いて、学んで、自分でコードを書いてみることで、もしかしたらこの壮大で不透明な土台の理解に一歩近づけるのでは!?という可能性を感じたからです。
私は発表を聞いてる最中、すぐにリポジトリを作って書き始めることにしました。
・・・ですが、なかなか進捗が出ませんでした。
原因は自分でもわかっていて、一言でいうと「理想が高すぎたから」だと思っています。
目標がふわっとしていたところに加えて、作っているうちに「あれもやりたい」「これもやりたい」と思ってやりたいことがパンクしてしまって、それが原因でゴールがどんどん遠くなっていき、いつしか手を付けるのをやめてしまっていました。
時はすぎ2021/4/2(金)
そんなある時、ANDPADさんのイベントで、Gemを作った話を聞きました。
「便利なGemだな〜」とか「Gem作るのってかっこいいよな〜」と思う反面、
「そういえばGem作ったことがなかったな・・・」と思い今一度見つめ直すきっかけになりました。
ないなら作ろう!!Gemを作ろう!!
今回は前回の失敗を活かし「Gemをリリースする」というただ一つの目標を掲げました。
やりたいことがでてきたら、リリースしてからやろうという先送り戦略です。
ということで、最低限Web serverと呼べるような状態に持っていく以外、
リリースするにあたってその他やりたいことを全て諦めます。
※テストは大事なので書きました。
4/4(日) Kageuchi 0.1.0 リリース🎉🎉
ということで色々奮闘した結果、最小構成だったにも関わらず、
丸2日かかってリリースすることができました。
(途中何度も詰まり思っていたより長くかかりました。)
今できること
まずはじめにGemをインストールします。
$gem install kageuchi
インストールが終了したら、以下のコマンドを入力してください。これでサーバーが立ち上がりました。
$kageuchi
他のターミナルで以下のようなコマンドを送信してみると、レスポンスが返ってきます。
$curl localhost:3000
Hello. This is Kageuchi server
元のターミナルでは以下のように表示されているはずです。
$kageuchi {:VERB=>"GET", :PATH=>"/", :VERSION=>"HTTP/1.1", :HEDERS=> [["Host", "localhost:3000"], ["User-Agent", "curl/7.64.1"], ["Accept", "*/*"]]}
これからについて
見ていただいたらわかる通り、READMEも自動生成のままだし、使い方も書いてないし、Rackが動くようにもなっていません。
テストだけは大事なので書きましたが、それ以外はやりたいと思っていたことが何もできていません。
それでも、やろうとやる気になった4/2(金)から、リリースする4/4(日)まで全力でコードを書いたり動かしたりすることになりました。
でもそれは今の自分の精一杯なので、そういうものかなとも思えています。
そういうことを乗り越えることで、「Gemをリリースしたことがない人」から「Gemを1個した人」になれたので、まずはその第一歩を喜びたいと思います。😄
今後はやろうと思っていたことを一つ一つ積んでいくのか、それとも新しいことに挑戦するかはわかりませんが、ガシガシコードを書いていきたいです。
さいごに
Gem制作にあたって、Threadの使い方やGitHub Actionsのエラー対処の相談に乗っていただいたり、ブログ記事のフィードバックしてくださった ruby-jp, Sendagaya.rb, Fjord Boot Camp の皆様、本当にありがとうございました。