坂本です。ファーエンドテクノロジーではオープンソースのプロジェクト管理ソフトウェア「Redmine」の開発協力の一環として、脆弱性診断を2年前から独自に行っています。脆弱性診断でRedmineを自動で動かすseleniumのコードを随時追記してきましたが、コードのボリュームが増えてきたためコードの見直しをしました。コードの見直しにはオライリーの「リーダブルコード」という本を参考にしました。
過去のブログでも脆弱性診断の取り組みについて紹介しています。
seleniumに関するスライドはこちらからご覧頂けます。
「リーダブルコード」という綺麗なコードを書くためのテクニック本を参考に修正作業を進めました。コードの見直しのときに参考になる書籍として上司からアドバイスをもらっていたものです。
seleniumのリファクタリング前のコードは、メソッドの命名やコメントの文がバラバラでした。例えば同じ「更新」という処理のコメントでも「~を更新」「~の更新」「~を更新する」「update ~」といった具合で統一感がありません。コードを読む人に疑問を持たせないようにメソッド名やコメントは統一した方が良いと思いました。
Redmineではチケットやガントチャート、wiki等にPDFファイルをエクスポートする機能があります。それぞれの画面に「エクスポートする」という機能がありますが、seleniumのメソッド名が同一の処理にも関わらず「export_〇〇」や「output_〇〇」と混在してしまっていました。
どちらも意味は通じますが、明確な単語を選んだ方が良いので「export_〇〇」に統一することにしました。このメソッドが「Redmineの何の機能を実行しているか」を表すのに「出力」よりも「エクスポート」の方が適切だと思い、コメントも「PDF出力」から「PDFにエクスポート」に変更しました。(Redmineの画面ではエクスポートと表示されているため)
これもメソッド名についての変更ですが、機能ごとにクラスを分けているのにも関わらず、管理機能にはadministarton, wiki機能にはwikiという単語をメソッドに含めてしまっていたために、とても長いメソッド名になってしまっていたので変更しました。
変更前はできるだけ詳細に書くように「管理機能のグループに新しいユーザーを追加する(add_new_user_in_administration_group_details)」とすべてメソッド名に含めてしまっていたのですが、そのことでコードが長くなり逆に見づらくなっていました。moduleやclassから 管理機能のグループ 画面を表していることがわかるため、メソッド名としては「新しいユーザーを追加(add_new_user)」だけで意味が伝わります。
seleniumのコードは私がメインで書いていることで、コメントやメソッド名が「後で自分が見た時にわかるためのコメント」になっていました。自分がわかるためのコメントも大事ですが、このコードを読んだことのない人が見たときに困らせないためのコメントにするべきだと改めて感じました。読み手の立場になって考え、質問しそうなことを想像することで、必要なコメントであるかどうかが判断しやすくなりました。
例えば以下のコードは、Redmineのパスワードを変更するメソッドです。このメソッドを実行する前と後ではそれ以降の動きが変わってしまうので、初めてこのコードを見る人にとっては疑問を抱く箇所な気がしました。このメソッドを実行した後は動きが変わることが伝わるコメントにすることで、以降に影響があるメソッドであることがパッと見てわかるようになりました。
使わない変数を定義しない、というのは意識しているものの、一度しか使わない変数というのはたまに私もやらかしてしまいます。書いているコードが多くなればなるほど「なにをしているのか」がわかりにくくなるため、コードは見づらくなってしまいます。またそれを考える時間がもったいないので、不必要な処理はできるだけ省くことが大事だと改めて思いました。
私は「コメントのコメント」をついつい書いてしまいがちだったのですが、テキストを読んで、それは余計にコード量を増やすだけだと改めて学びになりました。一番初めに書いておいたコメントを見直すことなく追加し続けたため、このような状況になったんだと思います。
今回は、リーダブルコードを読んで、既存のコードをリファクタリングしました。コードを書き始めたころは量が少なく綺麗に書けていても、コードの量が増えていくことで「当初と違う構造になっていた」「よく考えてみればコメントが要らなかった」など気が付くところが多くありました。
今回コード全体の見直しを行なってコードを綺麗にできたのは良い経験にもなったなと思います。
![]() |
Redmineの脆弱性チェックを自動化するためにVaddyとseleniumを使うことで、作業の手間がなくなりとても楽になりました。 |
![]() |
通信制大学を卒業。会社の学費補助の制度を利用して通信制短大・大学で勉強しました。 |
![]() |
印刷や封入の必要がない日本郵便のサービス「Webレター」で文書発送の手間を大幅に削減できました。 |
![]() |
ファーエンドテクノロジーがサポート&プロモーションを行う「Planio」が日本進出5周年。 |
![]() |
今まで集合研修形式で行っていた教育をSlackとGoogle Formでオンライン化してみました。 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |