2023年に『SQL書き方ドリル』の付属ソフト「SQUAT」がMacで動くまで

くだんのフィヨルドブートキャンプは着実に進捗しており、nginxのプラクティスが最終盤。これが終わればSQLのプラクティスに入るので、以前に独学で取り組んでわかりやすかった以下の本を電子版で買い直した。

gihyo.jp

書誌情報は↑の方がわかりやすいけど、電子版を買いたい場合は以下へ。

改訂第3版 すらすらと手が動くようになる SQL書き方ドリル | Gihyo Digital Publishing … 技術評論社の電子書籍

技術評論社で電子版を買うと、ePub版とPDF版を同時に入手できるのでありがたい。

以前は紙版で買って、実際に本に鉛筆で書き込んで使ったものだけど、今回はPDF版を必要に応じてスクショして、それを何ページかまとめてPDF化して、それにiPadで書き込んで使っている。本当は元のPDF本にそのまま書き込めればベストだったんだけど、なんかロックがかかってるようで直接編集できなかったので次善策として。

で、本の内容自体は何も問題ないのだけど、本書の付属物で「SQUAT」というSQL練習用のソフトウェアがありまして、これを使うとPC上でもいろいろSQLを打ち込んで動かせる。ということを以前に買ったときも試して覚えていたので、早速それもやってみようと思っていろいろ試したのだけど、全然立ち上がらなかった。もしかして、本書は最新の改訂版でも2016年発売なので、それから7年も経って互換性の問題とかで現代のPC(というかMac)では動かないんやろか・・とか思いながらあの手この手で試すんだけど、何をやっても動かない。それで絶望&完全に諦めて、しかしその後もグダグダ粘っていたら最終的には動いたので、以下ではそれについて書いていく。

先に結論というか、「こうすれば動く」的なことをザッと書いて、その後に諸経緯をダラダラ書く。個人的には後半の方がメインだけど、本件についてはいくらググっても全然役立つ情報が出てこなかったので、同じようにハマってる人がいたらとりあえずその結論だけ見て試してもらえればいいのかなと。

結論

SQUATを動かすために必要なことはたったの2つ。

1. Javaを実行するための環境を準備する。
2. 同梱ソフト群の「startup.command」をダブルクリックする。*1

以上。なんだけど、もう少し具体的に説明すると、まずMacにJavaが入ってるかを確認する。ターミナルで以下を打つ。

$ java -version

以下のように出てきたら入ってないので、JREというのを入れる。

The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.

JREって何?ということはもちろん知らなかったんだけど、以下がわかりやすかった。ようは、Javaを動かすための何か。
qiita.com

JREは、Javaのサイトの「ダウンロード」というそのままなページからダウンロードできるので、そこで.dmgファイルをダウンロードして、手元に落ちたらダブルクリックしてインストールする。ダウンロードページは以下。
https://www.java.com/ja/download/

ちなみに、M1 MacとIntel Macではダウンロード対象が異なるので注意。現時点(2023年8月後半)では、目立つダウンロードボタンはIntel用。M1用はそのボタンのすぐ下に「ARM64バージョンのJRE」というリンク文字があるので、そこからダウンロード。

なお、JREは今回の付属ソフトウェアの中にも同梱されているんだけど、これは「8u73」という2016年に有効期限が切れているもののようなので、使わない。

最新版JREのインストールが完了したら、ここでひとまずSQUATに同梱されている「startup.command」をFinderからダブルクリックしてみる。以下のように「開発元が怪しいので開けません」的な表示が出るかもしれないけど、

この場合はFinderからファイルを右クリックして「開く」を選択すれば、「ほんとに開くの?」的なダイアログで「開く」ボタンが出てくるので、それを押す。と、今度は以下のように「アクセス権限がないから実行できない」とかいうエラーが出るかもしれないけど、

この場合はターミナルで「startup.command」に実行権限を付与する。具体的には、「664」を「764」に変更。

$ chmod 764 startup.command 

その後に「startup.command」をダブルクリックして、ターミナルが起動してこんな感じでユーザー名を登録するための画面が表示されたら成功。

最短で動くケースはたぶんこれ。以下はそうは行かなかった人のための対処法。そう、それが私の辿った道。

一旦諦めてからなぜか成功するまで

今回、自分の環境では「MacBook 2016(Monterey)」と「MacBook Pro 2020(Ventura)」で試して、結果的には両方で動いたんだけど、最初はMacBookの方だけでやっていて、このときは最初に上記「結論」の手順をすべてやったんだけど動かなかった。それでかなりハマった。一方、MacBook Proの方は上記の手順で一発OKだった。

SQUATを使うためにはJavaをインストールしなければいけなくて、しかしメインマシンのMacBook Proにはなるべくそういう普段使わないものを入れたくないな〜・・と思ったので、初めはMacBookだけで使おうと思っていた。しかし後述のようにMacBookでは全然動かなかったので、仕方なくMacBook Proでも試したという流れ。

最初にMacBookの方でやったのは上記の通りで、まずはJavaが入ってるかどうかを確認して、JREを入れようと思ったけど古いのを使うのはマズイだろうと察して最新のそれをダウンロード&インストール。その後に「startup.command」をダブルクリックして、アクセス権がどうしたとか言われたのでターミナルで実行権限を付与して、そしたらターミナルは起動するんだけど、すぐに以下の表示が出て勝手に終了してしまう。

Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.

[プロセスが完了しました]

ちなみに、これはSQUATを正常に終了したときに出てくる表示と同じもの。

それで、はあ駄目だこりゃ、このソフトが古いんだわ、と一旦諦めた。何しろ、同梱されているJREが上記の通り7年も前のもので、それを平気で同梱してるという時点でもうこのソフト、読者の手元で動かさせる気ないだろ、と思った。*2

とはいえ、なかなか諦めもつかないというか、以前に触ったときにはサクサク動いて良いソフトという印象だったし、なんとかならんのか・・と思って以下を試した。

あえて古いJREを入れてみる

互換性的な観点で、とりあえず最新のJREで動かないのだから同梱されてる方の古いJREを使ったら動くのでは?と考えた。それで、一旦すでに入っている最新版のJREをアンインストールして、同梱されている方を入れてみようと。JREのアンインストール方法は以下で示されている。

https://www.java.com/ja/download/help/mac_uninstall_java.html

次の手順で、ディレクトリとファイル(symlink)を1つずつ削除します:

1. DockにあるFinderアイコンをクリックします
2. 「Utilities」フォルダをクリックします
3. 「Terminal」アイコンをダブルクリックします
4. ターミナル・ウィンドウで、次のコマンドをコピー・アンド・ペーストします:

sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefPane
sudo rm -fr ~/Library/Application\ Support/Oracle/Java

sudoまじで使いたくない、と思ったけど公式サイトの案内だし、そこまでおかしなことにはならないだろう・・と楽観的に実行。ターミナルでJavaが入ってないことを確認して、その後にあらためて付属品に同梱されていた古いJREをインストール!・・のはずが、ずーっとグルグル回ってしまってまったくインストールされない。なんだよ〜・・

最新のJREを入れ直・・せない

まあ仕方ない。諦めて、さっきの最新版JREを入れ直すか、と思ってまたインストールしようとしたら、『XPC接続エラー』とかいう初見のエラーが表示されて、処理が強制的に終わってしまう。何度やっても同じ。なんと、さっきは正常に入ったはずのJava自体が入らなくなってしまった。どう考えても↑のsudoが悪かっただろ・・としか思えない。けど、どうしようもない。ハマるとき、こういうのが一番つらい。

ChatGPTに相談→OS再インストール

この辺りになるとかなりヤケになっていて、頼みの綱はChatGPTぐらいかという感じになる。それでGPT-4に聞いてみたら、いろいろ教えてくれるんだけど(エラーメッセージを見ろとかどのフォルダを見ろとか再起動しろとか)、すべて空振り。その上、「今言ったのが全部駄目なら最悪OSを再インストールしろ」とか言い出して、コイツ・・と思ったけど、まあそのMacBookには実は大事なデータとかは全然入ってなくて、シンクライアント的に使っていたので、それもありかと思ってサクッとOS再インストール。

何時間か経過して、全部まっさらな状態から始まると思っていたんだけど、同じOSだったせいかほとんど以前と変わっていない。肩透かしを食らいながらあらためて最新版のJREを入れてみようと試したら、さっきと同じく『XPC接続エラー』。いやいや、OS再インストールしたやろがい、なんでやねん。という感じでここで完全に諦めた。もう無理。

JDKを入れてみる

と本当に思ったんだけど、でもどうにも諦めきれない(どっちや)。それでそのままウダウダ検索していたら、Javaを動かすにはどうやらJREというもの以外にJDKというものがあるらしい、とわかった*3。そういえば、以前にもそんなの聞いた気がするなと探してみたらダウンロードできる場所を発見。

Java Downloads | Oracle

この中の「JDK 20→macOS」を選択して、今回のMacBookはIntel版なので、「x64 DMG Installer」というのをダウンロード&インストール。これはあっさり入った。*4

すかさず、懸案のJREのインストールをリトライ。最初に最新版で失敗したので、今度は古いやつ。

お、これは・・。

入った!
しかし、この「閉じる」ボタンを押すと以下に飛ばされて、これを使うな的なことを言われる。

https://www.java.com/ja/download/uninstalltool.jsp

どうも古いJavaだから、ということっぽい。ここで「条項に同意して続行します」ボタンを押すと、アンインストールツールがダウンロードされる。ようやく入ったのに即アンインストールかい。仕方ないのでやるけども、なんとなく最初の方でやったsudoコマンドでの操作が諸悪の根源だったのではという思い込みを捨てきれず、また流れ的に上手くいってるようにしか思えなかったので、自分の直感を信じてアンインストールツールは使わず、手動でFinderから以下をMacのゴミ箱に捨てた。

/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
/Library/PreferencesPanes/JavaControlPanel.prefPane
~/Library/Application\ Support/Oracle/Java

で、ターミナルでJavaが入ってないことを確認して、今度は最新版のJREをあらためて以下からダウンロード&インストール。

https://www.java.com/ja/download/

したら、今度はあっさり入った。やはり、運はこちらに向いている。

そして大きな期待とともに、久しぶりの「startup.command」をダブルクリック。すると・・

おお〜〜!まじか!ついに出た、SQUAT!結局JDKを入れてなかったからか〜、意味わかんないけど!なんて思いながらガッツポーズ!・・をしてたんだけど、なんとこの「コンポーネントをロードしています」からビタイチ動かなくなってしまった。嘘でしょ・・?ここまで来て?と思ったけど、嘘ではない。全然動かない。

なんだよ〜、JDKを入れたから解決したんだと思ってたのに、これで終わりじゃないなんて。ここで本当にマジで切れた。最後までつながっていた緊張の糸、集中力、淡い期待が。つまり諦めた。

技術評論社に問い合わせ

その後も一応、数少ないヒントの「コンポーネントをロードしています」とかいう文言でググってはみるものの、関係ありそうなものはまったく出てこない。「一旦全部アンインストールして再インストールして、マシンを再起動しろ。よくわからないがそれで直ることもある」みたいな責任感が崩壊したような情報しかない。*5

そしてもうこうなったら、技術評論社に問い合わせるしかないだろと思った。何しろこれは古本ではなく、定価で買った本の付属ソフトウェアである。それが動かないってさすがに問題だろと思った。もちろん本の内容だけでも価格には十分見合うとは思うけど、それにしてもこの失望・絶望はなんとか訴えたい。というか、7年前のJREが同梱されてる時点で全然互換性とか使用可否の確認とかしてないとしか思えず、著者も編集者もこの現象に気づいてないだけでは?問い合わせれば普通に解決するのでは?とも思ったのだった。自分で解決できないなら、外部の専門家の力を借りるしかない。(←結局まだ諦めてない)

それで、以下の問い合わせページにアクセスして、

書籍内容に関するお問い合わせ|技術評論社

ISBNコードなんかも全部入力して、詳しいレポートを書き始めたんだけど、そこで初めてこのインストール作業をひたすらMacBook1台だけでやっていたことに気がついた。で、どうせ問い合わせるならMacBook Proの方でも試して、同じ現象を再現させてからの方が説得力あるよな・・と思って、本当は上述のようにメインマシンの方にJavaを入れるのは嫌だったけど(ましてやレポートを送るためだけに!)、まあ背に腹はかえられない。再現性の確認を優先して、上記の「結論」にある手順をMacBook Proの方でやってみたら、普通に動いた。なんでやねん。

こうなると、少なくともSQUAT自体は何も問題ないということになり、問い合わせもできなくなってしまった。というか、念のため2台めで確認しておいてよかった。危うく大変な恥をかくところだった。

ということで、どうせまた同じ目に遭うとは思いながらも、問題のMacBookの方で一旦JDKをアンインストールして、あらためてMacBook Proで動いたのと同じ最新版JREをインストールしてみることに。

JDKのアンインストール方法は以下。

https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html#uninstall

Uninstalling the JDK on macOS

To uninstall the JDK on macOS, you must have Administrator privileges.
 
Note: Do not attempt to uninstall Java by removing the Java tools from /usr/bin. This directory is part of the system software and any changes will be reset by Apple the next time that you perform an update of the OS.
 
1. Go to /Library/Java/JavaVirtualMachines.
2. Remove the directory where the JDK is installed by running the rm command as a root user or by using the sudo tool:

$ rm -rf jdk-1.8.jdk

完了後、ターミナルでJavaが入ってないことを確認して、あらためて最新版のJREをインストール!・・したら、あっさり完了。バージョンも確認できた。

$ java -version
java version "1.8.0_381"
Java(TM) SE Runtime Environment (build 1.8.0_381-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)

でもでもでも、どうせあれだろ、また「コンポーネントをロードしています」で止まるんだろ?お前はどうせ!と思いながら、ぶり返した淡い期待とともに「startup.command」をダブルクリック。

止まらなかった。見事に起動した。ええ、なんで〜?・・以前にできなかったときとの違いは、「一旦JDKをインストールして、アンインストールした」ぐらいなんだけど。まあ理由は全然わからないけど、とにかく2023年8月時点では、MacBook 2016とMacBook Pro 2020では『SQL書き方ドリル』の付属ソフト「SQUAT」が動くことがわかった。実際のドリルも何度か回答したけど、ちゃんと動いた。

著者さん、編集者さん、疑ってすみません。さすが現行流通本!JREは古いけど、それはそういうものなんですかね。

それにしても、元はと言えばフィヨルドブートキャンプのSQLの基礎プラクティスをやるために副読本として用意しただけだったのに、解決するまでにまるまる3日は費やしてしまった。その間、SQL自体の進捗はゼロ(笑)。こんなに大きなヤックシェイヴィングは初めてかも。というか、途中では本気で(それも何度も)解決は諦めていたわけだけど。逆転のきっかけは、「技評さんに問い合わせよう」と思ったことかな・・あれがなかったら2台目で検証しようとは思わなかったし。まあでも、その前後の当て所ない試行錯誤も大事だったか。実るあてのない試行錯誤が結局解決に向けて自分を押し出してくれている。

しかし何より、この良書のドリルを手書きのみならずPC用ソフトでも特訓できるというのがとにかく嬉しい。これで心おきなく、練習できる。

*1:Macの場合。Windowsなら「startup.bat」。

*2:紙の本なら仕方ないんだけど、電子版の付属物はダウンロード方式で配布しているのでアップデート不可ということはないだろうと思ってる。

*3:これがわかりやすかった。https://qiita.com/keomo/items/a814a36be95033c14207

*4:このときに参考にしたのがこの動画。最初は「全然関係ない情報だった・・」と思っていたが、結果的にかなり参考になった。 www.youtube.com

*5:時にはたしかにそれが真実なのだけど。