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


My Redmine

坂本です。ファーエンドテクノロジーではオープンソースのプロジェクト管理ソフトウェア「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でオンライン化してみました。
ファーエンドテクノロジーからのお知らせ(2024/04/24更新)
入門Redmine 第6版 出版記念企画セミナー「Redmineのアクセス制御」【2024/5/30開催】
入門Redmine 第6版(2024年3月23日発売)の書籍から「Redmineのアクセス制御」について解説します。
My Redmine 初回ご契約で「入門Redmine 第6版」プレゼントのお知らせ
Redmineのクラウドサービス「My Redmine」を初めてご契約いただいたお客様にRedmine解説書「入門Redmine 第6版」を進呈いたします。
2024年度ブランドパートナーに島根県在住のモデル ユイさんを継続起用
ユイさん(モデルスタジオミューズ所属)をファーエンドテクノロジーの2024年度ブランドパートナーとして継続して起用します。
My Redmine スタンダードプランおよびAdminサポートデスクプランの料金改定のお知らせ【2024年4月ご利用分より】
2024年4月ご利用分より、My Redmine スタンダードプラン(民間企業・個人向け及び官公庁向け)とAdminサポートデスクプランの料金を改定いたします。
Redmineの最新情報をメールでお知らせする「Redmine News」配信中
新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け