ゆとり日記

心にゆとりを持って生きたいプログラマーの雑記です。気が向いたら書きます。

来年の抱負

「DEATH STRANDING」やってたら大晦日になってました。

以前書いた入社1年ブログで2019年の振り返りは大体やっているので、2020年の目標とか抱負を中心に考えていきます。

rukiadia.hatenablog.jp

来年の目標

大きく分けて2つです。

  • コンピューターサイエンスの学士を取得するためにUniversity of the Peopleに入学する。
  • アウトプットの機会を増やす。

University of the Peopleに入学する

ちょうど今日、記事にされている方がいました。Twitterで話題になっていますね。

tmkk.hatenablog.com

僕は今年の秋頃にこのオンライン大学の存在を知り、入学資格に足りうるTOEFLでの得点を取るために勉強を継続しています。年明けに初めての試験を受ける予定です。

コンピューターサイエンス(CS)の学士を取ろうと思った理由

  • 海外で働きたくなった時に学歴が足枷にならないようにしたい。
  • ソフトウェアの世界で戦っていくための土台を作りたい。

この辺りが主だった理由です。

僕は専門の大学も行かずに独学でこれまでプログラマーを続けてきました。それなりの勉強はやってきたつもりではありますが、足りない部分はまだまだ多いとも感じています。感覚的な物言いになってしまうのですが・・「実戦で必要になったから勉強した知識」の積み重ねをした結果、基礎により近い土台が盤石になっていないイメージを自分の中で抱えています。

「このままじゃ不味いでしょ」ということで、夏頃に通信で通える大学を調べ始めました。

通信にこだわる理由

仕事を辞めてフルタイムで通える程の余裕はないし、仕事を辞めたくもなかった。理由は至って単純です。

英語圏の大学にした理由

英語を使わざるをえない環境に身を置かないと、日常的に使えるレベルの英語は身につかないと考えたためです。

CSと英語の勉強を一緒に進めるのはそれなりに大変だと自覚してはいますが、やらずに後悔したくはないので頑張っていきます。

アウトプットの機会を増やす

2019年はアウトプットをあまりせずにサボってました。

登壇でいうと、フロントエンドカンファレンス福岡の前夜祭と、会社で開催している高円寺devで話したくらいです。ブログに至っては、今年の前半は一行も書いてません。

アウトプットの目標

闇雲に頑張るだけでは意味がないので、一応目標を定めておきます。

  • ブログは月一で書く。
  • 1Q(三ヶ月毎)に一回は登壇をする。

「ノルマ軽くない??」と思われるかもしれません。

人類は年末年始になると無茶な目標を立てがちな生き物です、しかし、僕はそこまで無謀な事はしません。少し頑張れば達成可能な目標を達成し、次の目標を少しだけハードにすることで、徐々に体を慣らしていく作戦でいきます。

PHPカンファレンスやBuildersconのような規模のイベントでCFPを通すことがもう一つの目標でもあるので、そこを目指して地道にやっていこうと思います。

まとめ

ということで、2020年は2019年の1.05倍くらいの頑張りでやっていこうと思います。

では皆さん、良いお年を。

ガラホから学ぶフォームのアクセシビリティ

Webアクセシビリティのアドベントカレンダー 5日目の記事です。

概要

突然ですが、皆さんはガラホを使ったことはありますか?

https://k-tai.sharp.co.jp/support/changeguide/guide5/p01.html

ガラケーのハードウェアの中身をスマートフォンのOSにした端末のことで「進化型ケータイ」と呼ばれることもあるそうです。 今回、こういった端末に向けての開発をやる機会があったので、そのまとめも兼ねて振り返ってみることにします。

ガラホの操作感について

ガラホは通常のスマートフォンと比べて操作感が大きく違います。基本的な操作はボタンでおこない、ボタン部分についているセンサーでポインターを操作してのブラウジングも出来たりします。固有名詞も多いので、興味のある方はSoftbankの紹介ページを見てみるのがお薦めです。

普段から慣れ親しんでいるスマートフォンのタッチ操作を比較すると勝手が色々と違うので、僕はここで画面操作のアクセシビリティを考え直すきっかけを得ました。

開発中にハマったこと

モダンブラウザ前提のデザインが崩れる、というような話もありました。ですが、何よりも苦戦したのはラジオボタンチェックボックスといったフォーム要素がボタンで操作できなかったことでした。

ここでやらかしてしまっていたのは、アクセシビリティ的によろしくない見た目のカスタマイズでした。ガラホ操作だけでなく、キーボード操作も出来ない箇所もありました。

キーボード操作でもガラホでもきちんと使える状態になったサンプルを先に挙げておき、その後に良くなかったポイントに触れていきます。きちんと動いてるサンプルはこちらです。

良くなかったポイント

幾つかあったので、1つ1ついきます。

1. input要素をdisplay:noneにしてしまうパターン

Webアクセシビリティを学んでいる方にとっては当たり前の話かもしれませんが、今回はこれを踏み抜いてしまいました。

実装サンプルを用意したので、キーボードで操作が出来るかどうか見てみてください。見た目は先程のサンプルと変わりませんが、キーボードでinput要素にフォーカスをあてることが出来ない筈です。

見た目は問題なさそうで、マウスやタッチパネル操作だと問題なく使えてしまうのが落とし穴ですね。

2. input要素をz-indexで隠してしまうパターン

元々のinput要素が見えないようにするため、カスタムした要素の後ろに隠して見た目を担保するアプローチですね。

これまで同様、実装サンプルを用意しました。この実装であればキーボード操作は出来るのでOKかと思っていたのですが、冒頭で触れたガラホのボタンではフォーカスが当たらず、操作が出来ませんでした。

解決のアプローチ

結論から言うと、position: absoluteで位置取りして、opacity: 0で見えなくするのが今回はベストでした。キーボード操作、ガラホ操作共に問題ない実装ではその方法をとっています。

ついでに意識しておくと良いこと

見た目をカスタマイズしたチェックボックスラジオボタンの見た目についてです。:checked時の見た目を気にしない人はいないと思いますが、:focus時の見た目を見落とすことはありがちかもしれません。僕自身も、つい最近まで意識出来ていませんでした。

「見た目は変わってないけど、実はフォーカスが当たってる」という状態にならないよう、outlineなどで装飾することを忘れないようにしておきましょう。

まとめ

今回、普段使っているスマートフォンとは違うガラホという環境を知ったことで、アクセシビリティについて様々な気づきを得ました。マウスであれば楽にスクロール出来るのに、地道にボタン押下でスクロールしていかなければいけなかったり。スマートフォンなら指で画面を押せばいいだけなのに、ボタン操作でフォーカスを当ててから押さなければいけなかったり。

普段のマウス操作やタッチパネル操作がいかに楽かを実感しました。

アクセシビリティを全く意識してこなかったわけではないですが、色のコントラスト比やタイポグラフィにしか目が向いていなかったのは事実です。今回の反省を活かし、使いやすいWebページを作ることをこれからも頑張ってやっていこうと思います。

オミカレに入社して1年が経ったので振り返ります

概要

去年の12月にオミカレに入社し、そろそろ1年経ちます。社員が400人近くいる中規模会社から社員10人〜20人規模のベンチャーに転職し、試行錯誤やってきました。

  • フルリニューアルの振り返り
  • 日常的な仕事のやり方に対する振り返り
  • 自分のキャリアマップの振り返り

そういうわけで、この辺をテーマに振り返りをつらつらと書いていきたいと思います。

フルリニューアルの振り返り

中規模、小規模プロジェクトは色々やってきましたが、一番大きかったタスクは春から夏にかけてやっていたサイトリニューアルのプロジェクトでした。

同僚の@ikkitangも振り返りブログで触れていますが、デザインを変えるだけでなく、バックエンドも刷新する完全なリニューアルでした。

当時、古くからあるMySQLPostgreSQLに移行するための取り組みが裏で進む中、僕ともう1人のフロントエンドエンジニアの@maeponは表側の画面をゼロから設計して作りあげていました。おっさんピンクと揶揄されていたピンクベースの画面配色、Bootstrapと混ざりあったカオスなCSS、scriptタグの中に書き捨てられているJavaScriptからの脱却を目的とした戦いです。

この辺りを基本方針としつつ進めていきました。

上手くいったこと

1つ目はCSSについて。

大規模なCSS設計をするのは人生で初めてだったので不安要素が大きかったのですが、当時設計したCSS設計は数ヶ月経った今も大きな問題はなく運用できています。プロジェクトに合わせたちょっとした拡張はしつつも、FLOCSSの基本思想はそのまま活かしたのが良かったのかもしれません。また、当時は雰囲気で使っていたBEMに対する理解が深まるという副次的な効果もありました。

クラスの命名をする時は今でもここを見返すようにしています。

2つ目はTypeScriptについて。

jQueryも使わず、いきなりTypeScript運用出来るのかな?」

サイトリニューアルの計画を練っている当初はこういう懸念も上がっていました。

Java畑で育った僕は型付きプログラミングに対する抵抗は無かったですが、PHPPythonをメインにしている層からするとそうではなかったのかもしれません。そういう背景もあったので、出だしの頃は意識的に周りの手助けをするようにしていました。

更に、周りのメンバーの「とりあえずやってみる」チャレンジ精神が活きたこともあり、今では当たり前にTypeScriptを書く文化ができつつあります。将来的にReact + TypeScriptのような仕組みを入れることになったとしても、大きな足がかりにできそうな感覚があります。

上手くいかなかったこと

このサイトリニューアルは3月後半に始まり、6月末にリリースという流れで進めました。フルリニューアルを進めるにしてはなかなかの強行軍と言えるスケジュールで、その過程では色々なことがありました。

  • 初めに作っていた画面のプロトタイプと、開発が進んでいく画面のズレ
  • ページの洗い出し漏れによる仕様の膨らみ
  • フロントエンド側のリソース逼迫

大なり小なり・・全部を挙げていったらキリがないですが、一部の例を挙げるとこんなところです。僕自身の立ち回りと進め方が上手くいってなかったと感じるところだけ触れていきます。

3月末頃、外部の協力会社さんに作って頂いたデザインを元に僕が画面の静的なプロトタイプを作りました。ページ全体のレイアウトの枠組み、ヘッダーやフッターといった多くの画面に共通して存在するパーツ、Button要素やテキストボックスといった汎用的な要素を順次作っていきました。このタイミングで作ったものを元に画面を量産していく想定でいました。

しかし、実際はそう上手く進まない場面が多かったです。開発が進む中で新たに必要になったパーツを都度作る必要があり、そこにそれなりの時間をかけました。同じようなパーツだけど微妙に見た目が違うパーツが量産されてしまい、後追いの調節や統一に時間をかけました。そうしている内にバックエンド側の開発が先行していき、フロントエンド側で止まってしまうタスクが増えていく結果になってしまった・・という次第です。

また、開発途中にブランドのテーマをどうするかで揺れていた時期があり、その前後の配色が入り混じった画面が出来上がってしまい、そこの調整がなかなかに大変だった記憶もあります。

精神的に追い詰められてしまい、「夏にリリースするのは無理なんじゃないか?」と発言するところまでいった時期もあった程です。 結果から言うと、6月末に無事にリリースは出来ましたが、6月はなかなかハードに働いていた気がします。完璧に仕上がらなかったところや、IE11でデザインが崩れている箇所はリリース後に急いで直したりしていました。

見積もりを甘く見積もりがちな僕の悪い癖が出た結果だなと、今でも強く思います。見積もりについての話は後でまた触れます。

日常的な仕事のやり方の振り返り

日常的な仕事を進める中で常に意識するようになったことを触れます。

コードレビューについて

前職にいる頃。特定の人にレビュー負荷が集中してしまうことが多かったこともあり、転職後はコードレビューのやり方を再考しました。コードレビューのやり方、レビューをする頻度など、色々と悩んだ気がします。

https://testing.googleblog.com/2019/11/code-health-respectful-reviews-useful.html 上の記事で言及されている方針や、以下のことを意識しながら日常的にPullRequestを眺めています。

  • 語気の強い言葉は使わない。
  • 相手の方針に異議を言う時は、きちんと根拠も言う。
  • 相手の実装に対する代替案がある時は、簡潔なサンプルコードも載せる。
  • 「動いてるから良いか」ではなく、設計方針やパフォーマンスも意識してコードリーディング

レビューをする頻度ですが、基本的に午前中に見ることが多いです。出社直後や、お昼ごはんに行く前に見ている感じです。 後は、自分のタスクが一段落した直後などの隙間時間に見るようにしています。

ですが、タスクが溢れていたり単純に疲れていたりするとレビューを雑に見がちなので、その場合はレビューをあえてせずに周りに任せてしまうこともあるのが課題ではありそうです。

スケジュールに対する意識

ここ最近、ようやく出来てきたことです。

僕の悪い癖が1つあり、完璧に作ることに固執して時間を使いすぎてしまってスケジュールを送らせてしまうことがありました。社内では「普通の船で十分のに豪華客船を作ろうとしがち」と表現されています。

いくら完璧に作っても、世の中に出さなければ意味がありません。しかも、後の続いているタスクのスケジュールにも影響が出てしまうので、このままでは良くありません。周りの助言を得つつ、以下のことを意識するようになりました。

  • ザッカーバーグの「Done is better than perfect.」を意識する。
  • タスクを日単位で考えず、週単位で捉える。

1つめについては僕が今更言及することでもないですね。僕の中の感覚では「70%くらいの段階で早く世の中に出して、後からのブラッシュアップで100%に近づけていく」という感じです。

2つめは一週間の仕事の進め方を週単位で考えるというものです。具体的に言うと、以下のようなことをやっています。

  • 金曜日にその週で終わらなかったタスクがあれば。何故終わらなかったのかを振り返る。
  • 終わっていないタスクがあれば、それらも考慮しつつ翌週のタスク予定を決める。
  • 日曜の夜、もしくは月曜の朝に決めた予定を確認し、曜日ごとに工数の分量を見積もる。

このサイクルを回していき、自分の中で想定している工数と実際にかかった工数のズレを縮めていくのが狙いです。

自分のキャリアマップの振り返り

僕は32歳なので、今後のキャリアをどう積み重ねていくべきかを計画し、実行していかなければなりません。ということで、この数ヶ月は分野を越境していくことを意識していました。

近い領域への越境

僕はフロントエンド領域が好きですし、この領域を武器に戦っていくつもりでいます。しかし、自分もご多分に漏れず凡人の一人でしかなく、1つの分野に特化して戦っていくのは現実的ではないとも思っています。

そこで考えたのが、フロントエンドと近い領域にある分野への越境でした。ここで言う「近い領域」とはサーバーサイドとデザインの2つのことを指しています。このような方針を立てた理由は、t-wadaさんの資料で触れられている話を参考にした結果です。

https://speakerdeck.com/rtechkouhou/enziniatositekofalsexian-sheng-kifalsekorutameni

複数の柱を持つ、という話ですね。

サーバーサイドと向き合う

弊社はPHPPythonでバックエンドを構築している会社で、簡単に言うと以下のような形になっています。

  • CodeIgniterでフロントエンドとサーバーサイドの実装
  • DjangoAPIの実装

APIDjangoで分けられているのは、Webだけでなくスマートフォンアプリからも使えるようにするためです。

必要に迫られて書くようになったのもありますが、「フロントエンドだから見た目の調整に集中すればいいか」という姿勢は勿体無いという思いもあったので、今では積極的に書くようにしています。メンバーのコードレビューに積極的に首をつっこんでもいます。

とはいえ、CSSJavaScriptとは気にすべき箇所が大きく違うこともあり、最初はまともなコードが書けているか大きな不安を感じてもいました。そこで僕が大事だと感じたのは設計力やアーキテクチャへの理解でした。これまで適当気味にやっていた領域を深堀りするため、色んな本を読んで実践してきたつもりです。

主にこの辺りの本を読みました。

本を読んだ内容と知人のエンジニアと話しあったり、弊社の技術顧問をやっていただいている@kawasimaに壁打ち相手になってもらったりしつつ、少しずつ知識を定着を図っています。

この1年はPHPをきちんとやるだけに留まりましたが、来年はDjangoにも手を広げていくつもりでいます。

デザインと向き合う

フロントエンド領域と一番近いようでいて、実は最も遠い領域な気もしています。しかし、良いUIを作るためにはデザインのことをきちんと理解しておく必要があると前々から感じてはいました。

そう感じ始めたのは、前職で同じチームで働いていたデザイナーさんがきっかけでした。当時の僕はデザインに対して「やっぱりセンスがないから無理だなー」くらいの気持ちでいました。しかし、そうではないことに気付かされたのです。

Webページを構成する要素は数多く存在します。要素同士の間隔、配色、タイポグラフィというように挙げたらキリがありません。それら一つ一つに対して、根拠となるロジックがあることをその人に教えてもらいました。全てがセンスで成り立っているわけではなかったのです。

僕がデザインのことを理解していこうと思い始めたのはそれからです。サーバーサイドの節と同様に、ここでも基本を固めるために色々な本を読みました。

  • 「なるほどデザイン」
    • http://naruhodo-design.com/
    • 個人的にとても好きな本です。
    • DesignShipで著者の方が登壇されていた時はびっくりして飛び上がりたいくらいの気持ちでした。
  • 「けっきょく、よはく。 余白を活かしたデザインレイアウトの本」
  • 【新版】UI GRAPHICS
    • http://www.bnn.co.jp/books/9522/
    • トレンドと歴史くらいは知っておいた方がいいか・・くらいの気持ちで買いました。
    • iPhoneのデザインが辿ってきた軌跡を説明したコラムが良かったです。
  • 「簡単だけど、すごく良くなる77のルール デザイン力の基本」
  • 続・インタフェースデザインの心理学――ウェブやアプリに新たな視点をもたらす+100の指針

他にも彩色手本の本を読んだりしたのですが、すぐに思い浮かんだのはこの辺りの本です。本を読んだくらいでデザインが出来るようになるとは勿論思っていませんが、「言語化出来ないけどダサい」みたいな状態を抜ける足がかりにはなっています。

まとめ

長くなりましたが、僕の振り返りはこんなところです。自分の専門領域の深堀りや越境は出来つつありますが、仕事の進め方は一層の改 善が必要になってくるなと感じました。とはいえ、何をやるべきかは見えているので、向こう半年は意味のある時間が過ごせるのではないかと思っています。

僕の方からは以上です。

遅延読み込みの落とし穴を色々踏んだ話

フロントエンドカンファレンス福岡のCFPに残念ながら漏れてしまったので、発表しようと思っていた話を簡単にブログに纏めました。

と思っていたら前夜祭で話せることになったので、ここに書いた話をベースに話す予定です。

fec-fukuoka.connpass.com

概要

  • 「ユーザの体感速度を上げるために遅延読み込みを実装したが、実はユーザー体験を損なっていた。」
  • 「一見早くなったように見えて安心していたら、SEOにネガティブな要因を引き起こしていた。」

試行錯誤して実装した遅延読み込みが実はクローラーやユーザに優しくなかった。簡潔に言うとそんな話です。

今回は僕が実際にやってしまった体験談を踏まえつつ、反省点や対策を述べていきたいと思います。

前置き

自分が普段開発しているサービスがSingle Page Application(SPA)ではないので、SPAに関わる話はほとんど出てきません。また、クローラーに関する話には不確実な部分があります。100%失敗するパターンから50%失敗するパターンまで持ってこれた、くらいの話だと思って読んでください。

なお、遅延読み込みの実装にはIntersection Observerを用いており、ここでいう遅延読み込みでは画像だけに留まらず、他の要素を動的に生成しています。

遅延読み込みがユーザ体験を悪くするケース

よかれと思ってやったことがユーザ体験にネガティブな影響を与えることがあるという話です。

実際に実装が反映されていたページの一例がこちらです。初期表示時のカードUIパーツの表示数を少なくし、初期表示を少しでも早めるのが目的でした。

1ページに表示されるパーツ数は20個ですが、ブラウザのファーストビューに収まるのはPCでも2個だったので、初期表示には2個だけ表示する。減らした分(残りの18個)をページ表示後にAPIから取得し、JavaScriptでHTMLを生成して差し込む。このようなフローを踏んでいました。

という流れを踏んでいました。

やらかしたこと

ページ内要素を遅延読み込みしたことで、ブラウザバックで戻ってきた時にページの表示位置がズレるというケースです。

  • 上で例に挙げたページから、次のページに遷移する。
  • 遷移先からブラウザバックで戻る。
  • 戻った先のページで要素の遅延読み込みが始まる。
  • 読みこみが終わると、ページの構造が変化するのでスクロール位置がズレてしまう。

こういった事が起きていました。

このケースへの対策案

対策としては2つ考えられました。

1つめはブラウザバック時は遅延読み込みをしないこと。以前SPAを開発していた時はこのアプローチで対策を打ちましたが、今回はあSPAではないので同じ対策が使えず、別の対策を考えることにしました。

そこで考えた2つめは遅延読み込みを行う箇所にダミーのカードUIを配置しておき、スクロール位置のズレを防ぐというものです。

  • ダミーのカードUIを予め配置しておく。
  • 遅延読み込みが完了したら、ダミー要素の後ろに本来表示したい要素を差し込む。
  • ダミーUIを消す。

という流れです。このアプローチは概ね上手くいったのですが、この対策も完璧ではありませんでした。APIのレスポンスを見るまでは表示できる要素の個数が分からないので、予め配置しておくダミー要素の個数を必要に応じて変えることが出来ないのです。

また、DOMの構造を変えるタイミングが増えるので、ブラウザのリフローを誘発してしまう側面もあります。

SEOにネガティブな要因を引き起こすケース

遅延読み込みしたHTML要素がクローラーに認識されてなかった、という話です。体験談を交えつつ説明していきたいと思います。

やらかしたこと

遅延読み込みに時間がかかりすぎると、要素の表示が完了する前にクローラーが帰ってしまい、ページが正常にインデックスされない場合があります。ある程度の時間は待ってくれるようですが、待ってくれる時間がどの程度なのかは明言されていません。そのため、実際にやってみないと上手くいくかどうかは判断出来ないのです。

今回、僕がプロダクトで試した際も上手くいっているページといっていないページが存在していました。

ちなみに、実装した処理が正しく機能するかどうかは事前にpupperterでテストが可能です。 参照リンク: https://developers.google.com/search/docs/guides/lazy-loading

これが理由で遅延読み込みはひとまず止める方針に倒しました。

反省と振り返り

今回はプロダクト全体に実装してしまったのですが、今思うとチャレンジし過ぎだったなと思っています。テスト実装を試すページを絞っておけば、悪影響を最小限に留めておけました。

一部のページに絞って実装を試していたので、影響を大きくすることを抑えられたのは不幸中の幸いでした。元に戻すことを想定して戻しやすい実装にしていたことも手伝って、止める時に素早く戻せたのも良かったです。

まとめ

ページの一部分を遅延読み込みするというだけの話ではありますが、考慮しなければいけないことが案外多いことがわかりました。良かれと思ってやった事が良い結果に結びつくとは限らないという教訓ですね。今後も素早く実装して素早く検証するサイクルを繰り返し、問題解決につなげたいと思います。

僕と同じ轍を踏む人が出ないことを祈ります。

社内ISUCONで得たもの

会社でやった社内ISUCONに参加して、得るものをが色々あったので書きます。

社内でやったISUCONの内容について

以下のような変則的ルールでやりました。

  • 問題は[ISUCON8を使用。(前日まではISUCON9を使用する予定でしたが、当日に変更)
  • 問題自体を事前に見て準備するのOK。
  • 予選突破者のブログを見て真似したりするのはNG。
  • エンジニア8人が3つのグループに分かれて競う。
    • 社内に2人しかいないフロントエンドエンジニアは同じチームにならないようにするなど、得意分野が同じ人間が集中しないようにはなっていた。
  • 使える時間は4時間。
  • コードをAlibaba Cloudに置き、終了時点のスコアで勝敗を決める。
  • その他レギュレーションはISUCON公式に準拠。

ISUCONが開催された理由

「社内エンジニアのトラブルシューティング力を磨く」

主な目的はこれだと思っています。普段触らない領域(僕にとっては「デプロイの仕組み」や「ミドルウェアの使いどころ」など)を触るという目的も勿論あると思いますが。 開催を決めたCTOの考えと僕の解釈が混じっていますが、概ね合っているはず。

その背景を説明します。

弊社にはエンジニアが8人いて、以下のような内訳になっています。

  • CTO : インフラに強い
  • プロダクトオーナー : インフラに強い
  • サーバーサイド方面に強い人 : 4人
  • フロントエンド方面に強い人 : 2人(僕はここ)

プロダクトオーナーが開発以外の業務で多忙だったり、CTOのトラブルシューティング力が高いことも手伝い、障害の対応がCTO任せになっているという現状があります。任せきりになってしまった結果、他の人間のトラブルシューティング力が上がらない。でも、障害本番にいきなり投入するのもリスクが高いです。

また、アプリケーションエラーの解消(エラーの通知はSlackに通知するようにしています)も特定の人だけがやる状況が続いてもいました。

そこでISUCONでトラブルシューティングの経験を積んで、普段のトラブルシューティングに活かすとっかかりを掴もうという話になりました。

ISUCONをやった感想

4時間色々ともがきましたが、自分の無力さを味わう苦い思い出になりました(このブログもハイネケンを飲みながら書いています

  • 環境構築からつまづく。
  • 同僚にdockerで動く環境を作ってもらうも、ベンチマークが上手く動かない。
  • 監視ツールの使い方が分からなくて困惑する。
  • チーム内の作業分担が上手く出来なくて、バタつく隙間時間が生まれる。
  • ボトルネックのあたりを付けるのが大きく遅れた。DBとPHPのどっちに注力するかを決めるべきだった。
  • コード上のボトルネックを見つけるも、対応策を考えるのに時間がかかってしまった。

傍から見たら何をやっているのかって感じかもしれませんが、こういう状況でした。

ISUCONから得たもの

  • 時間の使い方をより意識する必要があった。
    • 4時間しかないので、やることを絞らないと何も出来ずに終わる。
  • Goのビルドツールだったり、H2O だったりと自分が知らなかったものを知れた。
  • ansibleのようなデプロイツールにはもっと慣れた方が良い。
  • 時にはダイナミックなアプローチが必要だと感じた。
    • ボトルネックになっているクエリがあるなら、テーブルの構成から見直して改善するようなアプローチは想像出来ていなかった。
  • 疑似体験とはいえ、時間制限を設けてISUCONの問題に取り組めたのは良い経験になった。
    • 実際にやるまでは、ISUCONがどういうものなのかを肌で感じられていなかった。
  • 問題の実装を読んでいくのは勉強になる。
    • ほぼ実戦と言えるアプリケーションコードを読める機会は多くないので尚の事。

まとめ

色々書きましたが、来年のISUCONに挑戦する熱意が湧くくらいには刺激的な経験ができてよかったです。 自分の力不足を思い知らされたので、そこは地道にやっていこうと思います。

株式会社オミカレに入社しました!

所謂、退職エントリーであり、入社エントリーです。最終出社日から一ヶ月位経ってしまって今更感がありますが一応。

  • From: 株式会社リブセンス
  • To: 株式会社オミカレ

11月末で有給消化が終わり、今月からは株式会社オミカレで働いていて、主軸サービスであるオミカレの開発を担当しています。フロントエンドに軸足を置いたWebアプリケーションエンジニアとして、事業に貢献していくつもりです。

転職した理由

社長は信頼出来る人物で、CTOは最高で、一緒に働くメンバーは熱い思いを持っている。要するに人間的な部分に惹かれた事が大きかったです。

更に言うと、僕自身が社会的に意味のあるサービスを創っていきたいと思っていて、オミカレがその拘りにマッチしているのも理由の一つと言えます。

前職を辞めた理由

現職からオファーを受けたのは夏頃でしたが、その時はオファーを一度断っていました。当時、仕事へのモチベーションが落ちてはいましたが、前職でやれる事はまだあると自分では思っていましたし、尊敬できる人達も多かったです。その状況で悩んだ結果、当時はオファーを断っています。

ですが、その後もモチベーションが落ち込む出来事が幾つかあり、再オファーを承諾することに決めて今に至ります。

モチベーションが落ちる出来事は色々ありましたが、ここで書きません。僕が物事の一面しか見れていなかっただけで事実は違ったかもしれないですし、僕自身が感じたことは主観で捉えた話でしかありません。そういった話をオープンな場に書くのはフェアではないと感じるので書かないことにしました。前職の会社を嫌いになったわけではないですし。

まとめ

入社して早くも二週間が経ちますが、環境にもようやく慣れてきました。入社直後に張り切りすぎると体調を崩すことを前職で学んだので、この二週間は体調に目を光らせつつ、PHPの学び直しをしたり、dockerに慣れたりしてきました。今週からは徐々にペースを上げていこうと思います。

ちなみにエンジニアは足りてないっぽいし、デザイナーに至っては足りてないどころか一人もいないので、オミカレに興味のある人はDMなりメンションなりで気軽に声をかけてください!!よろしくお願いします。