• 検索結果がありません。

フレッシュマンに向けたプログラミングのススメ:1.読みやすいコードが良いコード

N/A
N/A
Protected

Academic year: 2021

シェア "フレッシュマンに向けたプログラミングのススメ:1.読みやすいコードが良いコード"

Copied!
4
0
0

読み込み中.... (全文を見る)

全文

(1)特集. Special Feature 基応 般. [フレッシュマンに向けたプログラミングのススメ] 専. 1 読みやすいコードが良いコード 平鍋健児 (株)永和システムマネジメント. “Any fool can write code that a computer can. それはどんなコードなのだろう.. understand. Good programmers write code that.  このテーマを,3 つの視点から書いていきたい.. humans can understand.”. 1. コード片の微視的視点,2. 設計としての大域的視 ― Martin Fowler. 1).  学業プログラミングと商業利用される製品やサー ビスの商用プログラミングが圧倒的に違うのは,そ. 点,3. ソーシャル活動としての視点,である.. コード片の微視的視点. の寿命,分量,そして経済的な価値にある.学生時.  プログラミングという活動は,文字を使って意図. 代のプログラミング対象の多くは,課題や研究対. を運ぶ創作活動だ.分かる人には分かる,という類. 象としたコードで,数名の限定された人に使われ. の芸術ではない.できるだけ多くの人に読んでも. る,数百行のコードだ.しかし,仕事でのプログラ. らって素早く理解してもらうような「言葉選び」と. ミング対象は,数年以上の時間生存し,多いときに. 「章立て」をしていく.言葉選びは「識別子の名前. は 100 万行を超えるコードであり,数名以上でチー. 付け」,章立ては「モジュール分割」にあたるだろう.. ム開発する.そして,作られたプログラムはシステ. 486. ムとして稼働し,社会活動で利用され,対価を生む.. 良い名前を選ぶ.  こうなると,書くコードの質の中心は,読みやす.  プログラミングでは,変数,関数,クラス,など. いこと,変更しやすいこと,テストしやすいこと,. などの識別子にプログラマが自由に名前を付けるこ. になる.コードは誕生の時点(はじめてあなたが書. とができる.たとえば変数名である.この名前は(処. いた時点)から多くの人の目にふれ,手にかかり,. 理系からすると)なんでもよく,a1 という名前で. 成長していく.書くよりも読まれる回数と時間が圧. も OK だ.しかし,そのような意味のない名前は. 倒的に多くなる.だから,最初のアドバイスはとに. 読み手をとても苦労させる.コードを読んだら実は. かく読みやすいコードを書くことである.書くのに. この変数はユーザの名前を保持していることが分か. 費やす時間のコストを, (自分も含む)後で読む人. り,この変数名を user_name に変えた瞬間,圧倒. のコストの削減のために払っておくのだ.プログラ. 的に読みやすさが増すだろう.. ミングという活動は,製造ではなく設計であり,工.  そのものが運んでいる意図をぴったりと伝える名. 業製品の生産活動より文芸に近い活動だと思う.そ. 前を探そう.時間を取って「探す」のだ.この名前. れも複数人で書くソーシャルな文芸活動だ.私が. 選びに,プログラミングの時間の半分を使ってもよ. 知っている良いプログラマに文系出身の人が多くい. いくらいだ.オンラインのシソーラス辞書(類義語. るのも,そういうことではないか,と思う.読みや. 辞書)をあたってみよう.tmp, ret, data という名. すいコード,さっと理解でき,修正しやすいコード.. 前をやめよう.既存の変数名の最後に“2”が現れ. 情報処理 Vol.60 No.6 June 2019 特集 フレッシュマンに向けたプログラミングのススメ.

(2) たら注意しよう(findPlayer という関数名があると きに findPlayer2 という名前を付けるなど) .これ. 設計としての大域的視点. はおそらく Copy&Paste して一部を修正した関数.  コードが大きくなると,全体をモジュールに分割. であり,名前付けに時間を使っていない証拠だ.さ. する必要がある.モジュールを抽象的な言葉として. らに,頻出する名前の一部の語彙を注意深く選ぼう.. 使ったが,それは関数であったりクラスであったり,. remove か delete か,start か begin か,というレ. それらをまとめたファイルやパッケージ,といった. ベルだ.一貫性を持って名前付けしよう.. 構造物だ.さらにこれらの上位には 「アーキテクチャ」.  問題領域から名前を取ろう.コンピュータの言葉. という全体設計方針を司る大域構造も存在する.. でなく,ユーザが使う言葉.開発の会話で流通して いる言葉を使うことによって,その言葉が持つ認知. 良い名前を選ぶ(再度!). 度を,読みやすさに利用しよう..  ここでも名前の選択は重要だ.そのモジュールが モジュールとしてうまく役割を持ってまとまった単. 変数のスコープを短くする. 位となるかどうかは,「良い名前がつくか」という.  コードを読むときに,人間はいったん変数名など. 観点が良い指標となる.etc, util という名前が付い. を短期記憶に置いてコードを読み進める.その名前. たらそのモジュールの必要性を疑うのがよい.まと. がコードテキストの中でアクセスできる範囲を制限. めてはいるが,何かの入ったバケツという程度の意. しよう.最も広いスコープを持つのはグローバル変. 味にしかならない.力強い名前が付く単位でまとめ. 数だ.まずこれを避ける.これで,常にこの変数の. るべきだ.. 存在を気にかける必要がなくなる.次に,変数の宣.  良い名前を選んでいくと,識別子の意味の周りに. 言をできる限り遅らせる.宣言だけで初期化をして. 他の識別子が自然に集まっている感覚を得ることが. いない変数は人間の記憶コストが高い.コード上は. ある.たとえばパッケージの中にクラスがあり,そ. 可能な限り最も下に持っていく.さらに,使う直前. の中に変数とメソッドがあり,という名前の階層構. まで宣言を遅らせよう.あるブロックの中だけ使わ. 造が,問題領域のオントロジから,素直に類推が効. れる変数であれば,ブロックの中だけに,たとえば. く名前付けになる.実行時にどう処理が流れるか,. ループ内でしか使われない変数はループ外でなく. ということではなく,「世界はこう組み立てられて. ループ内で宣言しよう.. いるはず」,という感覚だ..  特に,スコープが短い変数に限っては,本当に短 い名前を使ってよい.たとえばループカウンタは,. 知識領域の混在を避ける. element_index でなく i の一文字でよい.これは意.  あるモジュールの中に,複数の知識領域の言葉が. 図を運ぶ名前の例外だが,短いスコープ(ループ内). 混在するのは良くない設計の例だ.たとえば,1 つ. に限ってはむしろこちらを良しとする.. の関数の中に,コンピュータのメモリを扱うコード.  同じ変数を別目的に使いまわさないことも重要だ.. と,ビジネスロジック(業務のルールを表現するコー. 途中から意図が変わる名前は解読がひどく厄介に. ド)が混在したら,それは間違った分割を示唆して. なってしまう.別の名前の変数として別のタイミン. いる.同様に,UI のコード,通信のコード,デー. グで宣言しよう.. タベースの初期化コードなど,こういった出自も必 要知識も別のものは別々の関数に,さらに上位のモ ジュールでも分割すべきだ.. 1. 読みやすいコードが良いコード 情報処理 Vol.60 No.6 June 2019. 487.

(3) 特集. Special Feature.  コードを読んでいき,これらの別の領域のコード. チームでコーディング標準を合意しよう. が混ざって現れると読んだり修正したりするのに大.  Extreme Programming のプラクティスの 1 つで. 量の知識が必要となる.あっちを調べてこっちを調. ある.チームで集まり,コーディングの作法につ. べて,という作業が必要になる.さらに,ある領域. いてのルールづくりを一緒にしようというプラク. での変更が大域構造を伝わって横断的に広まり,全. ティスだ.人それぞれにインデントの数やカッコ. 体の修正が必要になる.1 つの領域の修正は,1 カ. の付け方の位置,if の後にスペースを置くかどうか,. 所にとどまるべきだ.. return の後にカッコを付けるかどうか,などなど, 多くの「好み」が存在する.これらは好みの問題で. Design Patterns, Principles, Refactoring の存在を知る. ある反面,チームでこの好みに一貫性がないと,非.  どうモジュール分割すべきか,という課題は歴史. 良い悪いではなく,「一貫性がある」ことだ.チー. 的にも古く,多くの知見が存在する.繰り返し現れ. ムで決めよう.. る問題とその文脈,解決方法に名前をつけたものが.  この活動は,チームの個々人の好みの表明にもな. Software Patterns として多く知られている.最も. り,会話を活発にするきっかけにもなる.ネット上. 2). 常に読みにくいコードになる.大切なのはどちらが. には目を通しておく. に各言語のポピュラーなコーディング標準がいくつ. ことをお勧めする.それと同時に,ソフトウェア設. も発見できるだろう.これらをもとに話し合ってみ. 計の基本原則を集めた Robert C. Martin の SOLID. よう.. 原則,さらに,設計から実装という通常の流れでは.  また,各言語,各 IDE(開発環境)には,このルー. なく,実装から再設計する Refactoring という手法. ルに則らないものに警告を出すツールが存在する.. が存在する.これらにも良い設計の考え方が含まれ. 決めたルールを元にこれらのツールを設定し,コー. るが,紙面の都合で説明できないが,目を通してお. ドをチーム共有のリポジトリ(共同のコードベース). くことを強くお勧めする.. にコミット(統合)する際に,再度自動で統一する.  これらは,ともにオブジェクト指向プログラミン. のがよいだろう.. 有名な GoF の 23 パターン. グを前提としてものである.今後より一層,データ 指向や関数型,さらに AI を活用したプログラミン. オープンソースに参加しよう. グが増えてくるものと思われる.これらの分野でも,.  業務でのプログラミング活動をしていても,必ず. 新たに Patterns や Principles, Refactoring が登場. オープンソースのライブラリやフレームワークを利. するであろう.もし読者の中にこの分野(設計知識. 用することになるだろう.もし,そのオープンソー. の再利用としてのパターン)に興味がある方がいた. スが気に入ったら,実際にそのコードにコントリ. ら,パターンのライティング活動にも参加すること. ビュートしよう.ちょっとした機能追加や,バグ修. をお勧めする.. 正などを,GitHub を経由して作者に伝えるのだ.  最初は敷居が高く感じるかもしれないが,そこで. ソーシャル活動としての視点. のコミュニケーションは,自分のプログラマとして.  多くのソフトウェア開発は,チームとしてのソー. のソーシャルな交流の場となり,人脈づくりにも役. シャルな活動である.この視点から,いくつか紹介. 立つだろう.ぜひトライしてみてほしい.. の腕前をあげると同時に,世界各地のプログラマと. しよう. 488. 情報処理 Vol.60 No.6 June 2019 特集 フレッシュマンに向けたプログラミングのススメ.

(4) エピソード  最後に,どういったコードが読みやすいコードだ ろうか,ということを思い出させるエピソードを. 1 つ紹介したい.Wiki を作った Ward Cunningham. 参考文献 1)Fowler, M. : Refactoring : Improving the Design of Existing Code, Addison-Wesley Professional (1999). 2) Gamma, E. et al. : Design Patterns : Elements of Reusable Object-Oriented Software, Addison-Wesley Professional (1994). (2019 年 1 月 15 日受付). がインタビューで,彼が出会った良いコードについ て,こんな話をしている.   “そのコードは,素晴らしいコードだった.ある とき,私はそのソースリストをプリンタに出力した のだが,それを落としてしまい,ページがバラバラ になってしまった.しかし,それでも,そのコード は読めたのだ.そのコードは,どこからでも読み始 めることができ,意図が明確だった.”  「どこからでも読み始めることができ,意図が明確 なコード」,これが素晴らしいコードの 1 つの例では. ■平鍋健児 [email protected] (株)永和システムマネジメント代表取締役社長, (株)チェンジビ ジョン CTO.福井で受託開発を続けながら,オブジェクト指向設計, 組込みシステム開発,アジャイル開発を推進し,UML エディタ astah* を開発.国内外で,アジャイル開発の普及に努める.ソフトウェアづく りの現場をより生産的に,協調的に,創造的に,そしてなにより,楽 しく変えたいと考えている.著書『アジャイル開発とスクラム〜顧客・ 技術・経営をつなぐ協調的ソフトウェア開発マネジメント』,翻訳『リ ーン開発の本質』, 『アジャイルプロジェクトマネジメント』など多数.. ないだろうか.. 1. 読みやすいコードが良いコード 情報処理 Vol.60 No.6 June 2019. 489.

(5)

参照

関連したドキュメント

企業名 株式会社HAL GREEN 代表者 代表取締役 中島 英利 本社所在地 恵庭市戸磯193番地6 設立 令和2年4月20日 資本金 83,000千円.

営業利益 12,421 18,794 △6,372 △33.9 コア営業利益 ※ 12,662 19,384 △6,721 △34.7 税引前四半期利益 40,310 22,941 17,369 75.7 親会社の所有者に帰属する.

第14条 株主総会は、法令に別段の 定めがある場合を除き、取 締役会の決議によって、取 締役社長が招集し、議長と

 「時価の算定に関する会計基準」(企業会計基準第30号

2022年5月期 第1四半期 第2四半期 第3四半期 第4四半期 通期 売 上 高 1,720 1,279 1,131 1,886 6,017. 営 業 利 益 429 164 147

 「医療機関経営支援事業」は、SEMサービス(SEOサービス及びリスティング広告(検索連動広告)運用代行サービ

サーバー費用は、Amazon Web Services, Inc.が提供しているAmazon Web Servicesのサーバー利用料とな

運用企画部長 明治安田アセットマネジメント株式会社 代表取締役社長 大崎 能正 債券投資部長 運用企画部 運用企画G グループマネジャー 北村 乾一郎. 株式投資部長