PR
スポンサーリンク

【最新】ITエンジニア向けおすすめ書籍まとめ【随時更新】

書籍紹介

今回はエンジニア初心者から中級者が読むべき書籍を厳選して紹介します。

スポンサーリンク
  1. 全般
    1. 思考法・作法系
      1. 世界一流エンジニアの思考法
      2. プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則
      3. 達人プログラマー(第2版): 熟達に向けたあなたの旅
      4. プログラムはなぜ動くのか 第3版 知っておきたいプログラミングの基礎知識
      5. コンピュータはなぜ動くのか 第2版 知っておきたいハードウエア&ソフトウエアの基礎知識
      6. オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識
      7. 人月の神話【新装版】
    2. クリーンコード系
      1. リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
      2. 良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方
  2. API
      1. Web API: The Good Parts
  3. WEB系
      1. イラスト図解式 この一冊で全部わかるWeb技術の基本
      2. 「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか
      3. Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESSプラスシリーズ)
  4. ネットワーク
      1. イラスト図解式 この一冊で全部わかるネットワークの基本 第2版 (わかりやすさにこだわったイラスト図解式)
      2. ネットワークはなぜつながるのか
      3. マスタリングTCP/IP―入門編―(第6版)
  5. サーバー系
      1. イラスト図解式 この一冊で全部わかるサーバーの基本 第2版
  6. DB・SQL
      1. スッキリわかるSQL入門 第4版 ドリル256問付き! (スッキリわかる入門シリーズ)
      2. 達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ
      3. 達人に学ぶDB設計 徹底指南書
  7. クラウド
    1. 基礎
      1. イラスト図解式 この一冊で全部わかるクラウドの基本 第2版
    2. AWS
      1. AWSの基本・仕組み・重要用語が全部わかる教科書
  8. セキュリティ
      1. イラスト図解式 この一冊で全部わかるセキュリティの基本
      2. 体系的に学ぶ安全なWebアプリケーションの作り方 第2版
  9. インフラ
      1. 改訂新版 インフラエンジニアの教科書
      2. インフラエンジニアの教科書2 スキルアップに効く技術と知識
  10. HTML&CSS
      1. 1冊ですべて身につくHTML & CSSとWebデザイン入門講座[第2版] (1冊ですべて身につく) 
      2. ほんの一手間で劇的に変わるHTML & CSSとWebデザイン実践講座
  11. JavaScript
      1. 改訂3版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで
  12. TypeScript
      1. プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで
      2. TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発
  13. デザイン
      1. なるほどデザイン
      2. オブジェクト指向UIデザイン 使いやすいソフトウェアの原理
  14. マネジメント
      1. プロダクトマネージャーのしごと 第2版 ―1日目から使える実践ガイド
  15. UNIX
      1. UNIXという考え方: その設計思想と哲学

全般

思考法・作法系

世界一流エンジニアの思考法

頭が先、手は後。一流の仕事のカギは順序にある。
――楠木建(経営学者)

知的生産へのリスペクトがイノベーションの源泉だ。
――落合陽一(メディアアーティスト)

「怠惰であれ!」「早く失敗せよ」――
米マイクロソフトの現役ソフトウェアエンジニアの著者が、超巨大クラウドの開発の最前線で学んだ思考法とは?
“三流プログラマ”でもできた〈生産性爆上がり〉の技術!

・試行錯誤は「悪」。“基礎の理解”に時間をかける
・より少ない時間で価値を最大化する考え方とは?
・「準備」と「持ち帰り」をやめて、その場で解決する
・マルチタスクは生産性が最低なのでやらない
・“脳の負荷を減らす”コミュニケーションの極意
・コントリビュート文化で「感謝」の好循環を生む……etc.

仕事と人生を「自分の手でコントロールする」最高のスキルがここに!

プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則

一通りプログラミングができるようになった。しかし、読みにくい、遅い、頻繁にエラーが発生する、書いたコードを修正すると動かなくなる等々、なかなか「よいコード」を書けないとお悩みではありませんか? 本書は、よいコードを書く上で指針となる前提・原則・思想、つまり「プリンシプル」を解説するプログラミングスキル改善書です。初心者向けの書籍では絶対に説明しない、古今東西のプログラマーの知恵をこの一冊に凝縮しました!

プロローグ 本書の読み方
0.1 プリンシプルのカテゴリ
0.2 プリンシプルの説明のフォーマット
0.3 プリンシプルの説明における用語法
0.4 プリンシプルの説明の注意点

第1章 前提 ~プログラミングの変わらぬ真実~
1.1 プログラミングに銀の弾丸はない
1.2 コードは設計書である
1.3 コードは必ず変更される

第2章 原則 ~プログラミングのガイドライン~
2.1 KISS
2.2 DRY
2.3 YAGNI
2.4 PIE
2.5 SLAP
2.6 OCP
2.7 名前重要

第3章 思想 ~プログラミングのイデオロギー~
3.1 プログラミングセオリー
3.2 【プログラミングセオリーを支える3つの価値1】コミュニケーション
3.3 【プログラミングセオリーを支える3つの価値2】シンプル
3.4 【プログラミングセオリーを支える3つの価値3】柔軟性
3.5 【プログラミングセオリーを実現する6つの原則1】結果の局所化
3.6 【プログラミングセオリーを実現する6つの原則2】繰り返しの最小化
3.7 【プログラミングセオリーを実現する6つの原則3】ロジックとデータの一体化
3.8 【プログラミングセオリーを実現する6つの原則4】対称性
3.9 【プログラミングセオリーを実現する6つの原則5】宣言型の表現
3.10 【プログラミングセオリーを実現する6つの原則6】変更頻度
3.11 アーキテクチャ根底技法
3.12 【アーキテクチャ根底技法1】抽象
3.13 【アーキテクチャ根底技法2】カプセル化
3.14 【アーキテクチャ根底技法3】情報隠蔽
3.15 【アーキテクチャ根底技法4】パッケージ化
3.16 【アーキテクチャ根底技法5】関心の分離
3.17 【アーキテクチャ根底技法6】充足性、完全性、プリミティブ性
3.18 【アーキテクチャ根底技法7】ポリシーと実装の分離
3.19 【アーキテクチャ根底技法8】インタフェースと実装の分離
3.20 【アーキテクチャ根底技法9】参照の一点性
3.21 【アーキテクチャ根底技法10】分割統治
3.22 アーキテクチャ非機能要件
3.23 【アーキテクチャ非機能要件1】変更容易性
3.24 【アーキテクチャ非機能要件2】相互運用性
3.25 【アーキテクチャ非機能要件3】効率性
3.26 【アーキテクチャ非機能要件4】信頼性
3.27 【アーキテクチャ非機能要件5】テスト容易性
3.28 【アーキテクチャ非機能要件6】再利用性
3.29 7つの設計原理
3.30 【7つの設計原理1】単純原理
3.31 【7つの設計原理2】同型原理
3.32 【7つの設計原理3】対称原理
3.33 【7つの設計原理4】階層原理
3.34 【7つの設計原理5】線形原理
3.35 【7つの設計原理6】明証原理
3.36 【7つの設計原理7】安全原理
3.37 UNIX思想
3.38 【UNIX思想1】モジュール化の原則
3.39 【UNIX思想2】明確性の原則
3.40 【UNIX思想3】組み立て部品の原則
3.41 【UNIX思想4】分離の原則
3.42 【UNIX思想5】単純性の原則
3.43 【UNIX思想6】倹約の原則
3.44 【UNIX思想7】透明性の原則
3.45 【UNIX思想8】安定性の原則
3.46 【UNIX思想9】表現性の原則
3.47 【UNIX思想10】驚き最小の原則
3.48 【UNIX思想11】沈黙の原則
3.49 【UNIX思想12】修復の原則
3.50 【UNIX思想13】経済性の原則
3.51 【UNIX思想14】生成の原則
3.52 【UNIX思想15】最適化の原則
3.53 【UNIX思想16】多様性の原則
3.54 【UNIX思想17】拡張性の原則
3.55 UNIX哲学
3.56 【UNIX哲学1】小は美なり
3.57 【UNIX哲学2】1つ1仕事
3.58 【UNIX哲学3】即行プロトタイプ
3.59 【UNIX哲学4】効率性より移植性
3.60 【UNIX哲学5】データはテキスト
3.61 【UNIX哲学6】レバレッジ・ソフトウェア
3.62 【UNIX哲学7】シェルスクリプト活用
3.63 【UNIX哲学8】対話インタフェース回避
3.64 【UNIX哲学9】フィルタ化

第4章 視点 ~プログラマの観る角度~
4.1 凝集度
4.2 結合度
4.3 直交性
4.4 可逆性
4.5 コードの臭い
4.6 技術的負債

第5章 習慣 ~プログラマのルーティーン~
5.1 プログラマの3大美徳
5.2 ボーイスカウトの規則
5.3 パフォーマンスチューニングの箴言
5.4 エゴレスプログラミング
5.5 1歩ずつ少しずつ
5.6 TMTOWTDI

第6章 手法 ~プログラマの道具箱~
6.1 曳光弾
6.2 契約による設計
6.3 防御的プログラミング
6.4 ドッグフーディング
6.5 ラバーダッキング
6.6 コンテキスト

第7章 法則 ~プログラミングのアンチパターン~
7.1 ブルックスの法則
7.2 コンウェイの法則
7.3 割れた窓の法則
7.4 エントロピーの法則
7.5 80-10-10の法則
7.6 ジョシュアツリーの法則
7.7 セカンドシステム症候群
7.8 車輪の再発明
7.9 ヤクの毛刈り

達人プログラマー(第2版): 熟達に向けたあなたの旅

より良いプログラマになるための実践的アプローチ
本書は、Andrew Hunt and David Thomas、 The Pragmatic Programmer 20th Anniversary Edition (Addison Wesley、 2019)の日本語版です。
本書は、より効率的、そしてより生産的なプログラマーになりたいと願うソフトウェア開発者に向けて、アジャイルソフトウェア開発手法の先駆者として知られる二人により執筆されました。経験を積み、生産性を高め、ソフトウェア開発の全体をより良く理解するための、実践的なアプローチが解説されています。
先見性と普遍性に富んだ本書は、入門者には手引きとなり、ベテランでも読み直すたびに得るものがある、座右の一冊です。

序文
目次
まえがき-第2版に向けて
第1版のまえがきより

第1章 達人の哲学
1 あなたの人生
2 猫がソースコードを食べちゃった
3 ソフトウェアのエントロピー
4 石のスープとゆでガエル
5 十分によいソフトウェア
6 あなたの知識ポートフォリオ
7 伝達しよう!

第2章 達人のアプローチ
8 よい設計の本質
9 DRY 原則? 二重化の過ち
10 直交性
11 可逆性
12 曳光弾
13 プロトタイプとポストイット
14 専用の言語
15 見積もり

第3章 基本的なツール
16 プレインテキストの威力
17 貝殻(シェル)遊び
18 パワーエディット
19 バージョン管理
20 デバッグ
21 テキスト操作言語
22 エンジニアリング日誌

第4章 妄想の達人
23 契約による設計(DbC)
24 死んだプログラムは嘘をつかない
25 表明を用いたプログラミング
26 リソースのバランス方法
27 ヘッドライトを追い越そうとしない

第5章 柳に雪折れ無し
28 分離
29 実世界を扱う
30 変換のプログラミング
31 インヘリタンス(相続)税
32 設定

第6章 並行性
33 時間的な結合を破壊する
34 共有状態は間違った状態
35 アクターとプロセス
36 ホワイトボード

第7章 コーディング段階
37 爬虫類脳からの声に耳を傾ける
38 偶発的プログラミング
39 アルゴリズムのスピード
40 リファクタリング
41 コードのためのテスト
42 プロパティーベースのテスティング
43 実世界の外敵から身を守る
44 ものの名前

第8章 プロジェクトを始める前に
45 要求の落とし穴
46 不可能なパズルを解決する
47 共に働く
48 アジリティーの本質

第9章 達人のプロジェクト
49 達人のチーム
50 ココナツでは解決できない
51 達人のスターターキット
52 ユーザーを喜ばせる
53 自負と偏見

後書き
参考文献
演習問題の回答(例)
索引
Tip一覧
著者について

プログラムはなぜ動くのか 第3版 知っておきたいプログラミングの基礎知識

『プログラムはなぜ動くのか』14年ぶり、待望の改訂第3版!
「これからの10年も通用する基本」を、より多くの読者に身につけてもらうために改訂しました。

プログラムがコンピュータの中でどのように動作するのかを、誰にでもわかるように説明します。プログラムは、メモリーにロードされ、CPUによって解釈・実行されます。その仕組みを、多数の図を使って、順序だてて解説します。

第3版では、あらためて全文を見直して、登場する製品や開発ツールなどを新しいものに置き換え、プログラミングが初めてという人でも戸惑わないように、本文や注釈に大幅な加筆を加えています。第2版で好評だったハードウエアに関する説明や、C言語によるサンプル・プログラムも更新しています。巻末の補章のC言語の解説「レッツ・トライ C言語! 」も最新仕様に沿うよう改訂しています。

新たに書き下ろした第12章では、Pythonを使った機械学習を取り上げます。初めて機械学習を体験する読者は、コンピュータとプログラムの活用方法としての人工知能(AI)を身近に感じられることでしょう。さらに、巻末の補章にPythonの解説「レッツ・トライ Python! 」を追加しています。

本書の特徴
◆プログラムの成り立ち、動作の仕組みを説明…基礎知識をきちんと解説!
◆メモリーについて充実した説明…プログラマの必須知識をしっかり解説!
◆HW、OS、アプリ、クラウドなど動作環境を網羅…実践・実装知識も解説!

何事にも言えることですが、ものごとの本質を知ることは、とても大切なことです。本質を知ってこそ応用が利きます。新しい技術が登場しても、容易に理解できます。本書によって、プログラムを奥底まで探究し、プログラムの本質に触れてください。

第1章 プログラマにとってCPU とはなにか
第2章 データを2 進数でイメージしよう
コラム:ピカピカの小学生にCPU と2 進数を説明する
第3章 コンピュータが小数点数の計算を間違える理由
第4章 四角いメモリーを丸く使う
第5章 メモリーとディスクの親密な関係
第6章 自分でデータを圧縮してみよう
コラム:ゲームに夢中な中学生にメモリーとディスクを説明する
第7章 プログラムはどんな環境で動くのか
第8章 ソース・ファイルから実行可能ファイルができるまで
第9章 OS とアプリケーションの関係
コラム:スマホが大好きな女子高生にOS の役割を説明する
第10章 アセンブリ言語からプログラムの本当の姿を知る
第11章 ハードウエアを制御する方法
コラム:近所のおばあちゃんにディスプレイとテレビの違いを説明する
第12章 コンピュータに「学習」をさせるには
コラム:行きつけの居酒屋のマスターに機械学習の種類を説明する
補章1 レッツ・トライ C言語!
補章2 レッツ・トライ Python!

コンピュータはなぜ動くのか 第2版 知っておきたいハードウエア&ソフトウエアの基礎知識

『コンピュータはなぜ動くのか』19年ぶり、待望の改訂第2版!
「これからの10年も通用する基本」を身につけよう!
ハードウエア、ソフトウエア、データベース、ネットワーク、セキュリティというコンピュータを使いこなすうえで必要な知識をこの1冊で解説します。

ハードウエアの基本的な仕組み(プロセサ、メモリー、入出力)から、ソフトウエアの実際(プログラム、アルゴリズム、データ構造、データベース、ネットワーク)とシステム構築までをカバー。これからプログラマやSEを目指す入門者から、基本をひと通り学びたい文系エンジニア、さらには、もう一度学び直したいベテランエンジニアまで、コンピュータを動かして成果を得ることの楽しさと仕組みを知りたい人に役立つ内容です。

【改訂のポイント】
今後10年通用するよう内容を全面的に更新。具体的には以下の通りです。
・「コンピュータを作ってみよう」では「COMETⅡ/CASLⅡ」に対応。
・プログラム部分はPythonでの記述に一部変更。
・データベースではMySQLに変更。
・暗号化では共通鍵暗号方式から公開鍵暗号方式に変更。

第1章 コンピュータの3大原則とは
第2章 コンピュータを作ってみよう
第3章 一度は体験してほしいアセンブラ
第4章 川の流れのようにプログラムは流れる
第5章 アルゴリズムと仲良くなる7つのポイント
第6章 データ構造と仲良くなる7つのポイント
第7章 オブジェクト指向プログラミングを語れるようになろう
第8章 作ればわかるデータベース
第9章 ネットワークコマンドでネットワークの仕組みを確認する
第10章 データを暗号化してみよう
第11章 そもそもXMLって何だっけ
第12章 SEはコンピュータ・システム開発の現場監督
巻末付録 コンピュータの回路図

オブジェクト指向でなぜつくるのか 第3版 知っておきたいOOP、設計、アジャイル開発の基礎知識

『オブジェクト指向でなぜつくるのか』10年ぶり、待望の改訂第3版!
「これからの10年も通用する基本」を、より多くの読者に身につけてもらうために改訂しました。

現在のソフトウエア開発技術の主役である、オブジェクト指向の全体像とそこに含まれる各技術を平易な文章で核心をズバリと解説します。
生産性のかぎを握るプログラム開発の主要技術をわかりやすく教えるという位置づけは変わりません。
そのうえで「今ドキのOOP」として人気言語(Java、Python、Ruby、JavaScript)の最新動向を新たに盛り込んでいます。
もちろん、すべての文章を細かく見直して現況に沿うよう更新しています。

本書の特徴
◆オブジェクト指向(OOP)の全体像と特徴がわかる
◆OOPのプログラムが動く仕組みが具体的にわかる
◆関数型言語の本質とOOPとの関係がわかる
◆アジャイル開発手法と実践手法がわかる

第1章 オブジェクト指向はソフトウエア開発を楽にする技術
今ドキのOOP:とっつきやすくて、奥の深いPython
第2章 オブジェクト指向と現実世界は似て非なるもの
オブジェクトの向こう側:バズワードになったオブジェクト指向
第3章 OOPを理解する近道はプログラミング言語の歴史にあり
プログラミング昔話: COBOL コンパイラのニワトリとタマゴの話
第4章 OOPは無駄を省いて整理整頓するプログラミング技術
今ドキのOOP:ホームページツールから進化したPHP
第5章 メモリの仕組みの理解はプログラマのたしなみ
プログラミング昔話: OOPはダンプが見づらい?
第6章 OOPがもたらしたソフトウエアとアイデアの再利用
今ドキのOOP: Rails フレームワークでブレークしたRuby
第7章 汎用の整理術に化けたオブジェクト指向
オブジェクト指向の向こう側:言語が先か、コンセプトが先か
第8章 UMLは形のないソフトウエアを見る道具
第9章 現実世界とソフトウエアのギャップを埋めるモデリング
第10章 擬人化して役割分担させるオブジェクト指向設計
今ドキのOOP:クラスに縛られずに動くJavaScript
第11章 オブジェクト指向から生まれたアジャイル開発
プログラミング昔話:昔は許されなかったXP
第12章 オブジェクト指向を使いこなそう
補章 関数型言語でなぜつくるのか
今ドキのOOP:関数型言語の箱庭を用意したJava

人月の神話【新装版】

ソフトウェア開発の定番書『人月の神話』。「ブルックスの法則」で知られる
ブルックス教授によるこの名著が、同教授の35年ぶりの新刊「The Design Of Design」
(邦題「デザインのためのデザイン」)を記念し、従来の縦組みから横組みに変わり、
表紙カバーを新たに新登場。

IBMの大型コンピュータSystem/630、およびオペレーティングシステムOS/360の
開発チームを率いた著者が、プロジェクトで発生した問題点を詳細に分析し、
ソフトウェア開発にまつわる困難と展望について持論を展開したエッセイ集。
原著初版(1975年)の刊行から35年がたつ現在でも、大規模開発プロジェクトにおける
ソフトウェア工学の古典として読み継がれ、多くの読者を獲得している。

とくに、「遅れているソフトウェアプロジェクトへの要員追加は、
さらにプロジェクトを遅らせるだけだ」というブルックスの法則は名高い。
開発において「人員×月日」というスケジュール見積もりが適用されている問題を指摘し、
ソフトウェア産業において広くいきわたっている「人月の神話」を明らかにした。

また、刊行20周年記念して発行された増訂版では、発表当時大きな議論を巻き起こした
「銀の弾はない」をはじめとして、初版刊行以降に発表された著者の代表的な論文4編を収録。
各方面から寄せられたさまざまな議論に対して、著者があらためて自身の見解を述べている。

クリーンコード系

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

美しいコードを見ると感動する。優れたコードは見た瞬間に何をしているかが伝わってくる。そういうコードは使うのが楽しいし、自分のコードもそうあるべきだと思わせてくれる。本書の目的は、君のコードを良くすることだ。(本書「はじめに」より)
コードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。またコードを再構成するための方法。さらにテストの書き方などについて、楽しいイラストと共に説明しています。日本語版ではRubyやgroongaのコミッタとしても著名な須藤功平氏による解説を収録。

訳者まえがき
はじめに

1章 理解しやすいコード
1.1 「優れた」コードって何?
1.2 読みやすさの基本定理
1.3 小さなことは絶対にいいこと?
1.4 「理解するまでにかかる時間」は競合する?
1.5 でもやるんだよ

第I部 表面上の改善

2章 名前に情報を詰め込む
2.1 明確な単語を選ぶ
もっと「カラフル」な単語を探す
2.2 tmpやretvalなどの汎用的な名前を避ける
tmp
ループイテレータ
汎用的な名前のまとめ
2.3 抽象的な名前よりも具体的な名前を使う
例:DISALLOW_EVIL_CONSTRUCTORS
例:–run_locally
2.4 名前に情報を追加する
値の単位
その他の重要な属性を追加する
2.5 名前の長さを決める
スコープが小さければ短い名前でもいい
長い名前を入力するのは問題じゃない
頭文字と省略形
不要な単語を投げ捨てる
2.6 名前のフォーマットで情報を伝える
その他のフォーマット規約
2.7 まとめ

3章 誤解されない名前
3.1 例:filter()
3.2 例:Clip(text, length)
3.3 限界値を含めるときはminとmaxを使う
3.4 範囲を指定するときはfirstとlastを使う
3.5 包含/排他的範囲にはbeginとendを使う
3.6 ブール値の名前
3.7 ユーザの期待に合わせる
例:get*()
例:list::size()
3.8 例:複数の名前を検討する
3.9 まとめ

4章 美しさ
4.1 なぜ美しさが大切なのか?
4.2 一貫性のある簡潔な改行位置
4.3 メソッドを使った整列
4.4 縦の線をまっすぐにする
整列すべきなのか?
4.5 一貫性と意味のある並び
4.6 宣言をブロックにまとめる
4.7 コードを「段落」に分割する
4.8 個人的な好みと一貫性
4.9 まとめ

5章 コメントすべきことを知る
5.1 コメントするべきでは「ない」こと
コメントのためのコメントをしない
ひどい名前はコメントをつけずに名前を変える
5.2 自分の考えを記録する
「監督のコメンタリー」を入れる
コードの欠陥にコメントをつける
定数にコメントをつける
5.3 読み手の立場になって考える
質問されそうなことを想像する
ハマりそうな罠を告知する
「全体像」のコメント
要約コメント
5.4 ライターズブロックを乗り越える
5.5 まとめ

6章 コメントは正確で簡潔に
6.1 コメントを簡潔にしておく
6.2 あいまいな代名詞を避ける
6.3 歯切れの悪い文章を磨く
6.4 関数の動作を正確に記述する
6.5 入出力のコーナーケースに実例を使う
6.6 コードの意図を書く
6.7 「名前付き引数」コメント
6.8 情報密度の高い言葉を使う
6.9 まとめ

第II部 ループとロジックの単純化

7章 制御フローを読みやすくする
7.1 条件式の引数の並び順
7.2 if/elseブロックの並び順
7.3 三項演算子
7.4 do/whileループを避ける
7.5 関数から早く返す
7.6 悪名高きgoto
7.7 ネストを浅くする
ネストが増える仕組み
早めに返してネストを削除する
ループ内部のネストを削除する
7.8 実行の流れを追えるかい?
7.9 まとめ

8章 巨大な式を分割する
8.1 説明変数
8.2 要約変数
8.3 ド・モルガンの法則を使う
8.4 短絡評価の悪用
8.5 例:複雑なロジックと格闘する
より優雅な手法を見つける
8.6 巨大な文を分割する
8.7 式を簡潔にするもう1つの創造的な方法
8.8 まとめ

9章 変数と読みやすさ
9.1 変数を削除する
役に立たない一時変数
中間結果を削除する
制御フロー変数を削除する
9.2 変数のスコープを縮める
C++のif文のスコープ
JavaScriptで「プライベート」変数を作る
JavaScriptのグローバルスコープ
PythonとJavaScriptのネストしないスコープ
定義の位置を下げる
9.3 変数は一度だけ書き込む
9.4 最後の例
9.5 まとめ

第III部 コードの再構成

10章 無関係の下位問題を抽出する
10.1 入門的な例:findClosestLocation()
10.2 純粋なユーティリティコード
10.3 その他の汎用コード
思いも寄らない恩恵
10.4 汎用コードをたくさん作る
10.5 プロジェクトに特化した機能
10.6 既存のインタフェースを簡潔にする
10.7 必要に応じてインタフェースを整える
10.8 やりすぎ
10.9 まとめ

11章 一度に1つのことを
11.1 タスクは小さくできる
11.2 オブジェクトから値を抽出する
「一度に1つのタスク」を適用する
その他の手法
11.3 もっと大きな例
さらなる改善
11.4 まとめ

12章 コードに思いを込める
12.1 ロジックを明確に説明する
12.2 ライブラリを知る
12.3 この手法を大きな問題に適用する
解決策を言葉で説明する
手法を再帰的に適用する
12.4 まとめ

13章 短いコードを書く
13.1 その機能の実装について悩まないで――きっと必要ないから
13.2 質問と要求の分割
例:店舗検索システム
例:キャッシュを追加する
13.3 コードを小さく保つ
13.4 身近なライブラリに親しむ
例:Pythonのリストとセット
ライブラリの再利用はなぜいいことなのか
13.5 例:コーディングするよりも
Unixツールボックスを使う
13.6 まとめ

第IV部 選抜テーマ

14章 テストと読みやすさ
14.1 テストを読みやすくて保守しやすいものにする
14.2 このテストのどこがダメなの?
14.3 テストを読みやすくする
最小のテストを作る
独自の「ミニ言語」を実装する
14.4 エラーメッセージを読みやすくする
もっといいassert()を使う
手作りのエラーメッセージ
14.5 テストの適切な入力値を選択する
入力値を単純化する
1つの機能に複数のテスト
14.6 テストの機能に名前をつける
14.7 このテストのどこがダメだったのか?
14.8 テストに優しい開発
14.9 やりすぎ
14.10 まとめ

15章 「分/時間カウンタ」を設計・実装する
15.1 問題点
15.2 クラスのインタフェースを定義する
名前を改善する
コメントを改善する
15.3 試案1:素朴な解決策
このコードは理解しやすいか?
読みやすいバージョン
パフォーマンスの問題
15.4 試案2:ベルトコンベヤー設計
二段階ベルトコンベヤーの実装
これで終わり?
15.5 試案3:時間バケツの設計
時間バケツの実装
TrailingBucketCounterを実装する
ConveyorQueueの実装
15.6 3つの解決策を比較する
15.7 まとめ

付録 あわせて読みたい
高品質のコードを書くための書籍
プログラミングに関する書籍
歴史的記録

解説(須藤 功平)
実際にやる
実際にやるとぶつかること
他の人に読んでもらう
おさらい
当たり前にする
既存のコードを読みやすくする前にやること
続けることが大事
コードで伝える
読みやすいコードがもっと当たり前であり続けるために
コミットメールのススメ
まずはあなたが読む
添削コミット
おさらい

最後に
索引

良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方

「ITエンジニア本大賞2023」技術書部門で大賞受賞!
本書は、より成長させやすいコードの書き方と設計を学ぶ入門書です。

システム開発では、ソフトウェアの変更が難しくなる事態が頻発します。
コードの可読性が低く調査に時間がかかる、
コードの影響範囲が不明で変更すると動かなくなる、
新機能を追加したいがどこに実装すればいいかわからない……。

変更しづらいコードは、成長できないコードです。
ビジネスの進化への追随や、機能の改善が難しくなります。

成長できないコードの問題を、設計で解決します。

1 悪しき構造の弊害を知覚する
1.1 意味不明な命名
1.2 理解を困難にする条件分岐のネスト
1.3 さまざまな悪魔を招きやすいデータクラス
1.4 悪魔退治の基本
2 設計の初歩
2.1 省略せずに意図が伝わる名前を設計する
2.2 変数を使い回さない、目的ごとの変数を用意する
2.3 ベタ書きせず、意味のあるまとまりでメソッド化
2.4 関係し合うデータとロジックをクラスにまとめる
3 クラス設計 ―すべてにつながる設計の基盤―
3.1 クラス単体で正常に動作するよう設計する
3.2 成熟したクラスへ成長させる設計術
3.3 悪魔退治の効果を検証する
3.4 プログラム構造の問題解決に役立つ設計パターン
Column 種類の異なる言語と本書のノウハウ
4 不変の活用 ―安定動作を構築する―
4.1 再代入
4.2 可変がもたらす意図せぬ影響
4.3 不変と可変の取り扱い方針
5 低凝集 ―バラバラになったモノたち―
5.1 staticメソッドの誤用
5.2 初期化ロジックの分散
5.3 共通処理クラス(Common・Util)
5.4 結果を返すために引数を使わないこと
Column C#のoutキーワード
5.5 多すぎる引数
5.6 メソッドチェイン
6 条件分岐 ―迷宮化した分岐処理を解きほぐす技法―
6.1 条件分岐のネストによる可読性低下
6.2 switch文の重複
Column クソコード動画「switch文」
6.3 条件分岐の重複とネスト
6.4 型チェックで分岐しないこと
6.5 interfaceの使いこなしが中級者への第一歩
6.6 フラグ引数
7 コレクション ―ネストを解消する構造化技法―
7.1 わざわざ自前でコレクション処理を実装してしまう
Column 車輪の再発明
7.2 ループ処理中の条件分岐ネスト
7.3 低凝集なコレクション処理
8 密結合 ―絡まって解きほぐせない構造―
8.1 密結合と責務
Column クソコード動画「共通化の罠」
8.2 密結合の各種事例と対処方法
Column クソコード動画「継承」
9 設計の健全性をそこなうさまざまな悪魔たち
9.1 デッドコード
9.2 YAGNI原則
9.3 マジックナンバー
9.4 文字列型執着
9.5 グローバル変数
9.6 null問題
9.7 例外の握り潰し
9.8 設計秩序を破壊するメタプログラミング
9.9 技術駆動パッケージング
9.10 サンプルコードのコピペ
9.11 銀の弾丸
10 名前設計 ―あるべき構造を見破る名前―
10.1 悪魔を呼び寄せる名前
10.2 名前を設計する―目的駆動名前設計
10.3 設計時の注意すべきリスク
10.4 意図がわからない名前
Column 技術駆動命名を用いる分野もある
10.5 構造を大きく歪ませてしまう名前
Column クソコード動画「Managerクラス」
10.6 名前的に居場所が不自然なメソッド
10.7 名前の省略
11 コメント ―保守と変更の正確性を高める書き方―
11.1 退化コメント
11.2 コメントで命名をごまかす
11.3 意図や仕様変更時の注意点を読み手に伝えること
11.4 コメントのルール まとめ
11.5 ドキュメントコメント
12 メソッド(関数) ―良きクラスには良きメソッドあり―
12.1 必ず自身のクラスのインスタンス変数を使うこと
12.2 不変をベースに予期せぬ動作を防ぐ関数にすること
12.3 尋ねるな、命じろ
Column クソコード動画「カプセル化」
12.4 コマンド・クエリ分離
12.5 引数
12.6 戻り値
Column メソッドの名前設計
Column staticメソッドの扱いに注意
13 モデリング ―クラス設計の土台―
13.1 邪悪な構造に陥りがちなUserクラス
13.2 モデリングの考え方とあるべき構造
13.3 良くないモデルの問題点と解決方法
Column クソコード動画「Userクラス」
13.4 機能性を左右するモデリング
14 リファクタリング ―既存コードを成長に導く技―
14.1 リファクタリングの流れ
14.2 ユニットテストでリファクタリングのミスを防ぐ
14.3 あやふやな仕様を理解するための分析方法
14.4 IDEのリファクタリング機能
14.5 リファクタリングで注意すべきこと
Column Railsアプリのリファクタリング
15 設計の意義と設計への向き合い方
15.1 本書はなんの設計について書いたものなのか
15.2 設計しないと開発生産性が低下する
15.3 ソフトウェアとエンジニアの成長性
15.4 課題を解決する
15.5 コードの良し悪しを判断する指標
Column クラスを分割すると読みにくくなる?
15.6 コード分析をサポートする各種ツール
Column シンタックスハイライトを品質可視化に利用する
15.7 設計対象と費用対効果
15.8 時間を操る超能力者になろう
16 設計を妨げる開発プロセスとの戦い
16.1 コミュニケーション
16.2 設計
16.3 実装
16.4 レビュー
16.5 チームの設計力を高める
17 設計技術の理解の深め方
17.1 さらにステップアップするための設計技術書紹介
Column バグ退治RPG『バグハンター2 REBOOT』
17.2 設計スキルを高める学び方
Column C#と長き旅、そして設計への道

スポンサーリンク

API

Web API: The Good Parts

Web APIの設計、開発、運用についての解説書。APIは設計次第で使いづらいものになってしまうだけでなく公開後の保守運用も難しくなってしまいます。そのためAPIを美しく設計することがとても重要です。本書では「設計の美しいAPIは、使いやすい、変更しやすい、頑強である、恥ずかしくない」という考えのもと、APIをどのように設計し運用すればより効果的なのか、ありがちな罠や落とし穴を避けるにはどういう点に気をつけなければいけないのかを明らかにします。ターゲットは、URIにアクセスするとXMLやJSONなどのデータが返ってくるシンプルなタイプ――XML over HTTP方式やJSON over HTTP方式――のAPIです。読者は、Web API設計の考え方と手法を知ることができます。

はじめに

1章 Web APIとは何か
    1.1 Web APIの重要性
        1.1.1 APIでの利用を前提としたサービスの登場
        1.1.2 モバイルアプリケーションと API
        1.1.3 APIエコノミー
    1.2 さまざまな APIのパターン
        1.2.1 公開しているウェブサービスのデータや機能の API公開
        1.2.2 他のページに貼り付けるウィジェットの公開
        1.2.3 モダンなウェブアプリケーションの構築
        1.2.4 スマートフォンアプリケーションの開発
        1.2.5 ソーシャルゲームの開発
        1.2.6 社内システムの連携
    1.3 何を APIで公開すべきか
        1.3.1 APIを公開するリスクはあるのか
        1.3.2 APIを公開することで得られるもの
    1.4 Web APIを美しく設計する重要性
        1.4.1 設計の美しい Web APIは使いやすい
        1.4.2 設計の美しい Web APIは変更しやすい
        1.4.3 設計の美しい Web APIは頑強である
        1.4.4 設計の美しい Web APIは恥ずかしくない
    1.5 Web APIを美しくするには
    1.6 RESTと Web API
    1.7 対象となる開発者の数と APIの設計思想
    1.8 まとめ

2章 エンドポイントの設計とリクエストの形式
    2.1 APIとして公開する機能を設計する
        2.1.1 モバイルアプリケーション向け APIに必要な機能
    2.2 API エンドポイントの考え方
        2.2.1 エンドポイントの基本的な設計
    2.3 HTTPメソッドとエンドポイント
        2.3.1 GETメソッド
        2.3.2 POSTメソッド
        2.3.3 PUTメソッド
        2.3.4 DELETEメソッド
        2.3.5 PATCHメソッド
    2.4 APIのエンドポイント設計
        2.4.1 リソースにアクセスするためのエンドポイントの設計の注意点
        2.4.2 利用する単語に気をつける
        2.4.3 スペースやエンコードを必要とする文字を使わない
        2.4.4 単語をつなげる必要がある場合はハイフンを利用する
    2.5 検索とクエリパラメータの設計
        2.5.1 取得数と取得位置のクエリパラメータ
        2.5.2 相対位置を利用する問題点
        2.5.3 絶対位置でデータを取得する
        2.5.4 絞り込みのためのパラメータ
        2.5.5 クエリパラメータとパスの使い分け
    2.6 ログインと OAuth 2.0
        2.6.1 アクセストークンの有効期限と更新
        2.6.2 その他の Grant Type
    2.7 ホスト名とエンドポイントの共通部分
    2.8 SSKDsとAPIデザイン
    2.9 HATEOASとREST LEVEL3 API
        2.9.1 REST LEVEL3 APIのメリット
        2.9.2 REST LEVEL3 API
    2.10 まとめ

3章 レスポンスデータの設計
    3.1 データフォーマット
        3.1.1 データフォーマットの指定方法
    3.2 JSONPの取り扱い
        3.2.1 JSONPをサポートする場合の作法
        3.2.2 JSONPとエラー処理
    3.3 データの内部構造の考え方
        3.3.1 レスポンスの内容をユーザーが選べるようにする
        3.3.2 エンベロープは必要か
        3.3.3 データはフラットにすべきか
        3.3.4 配列とフォーマット
        3.3.5 配列の件数、あるいは続きがあるかをどう返すべきか
    3.4 各データのフォーマット
        3.4.1 各データの名前
        3.4.2 性別のデータをどう表すか
        3.4.3 日付のフォーマット
        3.4.4 大きな整数と JSON
    3.5 レスポンスデータの設計
    3.6 エラーの表現
        3.6.1 ステータスコードでエラーを表現する
        3.6.2 エラーの詳細をクライアントに返す
        3.6.3 エラー詳細情報には何を入れるべきか
        3.6.4 エラーの際に HTMLが返ることを防ぐ
        3.6.5 メンテナンスとステータスコード
        3.6.6 意図的に不正確な情報を返したい場合
    3.7 まとめ

4章 HTTPの仕様を最大限利用する
    4.1 HTTPの仕様を利用する意義
    4.2 ステータスコードを正しく使う
        4.2.1 200番台:成功
        4.2.2 300番台追加で処理が必要
        4.2.3 クライアントのリクエストに問題があった場合
        4.2.4 500番台サーバに問題があった場合
    4.3 キャッシュとHTTPの仕様
        4.3.1 Expiration Model(期限切れモデル)
        4.3.2 Validation Model(検証モデル)
        4.3.3 Heuristic Expiration(発見的期限切れ)
        4.3.4 キャッシュをさせたくない場合
        4.3.5 Varyでキャッシュの単位を指定する
        4.3.6 Cache-Controlヘッダ
    4.4 メディアタイプの指定
        4.4.1 メディアタイプを Content-Typeで指定する必要性
        4.4.2 x-で始まるメディアタイプ
        4.4.3 自分でメディアタイプを定義する場合
        4.4.4 JSONや XMLを用いた新しいデータ形式を定義する場合
        4.4.5 メディアタイプとセキュリティ
        4.4.6 リクエストデータとメディアタイプ
    4.5 同一生成元ポリシーとクロスオリジンリソース共有
        4.5.1 CORSの基本的なやりとり
        4.5.2 プリフライトリクエスト
        4.5.3 CORSとユーザー認証情報
    4.6 独自の HTTPヘッダを定義する
    4.7 まとめ

5章 設計変更をしやすいWeb APIを作る
    5.1 設計変更のしやすさの重要性
        5.1.1 外部に公開している APIの場合
        5.1.2 モバイルアプリケーション向け APIの場合
        5.1.3 ウェブサービス上で使っている APIの場合
    5.2 APIをバージョンで管理する
        5.2.1 URIのバージョンを埋め込む
        5.2.2 バージョン番号をどう付けるか
        5.2.3 バージョンをクエリ文字列に入れる
        5.2.4 メディアタイプでバージョンを指定する方法
        5.2.5 どの方法を採用するべきか
    5.3 バージョンを変える際の指針
        5.3.1 常に最新版を返すエイリアスは必要か
    5.4 APIの提供を終了する
        5.4.1 ケーススタディ : Twitterの場合
        5.4.2 あらかじめ提供終了時の仕様を盛り込んでおく
        5.4.3 利用規約にサポート期限を明記する
    5.5 オーケストレーション層
    5.6 まとめ

6章 堅牢なWeb.APIを作る
    6.1 Web APIを安全にする
        6.1.1 どんなセキュリティの問題があるのか
    6.2 サーバとクライアントの間での情報の不正入手
        6.2.1 HTTPSによる HTTP通信の暗号化
        6.2.2 HTTPSを使えば 100%安全か
    6.3 ブラウザでアクセスする APIにおける問題
        6.3.1 XSS
        6.3.2 XSRF
        6.3.3 JSONハイジャック
    6.4 悪意あるアクセスへの対策を考える
        6.4.1 パラメータの改ざん
        6.4.2 リクエストの再送信
    6.5 セキュリティ関係の HTTPヘッダ
        6.5.1 X-Content-Type-Options
        6.5.2 X-XSS-Protection
        6.5.3 X-Frame-Options
        6.5.4 Content-Security-Policy
        6.5.5 Strict-Transpor t-Security
        6.5.6 Public-Key-Pins
        6.5.7 Set-Cookieヘッダとセキュリティ
    6.6 大量アクセスへの対策
        6.6.1 ユーザーごとのアクセスを制限する
        6.6.2 レートリミットの単位
        6.6.3 制限値を超えてしまった場合の対応
        6.6.4 レートリミットをユーザーに伝える
    6.7 まとめ

付録A Web APIを公開する際にできること

付録B Web .APIチェックリスト

索引

コラム目次
自分の情報へのエイリアス
その他のデータフォーマット
JSONPをサポートすべきか?
HTTP時間の形式
強い検証と弱い検証
バージョン番号を日付で表す
認証局が攻撃を受けて偽の証明書を発行してしまうケース
ブラウザからのアクセスを想定しないAPIの場合
実際のAPIの対応状況を見てみる
アクセス制限の緩和
レートリミットの実装
スポンサーリンク

WEB系

イラスト図解式 この一冊で全部わかるWeb技術の基本

Webの全体像から、HTTPでやりとりする仕組み、さまざまなデータ形式、Webアプリケーションの開発、セキュリティ、システムの構築・運用まで、これからWebにかかわる人が知っておきたい知識をこの一冊で丸ごと解説!

すべての項目の解説は、徹底的にイラスト図解化。
これから仕事に必要な知識を学ぶ方に、すばやく、たのしく知識を身につけていただけるよう、読みやすさ、わかりやすさにこだわって制作しています。

・知識ゼロから全体像がつかめる!
・よく使われる用語の意味がわかる!
・技術の仕組みがスムーズに学べる!

実務に生かせる知識が、確実に身につく、これから学ぶ人のベストな一冊です!

<主な対象読者>
・これからIT系の仕事に就かれる方
・これから社内の情報システムを担当される方
・Webシステムに関連する技術と実務を、幅広く、バランスよく学びたい方

Chapter1 Web技術とは
1-01 Webとは
1-02 インターネットとWeb
1-03 Webのさまざまな用途
1-04 WebブラウザとHTML
1-05 WebサーバーとHTTP
1-06 Webページが表示される流れ
1-07 静的ページと動的ページ
1-08 動的処理
1-09 Webの標準化
1-10 Webの設計思想

Chapter2 Webとネットワーク技術
2-01 Webを実現するコンピューターネットワーク
2-02 インターネットの標準プロトコル
2-03 TCP/IP
2-04 IPアドレスとポート番号
2-05 URLとドメイン
2-06 DNS
2-07 HTTP

Chapter3 HTTPでやりとりする仕組み
3-01 HTTPメッセージ
3-02 HTTPリクエスト・レスポンス
3-03 HTTPメソッド
3-04 ステータスコード
3-05 メッセージヘッダー
3-06 TCPのやりとり
3-07 HTTP1.1のやりとり
3-08 HTTP2のやりとり
3-09 HTTP2での改良点
3-10 HTTPS
3-11 HTTPSのやりとり
3-12 ステートフルとステートレス
3-13 クッキー
3-14 セッション
3-15 URI

Chapter4 Webのさまざまなデータ形式
4-01 HTML
4-02 Webページで使用される画像形式
4-03 XML
4-04 CSS
4-05 スクリプト言語
4-06 DOM
4-07 JSON
4-08 フィード
4-09 マイクロフォーマット
4-10 動画配信
4-11 メディアタイプ

Chapter5 Webアプリケーションの基本
5-01 Webアプリケーションの3層構造
5-02 MVCモデル
5-03 フレームワーク
5-04 Webサーバー
5-05 Webクライアント
5-06 アプリケーションサーバー
5-07 データベース管理システム
5-08 キャッシュサーバー
5-09 Ajax
5-10 Webプログラミング
5-11 Web API
5-12 マッシュアップ
5-13 CGI
5-14 サーバー間の連携

Chapter6 Webのセキュリティと認証
6-01 Webシステムのセキュリティ
6-02 パスワードクラッキング、DoS攻撃
6-03 Webシステムの特徴を利用した攻撃
6-04 Webアプリケーションの脆弱性を狙う攻撃
6-05 Webシステムの脆弱性
6-06 ファイアウォール
6-07 IDS、IPS
6-08 WAF
6-09 暗号化
6-10 公開鍵証明書
6-11 認証
6-12 認可
6-13 CAPTCHA

Chapter7 Webシステムの構築と運用
7-01 提供するサービスの検討
7-02 利用言語、ソフトウェアの検討
7-03 ネットワーク構成の検討
7-04 サーバー構成の検討
7-05 サーバー基盤の検討
7-06 負荷分散
7-07 サーバー設計・構築
7-08 データベース設計
7-09 アプリケーション設計
7-10 バックアップ運用
7-11 ログ運用
7-12 Webサイトのパフォーマンス
7-13 脆弱性診断

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

『なぜあなたはJavaでオブジェクト指向開発できないのか』の著者である小森祐介氏の新刊です。Webアプリケーションの開発方法を,インターネットの仕組みの根本原理から,じっくり解説します。Webアプリケーションとは何か?――という根本的な問いかけから始まり,基礎の基礎をかためつつ,本物の実力を養成することを目標に内容を構成しています。これにより一貫した流れでWebアプリケーション開発の真髄を学ぶことができます。図解をたくさん用意しましたので,これで直感的に楽しく理解も進むようになっています。

LESSON 0 はじめに
市民権を得た「Webアプリケーション」
「Webアプリケーション」開発の難しさ
「Webアプリケーション」の開発技術はどこで学べる?
なぜ,あなたはWebアプリケーション開発技術を学べないのか
本書の対象読者
本書を読む上での想定知識
最も効率よく「技術」を学ぶ方法
LESSON 1 「Webアプリケーション」とは何か
1.1 デスクトップアプリケーション
1.2 Webアプリケーション
1.3 まとめ
LESSON 2 Webはどのように発展したか
2.1 WWWの誕生と普及
世界中のコンピュータを結ぶインターネット
インターネット普及の立役者・World-Wide WebとMosaic
WWWの誕生
現代Webブラウザの祖先・NCSA Mosaic
2.2 Webを支える技術の発明
WebサーバとWebクライアント
なぜ,クライアントとサーバに分けるのか
コラム 「クライアント」と「サーバ」偉いのはどっち?
「そのリソースはどこにある?」- URL
HTTP
コラム インターネットに公開された技術仕様・RFC
2.3 CGIの誕生
動的なコンテンツへの要求
CGIの誕生
Webの爆発的な普及
2.4 サーブレットの登場
CGIにまつわる問題点
Java/サーブレットの誕生
Javaでアプリケーションを開発することの利点
コラム 早すぎた技術,Javaアプレット
2.5 JSPの誕生
サーブレットの問題点
発想の逆転!JSPの誕生
2.6 Webアプリケーションフレームワークの時代
サーブレットやJSPの問題点
Webアプリケーションフレームワークの誕生
2.7 まとめ
LESSON 3 HTTPを知る
3.1 HTTPの知識はなぜ必要か
コラム ハードウェアさえも信じられない事態!?
3.2 WebブラウザとWebサーバの通信をのぞいてみよう
横取り丸とInetSpyのインストール
HTTP通信をのぞいてみよう
HTTPリクエストをのぞく
コラム URL とURI は何が違うのか?
HTTPレスポンスをのぞく
HTTPでは1回で1つのリソースを取得
ファイル名を省略した場合のリクエスト
3.3 情報はどうやってインターネットの大海原を越えるのか
インターネット上の住所・IPアドレス
IPアドレスを頼りに情報を届けるTCP/IP
IPアドレスは誰が決めるのか
グローバルIPアドレスとプライベートIPアドレス
コラム IPアドレスと個人情報
ホスト名をIPアドレスに変換するDNS
DNSはどのようにして実現されるのか
ホスト内の宛先を決定するポート番号
3.4 Webサーバへの要求をどのように伝えるか
GETメソッドによるパラメータ渡し
アプリケーション側でのパラメータの受け取り
POSTメソッドによるパラメータ渡し
GETとPOSTどちらを使えばよい?
日本語はどのようにして渡せばよいか
3.5 まとめ
LESSON 4 CGIからWebアプリケーションへ
4.1 宅配ピザ注文サイトを作ろう
4.2 画面構成を考える
コラム 実際のWebシステム開発の流れ
4.3 画面モックを作ろう
4.4 ログイン認証機能を作成する
PHPで認証機能を作ろう
認証機能の動作を確認しよう
リダイレクト動作のHTTP通信を確認しよう
コラム PHPはどのように実行されるのか?CGIとモジュールの違い?
4.5 ログイン状態をどのようにして記憶するのか
ステートフルなプロトコルとステートレスなプロトコル
ステートレスなHTTP上で状態をどのように表現するか
Cookieを利用して状態を保持する
Cookie利用の実際を確認する
4.6 安全に状態を保存するための技術 ?セッション?
Cookieにまつわる問題点
コラム Cookieはどこに保存されている?
銀行の窓口業務でセッションを理解しよう
口座開設業務の進行状況をどのように管理するか
セッションで処理の進行状況を管理する
セッションの状態をどこで保持するか
HTTPにおけるセッションIDの受け渡し方法
セッションID利用の実際を確認する
セッションIDによるユーザの識別
4.7 ピザ・ペントミノの完成
コラム Webサーバによる認証機能 ?Basic認証?
4.8 まとめ
LESSON 5 Webアプリケーションの構成要素
なぜWebアプリケーションの構成を理解しなければならないのか
コラム コンピュータは「節」?
5.1 WebサーバとWebクライアントの時代
WWWの黎明期
CGIの時代
コラム ソフトウェア? プログラム? アプリケーション? サーバ?
5.2 データベースサーバの登場
大量の情報をどのようにして管理するか
データベース管理システムの登場
コラム DB?  DBMS? RDBMS?
データベースに対する操作
データベースによる情報の管理
コラム データベース設計はITシステムの要
データベースから情報を抽出する
必要な情報をSQLでデータベースへ伝える
コラム データベースに対するCRUD操作とSQL文の関係
データベースとクライアントの関係
データベースサーバの分離
Webアプリケーションとデータベースの通信
コラム 代表的なデータベース製品
5.3 アプリケーションサーバの登場
ServletやJSPはどこで動いているのか
Servlet / JSPを動かすためのアプリケーションサーバ
Webサーバとアプリケーションサーバの連携
Webサーバとアプリケーションサーバの分担
Webサーバとアプリケーションサーバ連携のメリット
複数のTomcatへの転送
Webサーバの機能を持ったアプリケーションサーバ
コラム アプリケーションサーバの提供する機能
5.4 Webシステムの三層構成
最小構成のWebシステム
一般的な構成
Webシステムの三層構成
コラム 現代のWebシステムを支えるオープンソース
5.5 まとめ
LESSON 6 Webアプリケーションを効率よく開発するための仕組み
6.1 サーブレット/JSPだけではいけないのか
Webアプリケーション開発のスタンダード・Java
サーブレットとJSPの連携
6.2 サーブレット/JSPで「ピザ・ペントミノ」のログイン処理を実現する
JSPによるログイン画面の表示
サーブレットの呼び出し
ログインサーブレットの処理
フォワードとリダイレクトの違い
リクエストスコープにおける情報の受け渡し
JSPにおけるリクエストスコープからの情報の取り出し
なぜリクエストスコープが必要なのか
セッションスコープとリクエストスコープの違い
コラム さまざまなセッションの実現方法
6.3 Webアプリケーションのアーキテクチャ
ロジックとデザインの分離
ソフトウェアの建築様式
コラム カスタムタグとJSTL
「ピザ・ペントミノ」の構造を俯瞰しよう
MVCモデルによるWebアプリケーションのアーキテクチャ
MVCモデルによる処理の流れ
6.4 フレームワークによるアーキテクチャの実現
フレームワークとは何か
StrutsによるMVCモデルの実現
Strutsによる「ピザ・ペントミノ」のログイン処理
JSPからのログイン処理アクションの呼び出し
コラム Javaを部品化するための仕組み – Java Beans –
ログイン処理アクションでのログインチェック処理
商品一覧画面への遷移
6.5 レイヤパターンによるデータアクセス層の分離
モデルをどのように実現するか
JDBCによるデータベースからの情報の取得
レイヤパターンによるデータアクセス層の分離
DAOパターンによるデータアクセス層の実現
6.6 O/Rマッピングフレームワークによるデータアクセス層の実現
O/Rマッピングフレームワークの必要性
RDBとオブジェクトのインピーダンス・ミスマッチ
iBATISによるO/Rマッピングの実際
Data MapperとSQLマップファイルによるO/Rマッピング処理
Dao Frameworkを利用したDAOの作成
6.7 フレームワーク利用におけるメリットとデメリット
フレームワーク利用のメリット
フレームワーク利用のデメリット
6.8 まとめ
LESSON 7 セキュリティを確保するための仕組み
7.1 なぜセキュリティを確保しなければならないのか
Webアプリケーションが守るべきセキュリティ
7.2 代表的なWebアプリケーションの攻撃手法とその対策
SQLインジェクション
クロスサイトスクリプティング(XSS)
セッションハイジャック
コラム SSLによる通信路の暗号化
クロスサイトリクエストフォージェリ
コラム セキュリティの陰の立役者・ハッシュ関数
強制ブラウズ
ディレクトリトラバーサル
コラム より安全な認証方式?Digest認証?
7.3 設計・実装ミスに起因する誤動作やセキュリティ問題を防ぐための対策
「戻る」ボタン対策
ダブルサブミット対策
hiddenタグに重要な情報を持たせない
デバッグ情報を出力させない
グローバル変数に情報を持たせない
7.4 まとめ
謝辞
LESSON 8 おわりに
LESSON 9 付録

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESSプラスシリーズ)

Webは誕生から20年で爆発的な普及を果たし,17億人のユーザと2億台のサーバを抱える巨大システムへと成長しました。Webがここまで成功した秘密は,その設計思想,いわゆるアーキテクチャにあります。Webのアーキテクチャ,そしてHTTP,URI,HTMLといったWebを支える技術は,Webがどんなに巨大化しても対応できるように設計されていたのです。

私たちが作る個々のWebサービスも,Webのアーキテクチャにのっとることで成功へとつながります。Webのアーキテクチャに正しく適応したWebサービスは,情報が整理され,ユーザの使い勝手が向上し,ほかのサービスと連携しやすくなり,将来的な拡張性が確保されるからです。

本書のテーマは,Webサービスの実践的な設計です。まずHTTPやURI,HTMLなどの仕様を歴史や設計思想を織り交ぜて解説します。そしてWebサービスにおける設計課題,たとえば望ましいURI,HTTPメソッドの使い分け,クライアントとサーバの役割分担,設計プロセスなどについて,現時点のベストプラクティスを紹介します。

第1部 Web概論
第1章 Webとは何か
1.1 すべての基盤であるWeb
1.2 さまざまなWebの用途
Webサイト
ユーザインタフェースとしてのWeb
プログラム用APIとしてのWeb
1.3 Webを支える技術
HTTP,URI,HTML
ハイパーメディア
分散システム
1.4 本書の構成
第2章 Webの歴史
2.1 Web以前のインターネット
2.2 Web以前のハイパーメディア
Memex ── ハイパーメディアの起源
Xanadu ── 「ハイパーメディア」という言葉の誕生
HyperCard ── 初の実用的なハイパーメディア
Web以前のハイパーメディアの問題点
2.3 Web以前の分散システム
集中システムと分散システム
RPC ── ほかのコンピュータの機能を利用
CORBA,DCOM ── 分散オブジェクトへの進化
Web以前の分散システムの問題点
2.4 Webの誕生
ハイパーメディアとしてのWeb
分散システムとしてのWeb
2.5 Webの標準化
Webの仕様策定
RESTの誕生
さまざまなハイパーメディアフォーマットの誕生
2.6 Web APIをめぐる議論
SOAPとWS-*
SOAP対REST
RESTの誤解と普及
SOAPとWS-*の敗因
2.7 すべてがWebへ
第3章 REST ── Webのアーキテクチャスタイル
3.1 アーキテクチャスタイルの重要性
3.2 アーキテクチャスタイルとしてのREST
3.3 リソース
リソースの名前としてのURI
リソースのアドレス可能性
複数のURIを持つリソース
リソースの表現と状態
3.4 スタイルを組み合わせてRESTを構成する
クライアント/サーバ
ステートレスサーバ
キャッシュ
統一インタフェース
階層化システム
コードオンデマンド
REST = ULCODC$SS
3.5 RESTの2つの側面
RESTとハイパーメディア
RESTと分散システム
3.6 RESTの意義
第2部 URI
第4章 URIの仕様
4.1 URIの重要性
4.2 URIの構文
簡単なURIの例
複雑なURIの例
4.3 絶対URIと相対URI
ベースURI
リソースのURIをベースURIとする方法
ベースURIを明示的に指定する方法
4.4 URIと文字
URIで使用できる文字
%エンコーディング
%エンコーディングの文字エンコーディング
4.5 URIの長さ制限
4.6 さまざまなスキーム
4.7 URIの実装で気をつけること
第5章 URIの設計
5.1 クールなURIは変わらない
5.2 URIを変わりにくくするためには
プログラミング言語に依存した拡張子やパスを含めない
メソッド名やセッションIDを含めない
URIはリソースを表現する名詞にする
URIの設計指針
5.3 URIのユーザビリティ
5.4 URIを変更したいとき
5.5 URI設計のテクニック
拡張子で表現を指定する
マトリクスURI
5.6 URIの不透明性
5.7 URIを強く意識する
第3部 HTTP
第6章 HTTPの基本
6.1 HTTPの重要性
6.2 TCP/IPとは何か
階層型プロトコル
ネットワークインタフェース層
インターネット層
トランスポート層
アプリケーション層
6.3 HTTPのバージョン
HTTP 0.9 ── HTTPの誕生
HTTP 1.0 ── HTTP最初の標準化
HTTP 1.1 ── HTTPの完成
その後のHTTP
6.4 クライアントとサーバ
6.5 リクエストとレスポンス
クライアントで行われること
サーバで行われること
6.6 HTTPメッセージ
リクエストメッセージ
レスポンスメッセージ
HTTPメッセージの構成要素
6.7 HTTPのステートレス性
ハンバーガーショップの例
アプリケーション状態
ステートフルの欠点
ステートレスの利点
ステートレスの欠点
6.8 シンプルなプロトコルであることの強み
第7章 HTTPメソッド
7.1 8つしかないメソッド
7.2 HTTPメソッドとCRUD
7.3 GET ── リソースの取得
7.4 POST ── リソースの作成,追加
子リソースの作成
リソースへのデータの追加
ほかのメソッドでは対応できない処理
7.5 PUT ── リソースの更新,作成
リソースの更新
リソースの作成
POSTとPUTの使い分け
7.6 DELETE ── リソースの削除
7.7 HEAD ── リソースのヘッダの取得
7.8 OPTIONS ── リソースがサポートしているメソッドの取得
7.9 POSTでPUT/DELETEを代用する方法
_methodパラメータ
X-HTTP-Method-Override
7.10 条件付きリクエスト
7.11 べき等性と安全性
PUTはべき等
DELETEもべき等
GETとHEADもべき等,そのうえ安全
安全でもべき等でもないPOST
7.12 メソッドの誤用
GETが安全でなくなる例
ほかのメソッドでできることにPOSTを誤用した例
PUTがべき等でなくなる例
DELETEがべき等でなくなる例
7.13 Webの成功理由はHTTPメソッドにあり
第8章 ステータスコード
8.1 ステータスコードの重要性
8.2 ステータスラインのおさらい
8.3 ステータスコードの分類と意味
8.4 よく使われるステータスコード
200 OK ── リクエスト成功
201 Created ── リソースの作成成功
301 Moved Permanently ── リソースの恒久的な移動
303 See Other ── 別URIの参照
400 Bad Request ── リクエストの間違い
401 Unauthorized ── アクセス権不正
404 Not Found ── リソースの不在
500 Internal Server Error ── サーバ内部エラー
503 Service Unavailable ── サービス停止
8.5 ステータスコードとエラー処理
プロトコルに従ったフォーマットでエラーを返す
Acceptヘッダに応じたフォーマットでエラーを返す
8.6 ステータスコードの誤用
8.7 ステータスコードを意識して設計する
第9章 HTTPヘッダ
9.1 HTTPヘッダの重要性
9.2 HTTPヘッダの生い立ち
9.3 日時
9.4 MIMEメディアタイプ
Content-Type ── メディアタイプを指定する
charsetパラメータ ── 文字エンコーディングを指定する
9.5 言語タグ
9.6 コンテントネゴシエーション
Accept ── 処理できるメディアタイプを伝える
Accept-Charset ── 処理できる文字エンコーディングを伝える
Accept-Language ── 処理できる言語を伝える
9.7 Content-Lengthとチャンク転送
Content-Length ── ボディの長さを指定する
チャンク転送 ── ボディを分割して転送する
9.8 認証
Basic認証
Digest認証
WSSE認証
9.9 キャッシュ
キャッシュ用ヘッダ
条件付きGET
9.10 持続的接続
9.11 そのほかのHTTPヘッダ
Content-Disposition ── ファイル名を指定する
Slug ── ファイル名のヒントを指定する
9.12 HTTPヘッダを活用するために
第4部 ハイパーメディアフォーマット
第10章 HTML
10.1 HTMLとは何か
10.2 メディアタイプ
10.3 拡張子
10.4 XMLの基礎知識
XMLの木構造
要素
属性
実体参照と文字参照
コメント
XML宣言
名前空間
10.5 HTMLの構成要素
ヘッダ
ボディ
共通の属性
10.6 リンク
>要素 ── アンカー
要素
オブジェクトの埋め込み
フォーム
10.7 リンク関係 ── リンクの意味を指定する
rel属性
microformats
10.8 ハイパーメディアフォーマットとしてのHTML
第11章 microformats
11.1 シンプルなセマンティックWeb
11.2 セマンティクス(意味論)とは
言語学における意味論
プログラミング言語における意味論
Webにおける意味論
11.3 RDFとmicroformats
RDFの場合
microformatsの場合
11.4 microformatsの標準化
11.5 microformatsの分類
elemental microformats
compound microformats
11.6 microformatsとRDFa
microformatsの問題点
RDFaでの解決(と残る問題点)
11.7 microformatsの可能性
Tim Brayの疑問
hAtom/xFolkとLDRize/AutoPagerize
11.8 リソースの表現としてのmicroformats
第12章 Atom
12.1 Atomとは何か
12.2 Atomのリソースモデル
メンバリソース
コレクションリソース
メディアタイプ
拡張子
名前空間
12.3 エントリ ── Atomの最小単位
メタデータ
エントリの内容
12.4 フィード ── エントリの集合
エントリと共通のメタデータ
フィード独自のメタデータ
12.5 Atomの拡張
Atom Threading Extensions ── スレッドを表現する
Atom License Extension ── ライセンス情報を表現する
Feed Paging and Archiving ── フィードを分割する
OpenSearch ── 検索結果を表現する
12.6 Atomを活用する
第13章 Atom Publishing Protocol
13.1 Atom Publishing Protocolとは何か
AtomとAtomPub
AtomPubの意義
AtomPubとREST
13.2 AtomPubのリソースモデル
13.3 ブログサービスを例に
13.4 メンバリソースの操作
エントリ単位での操作
メディアリソースの操作
13.5 サービス文書
メディアタイプ
要素
要素
要素
カテゴリ
13.6 AtomPubに向いているWeb API
第14章 JSON
14.1 JSONとは何か
14.2 メディアタイプ
14.3 拡張子
14.4 データ型
オブジェクト
配列
文字列
数値
ブーリアン
null
日時
リンク
14.5 JSONPによるクロスドメイン通信
クロスドメイン通信の制限

スポンサーリンク

ネットワーク

イラスト図解式 この一冊で全部わかるネットワークの基本 第2版 (わかりやすさにこだわったイラスト図解式)

——————————————————————————–
初学者に大好評のベストセラーが、最新情報に対応してフルカラーで登場!
——————————————————————————–
TCP/IP、LANの基礎から、企業ネットワークの全体像、代表的なネットワーク機器、プロトコル、構築、運用、セキュリティなど、これからネットワークにかかわる人が知っておきたい知識をこの一冊で丸ごと解説!

すべての項目の解説は、徹底的にイラスト図解化。
これから仕事に必要な知識を学ぶ方に、すばやく、たのしく知識を身につけていただけるよう、読みやすさ、わかりやすさにこだわって制作しています。

・知識ゼロから全体像がつかめる!
・よく使われる用語の意味がわかる!
・技術の仕組みがスムーズに学べる!

実務に生かせる知識が、確実に身につく、これから学ぶ人のベストな一冊です!

<主な対象読者>
・これからIT系の仕事に就かれる方
・これから社内の情報システムを担当される方
・ネットワークの技術と実務を、幅広く、バランスよく学びたい方

Chapter1 ネットワークの基礎知識
1-01 コンピューターとネットワーク
1-02 ネットワークについて学ぶ時の心構え
1-03 LANとWAN
1-04 インターネットワーキングの概念
1-05 インターネット接続を構成する要素
1-06 企業ネットワークの構成
1-07 通信プロトコル
1-08 レイヤー
1-09 OSI参照モデル
1-10 クライアントサーバーとピアツーピア
1-11 回線交換とパケット交換
1-12 二進数
1-13 十六進数

Chapter2 TCP/IPの基礎知識
2-01 TCP/IPのレイヤー構成
2-02 OSI参照モデルとの対応
2-03 ネットワークインタフェース層の役割
2-04 インターネット層の役割
2-05 トランスポート層の役割
2-06 信頼性を実現するTCPの通信手順
2-07 アプリケーション層の役割
2-08 レイヤーごとの処理とパケットの関係
2-09 IPアドレス
2-10 ポート番号
2-11 グローバルIPアドレスとプライベートIPアドレス
2-12 IPアドレスのクラスとネットマスク
2-13 サブネット化とサブネットマスク
2-14 ブロードキャストとマルチキャスト
2-15 ハブ/スイッチの役割と機能
2-16 ルーターの役割と機能
2-17 IPv6
2-18 通信速度と遅延

Chapter3 TCP/IPで通信するための仕組み
3-01 MACアドレス
3-02 ARPが必要なわけ
3-03 可変長サブネットマスクとCIDR
3-04 ドメイン名
3-05 ルーティングとデフォルトゲートウェイ
3-06 スタティックルーティングとダイナミックルーティング
3-07 ルーティングプロトコル
3-08 DHCP
3-09 NATとNAPT

Chapter4 ネットワーク機器と仮想化
4-01 イーサネットの機能と構成
4-02 L2スイッチ
4-03 L3スイッチとルーター
4-04 無線LAN
4-05 ポートベースVLANとタグベースVLAN
4-06 VPNとトンネル技術
4-07 仮想化
4-08 クラウド

Chapter5 ネットワークのサービス
5-01 Webを支える技術
5-02 HTTP
5-03 HTTPSとSSL/TLS
5-04 SMTP
5-05 POP3とIMAP4
5-06 FTP
5-07 SSH
5-08 DNS
5-09 NTP
5-10 HTTPプロキシ
5-11 サービス連携とREST API
5-12 ロードバランサー
5-13 HTMLの構造とXML
5-14 文字コード

Chapter6 ネットワークのセキュリティ
6-01 情報セキュリティの3大要素
6-02 暗号化と電子証明書
6-03 不正侵入の防止
6-04 不正プログラム
6-05 ファイアウォールとDMZ
6-06 アンチウイルスとコンテンツフィルタリング
6-07 IDSとIPS
6-08 UTMと次世代ファイアウォール
6-09 ソーシャルエンジニアリング
6-10 標的型攻撃
6-11 セキュリティポリシーの策定

Chapter7 ネットワークの構築と運用
7-01 ネットワーク構成の設計
7-02 サブネット構成とIPアドレス割り当て
7-03 ハードウェアとソフトウェアの選択
7-04 インターネットとの接続
7-05 サーバーの公開
7-06 Windowsのワークグループとドメイン
7-07 ディレクトリサービス
7-08 LAN配線の敷設と加工
7-09 安定した電源の確保
7-10 ネットワークの冗長化
7-11 ネットワークの監視
7-12 トラブルシューティング

ネットワークはなぜつながるのか

ブラウザにURLを入力してからWebページが表示されるまでの道筋をたどりながら、その裏側で働くTCP/IP、LAN、光ファイバなどの技術を説明していきます。インターネットを通ってサーバーまで行って帰ってくる道筋の途中には、今のネットワークの主要な技術要素が全部あります。そこでの機器やソフトウエアがどのように動き連携しているのかを探検すればネットワーク全体の動きがわかります。

第1章 Webブラウザがメッセージを作る―ブラウザ内部を探検
第2章 TCP/IPのデータを電気信号にして送る―プロトコル・スタックとLANアダプタを探検
第3章 ケーブルの先はLAN機器だった―ハブとスイッチ、ルーターを探検
第4章 アクセス回線を通ってインターネットの内部へ―アクセス回線とプロバイダを探検
第5章 サーバー側のLANには何がある
第6章 Webサーバーに到着し、応答データがWebブラウザに戻る―わずか数秒の「長い旅」の終わり

マスタリングTCP/IP―入門編―(第6版)

本書は、ベストセラーの『マスタリングTCP/IP 入門編』を時代の変化に即したトピックを加え、内容を刷新した第6版として発行するものです。豊富な脚注と図版・イラストを用いたわかりやすい解説により、TCP/IPの基本をしっかりと学ぶことができます。プロトコル、インターネット、ネットワークについての理解を深める最初の一歩として活用ください。

第1章 ネットワーク基礎知識
第2章 TCP/IP基礎知識
第3章 データリンク
第4章 IPプロトコル
第5章 IPに関連する技術
第6章 TCPとUDP
第7章 ルーティングプロトコル(経路制御プロトコル)
第8章 アプリケーションプロトコル
第9章 セキュリティ
付録

スポンサーリンク

サーバー系

イラスト図解式 この一冊で全部わかるサーバーの基本 第2版

初学者の定番ベストセラーが、最新状況に対応してオールカラーで登場!

さまざまな社内サーバー、公開サーバーの種類や役割、セキュリティ、障害から守る仕組み、運用、クラウド、仮想化、コンテナなど、これからサーバーにかかわる人が知っておきたい知識をこの一冊で丸ごと解説!

すべての項目の解説は、徹底的にイラスト図解化。
これから仕事に必要な知識を学ぶ方に、すばやく、たのしく知識を身につけていただけるよう、読みやすさ、わかりやすさにこだわって制作しています。

・知識ゼロから全体像がつかめる!
・よく使われる用語の意味がわかる!
・技術の仕組みがスムーズに学べる!

実務に生かせる知識が、確実に身につく、これから学ぶ人のベストな一冊です!

<主な対象読者>
・これからIT系の仕事に就かれる方
・これから社内の情報システムを担当される方
・サーバーの技術と実務を、幅広く、バランスよく学びたい方

Chapter1 サーバーとは
1-01 サーバーとは
1-02 クライアント/サーバーシステム
1-03 いろいろなサーバー
1-04 サーバーソフトウェア
1-05 構築するサーバーの種類とサーバーソフトウェアの選び方
1-06 サーバーの運用管理
1-07 サーバーとネットワーク

Chapter2 ネットワークの基礎知識
2-01 ネットワークの技術を理解する
2-02 プロトコルとは
2-03 OSI参照モデル
2-04 イーサネットとMACアドレス
2-05 スイッチング
2-06 IPとIPアドレス
2-07 いろいろなIPアドレス
2-08 ルーティング
2-09 ARP
2-10 TCPとUDP
2-11 ポート番号の使い方
2-12 NATとNAPT

Chapter3 サーバーを用意する
3-01 どのサーバーを利用するかを選ぶ
3-02 オンプレミス型とクラウド型
3-03 クラウドサービスの種類
3-04 自社かデータセンターか
3-05 サーバーを仮想化するかしないか
3-06 仮想化ソフトウェアの種類
3-07 サーバーをコンテナ化するかしないか
3-08 サーバーの筐体形状を選ぶ
3-09 サーバーを構成するコンポーネント
3-10 Linux系サーバーOSとWindows系サーバーOS
3-11 アプライアンスサーバー
3-12 仮想アプライアンスサーバー

Chapter4 社内サーバーの基本
4-01 社内サーバーの配置
4-02 DHCPサーバーの役割
4-03 DNSサーバーの役割
4-04 DNSサーバーの冗長化
4-05 ワークグループとActive Directoryドメイン
4-06 Active Directoryドメインを構成するメリット
4-07 ファイルサーバーの役割
4-08 SSOサーバーの役割
4-09 SIPサーバーの役割
4-10 プロキシサーバーの役割
4-11 送信メールサーバーの役割
4-12 受信メールサーバーの役割
4-13 Microsoft Exchange Serverの役割

Chapter5 公開サーバーの基本
5-01 公開サーバーの配置
5-02 オンプレミス環境のサーバーを公開する
5-03 クラウド環境のサーバーを公開する
5-04 Web三階層モデル
5-05 HTTPサーバーの役割
5-06 HTTPSサーバーの役割
5-07 2つの暗号化技術
5-08 SSL/TLSで接続できるまで
5-09 アプリケーションサーバーの役割
5-10 データベースサーバーの役割
5-11 CDNで大量のトラフィックをさばく
5-12 FTPサーバーの役割
5-13 VPNサーバーの役割

Chapter6 サーバーを障害から守る
6-01 サーバーに障害はつきもの
6-02 RAID
6-03 チーミング
6-04 UPS
6-05 クラスター
6-06 サーバー負荷分散技術
6-07 広域負荷分散技術

Chapter7 サーバーのセキュリティ
7-01 インターネットに潜む脅威と脆弱性
7-02 ファイアウォールでサーバーを守る
7-03 ファイアウォールの選び方
7-04 セキュリティゾーンとサーバーの配置
7-05 IDSとIPS
7-06 次世代ファイアウォール
7-07 Webアプリケーションファイアウォール
7-08 メールのセキュリティ対策

Chapter8 サーバーの運用管理
8-01 サーバーの運用管理で行う作業
8-02 サーバーのリモート管理
8-03 更新プログラムのインストール
8-04 更新プログラムの配信管理
8-05 バックアップとリストア
8-06 コマンドでネットワークの状態を知る
8-07 コマンドで障害を切り分ける
8-08 NTPサーバーの役割
8-09 Syslogサーバーの役割
8-10 SNMPサーバーの役割

スポンサーリンク

DB・SQL

スッキリわかるSQL入門 第4版 ドリル256問付き! (スッキリわかる入門シリーズ)

シリーズ累計90万部突破の大人気入門書の改訂版!
どこでも試せて繰り返し練習できるから
初心者でもSQLがグングン身に付く!

初心者でもすぐにSQLを習得できる秘密は、3つのコンセプトにあり!

【1】シンプルだけれど奥深いSQLが楽しく「わかる」

学習中浮かび上がる読者の疑問をスルーせず、しっかり答えを出して次のテーマに進みます。
このスッキリ流解説によって、副問い合わせや結合、正規化といった初心者がつまずきやすい分野も楽しくマスターできます。

【2】つまずくことなく、今すぐに、何度でも「試せる」

従来、SQLの学習環境を整えるためには、面倒な準備が必要でした。
本書では、PCやスマートフォンのブラウザがあれば今すぐにSQLを実行できるクラウドサービス「dokoQL」を用意し、最初から学習に専念できるようになっています。

【3】自信がつくまで繰り返し「練習できる」

SQLをマスターするには、たくさん書き、たくさん実行し、SQL文と実行結果の因果関係を繰り返し体感することが、遠回りのように見えて一番の近道です。
本書に収録した膨大な特訓ドリルを活用すれば、着実に理解を深めることができます。

第4版では、最新DBMS製品に対応したほか、新付録として「SQLによるデータ分析入門」を追加しました。
RDBやSQLが、近年注目を集めるデータ活用とAIの世界にも繋がっていることを実感できます。

※dokoQLは新刊購入者用特典です。利用の前にインプレスのWebサイトで「dokoQLご利用上の注意」をご確認ください。

表紙
注意書き
はじめに
dokoQLの使い方
本書の見方
表の種類
●chapter 0 SQLを学ぶにあたって
0.1 SQLを学ぼう
■第I部 SQLを始めよう
●chapter 1 はじめてのSQL
1.1 データベースとは
1.2 はじめてのSQL
1.3 この章のまとめ
1.4 練習問題
●chapter 2 基本文法と4大命令
2.1 SQLの基本ルール
2.2 データ型とリテラル
2.3 SQLの命令体系
2.4 SELECT文 ― データの検索
2.5 UPDATE文 ― データの更新
2.6 DELETE文 ― データの削除
2.7 INSERT文 ― データの追加
2.8 4大命令をスッキリ学ぶコツ
2.9 この章のまとめ
2.10 練習問題
●chapter 3 操作する行の絞り込み
3.1 WHERE句による絞り込み
3.2 条件式
3.3 さまざまな比較演算子
3.4 複数の条件式を組み合わせる
3.5 主キーとその必要性
3.6 この章のまとめ
3.7 練習問題
●chapter 4 検索結果の加工
4.1 検索結果の加工
4.2 DISTINCT ― 重複行を除外する
4.3 ORDER BY ― 結果を並べ替える
4.4 OFFSET – FETCH ― 行数を限定して取得する
4.5 集合演算子
4.6 この章のまとめ
4.7 練習問題
■第II部 SQLを使いこなそう
●chapter 5 式と関数
5.1 式と演算子
5.2 さまざまな演算子
5.3 さまざまな関数
5.4 文字列にまつわる関数
5.5 数値にまつわる関数
5.6 日付にまつわる関数
5.7 変換にまつわる関数
5.8 この章のまとめ
5.9 練習問題
●chapter 6 集計とグループ化
6.1 データを集計する
6.2 集計関数の使い方
6.3 集計に関する4つの注意点
6.4 データをグループに分ける
6.5 集計テーブルの活用
6.6 この章のまとめ
6.7 練習問題
●chapter 7 副問い合わせ
7.1 検索結果に基づいて表を操作する
7.2 単一の値の代わりに副問い合わせを用いる
7.3 複数の値の代わりに副問い合わせを用いる
7.4 表の代わりに副問い合わせを用いる
7.5 この章のまとめ
7.6 練習問題
●chapter 8 複数テーブルの結合
8.1 「リレーショナル」の意味
8.2 テーブルの結合
8.3 結合条件の取り扱い
8.4 結合に関するさまざまな構文
8.5 この章のまとめ
8.6 練習問題
■第III部 データベースの知識を深めよう
●chapter 9 トランザクション
9.1 正確なデータ操作
9.2 コミットとロールバック
9.3 トランザクションの分離
9.4 ロックの活用
9.5 この章のまとめ
9.6 練習問題
●chapter 10 テーブルの作成
10.1 SQL命令の種類
10.2 テーブルの作成
10.3 制約
10.4 外部キーと参照整合性
10.5 この章のまとめ
10.6 練習問題
●chapter 11 さまざまな支援機能
11.1 データベースをより速くする
11.2 データベースをより便利にする
11.3 データベースをより安全に使う
11.4 この章のまとめ
11.5 練習問題
■第IV部 データベースで実現しよう
●chapter 12 テーブルの設計
12.1 システムとデータベース
12.2 家計管理データベースの要件
12.3 概念設計
12.4 論理設計
12.5 正規化の手順
12.6 物理設計
12.7 正規化されたデータの利用
12.8 この章のまとめ
12.9 練習問題
●付録 A 簡易リファレンス
A.1 DBMSに共通するDMLの構文
A.2 Oracle DBに関する互換性のポイント
A.3 SQL Serverに関する互換性のポイント
A.4 Db2に関する互換性のポイント
A.5 MySQLに関する互換性のポイント
A.6 MariaDBに関する互換性のポイント
A.7 PostgreSQLに関する互換性のポイント
A.8 SQLiteに関する互換性のポイント
A.9 H2 Databaseに関する互換性のポイント
A.10 DBMS比較表
A.11 ER図の表記法
●付録 B エラー解決 虎の巻
●付録 C 特訓ドリル
C.1 SQLドリル
ほか

達人に学ぶSQL徹底指南書 第2版 初級者で終わりたくないあなたへ

SQLを扱うエンジニア必携のロングセラー、10年ぶりの改訂!
――SQLの正しい書き方・考え方が学べる本

開発者のためのWebマガジン「CodeZine」の人気連載を大幅加筆・修正して2008年に刊行、好評を博した『達人に学ぶSQL徹底指南書』の改訂・第2版です。

第2版では、初版構成を生かしつつ、SQLの強力な機能ウインドウ関数を全面的に採用して多くのコードをリバイスしました。全体的な解説の見直しや最新化も行ない、CASE式、ウィンドウ関数、外部結合、HAVING句、EXISTS述語など、SQLを扱うエンジニアに必要な「正しい書き方・考え方」「ビッグデータ時代に対応したモダンなSQL機能を駆使した書き方」を徹底解説しています。

標準SQL準拠のため、Oracle/SQL Server/DB2/PostgreSQL/MySQL等々の幅広いデータベースに対応しているほか、実際の開発現場でも活かしやすい実践的なコーディング事例も多数紹介しています。
チューニングテクニックやリレーショナルデータベースの歴史なども網羅。
SQLの原理となっている仕組みや、この言語を作った人々が何を考えて現在のような形にしたのか、というバックグラウンドも掘り起こして伝えます。

・脱初級や、より高みを目指したいDBエンジニア、プログラマ
・「SQLとは何なのか」を知りたいと思っている人
におすすめの一冊です。

第1部 魔法のSQL
 1 CASE式のススメ
 2 必ずわかるウィンドウ関数
 Column なぜONではなくOVERなのか?
 3 自己結合の使い方
 Column SQL とフォン・ノイマン
 4 3値論理とNULL
 Column 文字列とNULL
 5 EXISTS述語の使い方
 6 HAVING句の力
 Column 関係除算
 Column HAVING 句とウィンドウ関数
 7 ウィンドウ関数で行間比較を行なう
 8 外部結合の使い方
 9 SQLで集合演算
 10 SQLで数列を扱う
 11 SQLを速くするぞ
 12 SQLプログラミング作法

第2部 リレーショナルデータベースの世界
 13 RDB近現代史
 14 なぜ“関係”モデルという名前なの?
 15 関係に始まり関係に終わる
 16 アドレス、この巨大な怪物
 17 順序をめぐる冒険
 18 GROUP BYとPARTITION BY
 19 手続き型から宣言型・集合指向へ頭を切り替える7箇条
 20 神のいない論理
 21 SQLと再帰集合
 22 NULL撲滅委員会
 23 SQLにおける存在の階層

第3部 付録
 A 演習問題の解答
 B 参考文献

達人に学ぶDB設計 徹底指南書

DB設計の基礎と実践ノウハウが身につく一冊

本書は、好評を博した『達人に学ぶ SQL徹底指南書』の続編という位置づけで、プロのデータベース(DB)エンジニアである著者が、DB設計の基礎と実践ノウハウをやさしく手ほどきする指南書です。初級者が押さえておくべきDB設計の基礎知識やポイント、正規化/非正規化のケーススタディ、テーブル設計のやってはいけないバッドノウハウ、注意すべきグレーノウハウなどを丁寧に解説します。豊富なサンプルと練習問題で、現場で通用する実践的な力が身につきます。DBエンジニアを目指す人、DB設計の基礎と実践をしっかり学びたい人、脱初級を目指すアプリケーション開発者やDBエンジニアなど、DB設計・開発に携わるすべての方におすすめの一冊です。

第1章 データベースを制する者はシステムを制す

1-1 システムとデータベース
   データ処理としてのシステム
   データと情報
1-2 データベースあれこれ
   データベースの代表的なモデル
   DBMSの違いは設計に影響するか?
1-3 システム開発の工程と設計
   システム開発の設計工程
   設計工程と開発モデル
1-4 設計工程とデータベース
   DOAとPOA
   3層スキーマ
   概念スキーマとデータ独立性
   演習問題

第2章 論理設計と物理設計

2-1 概念スキーマと論理設計
   論理設計のステップ
   エンティティの抽出
   エンティティの定義
   正規化
   ER図の作成
2-2 内部スキーマと物理設計
   物理設計のステップ
   テーブル定義
   インデックス定義
   ハードウェアのサイジング
   ストレージの冗長構成
   ファイルの物理配置
2-3 バックアップ設計
   バックアップの基本分類
   完全/差分/増分
   フルバックアップ
   差分バックアップ
   増分バックアップ
   バックアップ方式にもトレードオフがある
   どんなバックアップ方式を採用すべきか?
2-4 リカバリ設計
   リカバリとリストア
   リストアとロールフォワード
   演習問題

第3章 論理設計と正規化 ~なぜテーブルは分割する必要があるのか?

3-1 テーブルとは何か?
   二次元表≠テーブル
3-2 テーブルの構成要素
   行と列
   キー
   制約
   テーブルと列の名前
3-3 正規化とは何か?
   正規形の定義
3-4 第1正規形
   第1正規形の定義 ~スカラ値の原則
   第1正規形を作ろう
   なぜ一つのセルに複数の値を入れてはダメなのか? ~関数従属性
3-5 第2正規形 ~部分関数従属
   第2正規化を行う
   第2正規形でないと何が悪いのか?
   無損失分解と情報の保存
3-6 第3正規形 ~推移的関数従属
   推移的関数従属
   第3正規化を行う
3-7 ボイス-コッド正規形
   3次と4次の狭間
   ボイス-コッド正規化を行う
3-8 第4正規形
   多値従属性 ~キーと集合の対応
   第4正規化を行う
   第4正規形の意義
3-9 第5正規形
   第5正規化を行う
3-10 正規化についてのまとめ
   正規化の三つのポイント
   世紀かは常にするべきか?
   演習問題

第4章 ER図 ~複数のテーブルの関係を表現する

4-1 テーブルが多すぎる!
4-2 テーブル同士の関連を見抜く
   1対1、1対多、多対多
4-3 ER図の描き方
   テーブル(エンティティ)の表記方法
   IE表記法でER図を描く
   IDEF1XでER図を描く
4-4 「多対多」と関連実体
   演習問題

第5章 論理設計とパフォーマンス ~正規化の欠点と非正規化

5-1 正規化の功罪
   正規化とSQL(検索)
   正規化とSQL(更新)
   正規化と非正規化、どちらが正解なのか?
5-2 非正規化とパフォーマンス
   サマリデータの冗長性とパフォーマンス
   選択条件の冗長性とパフォーマンス
5-3 冗長性とパフォーマンスのトレードオフ
   更新時のパフォーマンス
   データのリアルタイム性
   改修コストの大きさ
   演習問題

第6章 データベースとパフォーマンス

6-1 データベースのパフォーマンスを決める要因
   インデックス
   統計情報
6-2 インデックス設計
   まずはB-treeインデックスから
   B-treeインデックスの長所
   B-treeインデックスの構造
6-3 B-treeインデックスの設計方針
   B-treeインデックスはどの列に作れば良いか?
   B-treeインデックスとテーブルの規模
   B-treeインデックスとカーディナリティ
   B-treeインデックスとSQL
   B-treeインデックスに関するその他の注意事項
6-4 統計情報
   オプティマイザと実行計画
   統計情報の設計指針
   演習問題

第7章 論理設計のバッドノウハウ

7-1 論理設計の「やってはいけない」
7-2 非スカラ値(第1正規形未満)
   配列型による非スカラ値
   スカラ値の基準は何か?
7-3 ダブルミーニング
   この列の意味は何でしょう?
   テーブルの列は「変数」ではない
7-4 単一参照テーブル
   多すぎるテーブルをまとめたい?
   単一参照テーブルの功罪
7-5 テーブル分割
   テーブル分割の種類
   水平分割
   垂直分割
   集約
7-6 不適切なキー
   キーは永遠に不変です!
   同じデータを意味するキーは同じデータ型にすべし
7-7 ダブルマスタ
   ダブルマスタはSQLを複雑にし、パフォーマンスを悪化させる
   ダブルマスタはなぜ生じるのか
   演習問題

第8章 論理設計のグレーノウハウ

8-1 違法すれすれの「ライン上」に位置する設計
8-2 代理キー ~主キーが役に立たないとき
   主キーが決められない、または主キーとして不十分なケース
   代理キーによる解決
   自然キーによる解決
   インターバル
   オートナンバリングの是非
8-3 列持ちテーブル
   配列型は使えない、でも配列を表現したい
   列持ちテーブルの利点と欠点
   行持ちテーブル
8-4 アドホックな集計キー
8-5 多段ビュー
   ビューへのアクセスは「2段階」で行われる
   多段ビューの危険性
8-6 データクレンジングの重要性
   データクレンジングは設計に先立って行う
   代表的なデータクレンジングの内容
   演習問題

第9章 一歩進んだ論理設計 ~SQLで木構造を扱う

9-1 リレーショナルデータベースのアキレス腱
   木構造とは?
9-2 伝統的な解法 ~隣接リストモデル
9-3 新しい解法 ~入れ子集合モデル
   入れ子集合モデルを使った検索
   入れ子集合モデルを使った更新
9-4 もしも無限の資源があったなら ~入れ子区間モデル
   使っても使っても尽きない資源
   入れ子区間モデルを使った更新
9-5 ノードをフォルダだと思え ~経路列挙モデル
   ファイルシステムとしての階層
   経路列挙モデルによる検索
   経路列挙モデルを使った更新
9-6 各モデルのまとめ
   演習問題

付録 演習問題の解答

第1章 解答
   演習1-1 DBMSの情報確認
   演習1-2 アプリケーション改修のタイプとコスト
第2章 解答
   演習2-1 データベースサーバーのクラスタリング構成
   演習2-2 ハードウェアリソースの情報取得
   演習2-3 サーバーCPUの机上サイジング
第3章 解答
   演習3-1 正規形の次数
   演習3-2 関数従属性
   演習3-3 正規化
第4章 解答
   演習4-1 ER図
   演習4-2 関連エンティティ
   演習4-3 多対多の関連
第5章 解答
   演習5-1 正規化されたテーブルに対するSQL
   演習5-2 非正規化によるSQLチューニング
第6章 解答
   演習6-1 ビットマップインデックスとハッシュインデックス
   演習6-2 インデックスの再編成
第7章 解答
   演習7-1 パーティションの特徴
   演習7-2 マテリアライズドビューの機能
第8章 解答
   演習8-1 ビジネスロジックの実装方法の検討
   演習8-2 一時テーブル
第9章 解答
   演習9-1 木構造を扱うモデルの正規形
   演習9-2 実数のデータ型

索引

スポンサーリンク

クラウド

基礎

イラスト図解式 この一冊で全部わかるクラウドの基本 第2版

これからクラウドにかかわる人が知っておきたい知識をこの一冊で丸ごと解説!

クラウドの基礎知識から、代表的なサービスの種類、クラウドを支えるさまざま技術、クラウド導入の考え方、各クラウド事業者の特徴、業種別・目的別のクラウド導入例まで、これからクラウドにかかわる人が知っておきたい知識をこの一冊で丸ごと解説!

第2版では時代の変化に合わせて内容を追加・修正し、特にクラウドサービス事業者の記述を大幅に更新し、エッジコンピューティングなどの注目すべきテクノロジーの解説も盛り込みました。

すべての項目の解説は、徹底的にイラスト図解化。
これから仕事に必要な知識を学ぶ方に、すばやく、たのしく知識を身につけていただけるよう、読みやすさ、わかりやすさにこだわって制作しています。

・知識ゼロから全体像がつかめる!
・よく使われる用語の意味がわかる!
・技術の仕組みがスムーズに学べる!

実務に生かせる知識が、確実に身につく、これから学ぶ人のベストな一冊です!

<主な対象読者>
・これからIT系の仕事に就かれる方
・これから社内の情報システムを担当される方
・クラウドのサービスと技術、活用事例を、幅広く、バランスよく学びたい方

はじめに
Chapter1 クラウドとは
 1-01 IT資産を自分で持たず、サービスとして利用する クラウドコンピューティングとは
 1-02 情報処理システムは絶えず変化している クラウドが登場した背景
 1-03 クラウドサービスの共通の特徴を確認しておこう クラウドの定義と特徴
Chapter2 クラウドのサービスとその利用
 2-01 自由に選択し、組み合わせて利用する クラウドの提供するさまざまなサービス
 2-02 作成も削除も手軽に行える 仮想サーバー
 2-03 高性能なシステムを簡単に構築できる 仮想サーバーで使えるオプション機能
Chapter3 クラウドを実現する技術
 3-01 技術を知ることでサービスを深く理解できる クラウドを実現する技術
 3-02 物理サーバーのリソースを論理的に分割して使う サーバーの仮想化技術
 3-03 OS上のアプリケーション実行領域を分割して使う コンテナ技術
Chapter4 クラウド導入に向けて
 4-01 主に4つの観点から検討する クラウド導入の目的を明確にする
 4-02 計画からプロジェクトの管理まで主導する クラウドの導入にあたっての推進体制
 4-03 技術からライセンスまで検討すべきことは多い クラウドへの移行にあたっての課題を整理する
Chapter5 クラウドサービス事業者
 5-01 国内外に多数の事業者がある クラウドサービスを提供する事業者
 5-02 世界で最も多く利用されている Amazon.comのクラウドサービス
 5-03 自社ソフトウェアを強みとし、ハイブリッドの利用も進む マイクロソフトのクラウドサービス
Chapter6 業種別・目的別クラウド活用例
 6-01 活用の幅はどんどん広がっている クラウドサービスの利用パターン
 6-02 クラウドサービスで安定した運用を実現 Webサイトにおけるクラウド活用
など

AWS

AWSの基本・仕組み・重要用語が全部わかる教科書

最もわかりやすく、もっとも充実した、最高のAWS入門書!
AWSの基本から、主要サービスの概要、特徴などを、わかりやすい図解とともに、1つひとつ丁寧に解説!
これからAWSを学ぶ人や、すでに利用している人にとって最適な教科書です。

序章 本書の目的と構成

第1部 入門編
Chapter 01 クラウドの基礎知識
Chapter 02 AWSの基本と全体像

第2部 基礎編
Chapter 03 ネットワーク関連のサービス
Chapter 04 コンピューティング関連のサービス
Chapter 05 ストレージ関連のサービス
Chapter 06 データベース関連のサービス
Chapter 07 アプリケーション統合関連のサービス
Chapter 08 監視関連のサービス
Chapter 09 アイデンティティ関連のサービス

第3部 実践編
Chapter 10 静的Webサイト関連のサービス
Chapter 11 エンタープライズシステム関連のサービス
Chapter 12 コンテナ関連のサービス
Chapter 13 サーバーレス関連のサービス
Chapter 14 DevOps関連のサービス
Chapter 15 データアナリティクス関連のサービス
Chapter 16 機械学習関連のサービス
Chapter 17 IoT関連のサービス
Chapter 18 基盤自動化関連のサービス
Chapter 19 システム管理関連のサービス
Chapter 20 セキュリティ関連のサービス

スポンサーリンク

セキュリティ

イラスト図解式 この一冊で全部わかるセキュリティの基本

大好評の「イラスト図解式」シリーズ 第4弾!
今回のテーマは「情報セキュリティ」です。

ネットワークが高度に発達した現在では、サービスの提供者はもとより、利用者側も「セキュリティの基礎知識」は必修です。
基本的なことを知っておくだけでも、情報漏えいや不正アクセスといったリスクを大幅に軽減できます。
本書ではセキュリティの基礎知識を「防御」「観測」「攻撃」の3つに大別し、各カテゴリごとに説明しています。
なぜセキュリティが必要なのか。どのようにしてセキュリティは確保されているのか。その仕組みを図解で解説します。

また、セキュリティ関連の法律についても触れています。セキュリティ技術の多くは関連法律と密接に関係しているため、
基本的な全体像を把握しておくことはとても大切です。
ぜひ本書で情報セキュリティの全容をぜひ理解してください。

Chapter1 セキュリティの基本
Chapter2 セキュリティの確保に必要な基礎知識
Chapter3 攻撃を検知・解析するための仕組み
Chapter4 セキュリティを脅かす存在と攻撃の手口
Chapter5 セキュリティを確保する技術
Chapter6 ネットワークセキュリティ
Chapter7 セキュリティ関連の法律・規約・取り組み

体系的に学ぶ安全なWebアプリケーションの作り方 第2版

日本中の現場で支持されたベストセラーが、最新環境にあわせて全面刷新+大増ページ!

Webアプリケーションにはなぜ脆弱性が生まれるのか?
脆弱性を解消するにはどうプログラミングすればよいか?
PHPサンプルへの攻撃を通して脆弱性が生まれる原理と具体的な対処方法が学べる!

Webアプリ開発者の必読書、待望の改訂版!
OWASP Top 10 – 2017対応

<主な改訂内容>
・HTML5の普及に対応してWeb APIやJavaScriptに関する解説を新設
・OWASP Top 10 – 2017に対応して、XXEや安全でないデシリアライゼーションなどを解説
・脆弱性診断に対する関心が高まっていることから、脆弱性診断の入門の章を親設
・IE7のサポート終了など現在のソフトウェアの状況に対応
・実習環境をWindowsに加えてMacにも対応

1章 Webアプリケーションの脆弱性とは
1.1 脆弱性とは、「悪用できるバグ」
1.2 脆弱性があるとなぜ駄目なのか
1.3 脆弱性が生まれる理由
1.4 セキュリティバグとセキュリティ機能
1.5 本書の構成
1.6 セキュリティガイドラインとの対応

2章 実習環境のセットアップ
2.1 実習環境の概要
2.2 Firefoxのインストール
2.3 VirtualBoxのインストール
2.4 仮想マシンのインストールと動作確認
2.5 OWASP ZAPのインストール
2.6 Firefoxの拡張FoxyProxy-Standardのインストール
2.7 OWASP ZAPを使ってみる
2.8 Webメールの確認

3章 Webセキュリティの基礎 ~ HTTP、セッション管理、同一オリジンポリシー
3.1 HTTPとセッション管理
3.2 受動的攻撃と同一オリジンポリシー
3.3 CORS(Cross-Origin Resource Sharing)

4章 Webアプリケーションの機能別に見るセキュリティバグ
4.1 Webアプリケーションの機能と脆弱性の対応
4.2 入力処理とセキュリティ
4.3 表示処理に伴う問題
4.4 SQL呼び出しに伴う脆弱性
4.5 「 重要な処理」の際に混入する脆弱性
4.6 セッション管理の不備
4.7 リダイレクト処理にまつわる脆弱性
4.8 クッキー出力にまつわる脆弱性
4.9 メール送信の問題
4.10 ファイルアクセスにまつわる問題
4.11 OSコマンド呼び出しの際に発生する脆弱性
4.12 ファイルアップロードにまつわる問題
4.13 インクルードにまつわる問題
4.14 構造化データの読み込みにまつわる問題
4.15 共有資源やキャッシュに関する問題
4.16 Web API実装における脆弱性
4.17 JavaScriptの問題

5章 代表的なセキュリティ機能
5.1 認証
5.2 アカウント管理
5.3 認可
5.4 ログ出力

6章 文字コードとセキュリティ
6.1 文字コードとセキュリティの概要
6.2 文字集合
6.3 文字エンコーディング
6.4 文字コードによる脆弱性の発生要因まとめ
6.5 文字コードを正しく扱うために
6.6 まとめ

7章 脆弱性診断入門
7.1 脆弱性診断の概要
7.2 脆弱なサンプルアプリケーションBad Todo
7.3 診断ツールのダウンロードとインストール
7.4 Nmapによるポートスキャン
7.5 OpenVASによるプラットフォーム脆弱性診断
7.6 OWASP ZAPによる自動脆弱性スキャン
7.7 OWASP ZAPによる手動脆弱性診断
7.8 RIPSによるソースコード診断
7.9 脆弱性診断実施上の注意
7.10 まとめ
7.11 脆弱性診断報告書のサンプル

8章 Webサイトの安全性を高めるために
8.1 Webサーバーへの攻撃経路と対策
8.2 成りすまし対策
8.3 盗聴・改ざん対策
8.4 マルウェア対策
8.5 まとめ

9章 安全なWebアプリケーションのための開発マネジメント
9.1 開発マネジメントにおけるセキュリティ施策の全体像
9.2 開発体制
9.3 開発プロセス
9.4 まとめ

スポンサーリンク

インフラ

改訂新版 インフラエンジニアの教科書

本書は大好評いただいた『インフラエンジニアの教科書』の改訂版です。最新の情報をもとに、全体的にアップデートしました。
本書ではインフラエンジニアとはどういう仕事なのか、どういう知識やスキルが求められるか、インフラエンジニアになるにはどうすればいいかなどを、わかりやすく解説しています。
インフラエンジニアを目指す人、新人のインフラエンジニアにおすすめの1冊です。

改訂にあたって(「はじめに」より抜粋)

この度、初版が発売された2013年から10周年を迎えることを契機として、2023年に改訂版を出させていただく運びとなりました。ITインフラの世界は他のIT技術の分野と比べて比較的変化が少ない分野といえますが、それでも初版から10年も経つと新技術の登場や既存技術の進化が見られます。それらを今回、一通り見直しました。またいくつかの項目では時代変化に合わせて加筆・修正しております。

なお、本書は各章が独立しているため、どこから読んでも構いません。また一度読んで終わりというよりは、たまに必要に応じて取り出して読んだり調べたりする本として活用いただければと思います。

CHAPTER 01 インフラエンジニアの仕事
CHAPTER 02 サーバー
CHAPTER 03 OS
CHAPTER 04 ネットワーク
CHAPTER 05 ストレージ
CHAPTER 06 サーバー仮想化
CHAPTER 07 クラウド
CHAPTER 08 購買と商談
CHAPTER 09 データセンター
CHAPTER 10 ソリューションとセキュリティ
CHAPTER 11 インフラ運用
CHAPTER 12 大規模インフラ
CHAPTER 13 インフラエンジニアの成長

インフラエンジニアの教科書2 スキルアップに効く技術と知識

「日々インフラエンジニアとして頑張っているけど、自分にはどうも何かが足りない気がする」と思ったことがあるかもしれません。OJT(On the Job Training)による実地訓練を通してインフラエンジニアとしての経験を積んでいるうちにさまざまなことができるようになったとしても、インフラエンジニアに必要な基本的な知識をしっかり押さえないまま経験だけが増えていくと、一応いろいろなことができるようになったけれども、詳しく知らないし、他の人に説明できない、といったことが増えてくるようになります。

本書では、主に実務経験を数年積んだインフラエンジニアを対象に、OJTや日常業務からでは身に付けにくいインフラエンジニアの必須知識をわかりやすく解説しています。

CHAPTER-01 プロトコル
CHAPTER-02 OS
CHAPTER-03 ネットワーク
CHAPTER-04 データベース
CHAPTER-05 WEBのサーバサイド開発言語
CHAPTER-06 共通鍵暗号方式と公開鍵暗号方式
CHAPTER-07 障害対策と障害対応
CHAPTER-08 よく知られたセキュリティ攻撃
CHAPTER-09 インターネットの運用と発展をつかさどる組織や団体
CHAPTER-10 RFCの読み方と作られ方
CHAPTER-11 世界規模のインターネットサービス運営
CHAPTER-12 インフラエンジニアとして目指す方向

スポンサーリンク

HTML&CSS

1冊ですべて身につくHTML & CSSとWebデザイン入門講座[第2版] (1冊ですべて身につく) 

全国の書店員がオススメする本 第1位 受 賞(2019年度 CPU大賞)
Webサイト制作の決定版が最新情報をたくさん盛り込んで大リニューアル!
※日販売上げランキング: HTML関連書籍

Webサイト制作の決定版がリニューアル!
今のWebサイトの作り方が一気に学べる!

Web界隈やデザイナーに大人気!
Web関連の情報やデザインについて記事が学べる『Webクリエイターボックス』の管理人、
Manaによる渾身のHTML & CSSとWebデザインが学べる本

モバイルファースト、アニメーション、トレンドデザイン、HTML Living Standard、WebPなど
最新の情報や5年間の間に更新された情報を多数追加!

5年連続売上第1位、シリーズ累計40万部

・知識ゼロから体系的に学べる!HTMLとCSSの基本
・絶対に覚えておきたい技術! モバイルファースト、レスポンシブ、Flexbox、アニメーション
・手を動かしながら学べる!プロの現場で役立つテクニック
・コードの知識からデザインのことまで1冊ですべて学べる!

WebクリエイターボックスのManaが教える
Webサイト制作の定番&旬のスキル。
この1冊で必要なことがすべて学べる!

コードもデザインも全部学べる!

●本書の対象読者
・これからWebサイトを作り始める初心者
・HTMLとCSSを基本から学びたい人
・美しいデザインのWebサイトを作りたい人
・Webの最新技術を学びたい人
・手を動かし、作りながら学びたい人

サンプルデータはWebサイトよりダウンロードできます。

CHAPTER 1 最初に知っておこう!Webサイトの基本
1-1 よいWebデザインとは
1-2 様々な種類のWebサイト
1-3 ユーザビリティとは
1-4 Webサイトの仕組み
1-5 デバイスの種類
1-6 ブラウザーの種類
1-7 制作の流れ
1-8 制作をはじめる前に

CHAPTER 2 Webの基本構造を作る!HTMLの基本
2-1 HTMLとは
2-2 HTMLファイルを作ろう
2-3 HTMLファイルの骨組み
2-4 HTMLの基本の書き方を身につけよう
2-5 見出しをつけよう
2-6 文章を表示しよう
2-7 画像を挿入しよう
2-8 リンクをはろう
2-9 リストを表示しよう
2-10 表を作ろう
2-11 フォームを作ろう
2-12 より使いやすいフォームにしよう
2-13 ブロック要素でグループ分けをしよう
2-14 よく使うHTMLタグ一覧

CHAPTER 3 Webのデザインを作る!CSSの基本
3-1 CSSとは
3-2 CSSを適用させる方法
3-3 CSSファイルを作ろう
3-4 CSSの基本の書き方を身につけよう
3-5 文字や文章を装飾しよう
3-6 Webフォントを使おう
3-7 色をつけよう
3-8 背景を彩ろう
3-9 幅と高さを指定しよう
3-10 余白を調整しよう
3-11 線を引こう
3-12 リストを装飾しよう
3-13 クラスとIDを使った指定方法
3-14 レイアウトを組もう
3-15 デフォルトCSSをリセットしよう
3-16 よく使うCSSプロパティ一覧

CHAPTER 4 フルスクリーンのWebサイトを制作する
4-1 フルスクリーンとは
4-2 フルスクリーンページの制作の流れ
4-3 「head」を記述しよう
4-4 「header」部分を作ろう
4-5 コンテンツ部分を作成しよう
4-6 ファビコンを用意しよう
4-7 フルスクリーンページのカスタマイズ例

CHAPTER 5 2カラムのWebサイトを制作する
5-1 2カラムのレイアウトとは
5-2 2カラムページの制作の流れ
5-3 ページ全体の見出しを作成しよう
5-4 フッター部分を作成しよう
5-5 横並びの設定をしよう
5-6 メインエリアを作ろう
5-7 サイドバーを作ろう
5-8 レスポンシブに対応させよう
5-9 カラムページのカスタマイズ例

CHAPTER 6 タイル型のWebサイトを制作する
6-1 タイル型レイアウトとは
6-2 タイル型レイアウトの制作の流れ
6-3 ページ上部の紹介文を作成しよう
6-4 タイル型レイアウトを設定しよう
6-5 レスポンシブに対応させよう
6-6 タイル型レイアウトのカスタマイズ例

CHAPTER 7 外部メディアを利用する
7-1 お問い合わせページの制作の流れ
7-2 フォームを設置しよう
7-3 地図を表示しよう
7-4 Facebookプラグインを挿入しよう
7-5 Twitterプラグインを挿入しよう
7-6 YouTube動画を挿入しよう
7-7 レスポンシブに対応させよう
7-8 OGPの設定をしよう
7-9 外部メディアのカスタマイズ例

ほんの一手間で劇的に変わるHTML & CSSとWebデザイン実践講座

全国の書店員さんがオススメする本(2021年度 CPU大賞)第1位受賞!
前人未到、2冊連続で書店員さんから大賞に選ばれる快挙!

読者の圧倒的な支持!シリーズ40万部突破の大ヒット!
全国の書店員がオススメする本 第1位やITエンジニアがおすすめする本の大賞&特別賞など受賞を連発!

Web制作に必要な一歩進んだWebサイト制作の知識が一気に学べる!

Web界隈やデザイナーに大人気!
Web関連の情報やデザインについて記事が学べる『Webクリエイターボックス』の管理人、
Manaによる渾身のHTML & CSSとWebデザインの実践知識が一気に学べる本

ほんの一手間で劇的に変わる!
一歩進んだWebサイト制作の知識が一気に学べる!

・5つのサイトから学べる!今のWebサイトを作る最新の技術群
・自由な表現ができる!手描き、斜め、グラデーション、あらゆる装飾の作り方
・今日から使える!表とグラフ、アニメーションなど、JavaScriptライブラリ
・動画、カスタム変数、Emmet、Sass、問題解決の知識まで

WebクリエイターボックスのManaが教える
Webサイト制作の実践&旬のスキル。
思い描いているものを形にできる魔法の1行が必ず見つかる!

コードも、デザインも、時短術も、全部学べる!

●本書の対象読者
・HTMLとCSSの基礎学習までを終えた人
・Webサイト制作のワンランク上のスキルを学びたい人
・自由な装飾表現を用いてWebデザインを作りたい人
・アニメーションなど動きがあるサイトを作りたい人
・練習問題やお題に挑戦し、成果を皆と共有したい人
・効率よくコードを記述できる方法を知りたい人
・独学で困った際などの問題解決法を学びたい人

CHAPTER 1 最初に知っておこう!Webサイトの基本と必携ツール
1-1 Webページの仕組み
1-2 HTMLの基礎
1-3 HTMLの属性
1-4 CSSの基礎
1-5 より管理しやすいCSSについて
1-6 JavaScriptの読み込みの仕方
1-7 ブラウザーによる見え方の違い
1-8 デベロッパーツールを使いこなす
1-9 次章以降で学ぶこと

CHAPTER 2 「レスポンシブWebデザインとフォント」
2-1 作成するランディングページの紹介
2-2 シングルカラムのレイアウトとは
2-3 全画面背景で目を引くデザインの実現
2-4 フォントの詳しい使い方
2-5 アイコンフォントの使い方
2-6 スマートフォンでの閲覧に対応させる
2-7 ブレークポイントの詳細
2-8 表示領域にピタッと移動する方法
2-9 練習問題
2-10 カスタマイズしよう

CHAPTER 3 ブログサイトで学ぶ「装飾とカラムレイアウト」
3-1 作成するブログサイトの紹介
3-2 2カラムのレイアウトを知る
3-3 異なる画面サイズの閲覧に対応させる
3-4 各要素を装飾する①(見出し・画像・ボタン)
3-5 各要素を装飾する②(箇条書きリスト・番号付きリスト)
3-6 各要素を装飾する③(引用文・ページ送り・囲み枠)
3-7 各要素の装飾④(ヘッダー・フッター・ナビゲーション・表・フォーム)
3-8 スクロールに合わせて追従させる
3-9 練習問題
3-10 カスタマイズしよう

CHAPTER 4 コーポレートサイトで学ぶ「表組み、フォーム、JavaScript」
4-1 作成するコーポレートサイトの紹介
4-2 枠からはみ出す要素を作る方法
4-3 グラフでもっとわかりやすくする
4-4 画像とテキストを互い違いに表示させる
4-5 表でデータを示す
4-6 タイムラインを表示する
4-7 フォームの装飾
4-8 属性セレクター
4-9 練習問題
4-10 カスタマイズしよう

CHAPTER 5 イベントサイトで学ぶ「特定ページの作り方とアニメーション」
5-1 作成するイベントサイトの紹介
5-2 CSSでページ内をスルスル動かす
5-3 ブレンドモードで画像の色を変える
5-4 カスタムプロパティ(変数)を使う
5-5 CSSでアニメーションをつける(トランジション)
5-6 CSSでアニメーションをつける(キーフレーム)
5-7 斜めのラインのデザインを作る
5-8 グラデーションで表現する
5-9 スライドメニューを設置する
5-10 練習問題
5-11 カスタマイズしよう

CHAPTER 6 ギャラリーサイトで学ぶ「動画と画像の使い方」
6-1 作成するギャラリーサイトの紹介
6-2 背景に動画を設置する
6-3 画像をレスポンシブに対応させる
6-4 マルチカラムでレイアウトを作る①
6-5 マルチカラムでレイアウトを作る②
6-6 フィルターで画像の色を変える
6-7 カーソルを合わせると画像を拡大する
6-8 要素に影をつける
6-9 ライトボックスで画面いっぱいに表示する
6-10 アニメーションを加える
6-11 ダークモードに対応させる
6-12 練習問題
6-13 カスタマイズしよう

CHAPTER 7 HTMLやCSSをより早く、より上手に管理できる方法
7-1 Emmetを使って素早くコーディングする
7-2 calc関数で計算式を書く
7-3 Sassを使って効率を上げる
7-4 VSCodeでSassを利用する
7-5 ネストを使いこなす(Sassの便利な使い方①)
7-6 パーシャルでファイルを分割する(Sassの便利な使い方②)
7-7 スタイルを使い回せるMixin(Sassの便利な使い方③)

CHAPTER 8 サイトの投稿と問題解決
8-1 チェックリスト一覧
8-2 エラーメッセージを読み解く
8-3 制作に関する質問ができるサイト

スポンサーリンク

JavaScript

改訂3版JavaScript本格入門 ~モダンスタイルによる基礎から現場での応用まで

2010年の刊行から約100,000部の実績を誇るロングセラーを、ECMAScript 2022に対応した内容で200ページ増の大幅改訂。最新の基本文法から、開発に欠かせない応用トピックまで解説します。JavaScriptらしく書くために大切なオブジェクトの扱い方や、大規模開発でさらに実用的になったオブジェクト指向構文を学び、しっかりと動くプログラムの作り方を本質から理解できます。

Chapter 1 イントロダクション
1.1 JavaScriptとは?
1.1.1 JavaScriptの歴史
1.1.2 復権のきっかけはAjax、そしてHTML5の時代へ
1.1.3 JavaScriptライブラリからフレームワークの時代へ
1.2 標準JavaScript「ECMAScript」とは?
1.2.1 ECMAScriptのバージョン
1.2.2 ECMAScript仕様策定の流れ
1.2.3 ブラウザーの対応状況
1.3 JavaScript実行環境のもう1つの選択肢 Node.js
1.3.1 Node.jsとは?
1.3.2 実行環境によって利用できる機能は異なる
1.4 JavaScriptアプリを開発/実行するための基本環境
1.4.1 準備すべきソフトウェア
1.4.2 Visual Studio Codeのインストール
1.4.3 サンプルファイルの準備
1.5 ブラウザー付属の開発者ツール
1.5.1 開発者ツールを概観する
1.5.2 HTML/CSSのソースを確認する -[要素]タブ
1.5.3 通信状況をトレースする -[ネットワーク]タブ
1.5.4 スクリプトをデバッグする -[ソース]タブ
1.5.5 ストレージ/クッキーの内容を確認する -[アプリケーション]タブ
1.5.6 ログ確認/オブジェクト操作などの万能ツール -[コンソール]タブ

Chapter 2 基本的な書き方を身につける
2.1 JavaScriptの基本的な記法
2.1.1 JavaScriptで「こんにちは、世界!」
2.1.2 文字コードのルール
2.1.3 JavaScriptをHTMLファイルに組み込む – script要素
2.1.4 文(Statement)のルール
2.1.5 コメントを挿入する
2.2 変数
2.2.1 変数を宣言する
2.2.2 識別子の命名規則
2.2.3 よりよい命名のための指針
2.2.4 定数を宣言する
2.3 データ型
2.3.1 データ型の分類
2.3.2 論理リテラル(boolean)
2.3.3 数値リテラル(number)
2.3.4 文字列リテラル(string)
2.3.5 配列リテラル(array)
2.3.6 オブジェクトリテラル(object)
2.3.7 関数リテラル(function)
2.3.8 未定義値(undefined)とヌル値(null)

Chapter 3 値の演算操作を理解する – 演算子
3.1 演算子とは?
3.2 算術演算子
3.2.1 加算演算子(+)
3.2.2 インクリメント演算子(++)とデクリメント演算子(–)
3.2.3 小数点を含む演算には注意
3.3 代入演算子
3.3.1 基本型と参照型による代入の違い -「=」演算子
3.3.2 定数は「再代入できない」
3.3.3 分割代入(配列)
3.3.4 分割代入(オブジェクト)
3.4 比較演算子
3.4.1 等価演算子(==)
3.4.2 厳密な等価演算子(===)
3.4.3 小数点数の比較
3.4.4 条件演算子(?:)
3.5 論理演算子
3.5.1 ショートカット演算(短絡演算)
3.6 ビット演算子
3.6.1 ビット論理演算子
3.6.2 ビットシフト演算子
3.6.3 例:ビットフィールドによるフラグ管理
3.7 その他の演算子
3.7.1 配列要素、プロパティを削除する – delete演算子
3.7.2 値の型を判定する – typeof演算子
3.7.3 補足:型の変換
3.8 演算子の優先順位と結合則
3.8.1 優先順位
3.8.2 結合則

Chapter 4 スクリプトの基本構造を理解する – 制御構文
4.1 制御構文とは?
4.2 条件分岐
4.2.1 条件式の真偽で処理を分岐する – if命令
4.2.2 複数の条件式で多岐分岐を表現する – else if命令
4.2.3 if命令の入れ子
4.2.4 補足:中カッコの省略は要注意
4.2.5 条件式を指定する場合の注意点
4.2.6 式の値によって処理を分岐する – switch命令
4.3 繰り返し処理
4.3.1 条件式によってループを制御する – while/do…while命令
4.3.2 補足:無限ループ
4.3.3 指定回数だけループを処理する – for命令
4.3.4 連想配列の中身を順に処理する – for…in命令
4.3.5 配列の要素を順に処理する – for…of命令
4.3.6 配列を反復処理するための専用メソッド
4.4 ループの制御
4.4.1 ループを途中で終了する – break命令
4.4.2 特定の周回をスキップする – continue命令
4.4.3 入れ子のループをまとめて中断/スキップする – ラベル構文
4.5 制御命令のその他の話題
4.5.1 例外を処理する – try…catch…finally命令
4.5.2 例外をスローする – throw命令
4.5.3 JavaScriptの危険な構文を禁止する – Strictモード
4.5.4 デバッガーを起動する – debugger命令

Chapter 5 基本データを操作する – 組み込みオブジェクト
5.1 オブジェクトとは?
5.1.1 オブジェクト=プロパティ+メソッド
5.1.2 オブジェクトを生成するための準備 – new演算子
5.1.3 メソッド/プロパティの呼び出し – ドット演算子
5.1.4 静的プロパティ/静的メソッド
5.1.5 組み込みオブジェクトとは
5.2 文字列を操作する – Stringオブジェクト
5.2.1 文字列の長さを取得する
5.2.2 文字列を大文字⇔小文字で変換する
5.2.3 部分文字列を取得する
5.2.4 文字列を検索する
5.2.5 文字列に特定の部分文字列が含まれるかを判定する
5.2.6 文字列の前後から空白を除去する
5.2.7 文字列を置き換える
5.2.8 文字列を分割する
5.2.9 文字列が指定長になるように指定文字で補足する
5.2.10 文字列をn回繰り返したものを取得する
5.2.11 文字列をUnicode正規化する
5.3 数値リテラルを操作する – Numberオブジェクト
5.3.1 Numberオブジェクトの定数
5.3.2 数値形式を変換する
5.3.3 文字列を数値に変換する
5.3.4 基本的な数学演算を実行する
5.4 日付/時刻値を操作する – Dateオブジェクト
5.4.1 日付/時刻値を生成する
5.4.2 日付/時刻要素を取得する
5.4.3 日付/時刻要素を設定する
5.4.4 日付/時刻値を加算/減算する
5.4.5 日付/時刻の差を求める
5.4.6 日付/時刻値を文字列に変換したい
5.5 値の集合を管理/操作する – Arrayオブジェクト
5.5.1 配列を生成する
5.5.2 要素を追加/削除する
5.5.3 配列に複数要素を追加/置換/削除する
5.5.4 配列から特定範囲の要素を取得する
5.5.5 配列の内容を検索する
5.5.6 入れ子の配列をフラット化する
5.5.7 配列内の要素を結合する
5.5.8 配列内の要素を移動する
5.5.9 配列ライクなオブジェクトを配列化する
5.5.10 配列を複製する
5.5.11 配列の要素を並べ替える
5.5.12 配列の内容を順に処理する
5.5.13 配列を指定されたルールで加工する
5.5.14 任意の条件式によって配列を検索する
5.5.15 条件式に合致する要素が存在するかを判定する
5.5.16 配列から条件に合致した要素だけを取得する
5.5.17 配列内の要素を順に処理して1つにまとめる
5.6 連想配列を操作する – Mapオブジェクト
5.6.1 マップを初期化する
5.6.2 マップの値を設定/取得する
5.6.3 マップから既存のキーを削除する
5.6.4 マップからすべてのキー/値を取得する
5.6.5 Object⇔Mapを相互変換する
5.6.6 弱い参照キーのマップ
5.7 重複しない値の集合を操作する – Setオブジェクト
5.7.1 セットを初期化する
5.7.2 セットの値を追加/削除する
5.7.3 セットの内容を取得/確認する
5.8 正規表現で文字列を自在に操作する – RegExpオブジェクト
5.8.1 正規表現の基本
5.8.2 RegExpオブジェクトを生成する
5.8.3 文字列が正規表現パターンにマッチしたかを判定する
5.8.4 正規表現パターンにマッチした文字列を取得する
5.8.5 正規表現オプションでマッチングの方法を制御する
5.8.6 正規表現のマッチング結果をまとめて取得する
5.8.7 正規表現で文字列を置き換える
5.8.8 正規表現で文字列を分割する
5.8.9 例:正規表現による検索
5.9 その他のオブジェクト
5.9.1 JavaScriptでよく利用する機能を提供する – Globalオブジェクト
5.9.2 オブジェクト⇔JSON文字列を相互に変換する – JSONオブジェクト
5.9.3 シンボルを作成する – Symbolオブジェクト

Chapter 6 繰り返し利用するコードを1ヵ所にまとめる – 関数
6.1 関数の基本
6.1.1 ユーザー定義関数が必要な理由
6.1.2 ユーザー定義関数の基本
6.1.3 関数名
6.1.4 仮引数と実引数
6.1.5 戻り値
6.2 関数を定義するための3種の記法
6.2.1 Functionコンストラクター経由で定義する
6.2.2 関数リテラルで定義する
6.2.3 アロー関数で定義する
6.2.4 関数定義の際の注意点
6.3 変数はどの場所から参照できるか – スコープ
6.3.1 スコープの基本
6.3.2 仮変数のスコープ
6.3.3 スコープから見たvar/let命令
6.3.4 スコープに関わるその他の注意点
6.4 引数のさまざまな記法
6.4.1 JavaScriptは引数の数をチェックしない
6.4.2 引数の既定値を設定する
6.4.3 可変長引数の関数を定義する
6.4.4 スプレッド構文による引数の展開
6.4.5 名前付き引数でコードを読みやすくする
6.5 関数呼び出しと戻り値
6.5.1 複数の戻り値を返したい
6.5.2 関数自身を再帰的に呼び出す – 再帰関数
6.5.3 関数の引数も関数 – 高階関数
6.5.4 「使い捨ての関数」は匿名関数で
6.6 高度な関数のテーマ
6.6.1 テンプレート文字列をアプリ仕様にカスタマイズする – タグ付きテンプレート文字列
6.6.2 変数はどのような順番で解決されるか – スコープチェーン
6.6.3 その振る舞いオブジェクトの如し – クロージャ

Chapter 7 JavaScriptらしいオブジェクトの用法を理解する – Objectオブジェクト
7.1 オブジェクトを生成する
7.1.1 オブジェクトをリテラルで表現する
7.1.2 コンストラクター経由でオブジェクトを生成する – new演算子
7.1.3 より詳しい設定付きでオブジェクトを生成する
7.2 オブジェクトの雛型「プロトタイプ」を理解する
7.2.1 プロトタイプの基本
7.2.2 プロトタイプチェーンの挙動を確認する
7.2.3 プロパティを追加/更新/削除した場合の挙動
7.3 すべてのオブジェクトの雛型 – Objectオブジェクト
7.3.1 オブジェクトをマージする
7.3.2 オブジェクトを複製する
7.3.3 プロパティを操作する
7.3.4 不変オブジェクトを定義する

Chapter 8 大規模開発でも通用する書き方を身につける – オブジェクト指向構文
8.1 クラスの基本
8.1.1 最もシンプルなクラスを定義する
8.1.2 クラスに属する情報を準備する – プロパティ
8.1.3 クラスに属する処理を準備する – メソッド
8.1.4 クラスを初期化する – コンストラクター
8.1.5 静的プロパティ/静的メソッドを定義する
8.1.6 文脈によって中身が変化する変数 – thisキーワード
8.1.7 既存のクラスにメソッドを追加する
8.2 利用者に見せたくない機能を隠蔽する – カプセル化
8.2.1 カプセル化とは?
8.2.2 プライベートメンバーの実装
8.2.3 ゲッター/セッター
8.2.4 補足:不変クラスを定義する
8.3 既存のクラスを拡張する – 継承
8.3.1 継承の基本
8.3.2 基底クラスのメソッド/コンストラクターを上書きする
8.3.3 基底クラスのメソッドを呼び出す – superキーワード
8.3.4 継承以外のクラス再利用の手段 – 委譲
8.3.5 補足:ミックスイン
8.3.6 オブジェクトの型を判定する
8.4 アプリを機能単位にまとめる – モジュール
8.4.1 モジュールを定義する
8.4.2 モジュールを利用する
8.4.3 import命令のさまざまな記法
8.4.4 export命令のさまざまな記法
8.5 オブジェクト指向構文の高度なテーマ
8.5.1 列挙可能なオブジェクトを定義する – イテレーター
8.5.2 列挙可能なオブジェクトをよりかんたんに実装する – ジェネレーター
8.5.3 オブジェクトを基本型に変換する
8.5.4 オブジェクトの基本的な動作をカスタマイズする – Proxyオブジェクト

Chapter 9 HTMLやXMLの文書を操作する – DOM(Document Object Model)
9.1 DOMの基本を押さえる
9.1.1 マークアップ言語を操作する標準のしくみ「DOM」
9.1.2 文書ツリーとノード
9.2 クライアントサイドJavaScriptの前提知識
9.2.1 要素ノードを取得する
9.2.2 文書ツリー間を行き来する – ノードウォーキング
9.2.3 イベントをトリガーにして処理を実行する – イベントドリブンモデル
9.3 属性値やテキストを取得/設定する
9.3.1 属性値を取得する
9.3.2 属性値を設定する
9.3.3 属性値を削除する
9.3.4 要素のプロパティを取得/設定する
9.3.5 JavaScriptからスタイルを操作する
9.3.6 テキストを取得/設定する
9.4 フォーム要素にアクセスする
9.4.1 入力ボックス/選択ボックスの値を取得する
9.4.2 チェックボックスの値を取得する
9.4.3 ラジオボタンの値を取得する
9.4.4 ラジオボタン/チェックボックスの値を設定する
9.4.5 複数選択できるリストボックスの値を取得する
9.4.6 アップロードされたファイルの情報を取得する
9.5 ノードを追加/置換/削除する
9.5.1 innerHTMLプロパティとどのように使い分けるか
9.5.2 ページに新たなコンテンツを追加する
9.5.3 既存のノードを置換/削除する
9.5.4 HTMLCollection/NodeListを繰り返し処理する場合の注意点
9.6 より高度なイベント処理
9.6.1 イベントリスナーを削除する
9.6.2 イベントに関わる情報を取得する – イベントオブジェクト
9.6.3 イベント処理をキャンセルする
9.6.4 イベントの動作オプションを指定する
9.6.5 イベントリスナーに任意の追加情報を引き渡す

Chapter 10 クライアントサイドJavaScript開発を極める
10.1 ブラウザーオブジェクトで知っておきたい基本機能
10.1.1 ブラウザーオブジェクトの階層構造
10.1.2 ブラウザーオブジェクトにアクセスするには
10.1.3 確認ダイアログを表示する – confirmメソッド
10.1.4 タイマー機能を実装する – setInterval/setTimeoutメソッド
10.1.5 ウィンドウサイズ/位置などの情報を取得する
10.1.6 コンテンツのスクロール位置を設定/取得する – scrollXxxxxメソッド
10.1.7 表示ページのアドレス情報を取得/操作する – locationオブジェクト
10.1.8 履歴に沿ってページを前後に移動する – historyオブジェクト
10.1.9 JavaScriptによる操作をブラウザーの履歴に残す – pushStateメソッド
10.2 デバッグ情報を出力する – consoleオブジェクト
10.2.1 コンソールにログを出力する
10.2.2 知っておくと便利なログメソッド
10.3 ユーザーデータを保存する – Storageオブジェクト
10.3.1 ストレージにデータを保存/取得する
10.3.2 既存のデータを削除する
10.3.3 ストレージからすべてのデータを取り出す
10.3.4 ストレージにオブジェクトを保存/取得する
10.3.5 ストレージの変更を監視する
10.4 非同期通信の基本を理解する – Fetch API
10.4.1 SPAとは?
10.4.2 Fetch APIの基本
10.4.3 リクエスト時にデータを送信する
10.4.4 異なるオリジンにアクセスする
10.4.5 補足:クロスドキュメントメッセージングによるクロスオリジン通信
10.5 非同期処理を手軽に処理する – Promiseオブジェクト
10.5.1 Promiseオブジェクトの基本を押さえる
10.5.2 非同期処理を連結する
10.5.3 複数の非同期処理を並行して実行する
10.5.4 Promiseの処理を同期的に記述する
10.5.5 非同期処理を伴う反復処理を実装する
10.6 バックグラウンドでJavaScriptのコードを実行する – Web Worker
10.6.1 ワーカーを実装する
10.6.2 ワーカーを起動する

Chapter 11 現場で避けて通れない応用知識
11.1 コマンドラインからJavaScriptコードを実行する – Node.js
11.1.1 Node.jsのインストール
11.1.2 JavaScriptファイルの実行
11.1.3 ライブラリをインストールする
11.1.4 ライブラリの復元
11.2 アプリのテストを自動化する – Jest
11.2.1 テストコードの基本
11.2.2 実行コマンドの準備
11.2.3 単体テストの実行
11.2.4 テスト実行時の役立つオプション
11.3 フロントエンドアプリの開発環境をすばやく立ち上げる – Vite
11.3.1 Viteの特徴
11.3.2 Viteの基本
11.3.3 本番環境向けのビルドを実施する
11.3.4 JavaScript以外のリソースにも対応
11.4 JavaScriptの「べからず」なコードを検出する – ESLint
11.4.1 ESLintの基本
11.4.2 リアルタイムに解析結果を確認する
11.4.3 ESLintルールのカスタマイズ
11.5 ドキュメンテーションコメントでコードの内容をわかりやすくする – JSDoc
11.5.1 ドキュメンテーションコメントの記述ルール
11.5.2 ドキュメントの生成

Column
VSCodeの便利な拡張機能(1) – Trailing Spaces
VSCodeの便利な拡張機能(2) – Regex Previewer
本書の読み進め方 – 著者からのメッセージ
ブラウザー環境でJavaScriptのコードを実行する – paiza.IO
VSCodeの便利な拡張機能(3) – JavaScript (ES6) code snippets
VSCodeの便利な拡張機能(4) – IntelliSense for CSS class names in HTML
よく見かけるエラーとその対処法
VSCodeの便利な拡張機能(5) – Code Spell Checker
VSCodeの便利な拡張機能(6) – Todo Tree
知っておきたい!JavaScriptの関連キーワード(1) – altJS
知っておきたい!JavaScriptの関連キーワード(2) – TypeScript
ECMAScript期待の機能
VSCodeの便利な拡張機能(7) – Bookmarks
知っておきたい!JavaScriptの関連キーワード(3) – WebAssembly
知っておきたい!JavaScriptの関連キーワード(4) – コンポーネント指向
VSCodeの便利な拡張機能(8) – SFTP
知っておきたい!JavaScriptの関連キーワード(5) – Web Components
知っておきたい!JavaScriptの関連キーワード(6) – importmaps
script要素の知っておきたい属性(1) – async属性
script要素の知っておきたい属性(2) – integrity属性
VSCodeの便利な拡張機能(9) – 拡張テーマ
script要素の知っておきたい属性(3) – integrity属性の作り方
script要素の知っておきたい属性(4) – crossorigin/referrerpolicy属性
本書を読み終えた後に

スポンサーリンク

TypeScript

プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで

TypeScriptは、JavaScriptに静的型付けの機能を加えたオープンソースのプログラミング言語です。本書では、根幹となるJavaScriptの仕様・機能とともに、TypeScript独自の仕様・機能を解説します。TypeScriptの基礎知識はこれ一冊だけで学べます。
静的型付き言語は世にいくつもありますが、TypeScriptの型システムは他に類を見ない高い表現力を持っています。本書の読者が、型の有効性を理解しTypeScriptらしいコードを書けるようになるために、本書では、プログラムの安全性を高める基本的な型の扱い方から、TypeScriptの「高い表現力」の源となっているリテラル型・ユニオン型・keyof 型の扱い方まで幅広く取り上げます。また、わかりにくい機能や型安全を脅かす危険な機能についてもごまかさず、歴史的経緯や目的・用途を踏まえたうえで最善の扱い方を説明します。
章ごとに力試し問題を用意しており、理解の度合いを確認しながら学習を進められます。

第1章 イントロダクション
1.1 TypeScriptとは
 1.1.1 JavaScriptに対する“静的型付け”
 1.1.2 高い表現力を持つ型システム
 1.1.3 静的型付けのメリット(1)型安全性
 1.1.4 静的型付けのメリット(2)ドキュメント化と入力補完
 1.1.5 TypeScript年表
1.2 TypeScriptとJavaScriptとの関係
 1.2.1 TypeScriptコンパイラの役割(1)型チェック
 1.2.2 TypeScriptコンパイラの役割(2)トランスパイル
 1.2.3 TypeScriptとECMAScriptの関係
1.3 TypeScriptの開発環境
 1.3.1 Node.jsのインストール
 1.3.2 エディタの準備
 1.3.3 ディレクトリの作成とTypeScriptのインストール
 1.3.4 tsconfig.jsonの準備
 1.3.5 初めてのTypeScriptプログラム

第2章 基本的な文法・基本的な型
2.1 文と式
 2.1.1 文と式の基本
 2.1.2 文と式は“結果”の有無で区別する
 2.1.3 式文
2.2 変数の宣言と使用
 2.2.1 変数宣言の構文
 2.2.2 識別子
 2.2.3 変数に型注釈を与える
 2.2.4 letによる変数宣言と変数への再代入
2.3 プリミティブ型
 2.3.1 プリミティブとは何か
 2.3.2 TypeScriptにおける数値型の特徴
 2.3.3 数値リテラル
 2.3.4 任意精度整数(BigInt)
 2.3.5 文字列型と3種類の文字列リテラル
 2.3.6 文字列中のエスケープシーケンス
 2.3.7 真偽値と真偽値リテラル
 2.3.8 nullとundefined
 2.3.9 プリミティブ型同士の変換(1)暗黙の変換を体験する
 2.3.10 プリミティブ型同士の変換(2)明示的な変換を行う
2.4 演算子
 2.4.1 算術演算子(1)二項演算子
 2.4.2 算術演算子(2)単項演算子
 2.4.3 文字列の結合を+演算子で行う
 2.4.4 比較演算子と等価演算子
 2.4.5 論理演算子(1)真偽値の演算
 2.4.6 論理演算子(2)一般形と短絡評価
 2.4.7 条件演算子
 2.4.8 代入演算子
 2.4.9 その他の演算子
2.5 基本的な制御構文
 2.5.1 条件分岐(1)if文の基本
 2.5.2 ブロック
 2.5.3 条件分岐(2)elseを使う
 2.5.4 switch文
 2.5.5 while文によるループ
 2.5.6 for文によるループ
2.6 力試し
 2.6.1 FizzBuzzを書いてみよう
 2.6.2 解説

第3章 オブジェクトの基本とオブジェクトの型
3.1 オブジェクトとは
 3.1.1 オブジェクトは“連想配列”である
 3.1.2 オブジェクトリテラル(1)基本的な構文
 3.1.3 オブジェクトリテラル(2)プロパティ名の種々の指定方法
 3.1.4 プロパティアクセス:値の取得と代入
 3.1.5 オブジェクトリテラル(3)スプレッド構文
 3.1.6 オブジェクトはいつ“同じ”なのか
3.2 オブジェクトの型
 3.2.1 オブジェクト型の記法
 3.2.2 オブジェクト型の型チェックと安全性
 3.2.3 type文で型に別名をつける
 3.2.4 interface宣言でオブジェクト型を宣言する
 3.2.5 任意のプロパティ名を許容する型(インデックスシグネチャ)
 3.2.6 オプショナルなプロパティの宣言
 3.2.7 読み取り専用プロパティの宣言
 3.2.8 typeofキーワードで変数の型を得る
3.3 部分型関係
 3.3.1 部分型とは
 3.3.2 プロパティの包含関係による部分型関係の発生
 3.3.3 余剰プロパティに対する型エラーについて
3.4 型引数を持つ型
 3.4.1 型引数を持つ型を宣言する
 3.4.2 型引数を持つ型を使用する
 3.4.3 部分型関係による型引数の制約
 3.4.4 オプショナルな型引数
3.5 配列
 3.5.1 配列リテラルで配列を作成する
 3.5.2 配列の要素にアクセスする
 3.5.3 配列型の記法
 3.5.4 readonly配列型
 3.5.5 配列の機能を使う
 3.5.6 for-of文によるループ
 3.5.7 タプル型
3.6 分割代入
 3.6.1 オブジェクトの分割代入(1)基本的なパターン
 3.6.2 オブジェクトの分割代入(2)ネストしたパターン
 3.6.3 配列の分割代入
 3.6.4 分割代入のデフォルト値
 3.6.5 restパターンでオブジェクトの残りを取得する
3.7 その他の組み込みオブジェクト
 3.7.1 Dateオブジェクト
 3.7.2 正規表現オブジェクト(1)正規表現の基本
 3.7.3 正規表現オブジェクト(2)正規表現を使う方法
 3.7.4 Mapオブジェクト・Setオブジェクト
 3.7.5 プリミティブなのにプロパティがある?
3.8 力試し
 3.8.1 データ処理をしよう
 3.8.2 解説
 3.8.3 別解

第4章 TypeScriptの関数
4.1 関数の作り方
 4.1.1 関数宣言で関数を作る
 4.1.2 返り値がない関数を作る
 4.1.3 関数式で関数を作る
 4.1.4 アロー関数式で関数を作る
 4.1.5 アロー関数式の省略形
 4.1.6 メソッド記法で関数を作る
 4.1.7 可変長引数の宣言
 4.1.8 関数呼び出しにおけるスプレッド構文
 4.1.9 オプショナル引数の宣言
 4.1.10 コールバック関数を使ってみる
4.2 関数の型
 4.2.1 関数型の記法
 4.2.2 返り値の型注釈は省略可能
 4.2.3 返り値の型注釈は省略すべきか
 4.2.4 引数の型注釈が省略可能な場合
 4.2.5 コールシグネチャによる関数型の表現
4.3 関数型の部分型関係
 4.3.1 返り値の型による部分型関係
 4.3.2 引数の型による部分型関係
 4.3.3 引数の数による部分型関係
4.4 ジェネリクス
 4.4.1 関数の型引数とは
 4.4.2 関数の型引数を宣言する方法
 4.4.3 関数の型引数は省略できる
 4.4.4 型引数を持つ関数型
4.5 変数スコープと関数
 4.5.1 変数のスコープとは
 4.5.2 ブロックスコープと関数スコープ
4.6 力試し
 4.6.1 簡単な関数を書いてみよう
 4.6.2 解説
 4.6.3 コールバック関数の練習
 4.6.4 解説

第5章 TypeScriptのクラス
5.1 クラスの宣言と使用
 5.1.1 クラス宣言とnew構文
 5.1.2 プロパティを宣言する
 5.1.3 メソッドを宣言する
 5.1.4 コンストラクタ
 5.1.5 静的プロパティ・静的メソッド
 5.1.6 種類のアクセシビリティ修飾子
 5.1.7 コンストラクタ引数でのプロパティ宣言
 5.1.8 クラス式でクラスを作成する
 5.1.9 もう1つのプライベートプロパティ
 5.1.10 クラスの静的初期化ブロック
 5.1.11 型引数を持つクラス
5.2 クラスの型
 5.2.1 クラス宣言はインスタンスの型を作る
 5.2.2 newシグネチャによるインスタンス化可能性の表現
 5.2.3 instanceof演算子と型の絞り込み
5.3 クラスの継承
 5.3.1 継承(1)子は親の機能を受け継ぐ
 5.3.2 継承(2)親の機能を上書きする
 5.3.3 override修飾子とその威力
 5.3.4 privateとprotectedの動作と使いどころ
 5.3.5 implementsキーワードによるクラスの型チェック
5.4 this
 5.4.1 関数の中のthisは呼び出し方によって決まる
 5.4.2 アロー関数におけるthis
 5.4.3 thisを操作するメソッド
 5.4.4 関数の中以外のthis
5.5 例外処理
 5.5.1 throw文とErrorオブジェクト
 5.5.2 例外をキャッチするtry-catch文
 5.5.3 例外処理と大域脱出
 5.5.4 finallyで脱出に割り込む
5.6 力試し
 5.6.1 クラスに書き換えてみる
 5.6.2 解説
 5.6.3 クラスを関数に書き換えてみる
 5.6.4 解説

第6章 高度な型
6.1 ユニオン型とインターセクション型
 6.1.1 ユニオン型の基本
 6.1.2 伝播するユニオン型
 6.1.3 インターセクション型とは
 6.1.4 ユニオン型とインターセクション型の表裏一体な関係
 6.1.5 オプショナルプロパティ再訪
 6.1.6 オプショナルチェイニングによるプロパティアクセス
6.2 リテラル型
 6.2.1 種類のリテラル型
 6.2.2 テンプレートリテラル型
 6.2.3 ユニオン型とリテラル型を組み合わせて使うケース
 6.2.4 リテラル型のwidening
 6.2.5 wideningされるリテラル型・wideningされないリテラル型
6.3 型の絞り込み
 6.3.1 等価演算子を用いる絞り込み
 6.3.2 typeof演算子を用いる絞り込み
 6.3.3 代数的データ型をユニオン型で再現するテクニック
 6.3.4 switch文でも型を絞り込める
6.4 keyof型・lookup型
 6.4.1 lookup型とは
 6.4.2 keyof型とは
 6.4.3 keyof型・lookup型とジェネリクス
 6.4.4 number型もキーになれる?
6.5 asによる型アサーション
 6.5.1 型アサーションを用いて式の型をごまかす
 6.5.2 as constの用法
6.6 any型とunknown型
 6.6.1 any型という最終兵器
 6.6.2 any型の存在理由
 6.6.3 anyに近いが安全なunknown型
6.7 さらに高度な型
 6.7.1 object型・never型
 6.7.2 型述語(ユーザー定義型ガード)
 6.7.3 可変長タプル型
 6.7.4 mapped types
 6.7.5 conditional types
 6.7.6 組み込みの型を使いこなす
6.8 力試し
 6.8.1 タグ付きユニオンの練習(1)
 6.8.2 解説
 6.8.3 タグ付きユニオンの練習(2)
 6.8.4 解説
 6.8.5 タグ付きユニオンの練習(3)
 6.8.6 解説

第7章 TypeScriptのモジュールシステム
7.1 import宣言とexport宣言
 7.1.1 変数のエクスポートとインポート
 7.1.2 関数もエクスポートできる
 7.1.3 defaultエクスポートとdefaultインポート
 7.1.4 型のインポート・エクスポート
 7.1.5 その他の関連構文
7.2 Node.jsのモジュールシステム
 7.2.1 Node.jsの組み込みモジュール
 7.2.2 npmとは
 7.2.3 package.jsonとpackage-lock.jsonの役割
7.3 DefinitelyTypedと@types
 7.3.1 @typesパッケージのインストール
7.4 力試し
 7.4.1 ファイルを読み込んでみる
 7.4.2 解説
 7.4.3 pathモジュールも使ってみる
 7.4.4 解説

第8章 非同期処理
8.1 非同期処理とは
 8.1.1 “時間がかかる処理”としての非同期処理
 8.1.2 シングルスレッドモデル・ノンブロッキング
8.2 コールバックによる非同期処理の扱い
 8.2.1 コールバック関数とは
 8.2.2 タイマーの例
 8.2.3 fsモジュールによるファイル操作の例
 8.2.4 同期処理と非同期処理の順序
8.3 Promiseを使う
 8.3.1 Promise版のfsを使ってみる
 8.3.2 コールバック関数の登録とエラー処理(1)
 8.3.3 コールバック関数の登録とエラー処理(2)
 8.3.4 自分でPromiseオブジェクトを作る
 8.3.5 Promiseの静的メソッド(1)
 8.3.6 Promiseの静的メソッド(2)
 8.3.7 Promiseの静的メソッド(3)
 8.3.8 Promiseチェーン(1)チェーンを作る
 8.3.9 Promiseチェーン(2)非同期処理の連鎖
 8.3.10 Promiseチェーン(3)エラーの扱い
 8.3.11 dynamic import構文
8.4 async/await構文
 8.4.1 async関数を作ってみる
 8.4.2 await式も使ってみる
 8.4.3 awaitの返り値
 8.4.4 awaitとエラー処理
 8.4.5 async関数のいろいろな宣言方法
8.5 力試し
 8.5.1 fs/promisesを使ってみる
 8.5.2 解説
 8.5.3 タイムアウトを追加してみよう
 8.5.4 解説

第9章 TypeScriptのコンパイラオプション
9.1 tsconfig.jsonによるコンパイラオプションの設定
 9.1.1 tsconfig.jsonの自動生成
 9.1.2 ファイルパス周りの設定を押さえる
9.2 チェックの厳しさに関わるオプション
 9.2.1 チェックをまとめて有効にできるstrictオプション
 9.2.2 strictNullChecksでnullとundefinedを安全に検査する
 9.2.3 型の書き忘れや推論の失敗を防ぐnoImplicitAnyオプション
 9.2.4 インデックスアクセスを厳しくするnoUncheckedIndexedAccessオプション
 9.2.5 新規プロジェクトでのお勧め設定

TypeScriptとReact/Next.jsでつくる実践Webアプリケーション開発

新しいフロントエンドの入門書決定版!

本書はReact/Next.jsとTypeScriptを用いてWebアプリケーションを開発する入門書です。

WebアプリケーションフレームワークNext.jsはReactをベースに開発されています。
高速さに裏付けされた高いUXと、開発しやすさを両立しているのが特徴です。

本書では、Next.jsの開発をより快適・堅牢にするTypeScriptで開発を進めます。

Next.jsによるアプリケーション開発の基礎、最新のフロントエンドやWebアプリケーションの開発方法が学べます。

1 Next.jsとTypeScriptによるモダン開発
1.1 Next.jsとTypeScript
1.2 フロントエンド開発の変遷
1.2.1 JavaScript黎明期とjQueryの人気
1.2.2 SPAの登場とMVC/MVVMフレームワーク
column. SPA普及の裏で貢献したHistory API
1.2.3 Reactの登場とコンポーネント指向・状態管理
1.2.4 Node.jsの躍進
column. CommonJSとESモジュール
column. Deno
1.2.5 AltJSの流行とTypeScriptの定番化
1.2.6 ビルドツールとタスクランナー
1.2.7 SSR/SSGの必要性
1.2.8 Next.jsの登場と受容
1.3 モダンフロントエンド開発の設計思想
1.3.1 フロントエンド技術の複雑化
1.3.2 コンポーネント指向とは
column. FluxのライブラリRedux
1.3.3 Next.jsがなぜ必要になってきているか
column. Vue.jsとNuxt.js
column. Next.jsの対応ブラウザ
column. Reactコンポーネントの復元 – Hydration
2 TypeScriptの基礎
2.1 TypeScriptの基礎知識
2.1.1 TypeScript登場の背景
2.1.2 TypeScriptとVisual Studio Code
2.1.3 TypeScriptとJavaScriptの違い
2.1.4 TypeScriptコマンドラインツールによるコンパイル
2.2 型の定義
2.2.1 変数
2.2.2 プリミティブ型
2.2.3 配列
2.2.4 オブジェクト型
2.2.5 any
2.2.6 関数
2.3 基本的な型の機能
2.3.1 型推論
2.3.2 型アサーション
2.3.3 型エイリアス
2.3.4 インタフェース
2.3.5 クラス
2.4 実際の開発で重要な型
2.4.1 Enum型
2.4.2 ジェネリック型
2.4.3 Union型とIntersection型
2.4.4 リテラル型
2.4.5 never型
2.5 TypeScriptのテクニック
2.5.1 Optional Chaining
2.5.2 Non-null Assertion Operator
2.5.3 型ガード
2.5.4 keyofオペレーター
2.5.5 インデックス型
2.5.6 readonly
2.5.7 unknown
2.5.8 非同期のAsync/Await
2.5.9 型定義ファイル
2.6 TypeScriptの開発時設定
2.6.1 tsconfig.json
2.6.2 Prettier
2.6.3 ESLint
2.6.4 コンパイルオプション
column. コーディングスタイルガイド
column. TypeScriptのコンパイラ
column. import type
3 React/Next.jsの基礎
3.1 React入門
3.1.1 Reactの始め方
3.1.2 Reactの基本
3.1.3 Reactのコンポーネントを作成する
3.2 Reactにおけるコンポーネント
3.2.1 React要素
3.2.2 コンポーネント(Reactコンポーネント)
column. 関数コンポーネントとクラスコンポーネント
3.3 Reactにおける型
column. FCとVFC
3.4 Context(コンテキスト)
3.5 React Hooks(フック)
3.5.1 useStateとuseReducer―状態のフック
3.5.2 useCallbackとuseMemo―メモ化のフック
3.5.3 useEffectとuseLayoutEffect―副作用のフック
column. React18におけるuseEffect・useLayoutEffectの挙動
3.5.4 useContext―Contextのためのフック
3.5.5 useRefとuseImperativeHandle―refのフック
3.5.6 カスタムフックとuseDebugValue
3.6 Next.js入門
3.6.1 プロジェクトのセットアップ
3.6.2 プロジェクトの基本的な構成
3.7 Next.jsのレンダリング手法
3.7.1 静的サイト生成(SSG)
3.7.2 クライアントサイドレンダリング(CSR)
3.7.3 サーバーサイドレンダリング(SSR)
3.7.4 インクリメンタル静的再生成(ISR)
3.8 ページとレンダリング手法
3.8.1 Next.jsのページとデータ取得
3.8.2 SSGによるページの実装
3.8.3 getStaticPropsを用いたSSGによるページの実装
3.8.4 getStaticPathsを使った複数ページのSSG
column. useRouter―ルーティングのためのフック
3.8.5 SSRによるページの実装
3.8.6 ISRによるページの実装
3.9 Next.jsの機能
3.9.1 リンク
3.9.2 画像の表示
3.9.3 APIルート
3.9.4 環境変数/コンフィグ
3.9.5 React/Next.jsとライブラリの互換性
4 コンポーネント開発
4.1 Atomic Designによるコンポーネント設計
4.1.1 Presentational ComponentとContainer Component
4.1.2 Atomic Design
4.1.3 Atoms
4.1.4 Molecules
4.1.5 Organisms
4.1.6 Templates
4.1.7 Pages
4.2 styled-componentsによるスタイル実装
4.2.1 styled-componentsをNext.jsに導入
4.2.2 styled-componentsを用いたコンポーネント実装
4.3 Storybookを使ったコンポーネント管理
4.3.1 Storybookの基本的な使い方
4.3.2 Actionを使用したコールバックのハンドリング
4.3.3 Controlsタブを使ったpropsの制御
4.3.4 アドオン
4.4 コンポーネントのユニットテスト
4.4.1 Reactにおけるユニットテスト
4.4.2 テスト環境構築
4.4.3 React Testing Libraryによるコンポーネントのユニットテスト
4.4.4 非同期コンポーネントのユニットテスト
column. Next.js 11以前のstyled-components/jest導入
5 アプリケーション開発1~設計・環境設定~
5.1 本章で開発するアプリケーション
5.1.1 アプリケーションの仕様
5.1.2 アプリケーションのアーキテクチャ
5.2 開発環境構築
5.2.1 Next.jsのプロジェクト作成
5.2.2 styled-componentsの設定
5.2.3 ESLintの設定
5.2.4 Storybookの設定
5.2.5 React Hook Formの導入
5.2.6 SWRの導入
5.2.7 React Content Loaderの導入
5.2.8 Material Iconsの導入
5.2.9 環境変数
5.2.10 テスト環境構築
5.2.11 JSON Serverの設定
5.2.12 CSS in JSライブラリ
6 アプリケーション開発2~実装~
6.1 アプリケーションアーキテクチャと全体の実装の流れ
6.2 APIクライアントの実装
6.2.1 fetcher関数
6.2.2 APIクライアントの関数
6.2.3 アプリケーションで使用されるデータの型
6.2.4 開発環境のためのAPIリクエストプロキシ
6.3 コンポーネント実装の準備
6.3.1 レスポンシブデザインに対応したコンポーネント
6.3.2 Wrapperコンポーネントの実装
6.4 Atomic Designによるコンポーネント設計の実施
6.4.1 Atomic Designに沿ってコンポーネントを分割する
6.5 Atomsの実装
6.5.1 ボタン―Button
6.5.2 テキスト―Text
6.5.3 シェイプイメージ―ShapeImage
6.5.4 テキストインプット―Input
6.5.5 テキストエリア―TextArea
6.5.6 バッジ―Badge
6.6 Moleculesの実装
6.6.1 チェックボックス―Checkbox
6.6.2 ドロップダウン―Dropdown
6.6.3 ドロップゾーン―Dropzone
6.6.4 イメージプレビュー―ImagePreview
6.7 Organismsの実装
6.7.1 カート商品―CartProduct
6.7.2 グローバルスピナー―GlobalSpinner
6.7.3 ヘッダー―Header
6.7.4 商品カード―ProductCard
column. データURIスキーム
6.7.5 商品投稿フォーム―ProductForm
6.7.6 サインインフォーム―SigninForm
6.7.7 ユーザープロファイル―UserProfile
6.8 Templatesの実装
6.8.1 レイアウト―Layout
6.9 ページの設計と実装
6.9.1 サインインページ
6.9.2 ユーザーページ
6.9.3 トップページ
6.9.4 検索ページ
6.9.5 商品詳細ページ
6.9.6 買い物カートページ
6.9.7 出品ページ
6.10 コンポーネントのユニットテストの実装
6.10.1 ボタンのユニットテスト
6.10.2 ドロップダウンのユニットテスト
6.10.3 ドロップゾーンのユニットテスト
6.10.4 ヘッダーのユニットテスト
6.10.5 サインインフォームのテスト
6.10.6 商品投稿フォームのテスト
7 アプリケーション開発3~リリースと改善~
7.1 デプロイとアプリケーション全体のシステムアーキテクチャ
7.2 Heroku
7.3 Vercel
7.3.1 Vercelへのアプリケーションのデプロイ
7.4 ロギング
column. ログレベル
7.5 SEO
7.5.1 メタタグ
7.5.2 パンくずリスト
7.5.3 sitemap
7.5.4 robots.txt
7.6 アクセシビリティ
7.6.1 セマンティック
7.6.2 補助テキスト
7.6.3 WAI-ARIA
7.7 セキュリティ
7.7.1 フロントエンド開発における脆弱性とその対策
column. CSRF
column. Permissions-Policy
column. X-XSS-Protectionヘッダー
column. セキュリティテスト
column. Next.jsのバックエンドの考え方
column. Next.jsの認証
Appendix Next.jsのさらなる活用
A.1 決済ツールStripe
A.1.1 Stripeのセットアップ
A.1.2 Stripe APIの利用
A.1.3 Stripeの公式ドキュメント
A.2 StoryShots―UIスナップショットテスト
A.2.1 StoryShotsとは
A.2.2 storyshots-puppeteer―スナップショットイメージによるUIテスト
A.3 AWS AmplifyへのNext.jsアプリケーションのデプロイ
A.3.1 Next.jsアプリケーションのAWS Amplifyへのデプロイ
A.3.2 SSGを使用したNext.jsアプリケーションのAWS Amplifyへのデプロイ
A.4 国際化ツールi18n
A.4.1 パスによる言語ルーティング
A.4.2 next-i18nを使ったテキストのi18n対応

スポンサーリンク

デザイン

なるほどデザイン

【目で見て楽しむ新しいデザインの本!】

「デザイン=楽しい」を実感できる新しいデザイン書籍。デザインする上で必要な基礎、概念、ルール、プロセスを、図解やイラスト、写真などのビジュアルで解説しています。現場で活躍しているデザイナーが身近にあるわかりやすいものに例えたり、図解、イラスト、別のものに置き換えて見方を変えてみたり…豊富なビジュアルとともにわかりやすくひも解きました。楽しみながらデザインのあれこれがわかり、「なるほど!」と思える内容が盛りだくさんです!

■Chapter 1
デザインに「正解」はない –編集とデザイン

■Chapter 2 デザイナーの7つ道具
どっちがダイジ? を口癖にしよう。–ダイジ度天秤
主役を狙って、光を当てる。–スポットライト
いいデザインて、いいキャラしてます。–擬人化力
ヒントは世の中にあふれてる。–連想力
言葉と絵のバイリンガルになろう。–翻訳機
ふところに隠し持った、最終兵器。–虫めがね
そのデザインを決めるもの。–愛

■Chapter 3 デザインの素
布地を織り上げるように組む。–文字と組み
言葉の「らしさ」をつくる。–言葉と文章
右脳と左脳で考えてみる。–色
イメージの力に向き合う。–写真
ロジカル、ときどきグラフィカル。–グラフとチャート

オブジェクト指向UIデザイン 使いやすいソフトウェアの原理

オブジェクト指向ユーザーインターフェース(OOUI)とは、オブジェクト(もの、名詞)を起点としてUIを設計すること。タスク(やること、動詞)を起点としたUIに比べて、画面数が減って作業効率が高まり、また開発効率や拡張性も向上する、いわば「銀の弾丸」的な効果を持つ。ブログや雑誌記事などで大きな反響を得たこの設計手法について、前半部では理論やプロセスを詳説。そして後半部の「ワークアウト(実践演習)」では18の課題に読者がチャレンジ。実際に考え、手を動かし、試行錯誤をすることにより、OOUIの設計手法を体得できる。

はじめに

■1 オブジェクト指向UIとは何か
1-1 目当ての現し
ユーザー要求とタスク
目当て=オブジェクト
1-2 お金が先か、商品が先か
明らかにおかしなUI
テストするまでもない問題
1-3 オブジェクト指向UI
オブジェクト指向UIの原則
オブジェクトを知覚でき直接的に働きかけられる
オブジェクトは自身の性質と状態を体現する
オブジェクト選択→アクション選択の操作順序
すべてのオブジェクトが互いに協調しながらUIを構成する
1-4 オブジェクト指向か? タスク指向か?
対象オブジェクトを選ぶところから操作が始まる
タスク指向UIの問題
オブジェクト指向UIとタスク指向UIの対比
タスク指向UIを改善する ビデオカメラ画面
タスク指向UIを改善する フードデリバリーサービス
オブジェクトを前面に出す
1-5 UIがタスク指向になってしまう背景
業務分析では「やること」がまとめられる
利用手続きをデザインしようとする
タスクに必要な情報オブジェクトを定義する

■2 オブジェクト指向UIの設計プロセス
2-1 デザインプロセスのミッシングリンクをつなぐ
2-2 アプリケーションの手掛かり
タスクを手掛かりにすると
オブジェクトを手掛かりにする
2-3 ユーザー、タスク、オブジェクトの関係
2-4 ソフトウェアデザインのレイヤー
UIは複数のオブジェクトを構造的に表象した合成物
モデル ユーザーの関心対象の模式
インタラクション 構造と機能
プレゼンテーション スタイルやレイアウト
2-5 デザインの究極の目的は形である
デザイナーのアブダクション
一貫して作用する「原理」を備える
道具の抽象性
2-6 オブジェクト指向UI設計の基本ステップ
ステップ1. オブジェクトの抽出
ステップ2. ビューとナビゲーションの検討
ステップ3. レイアウトパターンの適用

■3 オブジェクト指向UI設計の実践
3-1 オブジェクト指向UIの設計ステップ
3-2 本章でデザインするものの全体像
3-3 ステップ1. オブジェクトの抽出
「名詞」を抽出する
「名詞」とそれらの関係を抽出する
「名詞」を汎化し、粒度を揃える
「名詞」の関係性をつなげ、オブジェクトを特定する
オブジェクトの中で「メインオブジェクト」になるものを特定する
メインオブジェクトの多重性を特定する
メインオブジェクトに付随するオブジェクトをプロパティとする
コラム メインオブジェクト選びのポイント
タスクからアクションを見つける
コラム タスク、オブジェクト、プロパティ、アクション
3-4 ステップ2. ビューとナビゲーションの検討
基本のビュー形式
メインオブジェクトに「コレクション」と「シングル」のビューを与える
コラム シングルビューとコレクションビューの省略
コレクションビューとシングルビューの呼び出し関係を検討する
メインオブジェクトの中からルートナビゲーション項目を選定する
コラム ルートナビゲーションの項目、アイコン、ラベリング
3-5 ステップ3. レイアウトパターンの適用
ルートナビゲーションの配置パターン
ビューの配置パターン
メインオブジェクト同士の参照関係を踏まえて配置パターンを適用する
コラム ビューの配置パターン適用のポイント
コレクションビューの表示形式のパターン
コラム オブジェクトへのフォーカスとコレクションビュー
コレクションの性質や用途に合わせて表示形式を決定する
コレクションのフィルタリングのパターン
シングルビューの表示形式のパターン
コラム シングルビューの表示内容
シングルビューの性質や用途に合わせて表示形式を決定する
アクションの性質や用途に合わせて表示形式を決定する
Create(作成)アクションのパターン
Delete(削除)アクションのパターン
Update(更新)アクションのパターン
ビジュアルデザイン
3-6 タスクをどう扱うか
タスクの特徴
タスクはどこへ行くのか?

■4 ワークアウト:基礎編
進め方
レベル1 メモアプリケーション
ヒント・チャレンジ
解説
レベル2 社員名簿アプリケーション
ヒント・チャレンジ
解説
レベル3 イベント店舗管理アプリケーション
ヒント・チャレンジ
解説
レベル4 会議室予約アプリケーション
ヒント・チャレンジ
解説
レベル5 家族で遊べる場所を探すアプリケーション
ヒント・チャレンジ
解説
レベル6 商品管理アプリケーション
ヒント・チャレンジ
解説
レベル7 商品管理アプリケーション
ヒント・チャレンジ
解説
レベル8 商品管理アプリケーション
ヒント
解説
レベル9 商品管理アプリケーション
ヒント
解説

■5 ワークアウト:応用編
進め方
レベル10 スマートフォン用の営業支援アプリケーション
ヒント
解説
レベル11 イベント管理アプリケーション
ヒント
解説
レベル12 保険契約の顧客管理アプリケーション
ヒント
解説
レベル13 アセット管理アプリケーション
ヒント
解説
レベル14 サイト管理アプリケーション
ヒント
解説
レベル15 出張申請・精算アプリケーション
ヒント
解説
レベル16 契約管理アプリケーション
ヒント
解説
レベル17 通貨換算アプリケーション
ヒント
解説
レベル18 販売実績照会アプリケーション
ヒント
解説

■6 オブジェクト指向UIのフィロソフィー
6-1 オブジェクトの原義
6-2 オブジェクト指向
クラスとインスタンス
イデア論
GUIにおけるオブジェクト
プログラミングにおける記述法
6-3 GUI
マンマシン インターフェースからユーザーインターフェースへ
インターフェースはユーザーとオブジェクトを接着する
Whirlwind GUIという発想の原型
SAGE 防空システムに組み込まれた最初期のGUI
Sketchpad グラフィック言語による対話型コンピューター
NLS 知的生産活動のためのコンピューター
Smalltalk 誰もが使えるパーソナルコンピューター
TUI テキストベースのUI
Star GUIベースのビジネス用ワークステーション
Macintosh 商業的に成功した最初のGUIシステム
iPhone パーソナルコンピューターの新しいフォームファクター
メタメディアとしてのオブジェクト指向UI
6-4 モードレス
モードレスネスを信奉しなさい
ラリー・テスラー テキスト編集のモードレス化
ドナルド・ノーマン モードエラーの分析
ジェフ・ラスキン モードレスにすることで劇的に使いやすくなる
モードレスにする方法
6-5 オブジェクト指向UIについての文献
『Object-Oriented User Interfaces and Object-Oriented Languages』
『Object-Oriented Interface Design』
『Designing Object-Oriented User Interfaces』
『The Elements of User Interface Design』
『Designing for the User with OVID』

おわりに
参考文献
索引
あとがき

スポンサーリンク

マネジメント

プロダクトマネージャーのしごと 第2版 ―1日目から使える実践ガイド

プロダクトマネジメントの考え方と行動について解説!
プロダクトマネジメントは理論的には人々に愛されるプロダクトを作ることであり、ビジネスゴールとユーザニーズを計測することとされていますが、実際は、問題に直面しているプロダクトを改良するための粘り強い取り組みであり、ビジネスの「ゴール」が何かを明らかにするために執拗に働きかけることです。プロダクトマネジメントにおけるあいまいさや矛盾、不本意な妥協を紹介し、プロダクトマネージャーに必要な考え方と日々の行動、過ごし方を解説します。

第2版への推薦の言葉
第1版への推薦の言葉
序文
まえがき
はじめに

1章 プロダクトマネジメントの実践
    1.1 プロダクトマネジメントとは?
    1.2 プロダクトマネジメントではないこと
    1.3 優れたプロダクトマネージャーのプロフィール
    1.4 悪いプロダクトマネージャーのプロフィール
    1.5 プロダクトマネージャーとして週に60時間も働いてはいけない
    1.6 プログラムマネージャーとは?プロダクトオーナーとは?
    1.7 まとめ:曖昧さの海を航海する
    1.8 チェックリスト

2章 プロダクトマネジメントのCOREスキル
    2.1 ハイブリッドモデル:UX/テクノロジー/ビジネス
    2.2 プロダクトマネジメントのCOREスキル:コミュニケーション、組織化、リサーチ、実行
        2.2.1 コミュニケーション
        2.2.2 組織化
        2.2.3 リサーチ
        2.2.4 実行
    2.3 でも……ハードスキルについてはどうなのか?
    2.4 まとめ:プロダクトマネジメントに対する会話を変える
    2.5 チェックリスト

3章 好奇心をあらわにする
    3.1 心からの興味を持つ
    3.2 しなやかマインドセットを育む
    3.3 間違いという贈り物
    3.4 守りの姿勢と距離を置く
    3.5 「なぜ」を使わずに理由を尋ねる
    3.6 好奇心を広げる
    3.7 まとめ:好奇心がカギ
    3.8 チェックリスト

4章 過剰コミュニケーションの技術
    4.1 あたりまえを問う
    4.2 遠回しではなく、単刀直入に
    4.3 すべてがあなたのせいではない。アウトカムは意図より重要
    4.4 プロダクトマネジメントでいちばん危険な言葉:「よさそう」
    4.5 「よさそう」からの脱却戦術:Disagree&Commit
    4.6 いろいろなコミュニケーションスタイルを意識する
    4.7 コミュニケーションはあなたの仕事。仕事をすることで謝罪してはいけない
    4.8 過剰コミュニケーションの実践:プロダクトマネージャーの3つのよくあるコミュニケーションシナリオ
        4.8.1 シナリオ1
        4.8.2 シナリオ2
        4.8.3 シナリオ3
    4.9 まとめ:迷ったらコミュニケーション
    4.10 チェックリスト

5章 シニアステークホルダーと働く(ポーカーゲームをする)
    5.1 「影響力」から情報へ
    5.2 気に入らない答えでも答えは答え
    5.3 「上司は馬鹿だ」、もしくは、おめでとう――あなたはチームを壊した
    5.4 警告なしで驚かさない
    5.5 社内政治の世界でユーザー中心主義を貫く
    5.6 シニアステークホルダーも人間だ
    5.7 実践ポーカーゲーム:シニアステークホルダーマネジメントの3つのよくあるシナリオ
        5.7.1 シナリオ1
        5.7.2 シナリオ2
        5.7.3 シナリオ3
    5.8 まとめ:これはあなたの仕事の一部であり、障害ではない
    5.9 チェックリスト

6章 ユーザーに話しかける(あるいは「ポーカーって何?」)
    6.1 ステークホルダーとユーザーは違う
    6.2 そう、ユーザーと話す方法を学ばなければいけない
    6.3 ペルソナ・ノン・グラータ
    6.4 プロダクトとリサーチ:友だちのふりをした敵から、永遠の大親友へ
    6.5 まとめ:いや、真剣な話、ユーザーとの会話を学ぶべき
    6.6 チェックリスト

7章 「ベストプラクティス」のワーストなところ
    7.1 誇張を鵜呑みにしない
    7.2 現実と恋に落ちる
    7.3 フレームワークやモデルは有用なフィクション
    7.4 あなたはここにいる
    7.5 何のために問題解決しているのか?
    7.6 でも、前のチームではうまくいったのに
    7.7 「プロセス嫌い」と働く
    7.8 ベストプラクティスのベストなところ
    7.9 まとめ:出発点であって保証ではない
    7.10 チェックリスト

8章 アジャイルについての素晴らしくも残念な真実
    8.1 アジャイルにまつわる3つの迷信を論破する
    8.2 アジャイルマニフェストに目を向ける
    8.3 マニフェストからモンスターへ
    8.4 アリスター・コーバーンの「アジャイルのこころ」を再発見する
    8.5 アジャイルと「常識の我が物化」
    8.6 アジャイルを「正しく」やって悪化する場合
    8.7 アジャイルを「正しく」やって改善する場合
    8.8 二度としたくないアジャイルについての会話7選
    8.9 まとめ:曖昧さはここにも
    8.10 チェックリスト

9章 ドキュメントは無限に時間を浪費する(そう、ロードマップもドキュメント)
    9.1 「プロダクトマネージャーがロードマップの持ち主だ!」
    9.2 問題はロードマップではなく、それをどう使うか
    9.3 ガントチャート上は欲しいものが必ず手に入る
    9.4 プロダクトの仕様書はプロダクトではない
    9.5 最高のドキュメントは不完全
    9.6 最初のドラフトは1ページで、作るのに1時間以上かけない
    9.7 テンプレートがある場合
    9.8 商用ロードマップツールとナレッジマネジメントツールの簡単なメモ
    9.9 まとめ:メニューは食事ではない
    9.10 チェックリスト

10章 ビジョン、ミッション、達成目標、戦略を始めとしたイケてる言葉たち
    10.1 アウトカムとアウトプットのシーソー
    10.2 SMARTなゴール、CLEARなゴール、OKRなどなど
    10.3 優れた戦略と実行は不可分だ
    10.4 優れた戦略はシンプルで明快だ
    10.5 わからないなら例を求めよう
    10.6 まとめ:シンプルに保ち、役立たせよう
    10.7 チェックリスト

11章 「データ、舵を取れ!」
    11.1 「データ」という禁句をめぐるトラブル
    11.2 意思決定から始め、それからデータを見つける
    11.3 重要な指標に集中する
    11.4 明確な期待を定めるためにサバイバル指標を利用する
    11.5 実験とその不満
    11.6 「説明責任」から行動へ
    11.7 まとめ:近道なんてない!
    11.8 チェックリスト

12章 優先順位づけ:すべてのよりどころ
    12.1 層になったケーキをひと口食べる
    12.2 どの意思決定もトレードオフ
    12.3 体験全体に留意する
    12.4 うわべだけの魅力ではなく本質の理解へ
    12.5 でもこれは緊急なんです!
    12.6 優先順位づけの実際:項目は同じでも、ゴールと戦略に応じて結果は変わる
    12.7 まとめ:志は大きく、スタートは小さく
    12.8 チェックリスト

13章 おうちでやってみよう:リモートワークの試練と困難
    13.1 遠くから信頼を築く
    13.2 シンプルなコミュニケーションアグリーメントが意味のある信頼を築く
    13.3 同期コミュニケーションと非同期コミュニケーション
    13.4 分散チームのための同期コミュニケーション:時間と空間を企画する
    13.5 分散チームのための非同期コミュニケーション:具体的な期待を設定する
    13.6 「同期サンドイッチ」を作る
    13.7 非公式なコミュニケーションのためのスペースを作り、それを守る
    13.8 ハイブリッドな時代:対面とリモートのバランスを取る
    13.9 まとめ:あなたのコミュニケーション能力の強化トレーニング
    13.10 チェックリスト

14章 プロダクトマネージャーのなかのマネージャー(プロダクトリーダーシップ編)
    14.1 出世する
    14.2 びっくり!あなたがしていることはすべて間違い
    14.3 自分自身に課す基準は自分がチームに課す基準
    14.4 自律性の限界
    14.5 明確なゴール、明確なガードレール、小さなフィードバックループ
    14.6 自分自身を客体化する
    14.7 プロダクトリーダーシップの実践
        14.7.1 シナリオ1
        14.7.2 シナリオ2
        14.7.3 シナリオ3
    14.8 まとめ:最高の自分へ踏み出す
    14.9 チェックリスト

15章 良いときと悪いとき
    15.1 自動操縦の組織の心地よい静寂
    15.2 良いときは(必ずしも)簡単なときではない
    15.3 世界の重荷を背負う
    15.4 世界最高の会社で働いていることを想像する
    15.5 まとめ:大変な仕事だがその価値はある
    15.6 チェックリスト

16章 どんなことでも

付録A プロダクトマネジメント実践のための読書リスト
付録B 本書で引用した記事、動画、ニュースレター、ブログ記事

訳者あとがき
索引
スポンサーリンク

UNIX

UNIXという考え方: その設計思想と哲学

Linux成功の鍵や哲学を解き明かす

いかがだったでしょうか。今回はエンジニア向けのおすすめ書籍を厳選して紹介しました。
他にも色々な記事を出しているので読んでいただけると嬉しいです。

コメント

タイトルとURLをコピーしました