『プロになる Java』を読んで学んだこと

数ヶ月前に購入した本なのですが、ずっと読まずにいたところ、先日 java コマンドをインタープリターのように使う方法に関して恥ずかしい勘違いをしていたことを知り、基礎を学び直す必要性を感じて大慌てで目を通してみました。どのようなところが参考になったかをご紹介したいと思います。

---

## 本書の読み方・動作環境

「わからないところは飛ばしましょう」。他の本を読む際に、よくこの読み方ができずに挫折しています。

## 第2章 開発環境の準備と最初の一歩

### 2.2.2 IntelliJ IDEA とは

表 2.1 JetBrains 社 IDE 製品群 (JetBrains IDE) の言語・プラットフォーム対応状況が参考になりました。以下と大体同じです。

https://support.samuraism.com/jetbrains/faq/ide-support-languages

プラグインを入れれば対応できる言語と、そうではない言語があります。

### コラム「IntelliJ IDEA のエディション」

Community Edition は OSS で、Android Studio のベースになっているそうです。

IntelliJ にバンドルされている Kotlin のプラグインが新しくなるたびに思わぬ挙動に悩まされている気がするのですが、Java の OSS ならもっと積極的にソース コードを見るようにした方が良いかもしれないと思いました。

### 2.2.5 IntelliJ IDEA の初期設定

Mac に不慣れな Windows おじさんなので、「macOS の設定最適化」の項目がとても参考になりました。

キーボード > ショートカット > 入力ソース > で「^Space」の割り当てを外す。つい最近までこれをやっていなくて、「うーんなんか補完が効かない」と思っていました。

「英語と日本語の切り替えは JIS キーボードであれば [英数] [かな] キーで行えます。」と書かれていましたが、手元の US キーボード内蔵 Mac (macOS 13.2.1) に JIS キーボードを外付けした状態では、[英数] を押すことで英語と日本語が切り替わる一方で [かな] は動作しませんでした。Apple 公式でも [かな] が使えることになっているのですが…。

https://support.apple.com/ja-jp/guide/japanese-input-method/jpimf6ffb247/mac#apddeb6aae7fa944

ちなみに手元では Windows ロゴ キー (⌘) を ^、Ctrl (^) を ⌥、Alt (⌥) を ⌘ に割り当て、⌥Space で入力モードを切り替えるようにしています。Windows では Ctrl-Space で IME のオン-オフを切り替える設定として、物理的に同じキー操作で日本語入力のオン-オフを切り替えています。こうすると Windows で IDE の補完機能とキーが同じになってしまいますので、IntelliJ での補完は Ctrl-Shift-Space に割り当て直しました。

サービス > ターミナルの man ページ インデックスで検索 のチェックを外すのもやっていませんでした。他にも一生使わないような割り当てがたくさんあったので全部消しました。

「日本語入力の英字モードを使っていると特定のショートカットがアプリケーションで使えません」とのことで、これも知りませんでした。「ABC」を追加してから日本語入力の「英字」モードのチェックを外しておくと良いそうです。


## 第3章 値と計算

### 3.2.4 文字列

バックスラッシュは日本語入力の英字モードだと ¥ や ⌥Y で入力する設定にもできたと思うのですが、「ABC」では ⌥¥ で入力するしかないようです。


## 第5章 標準 API

### 5.1.6 日付時刻の整形

日付や時刻も String の formatted で整形できるのですね。

https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/Formatter.html#Formatter.4Kes8g

`<` を使って引数を再利用できるのも知りませんでした。

https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/util/Formatter.html#Formatter.4OzcmT


## 第9章 繰り返し

ラベル付きの continue や break についての言及が見当たらなかったので、言及しても良かったのではないかと思いましたが、「プログラムが見づらくなっているはずなので、できればメソッドを定義して処理を分けましょう」ということですかね。

学生の頃、ラベルを使えることを知らずに、boolean 変数を使って頑張っていました。初心者の時ほどループが深くなりがちだと思います。


## 第12章 入出力と例外

### 12.1.4 throws で例外を押しつける

Ctrl-Q (^J) で Quick Documentation。使いこなせていないので覚えないと。

### 12.2.1 サーバーとクライアント

書籍では「プライベート ネットワーク」にチェックを入れることを推奨していましたが、キャンセルでも localhost には接続できると思います。プライベート ネットワークもウイルス感染した端末からのアクセスなどがないとは言えませんので、基本的にキャンセルが良いと思っています。


## 第14章 クラスとインタフェース

### 14.1.6 ネステッドクラスとインナークラス

「static がついていないクラスはインスタンスクラスとは呼ばずにインナークラスといいます。static クラスは正式な用語ではありませんが、static なネステッドクラスを表す場合に使われます」。ネステッド クラスとインナー クラスの違いを今になって知りました。


## 第18章 JUnit とテストの自動化

### 18.1.2 テストケースの修正、実装コードの修正

「Calc クラスへ移動する時は、テストを作成する時に使った [Ctrl] + [Shift] + [T] ([Shift] + [Command] + [T]) キーを使うと瞬時に戻ることができます」。これも知らずにいました。これは便利そう！

Keymap を見ると Ctrl-Shift-F10 (^⇧R) で Run。Shift-F10 (^R) も Run。前者は「開いているファイルの」実行で、後者は「最後に実行した設定で再度実行」。これも使いこなしていきたいです。


## 第19章

### 19.1.1 補完の候補表示と補完確定

「普段は [Tab] キーで確定する癖をつけておきましょう。[Enter] ([Return]) キーによる確定はメソッドチェーンの間に新たにメソッドを挟み込みたい場合などにのみ使用します」。最近この2つの違いに気がつきました。ただ、プログラムの修正中、タブだと残すべき文字列まで食べちゃうことがよくあって、Enter (↩︎) を押す機会もよくあります。まだよく押し間違えます。

### 19.2 Live Template と後置補完

Postfix Completion の var で変数を宣言してくれるんですね！ いままで波線がつくのを待って Alt-Enter (⌥↩︎) を押すとか、Ctrl-Alt-V (⌥⇧V) を押すとかしていました。

Ctrl-Shift-Enter (⌘⇧↩︎) の Complete Current Statement も使えていませんでした。覚えてみると、しばしば使うようになりました。中括弧の数が合わなくなって困った時にも使えそうです。


## 第22章 Web アプリケーションにデータベースを組み込む

### 22.2.2 pom.xml への依存関係の追加

h2 の scope は runtime で良いのですね。無指定にしがちなので気をつけようと思います。

---

## 感想

パラパラめくるだけでこんなに勉強になる箇所があったことは驚きでした。Java を長く触っていても Java 17 には触れていないとか、私のように Mac や IntelliJ に習熟していないとか、人それぞれ違う発見がある書籍だろうと思います。教え方がとても上手く、その意味でも学びがありました。これから Java を覚えたいという方に最適な本だと思いますが、私のように既に Java を長期間使っている方も読んでみると発見があると思います。

IntelliJ はもう少し使いこなした方が良いと思ったので、本書を読んだ後に『IntelliJ ハンズオン』や以下の記事を読んで、使えるキー操作を増やそうとしているところです。まだ、覚えたいキー操作も覚えきれていませんが、「こんな時のためのキー操作があったはず」と気づくことはできるようになってきた気がします。

https://qiita.com/yoppe/items/f7cbeb825c071691d3f2

OS や IntelliJ の画面周りは、既に書籍と違ってしまっている箇所が出てきているようです。初心者は戸惑うと思うので、GitHub などで画面周りの部分だけフリーで公開されていると、戸惑った人が出るたびにプルリクで修正されてみんな幸せになれるかもしれないと思いました。下記ページで補足されていますが、頻繁に変わるので、著者自身が追随しなければならないのは大変だろうと思います。

https://gihyo.jp/book/2022/978-4-297-12685-8/support

今、IntelliJ では New UI が Beta になっていますが、これが Stable になった頃に版が重なって、Java 21 対応になっていると良いだろうなと思いました。