「リーダブルなテストコードについて考えよう」を聞いたので明日からやること

こんにちは。

2022年7月27日、「リーダブルなテストコードについて考えよう」という勉強会に参加しました。

veriserve-event.connpass.com

非常に勉強になったので、今日はその感想として、明日から実践することを書いていきます。

リーダブルテストコード (株式会社ソニックガーデン 伊藤 淳一さん)を聞いて

↓発表で使用された資料

出典:https://speakerdeck.com/jnchito/number-vstat

speakerdeck.com

テストレビューが不足しすぎていた気づき

ようわからんならapproveしちゃダメです

ギクっとしました。

正直、機能ばかりのレビューに目がいって、テストはおおよそテストケースが網羅されているなと思ったら、ちょっとわかりづらいところもあっても、approveしてしまっていました。

変数を使って自己満足していた気づき

変数を使わずに文字列や数値をベタ書きする

これも「あっ」と思いました。

伊藤さんのageメソッドの例みたいに、変数を使って書いている自覚がありました。

こちらの方がなんだか格好良いじゃんと思って書いていたのですが、伊藤さんの改善版と比較すると分かりやすさが一目瞭然で、自己満足の書き方だったなあと思いました。

コンテキストとセマンティクスを意識してリーダブルなE2Eテストコードを書こう/オーティファイ株式会社 末村 拓也さん を聞いて

↓発表で使用されていた資料

出典:https://speakerdeck.com/tsuemura/kontekisutotosemanteikusuwoyi-shi-siteridaburunae2etesutokodowoshu-kou

speakerdeck.com

ユーザー目線でテストを書くことの副産物

ユーザーが要素を探すときと同じ方法で要素を探したい

これに関しては無意識的に今もできているので、今後これは意識的に継続しなければと思いました。

確かにidがxxxのボタンをクリック、みたいなテストがあったらソースコード見に行って、何のボタン押されたかを確認しなきゃいけないので不都合が多いですね。

アクセシビリティの高いテストはテスタビリティも高い

なるほど!という気持ちです。

確かに「このボタンをクリックして入力して・・・」というのがスムーズにテストができ、レビュワーがそれを直感的に理解できれば、実際の操作も単純明快で直感的になっている気がします。

今までにない視点だったので大変面白いと感じました。

テストコードにはテストの意図を込めよう/株式会社ビズリーチ 風間 裕也さん

↓発表で使用されていた資料

出典:https://speakerdeck.com/nihonbuson/tesutokodonihatesutofalseyi-tu-woip-meyou

speakerdeck.com

テストケース名は、「何をテストしたのか」に加えて「なぜテストしたか(意図)」を表現するべし

個人的に自動販売機の例が刺さりました。

私は「ここで何をテストしているのか書かなきゃ」という気持ちでテストケース名は書くものの、「なんでこのテストをしているのか」まで書ききれていないなーと気づきました。

面白いと思ったのは、これを書いておくことで将来修正が必要になった場合、どういう方針でテストすれば良いかまで明確になる、というのが新しい視点でした。(とある県が統合されたら、、、の部分)

質疑応答&パネルトークを聞いて

 伊藤さんが「テストをDRYでなくすると、テストが落ちやすくなる(仕様変更したらその都度テストが大量に落ちるなど)というのはあるが、それはデメリットというよりも仕様変更のインパクトがあるという考え方をした方が良く、仕様変更されればむしろテストはきちんと落ちた方が良い」という旨のことを話されていたのが印象深かったです。

私はついついテストが落ちるのを嫌がってしまうところがありますが、そもそものこういう考え方が大切だなと感じました。

 また、テストケース名をわかりやすく表現したい、といった参加者の質問に回答するな流れで、風間さんが「テストケース名を分かりやすく書くのが難しいと感じる場合は、テストしたいことが曖昧だったり、テストしたいことが複数ある場合が多い」とおっしゃっていたのもかなり印象深いです。

自分もRSpecでitの中身が書きづらいと感じた時などがあったら、そもそもテスト対象が十分にシンプルで明確かをチェックするように心がけたいです。

明日からやること

ということで明日からやることは、以下です。

  • ようわからんテストをapproveしない
  • 変数よりベタ打ちでテストする
  • systemテストのクリックなどはラベル名で探す
  • テストケース名にテストの意図を込める
  • テストケース名がうまく書けない時はテストの対象物が十分に明確でシンプルかを再考する

「神」な先輩プログラマーから学ぶ3つのコミュニケーションメソッド

こんにちは。

私は去年からプログラマーとして働いていますが、最初に入ったプロジェクトで「神」な先輩に出会いました。

技術的なレベルが非常に高いというのはもちろんですが、それ以外にもコミュニケーションが非常に取りやすくてとてもありがたいなーと思っていました。

今年新入社員も入ってきたので自分も良い先輩になるべく、「神」な先輩から学んだコミュニケーションのメソッドをここに記載をしておきます。

質問・相談のハードルを一気に下げる一言のメソッド

最初のプロジェクトに入ったとき、まず先輩に言われました。

どんな小さいことでも分からないことはなんでも早めに聞いてください!

そんな特別か?結構言ってる人多いのでは?と思った方もいるかもしれません。

一見、よくある「分からないことがあったら聞いてね」と同じに見えるかもしれませんが、決定的に違う点が2つほど隠れています。

1つは、「どんな小さいことでも」です。

初学者にとって、「こんな些細なこと聞いてしまっていいのか」は、質問を躊躇するあるあるだと思います。それを取っ払い、どんなことでも聞いていいよーと言われるのはとても心理的に大きいです。

2つ目は、「早めに」です。

これも初学者の質問する前あるあるで、「どこまで調べてから(時間を使ってから)質問すればいいのか」というのがあると思います。それも取っ払ってくれているのです。

困ったらまずアラートを出すべし、というのはビジネスマンとしてよく言われるもののなかなか難しい、というのがビジネスマンあるあるだと思いますが、まさにそれをさせてくれている言葉だなと思います。

テキストのトーンを明るくするメソッド

その先輩のテキストのメッセージは、基本的に絵文字か、!がついています。

何かを報告したときも、「了解」と来るか「了解!」と来るかでかなり印象が違うと思います。後者の方がかなり前向きな感じです。

特にリモートだと相手の顔色や状況がわからないので、こういったところで明るいトーンを保つことは非常に重要だなと思いました。

何かを相談した後の「他にはありますか?」のメソッド

相談するのは、相手の時間を奪うことでもあるので、こちらからするとどうしても申し訳ない気持ちも大きいのですが、その先輩は相談すると、最後に「それ以外で何か困っていることないですか?」と聞いてくれます。

これは、わざわざそれだけでリモートで打ち合わせをするほどではないものの、ちょっと気になっていることなどを話すきっかけとしてとても良いなと思いました。

最後に

他にも色々あるのですが、とりあえず3つ挙げました。

いずれもちょっとしたことのわりに効果が高い気がしているので、自分も真似していこうと思います。

基本情報を取らずに応用情報技術者試験に合格できたのでやったことと感想

こんにちは。

令和4年度春の試験で、応用情報技術者試験に合格できました。

私は基本情報を取らずに応用情報にチャレンジしました。

今回は合格できるまでにやったことと教材、感想を書いていきます。

受験を考えている人の参考になれば幸いです。

やったこと

応用情報技術者試験選択式の午前試験と記述式の午後試験に分かれています。

午前試験対策

いろいろな受験ブログ等を見ると、毎年同じような問題が出ると言われていたので、参考書などで全体をインプットするのではなく、過去問を解きながら覚えるかたちを取りました。

過去問道場というサイトで過去5,6年分をランダムで出題するように設定し、演習をしました。

5,6年といっても結構な量があるので1周するのも大変でした。元々は2,3周する予定だったのですが、途中で疲れて1周とちょっとしかできませんでした。

ただ、1周だけでも同じ形式の問題がたくさん出たので、解けるようになっていく実感もありましたし、対策方法は間違ってなさそうだなとは感じながら学習できました。

合わせて、過去問を解きながら、分からない用語は辞書的に参考書を使って周辺知識など合わせて学習しました。

使った参考書は『令和04年【春期】【秋期】応用情報技術者 合格教本』です。

gihyo.jp

午後試験対策

当日までの対策

午後試験は記述式の問題です。こちらは知識というよりも長文読解の要素が強いです。

こちらも過去問を使って対策しました。使った書籍は『2022 応用情報技術者 午後問題の重点対策』です。

www.itec.co.jp

午後は解答する問題を選ぶことができます。

当日どれを選ぶかを決めようと、各セクション2つ程度、過去問題を解いてみました。

ただ、年によって、取れる問題もあれば取れない問題もあったので、当日まで明確には決まりませんでした。

結局当日の問題を見て判断することに

したがって、結局当日に問題を見て解けそうだなーと思った問題を選びました。

必須の情報セキュリティ以外に選んだのは以下です。

午後試験は時間の余裕がないというのは知っていたので、このやり方は不安もあったのですが、過去問を2つずつくらいやっていたおかげで、当日素早く判断できたと思います。

感想など

今までプログラマーに転職してから1年で、以下を取得していました。

これらに比べるとやはり応用情報は取得の難易度も高く、受験までに要した学習時間も大きいので、取得できたことはとても嬉しかったです。

一方で、一般的に突破が難しいと言われている午後試験に関してはシンプルな技術力というよりも技術がテーマの長文読解能力を測られていると感じました。

私は長文の読解にはあまり苦手意識がないので、その点は良い方向に転んでくれたのかなと思っています。

基本情報を取っていないことについても、少なくとも「応用情報に合格」という点においては、支障はなかったと思います。

 

さいごに、当日は長丁場の試験になるので、集中力とも勝負になります。特に午後は、過去問を1つ解くだけでも疲れるのですが、本番は5つ解く必要があるので、過去問演習はなるべく集中した状態でやる訓練をしておくと良いと思います。

『モダンJavaScriptの基本から始める React 実践の教科書』が自分のニーズをキレイに満たしてくれた

こんにちは。

先日Reactを使っているプロジェクトに参加することになり、Reactを触ったことがなかったので勉強することにしました。

ここで手に取ったのが『モダンJavaScriptの基本から始める React 実践の教科書』です。

www.sbcr.jp

結果的にこの本が自分が知りたいなーと思っていたことをキレイに満たしてくれたので、この本の感想を書いていきたいと思います。

読む前の私の状況

プログラマーとしての経験が浅い私は、以下のような状態でした。

  • プロジェクト経験は1件
  • そのプロジェクトではRailsJqueryを使っており、自分が担当していたのは主にRails側の機能追加などの実装
  • フロント側はあまり自信がなく、Reactも触ったことがない

プロジェクト内のコードを見てみたのですが、正直「どれがReactのコードなのか?」「なぜReactを使う必要があるのか?」といったところが分かりませんでした。

知りたいと思っていたこと

そこで、私が知りたいなーと思ったのは以下のようなことです。

  • Reactは何ができるのか、の基本
  • Reactの構文の基本

ReactはリッチなUIを作れる、というくらいは知っていたのですが、具体的な書き方などを知らなかったのでそれを知りたいと思っていました。

なんでこの本を手に取ったか

Reactの本は調べるといろいろあったのですが、なぜこの本を選んだかというと、以下のような理由です。

  • 出版年が私が調べた範囲では他の本に比べて新しい(2021年9月)
  • 内容が易しそうなこと(基本部分が書かれていればとりあえず良い)

「React全く分かりません」という状態をまず脱却したかったので、とりあえず基本が押さえられていそうという理由で選びました。またReactなどのライブラリは数年でも主流な書き方等が変わりそうだなと思ったので、出版年が最近なのも考慮しました。

早速しっくりきた

本書は以下のような指摘から始まります。

「Reactの習得に苦戦してる人のほとんどは、そもそもJavaScriptへの理解が足りていない。だからこの本ではモダンなJavaScriptの基礎からやる。」

これを見て、「これですよ!」と思いました。

先ほど書いた、「どれがReactのコードかよく分からない。Reactを使う必要がわからない。」というのも、逆に言えば「JavascriptJQueryの書き方をきちんと理解していない。JavaScriptやJQuetyで何ができるのかを理解していない。」ということだったんですね。

プロジェクトに入って、Reactやらなきゃ!と焦っていましたが、その前段階でやるべき勉強があったということです。

基本を着実に解説してくれる

この本では、JavaScriptの書き方からReactの書き方まで、基本を着実に記載してくれています。(内容は公式サイトに目次の紹介があります。)

サンプルコードについては丁寧に解説がありますし、サンプル通りに書けば基本的には全て動いたのでここは新しい本を選んだという点も良かったかなと思います。

(5章あたりにちょっとサンプルコードには書き切られていない点がある*1のですが、それまでの学習を理解していたらググったり自分で補足して動くようにできると思います。)

さいごに:読んだ後の今の気持ち

この本はReactの入門書としての位置付けだと思うのでReactはもっともっと深いのだろうと思いますが、今まで、

「React使う機能追加などのタスクが来たらどうしよう・・・」

という気持ちだったのが、

「Reactのタスクやってみたいな〜」

というくらいにまで変化しました。

気持ちが前向きになったのが何より良かったかなと思います。

 

ということで、Reactを触ったことがなくて、基本を短い時間で勉強したい!という方にはオススメです!

*1:TailWindCss.jsxのファイルの先頭にimport "tailwindcss/tailwind.css"を書かないといけない

公務員からWeb系プログラマーになって思うこと

こんにちは。

私は約1年前に前職の公務員を退職してWeb系プログラマーになりました。ちなみに文系です。

せっかくのタイミングなので、公務員からWeb系プログラマーになって実際どうなのかを書いていきたいと思います。

「文系だけどプログラマーになりたいなー、けどやっていけるかなあ」と思っている方の参考になれば嬉しいです。

結論

まず結論としては、私は転職して本当に良かったと思っています。

日々成長を実感でき、会社の方に恵まれ、楽しくプログラミングできています。

新しく得た楽しさ

プログラマーの楽しさといえば、やっぱり「自分の手で動くものが作れる」というところかなあと思っています。

どれだけ小さい機能でも自分が作った機能がリリースされると本当に嬉しいです。

仕事についていけるの?

初めてのプロジェクトに入る前は、自分が足を引っ張って全く役に立たないのではないか、と大きな不安を感じていました。

実際に、実務で触るコードは自分で作ったアプリとは比較にならないほど大規模なので、コードを追うのも大変です。ただし、最初は小規模なバグ修正から始まり、数ヶ月経つ頃には大体のコードの全体像を把握し、徐々に大きな修正機能も担当できるようになっていきました。

もちろん先輩に比べたら工数はかかりますが、全く役に立っていない、、ということを感じることもなかったです。

今までの仕事でやってきたことは役に立つの?

転職する前は、プログラマーと公務員は全く違うもので、今までの仕事の経験は完全にリセットすることになると思っていました。

しかしながら、今までの仕事での経験は思った以上に自分の糧になって、プログラマーとして活かす場面が十分にあると感じました。

公務員の仕事の代表格である「調整業務」も、プログラマーとして仕様決めなどで大いに役に立ちました。その機能にかかる工数と難易度や、その変更に伴う効果を考えて、どのような仕様にするかを調整したり、相談のトーンを工夫して議論がスムーズにいくように考えたりしていますが、それは前職の経験が無ければできなかったことだと思います。

非エンジニアの方と話すときにも、元々同じ立場だったのでどのような説明をすれば相手に伝わるかが分かっているので、「説明上手」と言ってもらったこともありました。

新しく感じる苦しさ

楽しい毎日ですが、苦しいこともやっぱりあります。

自分のスキルと知識だと解決方法が分からず、途方に暮れるような感覚になることも時々あります。先輩に聞こうにも、自分がどこまで理解しているのかも、何をどのように質問すれば良いかも分からない、、、といった状態にもなります。

成果を出さないと...!という気持ちが大きくなって焦りにつながることもあります。

でも「楽しい」が圧倒的に大きい

それでも最初に毎日楽しいと言ったのは、こうした課題に向き合って調査をして、分からないなりにも先輩に相談して、「できた!」となった瞬間が最高だからです。

できなかったことができるようになる、という経験を繰り返すことができるのがプログラマーの魅力とも思うようになりました。

さいごに

転職して1年があっという間に過ぎました。

転職を決意したときはどうなるものかと思いましたが、これほど充実した日々が送れているので決断して良かったなあと思います。

色々な考え方、環境があるので、転職を悩んでいる人にこうしたほうがいいよ、と言えることはないのですが、少しでも参考になれば幸いです。