groooovin'

ログという名の溝を彫ります

『実践Ruby on Rails 4』① Chapter9

2017-06-18 『実践Ruby on Rails 4』を実施中。

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング

Chapter9authenticator_spec.rbを書くところでかなり詰まったので、その時の対応などを記録する。

uninitialized constant Authenticator (NameError)

一旦authenticator関連のファイルを全て書き終えたので、rspecを実行する。 が、rspecを実行しても、以下のエラーが出てしまう。
uninitialized constant Authenticator (NameError)

ググってすぐに見つかったのが、specファイルのrequire spec_helperrequire rails_helperに書き換えるという内容のものだった。 書き換えて試してみたが、エラーの内容は変わらない。 更にググっていったら以下の記事を発見した。
RSpec/Rails: uninitialized constant が出たら bin/spring stop を実行してみると吉
このアプリケーションでもspringを使っているので、もしやと思って記事に書いてある、以下のコマンドを実行したらすぐに解決することができた。
bin/spring stop

ちなみにこのブログは『実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング』の著者のブログらしい。問題を認識して解決策を出していてくれて助かった。

undefined method build'

で、やっと先にすすめるかと思ったら、また違うエラーが発生。。。
undefined method build'
buildがどこにも定義されていないとのこと。 ググってみたら、buildといのは元々FactoryGirlが提供しているメソッドらしい。一般的にspec_helperに書いて読み込んでおくもの。で、本にもそのように書いてあったので、spec_helperには読み込んでいたが、バージョンの問題などでspecファイルに読み込むのは、上にも書いたとおりrails_helperである。なので、spec_helperに記載されているFactoryGirl関連っぽいコードをrails_helperに移動させてrspecを実行したら、エラーはなくなった。

大量の警告

がしかし、今度は大量の警告。。。しかもそれぞれ内容が違う。。。が、テスト自体は実施できているっぽい。これもググってみたら、まずはこの記事を発見。
2重に require すると以下が出る
二重にrequireしているようなコードがあったので、削除したら確かに大量の警告は消えた。

しかし本当に不要なのかが現時点では不透明なため、もう少しググる。 今度は、Rspecのバージョンが新しいと大量の警告が出てくる旨の記事を発見。
RSpecを実行するとWarningがたくさん出る場合
.rspec内の-waringsというコードを削除するという内容で、無事大量の警告が表示されなくなり、テストも通ったので、今回はこちらの解決策を採用することにした。

元々もっと早く進める予定だったのに、結構つまずいていて辛い。。。

転職しました

2017年5月一杯を持って前職を退職し、6月1日から新しい職に就きました。

特に人に言いふらすようなことではなく、またオンライン上にも全然知り合いは居ないので、備忘録的な感じで書きます。

と言ってもまだ、転職後の企業に入社してから2日しか経っていませんし、ほとんど書くようなこともないので、ホントに所感って感じになると思います。

入ってからの所感

  • GitHubとSlackを使ってのオープンなやり取り
    基本的に業務上のやり取りの殆どがGithubもしくはSlack上で行われています。やり取りがオープンなので自分が気になるtopicなどがあったらいつでも見ることができます。また、ログも残されているので、あとから入ってきた人もそのやり取りの全てを見ることができます。ブログなどでそのことを知ってはいましたが、ホントにオープンにやってるんだなーと、改めて感動しました。実は自分が知らないところでオープンじゃないやり取りがあっているかもしれませんが(笑)。

  • 使っている殆どの技術スタックが今まで触ったことがない
    これは入社前から覚悟していましたが、サービスで使用している殆どの技術が今まで触ったことがない技術です。入社したばかりなので、アカウントの作成などをしたのですが、見たことがないサービスの多さに正直ビビりました。。。将来的にこれらを使いこなす必要があるので、キャッチアップにどれだけの時間がかかるのか。。。

これからについて

  • 触ったことがない技術がほとんどという現場でどのようにキャッチアップしていくか
    これが目下一番の課題だと思っています(技術力のないエンジニアってなんなんだ。。。)。ただ、複数の技術を会得する必要があるとは言っても、一気に全ての技術を会得できるなんて思っていません。優先順位やコストを鑑みて一つ一つ会得して行こうと思っています。焦りはいい結果を生みませんしね。ただ、なんとなくやっていては色々と中途半端になりそうなので、計画を立てるなどの工夫はしていこうと思います。

  • 外国人とのやり取りについて。要は英語の勉強について
    現場には、少ない人数ですが外国人もいます。日本の企業で数年働いたことがあるので、普通に日本人感覚で話せる人から、まだまだ日本語が苦手で英語でのやり取りをする必要がある人。幸いこれからやり取りしていく外国人は、日本語が上手なので、少なくとも直近で英語でやり取りする必要はなさそうです。ですが、せっかくのチャンスですので、業務に慣れてきたら英語の勉強なども始めようと思います。不純な動機ではありますが、やはり業務で英語でのやりとりをするするのって昔からかっこいいと思っていて、憧れを持っています。

  • 技術的なスキルがない自分が組織にどのようにして貢献していくか
    まだ入って2日しか出社していませんが、間違いなく私が組織の中のエンジニアの中で技術力が最も低い人間です。業務でRubyRailsも触ったことありませんし。しかし、面談でその辺は話していて、コーディングテストでRoRを使ってのアプリケーション構築能力は把握されているはずです。エンジニアなのに技術力が低いとわかっている人間だと認識していても採用されたということは、 私の持っている何かしらを評価された結果、採用されたと思ってもいいでしょう。その何かしらというのが何なのかをしっかりと認識して自分のValueを出して、組織に貢献していきたいと思います。なので、まずはその何かしらというものを明確にしたいと思います。

終わりに

ここまでざっと書きました。あまりまとまりがないように思いますが、日頃文章を書く習慣がないので、こんなもんでしょう(笑)。

技術的なところについてはネガティブな記載が多くなっていて、ビビっているところもありますが、同時にワクワクする気持ちもかなり大きいです。まさに自分が望んで居た世界に入ってきたなっていうのを既に感じ始めています。何度も書いてますが、まだ2日しか出社してないのに(笑)。

というか、なんかこの感覚前にも感じたことがあるなーと思いましたけど、前の会社で初めて客先のプロジェクトに感じた感覚と似ています。あの時は、Webの技術にほとんど触れたことがなかったのに、いきなり基本設計フェーズから突っ込まれて半年ほどかなりきつい思いをしました。。。ただ、以前よりも知識や経験は身についているし、もっとうまくやれるとは思います。

次にブログを書く時は、もう少し詳細な部分について書くことができるようになっていたいですね。以前の会社との違いや、社内の文化等について書けたらいいなと思います。 このブログは、一応自分の中では技術ブログ的な位置を含めているので、技術について書くことができるようなことがあったら都度書いていくつもりです。

それでは。

Webサーバを実装してみました

タイトルの通り、Webサーバを実装してみました。

と言っても全てを自分で考えたわけではなく、以下の本に記載されているソースコードの写経をしました。

ソースコードを全て実装しつつ、ソースコードの意味を解釈しつつ、本の本文を読みながら進めていったので、なかなか時間がかかりました。年末ということもあり、色々な行事も重なっていたので、確か二週間ほどかかったと思います。

動機

動機は、以下の通りです。

  • 仕事でWebアプリケーションに携わる機会が多くなり、Webの仕組みなどに興味を持った。
  • 時の試練に耐えている技術なので、一度学ぶことにより長い間活用することができると思われる。
  • ソースコードjavaで1000step程とのことなので、ちょうどいい量だと思った。※特に最近は、ゴリゴリコードを書く機会が乏しかったので。

感想

結論から言うと、とても勉強になりました。

Webアプリケーションに携わるうえでは、欠かすことのできない、HTTPの仕組み、CookieやSessionの実装などについて、とても丁寧に解説されています。

今まで概念レベル、利用する側としての利用方法などは知っていましたが、実装をしたことがなかったので、割と曖昧な理解しかしていませんでした。 しかし、この本を読みながら、記載されているソースコードを自分で実装することによって、ソースレベルで理解することができるようになったと思います。

特に理解できたこと

特に以下のことが理解できて、とてもスッキリしました。

  • 簡単なTCPサーバとTCPクライアントの実装
    TCPによるアクセスをログに出力するような簡易なサーバと、TCPサーバを叩くだけのクライアントであれば、javaでソケット(Socket)ライブラリを使用することで、数行の実装で実現することができる。

  • アプリケーションでのSessionの実現方法
    アプリケーション内で複数のSessionを管理するSessionManagerと、SessionとCookieの関連を実装レベルで知ることができた。なんとなく実装だとこうだろうなというイメージは浮かんでいたが、実際に実装をしたことはなかった。 実装を見たときに、おおよその方針は間違っていないということを確認できたことで、自分の自信になった。

  • サーブレットの実現方法
    doGetというメソッドをOverrideしていい感じに書けば動く、という程度の認識だった。今回実装したことで、アクセスされたURLを解析して、対応するサーブレットのクラスをClassLoaderで読み込むという詳細な動き、web.xmlの記載がどのように使われているのかを知ることができた。

私は、「"知っている"と"できる"の間には、大きな隔たりがある」、という言葉を普段から意識しています。今回の実装でWebアプリケーションについて、少しだけ"できる"側に近づいたのではないかと思います。

苦労した点

本の通りに実装していく中で苦労したのが、eclipseで実装した時とそれ以外の時の挙動の違いでした。この本は、特にIDEの指定などはなく、さくらエディタ等のシンプルなエディタで実装することを想定しています。しかし、私は普段コードを書く時eclipseを使っているので、eclipseを使って実装しました。なので、クラスパスやパッケージ等を意識することがほとんどありません。そのことが原因でいくつかの箇所で詰まりました。まぁ、それも含めていい勉強になりましたが。。。普段eclipseがどれだけのことを隠ぺいしているのかを実感するいい機会になりました。

自分の興味の再認識

自分が面白いと思えるものを再認識することができました。それは、「普段何気なく存在しているものの、裏側の仕組み」です。 Web開発者にとって、Webサーバというのは、正に「普段何気なく存在しているもの」に当てはまるものだと思います。その「普段何気なく存在しているもの」の「裏側の仕組み」について書いてある本を面白がりながら読むことができたことで、自分が物事の仕組みに興味があるということを再認識することができました。これは、自分にとって結構大きな気づきでした。

Web開発者にとてもお勧めします

Webアプリケーションの開発者にとてもお勧めします。想像以上に学びが多い本でした。Webの開発に携わって半年から一年した頃に読むととても学びがあるのではないでしょうか。特に、画面側の設計や実装はいくつも経験しているけど、CookieやSessionの仕組みはよく理解できていないという人。FWが普段隠蔽しているので、ほとんど意識することがない人などは、この本を読むことでとてもすっきりすると思います。 私ももう少し早く、できれば二年目の春頃にこの本を読んでいたら、もう少し当時の苦労を減らせただろうなと思います。

以上が、簡単な感想などです。後日、面白いと思ったところやなるほどと思った箇所を部分的に抜き出して詳細を書くつもりです。 (一周しただけだと知識の定着が弱いと思いますので。。。)

ブログを書きます。

ブログを書きます。

主に技術的なことについて書くつもりですが、たまに本や映画、音楽のことについても書くことがあると思います。

/**
 * 人生のログを彫る。
 */
public static void main(String[] args) {
    System.out.println("groooovin'");
}