Javaをチラ見した

きしだなおきさんによる以下の記事を見ながら、Javaをチラ見してみた。

d.hatena.ne.jp

チュートリアルというか、入門編解説というか、「試しに触ってみる」ハンズオン的な感じだろうか。

内容は、大きく以下の4要素で構成されている。

  1. 環境構築
  2. Hello, World!
  3. デスクトップアプリ作成
  4. Webアプリ作成

説明は簡潔&ソフトで、図(スクリーンショット)付き。

にもかかわらず後半で結構ハマったので、その辺のメモもかねて。

環境構築

JDK」「NetBeans」を個別にDLするか、「JDK+NetBeans」で合わせてDLするか、という話で、最初は個別にやり始めたが、確かにちょっと面倒かもと感じたので、それはストップして、後者で示されたリンク先に飛んで「JDK 8u73 with NetBeans 8.1」というのを「Accept License Agreement 」。
で、Mac OSX用のをDL。

ただし、実際にはこれは前者の個別方式でやり直すことに。それについては後述。

Hello, World!

何も問題なし。書かれているとおりにやったら示されているとおりの結果が出た。
嬉しい。

デスクトップアプリ作成

これはかなりハマった。というのは、自分の見落としのせいで。

具体的には、記事中の以下の一文、

同様に「テキスト領域」を適当なところに置いてください。これは大きさも適当に大きくするほうがいいです。

これを読み落としていて、その前の方でスクリーンショット付きで示されている「ボタン」だけを配置した状態で、

jTextArea1.append("Hello!\n");

を入力していたので、何度実行してもエラー。

たぶん賞味2〜3時間、ハマってた。

出てくるエラー「シンボルが見つかりません」でいろいろ検索してみても、「メソッド名のタイポで出てくるケースが多い」みたいな説明が出てくるのだが、appendはどう見てもタイポのしようもないし……とか。

その検証作業の大半の時間においては、「元記事の説明に何か大事な部分の省略や記載ミスがあるのでは」と疑っていて、またコードはもちろんコピペしていたので(画面を見ながらの直打ちではなく)、コピペ元のコードにタイポがあったのかなあ、とか(実際よくあるので)疑っていたが、上記のとおり、原因はその一文を見落としていたことにあった。
(ある意味では「大事な部分の省略」を自分でやっていた、ということだが)

より厳密に言うと、その一文の後半、「これは大きさも適当に大きくするほうがいいです。」はちゃんと読んでいて、それでボタンの大きさを「適当に大きく」したりしていた。

なぜ、そんな器用な読み落としをしていたのか?
たぶん、「ボタン」の方がスクリーンショット付きの説明だったから、Swingコントロールから持ってくるのはそれだけでよい、と、意識にすらのぼらないレベルで勝手に思い込んでいたのではないかと思う。

いずれにせよ、そこに気づいて「テキスト領域」も設定したら、説明どおりに実行された。
勝ち。(か?)

Webアプリ作成

上のデスクトップアプリでハマっている際、先にこっちをやってしまうか少し迷ったが、どうせスキップしてもこっちはこっちで上手くいかないだろうと思ったので、上のが解決してからようやくこちらへ。

元記事への勝手な不信感は晴れたので(すいません)、あとは説明の通りにやっていればうまくいく、と思って臨んだが、これはこれで、また別の仕方で頻繁にコケ続けた。

その一つが冒頭の方で書いた環境の違いで、とりあえずこの章の説明の最初にある

「ファイル > 新規プロジェクト」を選んで「Java Web」カテゴリの「Webアプリケーション」を選んで「次へ」を押します。

の、「Java Web」が無い。

あれー、これもしかして、バインド版(JDK+NetBeans)は未確認と言っていたから、そのバインド版を使っているせいかな……と思って、あらためて個別にDL&インストール。

すると、説明のとおりに「Java Web」も出てきた。平和。

しかし次の説明、

プロジェクトツリーの「ソース・パッケージ」を右クリックして、メニューから「新規 > サーブレット」を選びます。

に至って、今度はその「サーブレット」がない……。

ん〜……もうJavaと自分、相性悪いのかなあ〜(笑)と、文字通りのトホホ状態だったのだけど、もう少し粘って周辺を見渡したら、自分が見ていたのは、さっきまで作っていたデスクトップアプリの方のツリー内にある「ソース・パッケージ」で、それとは別に、今作っているWebアプリの方のツリーにも「ソース・パッケージ」があることに気づいた。

あ、こっちか……と思って指示のとおりにやると、ちゃんと「サーブレット」が出てきた。安心。

こんなことの連続だな……とか思いながら先へ進むと、しかしまだ終わっていなかった。

なんか、だばーっとソースが生成されるので、44行目あたり、<h1>の下の行に

out.println("today is " + java.time.LocalDate.now());

を追加します。

との説明があるのだけど、なんかちょっと感じが違う。

具体的には、画面上方に日時が記された行が数行、その下に左右に分かれた差分画面……というのが出てきて、たぶんこれ、どう考えても元記事で想定されているものではないよな……と。

でも無理やりそのまま様子を眺めると、たしかにコードの44行目前後にh1のタグがある。

ちょっと(というかだいぶ)様子は違うが、とりあえずそのコードを挿入してみよう、と、分割画面の右側「現在のファイル」のその辺にそれを挿入。
で、

また同様にエディタ上で右クリックして、「ファイルを実行」します。

というのを見て、さてやってみようと思ったけど、その差分画面右側で右クリックしても、「ファイルを実行」の選択肢が出てこない。

やっぱりなんか、どっかで間違えたか……と思いつつ、左サイドバーにある「MyServlet.java」(「MyServlet」は自分で設定したクラス名)をたわむれに右クリックしてみると、「ファイルを実行」の選択肢が出てきた。

おお。なんか説明とは違うけど、とりあえずこれで! と思ってやったら、たしかこの辺りのタイミングだったと思うんだけど*1「サーバーはどれを使いますか?」みたいな選択肢がポンと出てきて、「え……わからない……指示なかったし」と思って、一旦終了。

で、めげずに(またはめげながら)もう一回開いたら、すでに勝手に「GlassFish Server 4.1.1」というのがサーバーとして選択されていて、よくわからなかったがその後二度と聞かれなかったので、とりあえずそれでヨシ。

で、あらためて実行したら……

f:id:note103:20160326150735p:plain

できた。そのまま説明に従って、コードを差し替えても……

f:id:note103:20160326144621p:plain

ちゃんと動いてる! やっほー!

という感じで、ひとまず完了。

いやあ、終盤ちょっとなんかいろいろ変だったけど、とりあえずOK! と思って、その経過をメモするためにここまで書いてきたのだけど、画面が分割されていた件、今あらためて同じようにやってみたところ、どうも自分は「履歴」という方を見ていた模様。

その隣にある「ソース」というボタンを押してみると、たぶんこれのことだったんだな……と思えるソースコードが出てきた。行数もわかりやすいし挿入もしやすそうだ……(笑)。

ということで、この時点であらためて、元記事に示されていた工程は完走。おつかれさまでした。

雑感&今後

Javaというのは、今まではドットインストールの基礎講座とか、
dotinstall.com

あるいはプログラミング入門の素材言語として使われているものをちらっと見たぐらいで、その印象としては、普通のエディタで何か書いてコマンドラインで実行。という、他のLL言語のそれとあまり変わらない感じかと思っていたのだけど、こうしてデスクトップアプリやWebアプリと組み合わせて使っていくことを考えると、こういうIDEを使うのはある意味不可欠なのでは……とすら感じた。

自分はVimmerなのでエディタとしての使い勝手の違いにはけっこう難儀したが(なぜか改行できない場所があるとか、矢印キー使いたくない……とか)、たぶん設定次第で使いやすくもできるだろう。

いずれにせよ、Javaは様々な場面で様々な使われ方をしているようで、その意味でもここで見たのは入口の入口のまた入口の……というぐらい氷山の一角に過ぎないだろうけど、面倒な導入作業の一端をさらっとクリアできたのは大変良かった。

元記事を書かれたきしださん、ありがとうございました。

*1:思い出しながら書いているので定かではないが。もしかしたら前出の「サーブレット」を選択した辺りだったかも。