株式会社トップスタジオ 翻訳
株式会社トップスタジオ 原著
Peter J. Scott 著
伊藤 直也 監修
伊藤 直也 翻訳
伊藤 直也 原著
本書はPerlコードの引き継ぎを中心テーマとしています。それは誰かほかの人が書いたコードかもしれませんし、あなた自身がメンテナンス性についてまだ十分な知識がない頃に書いたコードかもしれません。
Perlでメンテナンスがよく問題になるのはなぜでしょう?その答えは、Perlの強みでありモットーでもある「やり方は1つじゃない」(TMTOWTDI..There's More Than One Way To Do It)のダークサイドにあります。Perlには非常に多くのやり方があるので、ほかの人のやり方があなたと同じでなくても驚くに当たりませんし、同じプログラムの中でいくつものやり方が使われていることもあります。
第1章 はじめに(最初の返答)
1.1 まず大事なことから
1.2 引き継ぎの理由
1.3 次のステップ
1.4 プログラムを本来の生息環境で観察する
1.5 個人的な情報
1.6 strictを使う
1.7 warningsを使う
1.7.1 彼らは何をしようとしたのか
第2章 調査
2.1 バージョン
2.2 部分か全体か
2.2.1 シェバン(shebang)
2.2.2 .phファイル
2.3 依存物(依存関係)を探す
2.3.1 ややこしい表現
第3章 テスト(診断)
3.1 あなたの忍耐力をテストする
3.2 エクストリームテスティング
3.2.1 Testモジュール
3.2.2 Test::Simpleモジュール
3.2.3 Test::Moreモジュール
3.2.4 Test::Exceptionモジュール
3.2.5 Test::Builderモジュール
3.2.6 Test::Podモジュール
3.2.7 Test::Inlineモジュール
3.2.8 Test::NoWarningsモジュール
3.2.9 Test::Harnessモジュール
3.3 Test::モジュールの使用例
3.4 レガシーコードのテスト
3.4.1 シンプルな例
3.4.2 Webアプリケーションのテスト
3.4.3 次のステップ
3.5 最後の激励
3.5.1 最後の注意
第4章 書き直し(移植)
4.1 戦略を練る
4.2 なぜそうするのか
4.2.1 誰を相手にするのか
4.2.2 さまざまなレベルのPerlプログラマ
4.2.3 要件は何か
4.3 スタイル
4.3.1 レイアウト
4.4 コメント
4.4.1 標識コメント
4.4.2 ブロックコメント
4.5 スタイル変更
4.5.1 ほんの親切から
4.6 変数のリネーム
4.6.1 シンボリック定数
4.7 編集
4.8 ライン編集
4.8.1 不必要な繰り返し
4.8.2 一時変数が多すぎる
4.8.2 一時変数が十分でない
4.9 アンチパターン
4.9.1 ハッシュを使わない
4.9.2 マジックナンバー
4.9.3 効果のない正規表現
4.9.4 呼び出している外部プログラムが多すぎる
4.9.5 呼び出している外部プログラムが十分でない
4.9.6 過剰な真理
4.10 進化
4.10.1 モジュール性
4.10.2 入力インターフェイス―複雑さ
4.10.3 エラー処理―アプリケーションサイズ
4.10.4 ロギング―ボリュームと粒度
4.10.5 外部情報表現―拡張性
4.10.6 外部データ記憶―複雑さ、同時並行性、ボリューム
4.10.7 Webサーバー処理―スケーラビリティ
4.10.8 イベント処理―アプリケーションの複雑さと相互運用性
4.10.9 クライアント/サーバーまたはプロセス間通信―相互運用性
第5章 規則正しいPerlプログラム
5.1 パッケージ変数とレキシカル変数
5.1.1 local関数
5.1.2 With a Little Help from our Friends
5.1.3 レキシカルスコープとダイナミックスコープ
5.2 warningsとstrictの使用
5.3 use strictの詳細
5.3.1 use strict 'vars'
5.3.2 use strict 'subs'
5.3.3 use strict 'refs'
5.3.4 use strict 'DWIM'
5.4 use warningsの詳細
5.4.1 use warningsとモジュール
5.4.2 プラグマとAutoLoader
5.5 選択的な無効化
5.5.1 noと言う方法
5.5.2 strictの無効化
5.5.3 warningsの無効化
5.5.4 $^Wによるwarningsの無効化
5.5.5 エラーとwarningsのリダイレクト
5.5.6 慌てて無効化しないこと
5.6 使用上の注意
5.7 Perl詩
第6章 再構築(オペレーティングテーブル)
6.1 物事は簡潔に
6.2 Perlとカーゴカルト
6.2.1 無意味な文字列化
6.2.2 無意味な連結
6.2.3 scalar()の過剰使用
6.2.4 無意味なスライス
6.2.5 正規表現の成否を判定しないままの$1の使用
6.2.6 システム関数のリターンコードの未チェック
6.2.7 無効コンテキスト中のmap()
6.2.8 1行単位で処理するにもかかわらずストリーム全体をメモリへ読み込む行為
6.2.9 File::Findの再創世
6.2.10 無用なカッコ
6.2.11 初期化の過剰使用
6.2.12 trおよびs///の右側では正規表現を使うとの誤解
6.2.13 シンボリックリファレンスの使用
6.2.14 CGI.pmの再創世
6.2.15 戻り値としてのundefの使用
6.2.16 foreachの代わりのforの使用
6.2.17 無意味な正規表現
6.3 グローバル変数というトラップの回避法
6.4 デバッグの戦略
6.4.1 分断攻略
第7章 アップグレード(形成外科)
7.1 基本戦略
7.2 Perl 4
7.2.1 Perl 4へのアップグレード
7.3 Perl 5.000
7.3.1 Perl 5.000へのアップグレード
7.4 Perl 5.001
7.4.1 Perl 5.001へのアップグレード
7.5 Perl 5.002
7.5.1 Perl 5.002へのアップグレード
7.6 Perl 5.003
7.6.1 Perl 5.003へのアップグレード
7.7 Perl 5.004
7.7.1 Perl 5.004へのアップグレード
7.8 Perl 5.005
7.8.1 Perl 5.005へのアップグレード
7.9 Perl 5.6.0
7.9.1 Perl 5.6.0へのアップグレード
7.10 Perl 5.6.1
7.10.1 Perl 5.6.1へのアップグレード
7.11 Perl 5.8.0
7.11.1 Perl 5.8.0へのアップグレード
7.12 Perl 5.8.1
7.12.1 Perl 5.8.1へのアップグレード
7.13 Perl 5.8.2
7.14 Perl 5.8.3
7.14.1 Perl 5.8.3へのアップグレード
第8章 モジュールの使用(遺伝学的な形質向上)
8.1 CPANのケース
8.1.1 バージニアにあるコードリポジトリ
8.1.2 CPANの信頼性
8.1.3 CPANモジュールの探し方
8.1.4 反CPANポリシーへの対応
8.1.5 作るか買うか?
8.2 CPANの使用
8.2.1 CPAN.pmの使用
8.2.2 モジュールの手動インストール
8.2.3 PPM
8.2.4 モジュールの配布
8.3 モジュールのコードの改善
8.3.1 CGI.pm
8.3.2 日付の解析と操作
8.3.3 Socket.pmとIO::Socket
8.3.4 HTMLの解析
8.3.5 URIの解析
8.3.6 データベース操作
8.3.7 メール処理
8.3.8 XML操作
8.4 カスタムPerl
8.4.1 btreeperl
8.4.2 cisamperl/rocisperl
8.4.3 ctreeperl
8.4.4 duaperl
8.4.5 ingperl/sqlperl
8.4.6 interperl
8.4.7 isqlperl
8.4.8 oraperl
8.4.9 pgperl
8.4.10 sybperl
8.4.11 tkperl
8.4.12 uniperl
第9章 分析(法医病理学)
9.1 静態分析
9.1.1 YAPE::Regex::Explain
9.1.2 Benchmark::Timer
9.1.3 Benchmark::TimeTick
9.1.4 Debug::FaultAutoBT
9.1.5 Devel::LeakTrace
9.1.6 Module::Info
9.1.7 Class::Inspector
9.1.8 B::Xref
9.2 不要コードの除去
9.2.1 Devel::Coverage
9.2.2 Devel::Cover
9.3 非効率なコードの調査
9.3.1 Devel::DProf
9.3.2 Devel::SmallProf
9.3.3 最適化のヒント
9.4 デバッグ
9.4.1 正規表現のデバッグ
第10章 メンテナンス(予防)可能性の向上
10.1 堅牢性を高める
10.1.1 Params::Validate
10.1.2 Carp::Assert
10.1.3 Class::Contract
10.1.4 Log::Log4perl
10.1.5 Safe.pm
10.2 徹底的な簡素化
10.2.1 tie
10.2.2 オーバーロード
10.3 ドキュメント
10.3.1 POD Peopleの襲来
10.3.2 PODフォーマッタ
10.4 カスタムwarnings
10.5 バージョン管理システムの統合
第11章 ケーススタディ
11.1 セットアップ
11.2 トリアージ(治療の優先順位の判定)
11.3 健全な状態を確保するための前処理
11.4 21世紀プログラミングのコードへ
11.5 モジュールの効率的な取り組み方、パート1
11.6 モジュールの効率的な取り組み方、パート2
11.7 プログラムの熟成、パート1
11.8 プログラムの熟成、パート2
11.9 プログラムの熟成、パート3
11.10 上級者用のモディフィケーション
11.10.1 次のステップ
第12章 まとめ(予後診断)
12.1 終わりに
12.1.1 メーリングリスト
12.1.2 ニュースグループ
12.1.3 ユーザーによるコンテンツ作成が可能なポータル
12.1.4 そのほかのWebサイト
12.1.5 チャットチャネル
12.1.6 ユーザーグループ
12.1.7 定期刊行物
12.1.8 カンファレンス
12.1.9 Perl Foundation
12.2 Perlピープル
12.2.1 回答してもらえる質問の仕方
12.3 最後に一言
付録 ソースコード
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。