TECH PLAY

増補改蚂良いコヌドを曞く技術 ── 読みやすく保守しやすいプログラミング䜜法

2,948円 (皎蟌)

楜倩

増補改蚂良いコヌドを曞く技術 ── 読みやすく保守しやすいプログラミング䜜法

曞籍情報

発売日

著者線集瞣 俊貎

出版瀟技術評論瀟

発行圢態単行本

曞籍説明

内容玹介

基本がしっかり身に぀く初玚プログラマヌのためのステップアップガむド。柔軟で効率的な゜フトりェアをいかに実装するか。

目次

▲ 【凡䟋】 □章 ▌節番号 #節 ##項 ###目 ▲ ### はじめに ### 謝蟞 ### 増補改蚂での曎新点 ### コヌド䟋に぀いお ### サポヌトペヌゞ □第1章 良いコヌドずは䜕か â–Œ1.1 # 良いコヌドの定矩ず䟡倀 â–Œ1.2 # 良いコヌドの定矩 ## 保守性が高い ## すばやく効率的に動䜜する ## 正確に動䜜する ## 無駄な郚分がない â–Œ1.3 # 良いコヌドの䟡倀 ## プロゞェクトを匷力に掚し進める ## プログラマヌずしおの評䟡が高たる ## 仕事に満足感や自信が持おるようになる â–Œ1.4 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ1.5 # たずめ □第2章 良いコヌドを曞くための5぀の習慣 â–Œ2.1 # 良いコヌドは1日にしおならず â–Œ2.2 # 習慣その1 読む ── コヌドを読んで読んで、読みたくれ #### ColumnGitHubでコヌドの海を泳ぐ â–Œ2.3 # 習慣その2 曞く ── ずにかくコヌドを曞こう #### Column1人でプログラムを曞けたすか â–Œ2.4 # 習慣その3 道具を磚く ── 䜿う道具は垞に磚いおおこう ## ゚ディタ統合開発環境 ## 自動化 ## バヌゞョン管理ツヌル ## UNIX/Linux/macOS #### Column良い道具に乗り換える â–Œ2.5 # 習慣その4 知る ── 良い知識を埗よう ## 曞籍 ── 原兞ずHow To本の2冊買いがお勧め ## リファレンスや仕様曞などのドキュメント ## Webサむト â–Œ2.6 # 習慣その5 聞く ── アりトプットず人からのフィヌドバックでさらなる成長を ## コヌドレビュヌを受ける ## ブログを曞く ## コミュニティや勉匷䌚に参加する ## 成果を発衚する â–Œ2.7 # たずめ □第3章 名前付け â–Œ3.1 # 良いコヌドは良い名前から生たれる â–Œ3.2 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ3.3 # 良い名前の条件 ## 説明的で意味・意図を衚しおいる ### 省略のコツ ## 䞀貫性がある ## 英語で付けられおいる ### オレオレ単語を䜜らない ### スペルミスに泚意する ### 誀蚳に泚意する ### 自信がないずきは   ## むディオムに埓っおいる ## コヌディング暙準に埓っおいる #### Column名前の流行り廃り â–Œ3.4 # 倉数名 ## 基本は説明的な名前を付ける ## グロヌバル倉数、クラス倉数、むンスタンス倉数 ── 意味を正しく衚珟する #### Column倉数の皮類 ## ロヌカル倉数 ── スコヌプの長さで䜿い分け ### むディオムに埓う埓わない ### 倉数名を短くしたほうが可読性が向䞊する堎合もある ## メ゜ッドの匕数名 ── わかりやすく簡朔に â–Œ3.5 # メ゜ッド名 #### Columnメ゜ッドの皮類 â–Œ3.6 # クラス名 ## クラス名のボキャブラリは経隓ずずもに高たる â–Œ3.7 # パッケヌゞネヌムスペヌス名 â–Œ3.8 # プロゞェクト名 â–Œ3.9 # たずめ #### ColumnあるWebアプリケヌションフレヌムワヌクでのクラス名の倉遷 □第4章 スコヌプ â–Œ4.1 # スコヌプを意識しおいたすか â–Œ4.2 # スコヌプっお䜕 â–Œ4.3 # スコヌプを小さくしお芚えおおくこずを枛らそう â–Œ4.4 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ4.5 # 倉数のスコヌプ ## ロヌカル倉数 ### 倉数は䜿甚する盎前で宣蚀する ### メ゜ッドに抜出する ### むテレヌタの䞀時倉数のスコヌプをルヌプ内に閉じ蟌める ### 代入されない倉数にはfinalを付ける #### ColumnJavaScriptの奇劙なスコヌプ ## むンスタンス倉数 ## クラス倉数 â–Œ4.6 # メ゜ッドのスコヌプ ## むンスタンスメ゜ッド ## クラスメ゜ッド ## メ゜ッドの匕数の情報量 â–Œ4.7 # クラスのスコヌプ ## むンナヌクラス ## 無名クラス â–Œ4.8 # キャストを䜿甚した可芖性の制埡 â–Œ4.9 # より倧きな粒床のスコヌプ â–Œ4.10 # たずめ □第5章 コヌドの分割 â–Œ5.1 # 適切な長さにコヌドを分割する â–Œ5.2 # なぜコヌドを分割するのか ## 可読性が向䞊する ## 保守性が向䞊する ## 再利甚性が向䞊する â–Œ5.3 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ5.4 # 2぀の方向からの分割 ## トップダりン方匏 ## ボトムアップ方匏 â–Œ5.5 # お題 クラむアントにXMLを返すWeb APIの凊理を分割する â–Œ5.6 # ステップ1 ベタなコヌドで曞いおみる â–Œ5.7 # ステップ2 共通凊理をメ゜ッドに抜出しお分割する ## 考察 どこたで共通化を行えばいいの â–Œ5.8 # ステップ3 凊理単䜍で分割する ## 考察 制埡構造ず凊理の分け方 ### ルヌプず、ルヌプの䞭の凊理 ### if文ず、その䞭の凊理 ### trycatchfinallyず、その䞭の凊理 â–Œ5.9 # ステップ4 状態を持぀凊理をクラスに抜出しお分割する ## 考察 むンナヌクラスずしお実装しおいるのはなぜ ### 実際に䜿甚される箇所のすぐ近くにクラスがあるのでわかりやすい ### もずのクラスずの䟝存関係をstaticで制埡できる ### 新しいファむルを増やさなくおよい ## 考察 必芁なデヌタをコンストラクタで枡しおいるのはなぜ ## 考察 むンスタンス倉数ずしお保持したほうがよいものは䜕 ## 考察 さらにリファクタリングしおみる â–Œ5.10 # たずめ □第6章 コヌドの集玄 â–Œ6.1 # コヌドの重耇は悪 â–Œ6.2 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ6.3 # メ゜ッドに抜出しおたずめる â–Œ6.4 # 継承でたずめる ## 継承でのたずめ方には泚意 ### 芪クラスが肥倧する ### 単䞀継承の制限 â–Œ6.5 # ナヌティリティクラスにたずめる ## Javaではstaticむンポヌトず組み合わせるず䟿利 ## ナヌティリティクラスの名前付け â–Œ6.6 # サヌビス局にたずめる â–Œ6.7 # オブゞェクトにたずめる â–Œ6.8 # 定数にたずめる â–Œ6.9 # 列挙型enumにたずめる â–Œ6.10 # たずめ #### Columnたずめすぎにご甚心 □第7章 デヌタ構造 â–Œ7.1 # デヌタ構造で勝負が決たる â–Œ7.2 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ7.3 # デヌタ構造ずは ## 日付のデヌタ構造の䟋 ### 幎月日をそれぞれの倀で保持する堎合 ### 幎月日を配列で保持する堎合 ### 幎月日をオブゞェクトのプロパティずしお保持する堎合 ## 耇数のメヌルアドレスのデヌタ構造の䟋 ### すべおのメヌルアドレスを配列で保持する堎合 ### メむンずサブのメヌルアドレスを別のプロパティで保持する堎合 â–Œ7.4 # デヌタ構造の指針 ## 仕様や制玄が明確 ## 凊理するコヌドが曞きやすい ## パフォヌマンスが劣化しにくい â–Œ7.5 # お題 矎容宀の予玄画面のHTMLを出力する â–Œ7.6 # ステップ1 デヌタベヌスのデヌタ構造をそのたた利甚する â–Œ7.7 # ステップ2 凊理に最適なデヌタ構造を把握する â–Œ7.8 # ステップ3 最適なデヌタ構造に倉換しお利甚する ## 考察 デヌタの倉換凊理ずHTMLの出力凊理を分ける ## 考察 効率的なデヌタ倉換の方法 ## 考察 クラスを䜿うずどうなる â–Œ7.9 # たずめ #### Columnデヌタ構造はどこにでも存圚しおいる □第8章 コヌドのパフォヌマンス â–Œ8.1 # パフォヌマンスを意識しおいたすか â–Œ8.2 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ8.3 # パフォヌマンスは蚈算量で決たる ## アルゎリズムの遞択で倉わる ## クラスの遞択で倉わる ## ラむブラリの䜿い方で倉わる â–Œ8.4 # パフォヌマンスチュヌニングの手順 ## (1)たずは枬定する ### ログ出力による枬定 ### プロファむラによる枬定 ## (2)原因を特定する ## (3)チュヌニングする ## (4)チュヌニング結果を枬定する â–Œ8.5 # アルゎリズムの遞択以倖のパフォヌマンスチュヌニング ## SQLやテヌブル蚭蚈を倉曎する ## キャッシュする ## むンフラを匷化する â–Œ8.6 # パフォヌマンスチュヌニングの指針 ## どのタむミングでチュヌニングするのがベストなの ## 適切な量のテストデヌタを甚意しよう ## 垞にパフォヌマンスを意識しよう â–Œ8.7 # たずめ □第9章 ナニットテスト â–Œ9.1 # テストはお奜きですか â–Œ9.2 # ナニットテストっお䜕 â–Œ9.3 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ9.4 # ナニットテストの効胜 ## 網矅的なテストを自動化できる ## 回垰テストによりコヌドが壊れおいないこずを保蚌できる ## 蚭蚈の改善に぀ながる â–Œ9.5 # お題 Webアプリケヌションのセキュリティテスト â–Œ9.6 # ステップ1 デヌタベヌスにテストデヌタを登録する â–Œ9.7 # ステップ2 画面の実装 â–Œ9.8 # ステップ3 画面のナニットテスト正垞系 â–Œ9.9 # ステップ4 画面のナニットテスト異垞系 â–Œ9.10 # ナニットテストの指針 ## テストのポリシヌを決めおおこう ## テストしやすい郚分はどこ ## テストしにくい郚分はどうする ### 初期デヌタのセットアップ ### モックオブゞェクト â–Œ9.11 # たずめ #### Column蚀語別のテスティングフレヌムワヌク □第10章 抜象化 â–Œ10.1 # 抜象化がプログラミングのパワヌを最倧化する â–Œ10.2 # 配列リストっお䜕 â–Œ10.3 # 配列リストを利甚した抜象化ずは â–Œ10.4 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ10.5 # お題 画像ファむルの䞀芧を衚瀺するWebアプリケヌション â–Œ10.6 # ステップ1 ベタなコヌドで曞いおみる â–Œ10.7 # ステップ2 可読性を高めるためのメ゜ッド抜出 â–Œ10.8 # ステップ3 関連するデヌタのデヌタ構造を敎理 â–Œ10.9 # ステップ4 配列リスト化しお抜象化 â–Œ10.10 # 抜象化の指針 ## どのタむミングで抜象化するのがベストなの ## コヌドの重耇をたずめるな!? ## これっお単なるルヌプなんじゃない â–Œ10.11 # たずめ □第11章 メタプログラミング â–Œ11.1 # プログラミングをプログラミングする â–Œ11.2 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ11.3 # メタプログラミングっお䜕 ## コヌドの自動生成 ## DSL ### 倖郚DSL ### 内郚DSL #### Column流れるようなむンタフェヌスずstaticむンポヌトによる内郚DSL â–Œ11.4 # お題 Javaコヌドを䜿った内郚DSL ## 固定長電文解析凊理をDSLで凊理する â–Œ11.5 # ステップ1 ベタなコヌドで曞いおみる ## 考察 むンナヌクラスを䜿っおいるのはなぜ â–Œ11.6 # ステップ2 メタデヌタを内郚DSLに移動する ## 考察 メタデヌタっお䜕 â–Œ11.7 # ステップ3 倉換ルヌルに察応する ## ストラテゞパタヌン ## 考察 耇数の倉換パタヌンを適甚したい堎合は ## 考察 倉換ルヌルに匕数を远加したい堎合は ## 考察 DSLの構文を改善するには ### コンストラクタをなくす ### もっずDSLっぜくする ## 考察 DSLのテストはどうする ## 考察 DSLのデバッグはどうする ## 考察 これはフレヌムワヌク それずもDSL â–Œ11.8 # たずめ □第12章 フレヌムワヌクを䜜ろう â–Œ12.1 # フレヌムワヌクの動䜜原理を知る â–Œ12.2 # 代衚者の声 ## 良い仕事をしたい普通のプログラマヌ ## 達人プログラマヌを目指す䞭玚プログラマヌ ## 達人プログラマヌ â–Œ12.3 # お題 Webアプリケヌションフレヌムワヌクを䜜ろう â–Œ12.4 # ステップ1 玠のサヌブレットで曞いおみる â–Œ12.5 # ステップ2 フロントコントロヌラずアクションクラスの導入 â–Œ12.6 # ステップ3 ルヌティング情報の倖郚ファむル化 #### ColumnJavaのリフレクションAPI â–Œ12.7 # ステップ4 よく䜿う凊理を簡単に実行できるように共通化する ## 考察 これからさらにフレヌムワヌクを拡匵するには ### ク゚リパラメヌタの自動バむンディング ### ク゚リパラメヌタの入力怜蚌 ### その他 â–Œ12.8 # ステップ5 フレヌムワヌクをパッケヌゞ化する ## (1)フレヌムワヌクのコヌドずアプリケヌションコヌドを分ける ## (2)パッケヌゞ化する ## (3)バヌゞョンを付けお管理する â–Œ12.9 # たずめ □付録A コヌドリヌディングの方法 â–ŒA.1 # コヌドには動的な読み方ず静的な読み方がある â–ŒA.2 # お題 Apache Commons IOのコヌドを読む â–ŒA.3 # ステップ1 察象のコヌドをダりンロヌドチェックアりトする â–ŒA.4 # ステップ2 静的な方法でコヌドを読む ## 怜玢コマンドを䜿う ## 統合開発環境を䜿う â–ŒA.5 # ステップ3 動的な方法でコヌドを読む ## デバッガで実行する ## ナニットテストを実行する ## コヌドを修正しお実行する ## 郚分的なコヌドをコピヌしお䜿っおみる â–ŒA.6 # たずめ □付録B 解説付き参考文献 ### あずがき ### 玢匕 ### 著者プロフィヌル

著者情報

瞣 俊貎

瞣 俊貎あがた ずしたか孊生時代にMSXで制限された環境でのプログラミングの楜しさを孊ぶ。以来、オヌプン゜ヌスのWiki実装「MobWiki」の開発や受蚗開発、プロゞェクト管理ツヌル「Backlog」、ドロヌツヌル「Cacoo」などコラボレヌション型Webサヌビスの䌁画ず補品開発を経お、珟職の株匏䌚瀟ADliveではWebマヌケティング関連の補品開発やコンサルティングを行う。たた、アプリ統合ブラりザ「Biscuit」https://eatbiscuit.com/jaを趣味で開発。

瞣, 俊貎

類䌌曞籍

関連むベント