FEを受けた

今日はGW真ん中の平日だったが、有給を使って基本情報技術者試験を受けに行ってた。これを書いてるのはそのまま新幹線に乗って地元に帰る最中。

最初に基本情報の勉強しようと思ったのは2, 3年前だった気がするけど、その時は全く勉強する気が起きず、べつにWebアプリケーション作るのに要らんでしょというスタンスだった。

今日でちゃんと試験を受けるのは2回目。(本当は3回目だけど1回目は午前を受けて午後を受けずに帰った。怠かったから。なめんな。)

今回こそは受かりたいと思いつつも、そんなにモチベーションは上がることなく過去問道場をちょこちょこやっていた。午後試験に関してはほとんど対策をしていない。

仕事ではそれなりの規模と歴史があるECサイトの開発者のジュニアメンバーという立ち位置にいる。正社員になって1年が経つが、最近ふとしたときに基本情報を勉強することによる恩恵を感じることがあった。

旧ページを新ページに置き換える作業をやった時、機能に加えてURLのパスも変更する場面があった。旧URLにアクセスした際は新URLにリダイレクトする必要があった。

処理はRuby(Rails)で書いていて、当初はコントローラーのメソッド内にリダイレクトに関連する処理を書いていた。

QAも行いChromeやSafari、macやWindowsなどブラウザおよび端末間で挙動に相違がないかもチェックして、特に問題はなかったのだが、Blackberryのとある機種でアクセスをしたときに無限リダイレクトが発生してタイムアウトしてしまうということがあった。本番環境におけるBlackberryからのアクセスを調べたところ年間で3件程度しかなかったので結局無視しても構わないということになったのだが、QAだけでは把握しきれない不具合が出てくることがありそうなので、アプリ側でリダイレクト処理をするのをやめた。

レビューに加えて朝会のタイミングでも複数のエンジニアに上記のリリースをする旨を伝えたら「アプリケーションでやるのもいいけどロードバランサで設定すればいいんじゃない」と伝えられた。

そうすればアプリケーションサーバに旧URLへのリクエストを送ることなく、ロードバランサが新URLに変換してくれるのでアプリ側でやる処理が減る。小さなことだが何もやらないよりは負荷を抑えることができる。

こうした発想はRailsのレールに乗ってWebアプリケーションをただ書いているだけでは湧いてこない。ブラウザのURL欄にURLをかきエンターを押してからページに結果が表示されるまでに何が起こっているかを把握していないと実感できない、その良さもわからないものである。自分でhttp.conf(apacheでいうところの…)を書く機会を得てから、もっとWebのことを知りたいという気持ちが湧いてきた。というか今まで分かっているようで何も分かっていなかったのだ。

本番環境のネットワークのアーキテクチャの構造を把握できてなかったので改めて教えてもらうとより理解できた。さいきんはnginxやapacheを使うのではなく、自分でWebサーバをかいて仕組みを理解したいという気持ちになってきたので寝る間を惜しんでコードを書いている。

あと、本番のサービスのレスポンスタイムを縮めるにはどうすればいいかということを考える機会があったのでCDNをつかって静的ファイルを適切な場面でキャッシュするようにすればいいよねとか、システム全体の監視をするうえでロードアベレージ(システムの利用状況)を見ることは大事ですよね、そのうえでCPU使用率やI/Oの負荷状況を見ないといけないですよね、CPU使用率が高くなってたらどうすればいいんでしたっけ、逆にI/Oの場合は?みたいに、急に知ることが面白くなってきた。

基本情報(応用情報)の範囲で言えば、法務の用語覚えたりするのはスッと入ってこないし、午後のアルゴリズムは途中で爆発しそうでまだまだなんですが、テクノロジの部分に関しては勉強してて損はないと思いました。