2021年11月28日日曜日

XAMPP for macOSのインストールと使用感

以前の続きです。メインで使っていた自作PC新しい自作PCに交換したため、以前に構築していたLAN専用Webサーバ(Apache2phpMySQL)が使えなくなってしまいました。そこで、より簡単にこれらの環境を構築するためにXAMPPを利用することにしました。

XAMPPは、Apache Friendsによって開発・メンテナンスされているツールで、Apache2とMariaDB、PHP、Perlを一括して導入・管理することができるスグレモノです。WindowsmacOSLinuxに対応しており、Webサイトの動作確認程度なら必要十分といった感じで申し分ありません。特に、過去にこれらのシステムを別々に導入し、連携させることに苦労させられた人ならこの価値を理解できることと思います。

というわけで、XAMPPの使用感をテストするべくサブマシーンとして使っているiMac(21.5-inch,2017)へのインストール作業をはじめました。XAMPPのトップページにダウンロードのリンクがあるので、そこからmacOS用「xampp-osx-8.x.x-x-vm.dmg(現時点での最新版は8.0.13-0でした)」をダウンロードします。このdmgディスクイメージファイルをダブルクリックでマウントすると、XAMPPのアプリアイコンが現れてアプリケーションフォルダへドラッグ&ドロップするよう促されるので指示に従います。インストール作業はこれで終了です。

アプリケーションフォルダ内のXAMPPアプリケーションをダブルクリックで起動します。macOS(Monterey)の場合は初回の起動時にインターネットからダウンロードしたプログラムだけど開いてよいかと聞かれるので、「開く」を選択します。すると、画面中央にXAMPPの操作画面が表示されるので、「Start」ボタンをクリックします。

暫く待つとStatus:が緑色になり、IP Address:にアドレスが表示されます。「Go to Application」ボタンを押すと、デフォルトで設定されているブラウザーが開いて無事にWebサーバが立ち上がったことが確認できました。次に「Network」タグを開いて「localhost:8080」と「localhost:8443」を「Enable」ボタンを押して有効にします。これで、Webブラウザーから「localhost:8080」「localhost:8443」にアクセスすると、それぞれ「http://localhost:8080/dashboard/」と「https://localhost:8443/dashboard/」でWebサーバのトップページが表示されるようになります。
#2つの違いはhttpとhttpsの違いです。

続いて「Volumes」タグを開いて見るとhtmlファイルなどの保存場所は「/opt/lampp」以下になっているようで、「Mount」ボタンを押すとデスクトップに「lampp」としてマウントされます。中を見てみると、「htdocs/dashboard」フォルダ内にあるものがデフォルトで表示されるページのようです。(Webブラウザーがはじめに参照している場所も「〈IP Address〉/dashboard」になっています)これについては、「etc」フォルダ内のいずれかのconfファイルを変更すれば、任意の場所に設定することができそうです。confファイルをいじっていない状態で見られることが確認できたページは以下の通りです。

  • http://〈IP Address〉/dashboard/jp/ … トップページが部分的に日本語になる。
  • http://〈IP Address〉/dashboard/phpinfo.php … phpinfoのページが表示される。
    ※上の2つは「http://〈IP Address〉」を「http://localhost:8080/」や「https://localhost8443/」にしても表示されます。
  • http://localhost:8080/phpmyadmin/ … phpの設定画面が表示される。
  • https://localhost8443/phpmyadmin/ … 同上

設定の仕方などについては、「FAQs」のページにありそうなので英語と格闘しながら使い方を学んでいきたいと思います。使用感としては、万人向けとは言えないものの、同様の環境を自力で構築してきた経験があれば、簡単に移行できるのではないかと感じました。
#今回は、XAMPPの公式サイト以外にFree StyleというWebサイトの「Mac用のXAMPPをインストール。ローカル開発環境の準備と簡単な使い方」も参考にしました。

2021年11月25日木曜日

Bitnamiで作られた蔵書管理システムに挑む

5年ほど前のこと。勤務していた学校で、学校図書館の蔵書管理システムを、当時から数年前に保護者だった方が無償で作ってくださったものを使っていました。このシステムについては、メンテナンスができる人が他におらず、その保護者だったの方にお願いをする以外にないのこと。システムの作成からかなりの年数が経っており、保護者だった方との連絡もしばらくしていないということでした。

ざっくりと状況を確認してみると、パソコン(スタンドアローン)で蔵書や利用者、貸出・返却の管理をするためのシステムで、ベースになっているものがありそうでした。このシステムに利用者番号をバーコードに書き出す機能があって、それをプリントアウトして切り貼りしてクラスに分けて利用しているとか。これはあまりにも非効率的です。利用者情報をCSVで書き出せる機能もあるというから、それを使ってExcelでクラス分けをして、Wordでバーコード化して差し込み印刷したら良いのではと提案してみました。これは、結局私がやることになりましたが、この程度なら難しいことはありません。
#時間はかかるけど。

問題は、利用者番号のバーコード化がどのコードで行われているかを解析しないといけなかったこと。これは、USB接続のバーコードリーダーを使って蔵書管理システムから出てきたバーコードを別のパソコンで読み取って解析しました。すると、利用者番号は「コード39」でバーコード化されていることがわかりました。そこで、CSVで書き出したデータをExcelで開き、利用者番号をアスタリスク「*」で囲むようにした列「="*"&(利用者番号のセル)&"*"」を追加して、Excelの書類として保存しました。これを、Wordの差し込み印刷設定の中にある「バーコード挿入」機能を使ってバーコードに変換します。これはとても便利な機能だし、使い方も簡単です。

これでバーコードのクラス分けが簡単にできるようなりました。喜びも束の間で問題が発生。この蔵書管理システム自体が突然動かなくなってしまったのです。

この蔵書管理システムは、Windows上でWebアプリケーションのような形で動いているらしいことはわかっていましたが、詳しいことは全くわかりませんでした。とにかく、このシステムの正体を探るべくパソコン内を調査開始。すると、「Ruby on Rails」と「MySQL」を使っていることがわかってきました。この組み合わせで簡単に動かすことができるものを調べていくと「Bitnami」のサービスを使っているのだということがわかりました。

ここまでわかったところで、つてを辿ってこのシステムを作成した卒業生の保護者と連絡を取り、いろいろとヒントを貰いました。最終的には、再インストールしか復旧の方法はないかもしれないというところまで話が進みましたが、諦めるのはまだ早いと思いさらに調査を続けました。

挑むこと数日間。問題は、「rubystackMySQL」が動いていないことだったというところまで突き止めることができました。Windowsのサービスのリストを見ると「rubystackMySQL」が「自動」的に起動することになっているのに、起動即終了という状態になってしまっていました。さて、これを動かすにはどうしたら良いか。さらに調べていくとイベントビューアーのWindowsログに以下のようなエラーが残されていました。
#「日付」と「時刻」は伏せました。

エラー     (日付) (時刻)     MySQL   100     なし
        Binlog has bad magic number;  It's not a binary log file that can be used by this version of MySQL
エラー     (日付) (時刻)     MySQL   100     なし
        Can't init tc log
エラー     (日付) (時刻)     MySQL   100     なし
        Aborting
情報      (日付) (時刻)     MySQL   100     なし
        C:\Program Files (x86)\BitNami RubyStack\mysql\bin\mysqld.exe: Shutdown complete

このパターンは、「【MySQL】Binlog has bad magic number のエラーで起動しない」と同じではないかと思い、上記Webサイトを参考にして、以下のファイルを削除しました。

  • C:\Program Files(x86)\BitNami RubyStack\mysql\data\mysql-bin.000547(止まった時の最後のログファイル)
  • C:\Program Files(x86)\BitNami RubyStack\mysql\data\mysql-bin.index(止まった時と同時に更新が止まっていた)

これで再起動すると、蔵書管理システムが正常な時と同じように表示するようになりました。いくつか動作確認をして、学校図書館の司書さんにもいじってもらいましたが全く問題なし。無事に復旧させることができたという話でした。学校図書館に限らずこういうシステムを組むときにはメンテナンス性を考えるのはとても重要なことだと思います。今はGIGAの関係でGoogleが提供するシステムを利用することが推奨されていますが、自由度という面では課題が残ります。今後のスタンダードが何になるかわからないところですが、個人的にはXAMPPのようなものが普及していくことを期待しています。
PukiWikiとか、NetCommonsXOOPS…)とか、いろいろあるけどね。