2026/11/13

ブログ

Boring Engineering #4:コードで意図を明確にする

名前を付けることは、昔から簡単だったわけではない

ソフトウェア開発における名前の付け方は、長い年月をかけて大きく進化してきました。

私が初めて使ったコンピューターは、Sinclair ZX81でした。当時のBASICでは、文字列や配列、ループ変数の名前に、アルファベット1文字しか使えないという制約がありました。

その後、Amstrad CPC 464では、Locomotive BASICによって最大40文字までの変数名が使えるようになり、より意味の分かりやすい名前を付けられるようになりました。しかし、標準の画面表示は1行40文字だったため、それほど長い名前を使うのは現実的ではありませんでした。

興味深いことに、さらに高性能なAtari STでC言語によるプログラミングを始めた頃も、一部の開発ツールでは、外部シンボル名が8文字までに制限されていました。

【図1:コンピューターの進化】

こうした制約があったため、プログラマーは意味を十分に表す名前を付ける代わりに、単語を省略して使うことがよくありました。

例えば、速度を表す velocity や高さを表す height のような単純な概念であれば、特に問題はありませんでした。

しかし、より複雑な概念を表そうとすると、短い名前では限界がありました。例えば、「最大水平速度(maximum horizontal velocity)」を maxhzvel のように省略しなければならないこともありました。

コンピューターやプログラミング言語、開発ツールが進化するにつれて、こうした制約は徐々になくなっていきました。

もう一つの実用上の制約は、従来の画面表示が1行80文字程度だったことです。そのため、長い変数名や関数名は使いにくい面がありました。しかし、現在では高解像度のワイド画面が普及し、この制約もほぼ解消されています。

また、長い名前を入力すること自体も、かつては手間のかかる作業でした。しかし、現在ではコード補完機能などの開発ツールのおかげで、ずっと簡単になりました。

では、こうした進化によって何が変わったのでしょうか。

現在では、コンピューターの性能や開発ツールの進化により、まるで普通の英語を読むように理解できる、表現力の高いプログラムを書くことが可能になりました。

コードを読むときに、それぞれの名前が何を意味するのか推測しなくても理解できることは、特にソフトウェアの保守において大きな価値があります。

業務ルールに意味のある名前を付ける

最近、私たちが開発していた機能の一つに、産業機器の種類ごとに異なる通知設定を扱う処理がありました。特定の機種だけがこの設定に対応していたため、アプリケーションでは機器の種類を確認する条件分岐を使用していました。

簡略化すると、次のようなコードです。

if equipment.type in (EQUIPMENT_TYPE_1, EQUIPMENT_TYPE_2):
  send_user_notifications()
  ...

このコード自体に、特に問題があるわけではありません。短く、明確で、読みやすいコードです。

しかし、「どのように判断しているか」は分かっても、「なぜその判断をしているのか」は分かりません。

この条件を初めて見る開発者は、指定された機器の種類にどのような共通点があり、なぜそれらを確認しているのかを理解する必要があります。また、同じ条件が複数の場所で使われている場合、業務ルールが変更されるたびに、すべての箇所を修正しなければなりません。

そこで、小さな関数を一つ追加します。

def supports_user_notifications(equipment):
    return equipment.type in (EQUIPMENT_TYPE_1, EQUIPMENT_TYPE_2)

すると、アプリケーション側のコードは次のようになります。

if supports_user_notifications(equipment):
    send_user_notifications()
    ...

関数名を見るだけで、処理の意図がすぐに分かります。

技術的な条件式を、意味のある業務上の概念に置き換えたのです。

将来、別の機種がユーザー通知に対応した場合も、この関数を修正して新しい機種を認識できるようにするだけで済みます。また、機器の設定や機能によって判断するなど、ルールが複雑になった場合でも、この関数を呼び出す側のコードを変更する必要はありません。

この方法の利点は、単にコードの行数を減らすことではありません。実際には関数を一つ追加しているため、コードの総量は少し増えているかもしれません。しかし、判断の背景にある知識が明確に表現され、一か所で管理できるようになりました。

次にコードを読む開発者のことを考える

ソフトウェアを開発するとき、私たちは当然、まず正しく動作させることに集中します。

しかし、産業システムは10年以上にわたって運用されることも珍しくありません。その間に、設備は進化し、要求仕様は変わり、開発担当者も入れ替わります。

5年後にコードを修正する人は、最初にそのコードを書いた人とは限りません。また、最初に開発した本人であっても、なぜその実装方法を選んだのか忘れているかもしれません。

だからこそ、コードの読みやすさが重要なのです。

意味のある関数名を付けることで、将来の開発者は、ソフトウェアが「何をしているか」だけでなく、「どのような意図で設計されたのか」 まで理解しやすくなります。

まとめ

長い年月をかけて、開発環境は大きく進化してきました。かつてプログラマーに短く分かりにくい名前を使わせていた技術的な制約の多くは、すでになくなっています。今では、コードの意図が明確に伝わるような書き方ができる時代になりました。

今回の開発でも、意味のある名前を付けた小さな関数を一つ導入することで、重要な業務ルールを理解しやすく、保守しやすくすることができました。コードは少し増えましたが、アプリケーションの重要な部分を理解するために必要な予備知識は減りました。

長期運用される産業用ソフトウェアでは、将来の変更時に、コードを理解するために必要な時間と労力を減らすことが特に重要です。

良いコードは、コンピューターに何をすべきかを伝えるだけではありません。次の開発者に、元のプログラマーが何を意図していたのかも伝えます。

これもまた、Boring Engineering なのです。


アルドネットの無料技術相談会実施中

アルドネットでは現在、産業ソフトウェア、IoT、センサー活用、AI導入、既存システムの改修などに関する無料技術相談会を実施しています!

「設備の稼働状況を遠隔で確認したい」

「手作業で行っている記録や管理を効率化したい」

「今ある設備を活かしながら、運用コストを見直したい」

そんな技術に関するお悩みも、お気軽にご相談ください😊

▼ 無料技術相談会の詳細はこちら

https://news.alldonet.com/news/202611



ニュースレターの登録はこちらから

登録フォームより読者登録のリクエストを送信してください。順次、リクエスト登録のご対応をさせて頂きます。