みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
さて、ノンプログラマーの皆さん。
コードの読みやすさ、気にしていますか?
ノンプログラマーは「書き方」についてのルール無用なケースが多いため、気にしていない方のほうが圧倒的に多いかも知れませんね。
ですが、そのままにしていると…
「2週間前に自分が書いたはずのコード…全然読めん!!」
と、過去作成したコードおw読み返すのに膨大な時間を費やしてしまう…ということもあるかも知れません。
本来、業務を効率化するためにプログラムを活用しているのに、過去のコードに時間をとられてしまうのでは本末転倒ですよね。
ということで、今回は特にノンプログラマーに向けまして、リーダブルコードの重要さについて、またその指針とテクニックについて一部紹介していきます。
※この記事はコミュニティノンプロ研定例会Vol.5「ノンプログラマーのための『リーダブルコード』超入門」の内容の一部を加筆修正して記事にしたものです。セミナーからの抜粋動画もありますので、合わせてご参考くださいね。当日の様子は以下のツイートまとめもご覧くださいませ。
なぜVBAは嫌われているのか
VBAは利用者は多いはずなのに、嫌っている人も多い言語の一つです。
以下の記事で紹介されている通り、数ある言語の中で、嫌いな言語の3位という結果を残してしまっています。

その理由は色々とあると思うのですが、私自身の経験でいうと、「コードが汚くてひどい目にあった」というのも、その理由の一つになっているのではないかと思っています。
業務のうち、かなりクリティカルな部分をマクロ化していて、その保守管理者が突然辞めてしまったり、業務変更があって修正をしなくてはいけなくなったりしたときを想像してみましょう。
そんなときに、いざそのマクロのコードを拝見!と、蓋を空けてみたら、まあ誰も読めない、どこから手を付けて良いかわからない…
まさに、Excelの「xlsm」ファイルが、パンドラの箱のような存在になってしまっていること、私自身も何度も見かけたことがあります。
そういう残念なことが多いから、VBAは嫌われてしまっているのかな、と思ったりしています。
同じ処理をするコードでも書き方でその読み取る速度が異なる
例えばこんなコードをご覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub test() Dim a, b, c a = InputBox("入力して下さい") For b = 1 To a For c = 1 To a If b = c Then ThisWorkbook.Worksheets(1).Cells(b, c).Interior.ColorIndex = 3 Sheets(1).Cells(b, c) = b * c ElseIf Not b = c Then Sheets(1).Cells(b, c) = b * c End If Next c Next b End Sub |
何をするプロシージャなのか…かなり読み解かないとわかりませんよね。
さて、このコードですが、同じ目的を達成する別の書き方として以下のように書くこともできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'任意の整数を入力して縦n×横nの表を作る Sub createKuku() Dim n As Long n = InputBox("任意の整数を入力して下さい") Dim i As Long, j As Long With Sheet1 For i = 1 To n For j = 1 To n .Cells(i, j).Value = i * j If i = j Then .Cells(i, j).Interior.ColorIndex = 3 '縦と横が等しいなら背景色を3:赤 Next j Next i End With End Sub |
以下のような理由から、こちらのほうが読み取るのが圧倒的に速いはずです。
- コメントやプロシージャ名から、プロシージャの役割がなんとなくわかる
- 変数名やInputBox関数のメッセージから、それぞれの変数の役割もなんとなくわかる
- 分岐や反復はきちんとインデントされているので、その対象となっているブロックがどこからどこまでなのか、コードのフォルムで把握することができる
このように、同じことを達成するコードだったとしても、その書き方によって読み取るスピードが圧倒的に異なる、ということは現実としてあります。
これも含めて、VBAでよく見た具体的な事例について、以下の動画で紹介していますので、合わせてご覧ください。
汚いコードは負債・良いコードは資産
そうなんです。
読みづらいコードは自分やチームにとって「負債」になってしまうんですね。
逆に、読みやすいコードは、自分やチームにとって「資産」になります。
何かそのプログラムに修正を加えなくてはならなくなったときに、読みやすいので、すぐに修正を加えることができるからです。
それだけではなく、さらに利点があります。
別の新たなプログラムを作ろうとしたときに、「確か似たような処理を作ったっけ」と部分的に再利用をすることができるようになります。
要は、良いコードであれば、書けば書くほど、「再利用できるコードのストック」が増えていくという形になるわけです。
その差は天と地の差がありますよね…!
ノンプログラマーはコードが汚くなりがち問題
しかし、残念ながらノンプログラマーはその事実に気づく機会が非常に少ない…
本業のプログラマーであれば、会社の上司や先輩が「おい、そのコード読みづらいから良くないよ」と教えてくれるのですが、ノンプログラマーは孤独な一人チームのことが多いのです。
そうなると、リーダブルコードの重要性に気づく機会がなく、汚いコードを量産しまくってしまっていた…ということは、実際にありえるのです。
ですから、本来入門書などで、その重要な事実をちゃんと身につけられていれば良いと思うのですが、残念ながら現時点ではそのようにはなっていないようです。
ですから、こういう本を書かざるを得ませんでした。

おかげさまで、多くの支持を頂いています。
できれば、入門書から書きたいです…!
最初からリーダブルコード書くことはできますし、それによる残念な出来事をできるだけ減らしたいという気持ちが強くあります。
リーダブルコードを書くためのテクニック
リーダブルコードとは、「より速く理解できるコード」のことです。
その指針として、以下3つを紹介します。
- よりシンプルなほうを選ぶ
- 情報の密度を高く
- 一貫性をもたせる
例えばコメント。
以下のようなコードがあります。
1 2 3 4 5 |
If n > 50 Then 'nが50より大きい場合 MsgBox "50より大きい" ElseIf n <= 50 Then 'nが50以下の場合 MsgBox "50より小さい" End If |
このコード、シンプルではありませんよね。
条件式とメッセージと、コメントで同じようなことを表現してしまっているので、情報の密度も薄いです。
これも含めて
- インデントと空行
- 改行
- 変数の宣言と命名
- マジックナンバーと定数
- 関数と部品化
- コメント
- 省略をせずに明示する
などといった観点で読みやすく書くテクニックを駆使することができます。
以下の書籍も超オススメですので、ぜひバイブル的に活用いただければと思います。

「読みやすいコードか?」を常に考えてコードを書く
とはいえ、「絶対にこれが正解」という書き方は存在しません。
例えば、定例会が終わった後に、このようなネタがコミュニティ内で議論になっていました。
#ノンプロ研 でリーダブルコードを学んで出てきた悩み。
「変数のスコープは狭く」を心がける中、唯一Public変数(グローバル変数)にしているのが、プログラムのあちこちで使う設定を格納する変数。
ある時これをPublicでなく狭いスコープにしたら、読みにくいコードになってしまった。#VBA
— otani3@プログラム勉強中 (@otani3nonpro) April 20, 2018
グローバル変数使うと、変数の管理がしづらくなっちゃうという一面がありつつ、スコープを狭くすると、何度もその変数の中身を引数とかで引き渡さなくてはいけなくて、コードが冗長になる…という問題です。
すげー、嬉しかったですね。
おそらく、どんなプログラムを書いているのかにもよりますし、最終的には好みの問題なのかも知れません。
ただ、ノンプログラマーの皆さんが、コードを書くときに「これは読みやすいかな?」と考えてくれるようになったのであれば、もう私の活動としては大成功かなと思います。
これからも、ノンプログラマーの皆さんが、プログラミングを楽に学び、活用できるように支援していければと思います。
本コミュニティでは、セミナーやオンラインでの情報提供やコミュニケーション、定期的な勉強会の開催といった機会を提供させていただいています。
以下ページにて、詳細の確認およびお申し込みが可能ですので、同じような仲間が集まる学び機会が欲しい!という方はご参加いただければうれしいです。

「ノンプログラマーのためのスキルアップ研究会」定例会・分科会レポート
コミュニティ「ノンプログラマーのためのスキルアップ研究会」では、毎月1回、学びの質やモチベーションを高めるための定例会を開催していますので、こちらで過去のレポートをお送りしています。- 定例会Vol.1 プログラミングを習得するためには何時間の学びが必要なのか
- 定例会Vol.2 プログラミング学習のコツは「アウトプット」!人に教えるつもりで学ぶことのススメ
- 定例会Vol.3 ノンプログラマーはどのプログラミング言語を学ぶべきか
- 定例会Vol.4 プログラミング初心者が目指すのにオススメのツールBest30【前編】 / プログラミング初心者が目指すのにオススメのツールBest30【後編】
- 定例会Vol.5 なぜ「コードの読みやすさ」が大切なのか?その指針とテクニックとは
- 定例会Vol.6 なぜプログラミングを学ぶのか、技術革新の歴史を踏まえて考える
- 分科会Vol.1 #ノンプロ研 初の分科会「情シスNight」開催レポートを書きました
- 定例会Vol.7 プログラミングの学び方について知っておいてほしいこと
- 定例会Vol.8 独立して3年、なぜどのようにプログラミングスキルを磨いてきたのか
- 定例会Vol.9 コミュニティの活用術とノンプロ研の今、そしてこれからについて
- 定例会Vol.10 プログラミング学習と脳の使い方~本当に正しい学習してるのか?
- 定例会Vol.11 ノンプログラマーでも「クラス」を学ぶべき理由
- もくもく合宿Vol.1 ノンプロ研スタート以来初めて開催された「もくもく合宿 in 三浦海岸」
- 定例会Vol.12 書籍執筆は儲からない…?~私が書籍を頑張る4つの理由~
- 大阪分科会Vol.1 「プログラミング上達のための8つの約束」でコミュニティの意義を再認識した話
- 定例会Vol.14 会社員ノンプログラマーでもバリバリスキルを上げながら活躍する方法

投稿者プロフィール
- 株式会社プランノーツ 代表取締役
-
株式会社プランノーツ代表、コミュニティ「ノンプロ研」主宰。1976年こどもの日生まれ。東京板橋区在住。「ITで日本の『働く』の価値を上げる!」をテーマに、VBA&GASの開発、講師、執筆などをしております。→詳しいプロフィールはコチラ
★ご依頼・ご相談はお気軽にどうぞ!→お問い合わせはコチラ
★フォロー頂ければ嬉しいです。
コメント