まさ@ブログ書き込み中

まさ@ブログ書き込み中

まさの旅、英語、プログラミング、プライベートについて、色々記録しています。

まさ、イライラしてたってよ【「Rubyって何それおいしいの」からSinatraでBasic認証までの奮闘記】

 

こんにちは、まさです。

 

昨日の僕は死んだような目をしていたでしょう。

昨日は夜8時に帰宅して今日の朝8時に起きるくらい疲れ切っていました。

 

皆目見当もつかないものと戦うのは疲れますね。

皆目見当もつかないものとはSinatraBasic認証のことです。

 

 

さぼさん:「SinatraBasic認証書いてみてよ」

 

これが全ての始まりでした。

 

ISUCONのための第一の課題書『プロになるためのWeb技術入門』を読み終えた僕は、この本の中で出てきた「セッションID」を利用したログイン機能を実装してみようとコードを書いていました。

 

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

 

 

しかし、上手くいかない。そこでさぼさんにCookieやセッションIDに対する僕の理解の確認もしながら、コーディングの仕方について質問してみました。

 

すると話はコロコロ転がり、

 

さぼさん:「Basic認証でいいでしょ」

 

さぼさん:「というか、Sinatraで書いてみなよ」

 

 

大事なことなのでもう一度言います。

 

さぼさん:「Sinatraで書いてみなよ」

 

 

1日目:Rubyって何それおいしいの

 

もうすでにRubyに慣れているみなさんにとっては大したことじゃないのだと思いますが「Ruby」なんて言葉だけしか知らない口だけエンジニアビギナーの僕にとっては厳しい問題でした。

 

というわけで僕の課題は「HTMLとPHPで友達のためのアプリをパパッとつくる」からSinatraBasic認証になったのです。

 

友達のアプリをパッとつくって二冊目の課題書を読むつもりだった僕にとってはこの問題に時間を取られるのは由々しき一大事。

 

ググってQiita先輩からSinatraBasic認証のコードを発見。そしてatomにコピペ。

 

まさ:「・・・で?」

 

そうです。僕はHTMLとCSSPHPしか使ったことなかったので、Rubyって何をすればどこでどう動くのかイメージできない口だけエンジニアビギナーだったのです。

 

しかもコピペしたこのコードも何をしているのかよくわからない。

 

これじゃ本当の意味で「Sinatra書いた」とは言えない!

 

というわけで、その日のうちにProgateさんのRuby→ドットインストールさんの「Sinatra入門」で一気に基礎中の基礎を学んだのでした。

 

 

2日目:Herokuって何それおいしいの

Rubyがどんな感じの言語かはわかりました。

ローカルホストで動かす方法もしっかり学びました。

 

Sinatraが大体こんな感じのものだっていうのもわかりました。

 

実のところ、それでもBasic認証のコードを具体的に理解することはできていません。でも、Rubyに対する理解は深まりました。

 

次の段階はこのプログラムをどうすれば僕の友達はこのBasic認証機能を使えるのかということです。

 

HTML・CSSPHPはWebサーバにアップロードすれば良かったのですが、Sinatraはどうすればいいのでしょうか・・

 

そこでさぼさんに相談してみると

 

さぼさん:「Heroku使ったらできるよ」

 

と言ってProcfileやGemfileやconfig.ruなどのファイルを凄まじいスピードで作ってくれました。

 

これらが何なのかよくわからない。

ちょっと説明していただきましたが、やっぱりわからない。

 

とにかく僕は「これらのファイルを使ってHerokuで頑張ります」的なことを言ってググりました。するとこのサイトにヒット。

 

blog.ruedap.com

 

ものの5分でHerokuを使って、初めてのSinatraで書いたアプリケーションが世界中に公開されました。

 

うおおおおおおおおおおおおおおおおおお!

 

そしてBasic認証の後にもともと作っていたアプリケーションに飛ばすために色々コードを変えたりgitでpushをしていたら

 

おや?動かなくなった。

 

ここから僕の地獄が始まりました。

 

結局、何が原因かわからないまま、Herokuをアンインストールしたり、インストールしたり、HerokuのCLI(Command Line Interface)を変えてみたり、GitHubをいじってみたり・・・

 

3、4時間やっても何もかわらない。

 

その日は帰宅。

 

 

3日目:エラーを読むだけで朝と昼が過ぎていく

 

朝。憂鬱な気分でカフェに到着。

 

2時間くらい粘ったところでさぼさんにヘルプを求めると、エラーの読み方や前提知識について甘いところがあると判断(例えば◯◯.rbの置くべき場所について知らなかった)。

 

というわけであれやってはこれためして、ググって同じサイトめっちゃ見て・・・の繰り返し。

 

それでも上手くいかない。GitにPushできたと思ってHeroku openを打ってみると「Application error」の繰り返し。

 

iTermをじっと見つめてWARNINGに沿ってBundleやCLIをアップデートするも、同じようにApplication errorが出る。しかもまだBundleやCLIについて注意受ける。

 

何をいじっていいのか、いじりまくっていいのか、なんなのかわからない。

 

そしてこの記事を書く1時間前、僕は気づいたのでした。

 

あれ?

f:id:masaincebu:20170422172741p:plain

 

 

これはさぼさんがパパッと書いてくれたconfig.ruのrequireのパスに似ているな・・・

 

f:id:masaincebu:20170422173043p:plain

 

むむ・・これはどういう意味だろう?

 

 

しばらく考えてわかりました。

 

これは、僕がRubyファイルにつけていた前のファイル名でした。

つまり「test.rb」っていうファイル名だったのです。

 

しかし、僕は出来心でファイル名を「basic.rb」と変えていた。

それが上手くいかない問題の根源だったのです。

 

というわけでファイル名を変更。

f:id:masaincebu:20170422172942p:plain

 

これでうまくいきました。

 

 

まさ、イライラしてたけど、やっぱりプログラミング楽しいってよ

 

結局自業自得だったのですね。

 

心地よいプレッシャーの中で、イライラというか燃えていました。

 

でもこの過程でProcfileやGemfileの意味やHeroku、GitHubについての理解が随分深まったと思います。あと何よりエラーを読む力の大切さもね。

 

というわけで引き続き頑張っていきたいと思います。