リーダブルコードを読んでseleniumのコードをリファクタリングしました


坂本です。ファーエンドテクノロジーではオープンソースのプロジェクト管理ソフトウェア「Redmine」の開発協力の一環として、脆弱性診断を2年前から独自に行っています。脆弱性診断でRedmineを自動で動かすseleniumのコードを随時追記してきましたが、コードのボリュームが増えてきたためコードの見直しをしました。コードの見直しにはオライリーの「リーダブルコード」という本を参考にしました。

過去のブログでも脆弱性診断の取り組みについて紹介しています。

seleniumに関するスライドはこちらからご覧頂けます。

リーダブルコードを参考にコードを修正

「リーダブルコード」という綺麗なコードを書くためのテクニック本を参考に修正作業を進めました。コードの見直しのときに参考になる書籍として上司からアドバイスをもらっていたものです。


リーダブルコード(オライリー)
――より良いコードを書くためのシンプルで実践的なテクニック

リファクタリング前のコード

seleniumのリファクタリング前のコードは、メソッドの命名やコメントの文がバラバラでした。例えば同じ「更新」という処理のコメントでも「~を更新」「~の更新」「~を更新する」「update ~」といった具合で統一感がありません。コードを読む人に疑問を持たせないようにメソッド名やコメントは統一した方が良いと思いました。

明確な単語を選ぶ

Redmineではチケットやガントチャート、wiki等にPDFファイルをエクスポートする機能があります。それぞれの画面に「エクスポートする」という機能がありますが、seleniumのメソッド名が同一の処理にも関わらず「export_〇〇」や「output_〇〇」と混在してしまっていました。


変更前のseleniumコード


変更後のseleniumコード

どちらも意味は通じますが、明確な単語を選んだ方が良いので「export_〇〇」に統一することにしました。このメソッドが「Redmineの何の機能を実行しているか」を表すのに「出力」よりも「エクスポート」の方が適切だと思い、コメントも「PDF出力」から「PDFにエクスポート」に変更しました。(Redmineの画面ではエクスポートと表示されているため)

不要な単語を捨てる

これもメソッド名についての変更ですが、機能ごとにクラスを分けているのにも関わらず、管理機能にはadministarton, wiki機能にはwikiという単語をメソッドに含めてしまっていたために、とても長いメソッド名になってしまっていたので変更しました。


seleniumのコードのdiff

変更前はできるだけ詳細に書くように「管理機能のグループに新しいユーザーを追加する(add_new_user_in_administration_group_details)」とすべてメソッド名に含めてしまっていたのですが、そのことでコードが長くなり逆に見づらくなっていました。moduleやclassから 管理機能のグループ 画面を表していることがわかるため、メソッド名としては「新しいユーザーを追加(add_new_user)」だけで意味が伝わります。

読み手の立場になって考える

seleniumのコードは私がメインで書いていることで、コメントやメソッド名が「後で自分が見た時にわかるためのコメント」になっていました。自分がわかるためのコメントも大事ですが、このコードを読んだことのない人が見たときに困らせないためのコメントにするべきだと改めて感じました。読み手の立場になって考え、質問しそうなことを想像することで、必要なコメントであるかどうかが判断しやすくなりました。

例えば以下のコードは、Redmineのパスワードを変更するメソッドです。このメソッドを実行する前と後ではそれ以降の動きが変わってしまうので、初めてこのコードを見る人にとっては疑問を抱く箇所な気がしました。このメソッドを実行した後は動きが変わることが伝わるコメントにすることで、以降に影響があるメソッドであることがパッと見てわかるようになりました。


seleniumのコードにわかりやすいコメントを追加

本を読んで学んだこと

一度しか使わない変数は定義しない

使わない変数を定義しない、というのは意識しているものの、一度しか使わない変数というのはたまに私もやらかしてしまいます。書いているコードが多くなればなるほど「なにをしているのか」がわかりにくくなるため、コードは見づらくなってしまいます。またそれを考える時間がもったいないので、不必要な処理はできるだけ省くことが大事だと改めて思いました。

コメントのコメントを書かない

私は「コメントのコメント」をついつい書いてしまいがちだったのですが、テキストを読んで、それは余計にコード量を増やすだけだと改めて学びになりました。一番初めに書いておいたコメントを見直すことなく追加し続けたため、このような状況になったんだと思います。

まとめ

今回は、リーダブルコードを読んで、既存のコードをリファクタリングしました。コードを書き始めたころは量が少なく綺麗に書けていても、コードの量が増えていくことで「当初と違う構造になっていた」「よく考えてみればコメントが要らなかった」など気が付くところが多くありました。

今回コード全体の見直しを行なってコードを綺麗にできたのは良い経験にもなったなと思います。

こちらの記事もオススメです!
Vaddyとseleniumを使ってRedmineの脆弱性チェックを自動化
Redmineの脆弱性チェックを自動化するためにVaddyとseleniumを使うことで、作業の手間がなくなりとても楽になりました。
通信制大学を卒業しました
通信制大学を卒業。会社の学費補助の制度を利用して通信制短大・大学で勉強しました。
Webレターで文書の発送を簡単に
印刷や封入の必要がない日本郵便のサービス「Webレター」で文書発送の手間を大幅に削減できました。
Redmineベースのプロジェクト管理サービス「Planio」日本進出5周年
ファーエンドテクノロジーがサポート&プロモーションを行う「Planio」が日本進出5周年。
集合研修をオンライン化してみたぞ!
今まで集合研修形式で行っていた教育をSlackとGoogle Formでオンライン化してみました。
ファーエンドテクノロジーからのお知らせ(2021/12/01更新)
【1/21開催】月例Redmineセミナー「Redmine利用事例紹介 アルコニックス株式会社様」
Redmineをどのように業務で活用しているのか企業様の事例をご紹介します。
シンプルなUIでRedmineのチケットを簡単に入力できる「RedMica Bridge」ベータ版をリリース
シンプルなUIでチケットを簡単に作成・更新できるRedMica Bridgeベータ版をリリースしました。複数のRedmineのチケットを一元管理もできます。
プロジェクト管理ツール「RedMica」バージョン 2.0.0をリリース Redmine互換のオープンソースソフトウェア
今日使える明日のRedmine「RedMica」の最新バージョン2.0.0をリリースしました。次期バージョン Redmine 5.0の新機能を先行利用できます。
【11/19開催】月例Redmineセミナー「RedMica(2021年11月リリース版)新機能解説セミナー」
最新版RedMica(2021年11月リリース)の新機能を解説します。オンラインセミナーを開催します。無料でご参加いただけますので、ぜひお申し込みください。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け