関連サイト
本書の詳細ページが用意されています。
内容紹介
それではアプリケーション開発の自動化というのは、まったくの夢物語なのでしょうか? そんなことはありません。開発作業の中には「単純な作業」がいくつも残っています。紺屋の白袴とか医者の不養生といった諺を持ち出すまでもなく、アプリケーション開発の現場というのは、思いの外コンピュータ化(自動化)されていないことが多いものです。しかし、ここ最近、この状況が急速に変化しようとしています。アプリケーションのコンパイル、リンク、テスト、実機へのインストールといった作業を自動化する技術が、今、ものすごいスピードで普及しています。これこそまさにアプリケーション開発工場といえるでしょう。人間がコードを書き、あるいは修正すると、たちどころにビルド、テストが自動で行われて実機へのインストールまで完了してしまう。サーバサイドアプリケーションの開発現場では、このようなやり方が、もはや常識となっており、サイトによっては1日に100回以上、新しいアプリケーションがインストールし直されているといいます(GitHubは2012年8月23日、1日に175回デプロイを行った。https://github.com/blog/1241-deploying-at-github)。
その背景には、ものすごい速度で変化していかなければ生き残っていけないという事情があります。こうしたサーバアプリケーションの多くが激しい競争にさらされており、少しでも停滞すればあっという間に競争に破れてしまいます。一方で、このようにものすごい勢いでアプリケーションを変更しながらも、品質を犠牲にすることはできません。皆さんが普段使っているGMailやAmazonのようなサーバアプリケーションの品質を思い浮かべてみてください。一昔前と比べて悪くなっているようなものは、きっとほとんどないはずです。それは品質が悪ければ、あるいはちょっと応答が遅い、使いにくいというだけで、すぐに競争に破れて市場から淘汰されてしまうためです。
一方で組み込み機器の開発はどうでしょうか。もちろんさすがに1日に何度も新しいアプリケーション(ファームウェア)を配信することはないでしょうが、要求される開発のスピードは年々上がってきているのではないでしょうか? もちろん品質に対する要求はサーバサイドアプリケーション以上のものがあるはずです(何しろ組み込み系は分野によってはバグが人命にかかわることもあります)。つまり、状況はサーバサイドアプリケーションとさほど変わらないのです。それならサーバサイドで培われてきた開発のやり方は、組み込み系にもきっと役に立つはずです。とはいえ、サーバサイドアプリケーションと組み込み系とでは、使用しているツール、コンパイラを始め、さまざまな環境の違いがあります。このため、そのまま考え方だけを持ち込んでも、うまくいかないことが多いでしょう。
本書ではサーバサイドで一般的となっている設計手法や、ツールの活用方法、開発手法を、1つ1つCを用いた組み込み系アプリケーションの世界へと翻訳していきます。こうした内容に興味のある方にはもちろんですが、自分が昔からやってきた方法が一番で新しいやり方など不要だと思っている方にもぜひ一度読んでみていただきたいと思っています。単に毛嫌いして使わないのと、実際に使ってみた上で使わないと判断するのとでは雲泥の違いがあります。本書は組み込み系を意識しているとはいえ、上に挙げたような課題は組み込み系以外のCのプログラムの開発でも多かれ少なかれ存在しているものと思います。組み込み系以外のプログラマの方にもぜひ読んでみていただければと思います。
(「はじめに」より)
※本書は、株式会社KADOKAWA/アスキー・メディアワークスより刊行された『モダンC言語プログラミング』を再刊行したものです。再刊行にあたり、旧版刊行後に発見された誤植等を修正しております。
書誌情報
- 著者: 花井志生
- 発行日: 2019-01-31 (紙書籍版発行日: 2019-01-31)
- 最終更新日: 2019-01-31
- バージョン: 1.0.0
- ページ数: 280ページ
- 対応フォーマット: PDF, EPUB
- 出版社: アスキードワンゴ
対象読者
Cを使いこなしたい方、特に組み込み系アプリケーション開発で現代的な開発手法を実践したい方
著者について
花井志生
入社当時はC/C++を用いた組み込み機器(POS)用のアプリケーション開発に携わる。10年ほどでサーバサイドに移り、主にJavaを使用したWebアプリケーション開発に軸足を移し、トラブルシュートからシステムの設計、開発を生業とする。
目次
はじめに
第1章 概要
- 1.1 今、Cが熱い!
- 1.2 Cによる組み込み開発の特徴
- 1.3 本書の目標
- 1.3.1 Cと統合開発環境
- 1.3.2 Cとデザインパターン
- 1.3.3 Cとエクストリーム・プログラミング
- 1.3.4 Cとモダンな開発スタイル
- 1.4 まとめ
第2章 開発環境の作成
- 2.1 概要
- 2.2 Linuxの入手
- 2.3 Windows PC用の環境作成
- 2.3.1 VirtualBoxのインストール
- 2.4 Linux PC用の環境作成
- 2.4.1 導入する前に
- 2.4.2 インストールメディアの作成
- 2.4.3 Xubuntuのインストール
- 2.5 Eclipseのインストール
- 2.5.1 Javaのインストール
- 2.5.2 Eclipseのインストール
- 2.5.3 その他のツールのインストール
- 2.6 Eclipseの基本操作
- 2.6.1 Hello, world
- 2.6.2 ビュー
- 2.6.3 プロジェクトとワークスペースそしてパースペクティブ
- 2.7 Eclipseの機能
- 2.7.1 ビジュアルデバッガ
- 2.7.2 ナビゲート
- 2.7.3 コンテントアシスト
- 2.7.4 マクロ展開確認
- 2.7.5 ローカルヒストリ
- 2.7.6 TODOコメント
- 2.7.7 外部エディタとの連携
- 2.8 まとめ
第3章 C言語とオブジェクト指向
- 3.1 概要
- 3.2 Cのモジュール化とオブジェクト指向
- 3.2.1 Cとモジュール化
- 3.2.2 構造体によるデータ構造とロジックの分離
- 3.2.3 Cを用いたオブジェクト指向
- 3.2.4 オブジェクト指向と多態性
- 3.2.5 継承
- 3.2.6 カプセル化
- 3.2.7 仮想関数テーブル
- 3.2.8 非仮想関数
- 3.3 まとめ
第4章 C言語とデザインパターン
- 4.1 ステートパターン(State)
- 4.1.1 状態遷移図
- 4.1.2 状態遷移表
- 4.1.3 オブジェクト指向ステートパターン
- 4.1.4 複数の状態セットが関係するケース
- 4.1.5 ステートパターンとメモリ管理
- 4.2 テンプレートメソッドパターン(Template)
- 4.2.1 int以外を返す
- 4.2.2 他のリソースを扱う
- 4.2.3 コンテキスト
- 4.3 オブザーバパターン(Observer)
- 4.4 チェインオブレスポンシビリティパターン(Chain of responsibility)
- 4.5 ビジターパターン(Visitor)
- 4.5.1 オブジェクトにtype idを持たせたくなったら黄信号
- 4.6 まとめ
第5章 C言語とリファクタリング
- 5.1 概要
- 5.2 テスト駆動開発
- 5.2.1 Google Test
- 5.3 TDD入門編
- 5.3.1 Eclipseの設定
- 5.3.2 初めてのテスト駆動開発
- 5.3.3 static関数のテスト
- 5.4 リファクタリング
- 5.4.1 外部インターフェイス
- 5.4.2 リファクタリングと投資
- 5.5 TDD実践編
- 5.5.1 モンスターメソッド
- 5.5.2 C言語によるモック化の手法
- 5.5.3 リファクタリングを完了する
- 5.5.4 カバレッジの取得
- 5.6 まとめ
第6章 継続的インテグレーションとデプロイ
- 6.1 概要
- 6.2 継続的インテグレーションの前提
- 6.2.1 ソフトウェア構成管理(Software Configuration Management)
- 6.2.2 ビルドツール
- 6.2.3 バグトラッキングシステム(BTS)
- 6.3 CIサーバの導入
- 6.3.1 Jenkinsのプラグインを追加する
- 6.4 CI入門編
- 6.4.1 今回CIで自動化すること
- 6.4.2 初めてのSConsビルドスクリプト
- 6.4.3 gcovrのインストール
- 6.4.4 ビルド実行
- 6.4.5 SCMに登録する
- 6.4.6 Jenkinsのジョブを作成する
- 6.5 メモリ破壊のバグと戦う
- 6.5.1 インストール
- 6.5.2 Valgrindの実行
- 6.5.3 Valgrindで検出されるエラー
- 6.5.4 Valgrindで検出されるメモリエラーの特徴と対策
- 6.5.5 ValgrindをJenkinsで使用する
- 6.6 CI実践編
- 6.6.1 Microchipのツール
- 6.6.2 ビルドの内容
- 6.6.3 ビルドファイルを分割する
- 6.6.4 ビルドサーバを独立させる
- 6.6.5 自動ビルドを計画する
- 6.7 まとめ
付録A サンプルプログラム
- A.1 共通の注意事項
- A.2 C99の仕様の有効化
- A.3 サンプルプログラムのEclipseへの取り込み
- A.3.1 サンプルプログラムを格納したzipファイルの展開
- A.3.2 Eclipseに空のプロジェクトを作成