Mac(Sierra)のAMP環境でデータベース接続エラー

Mac(Sierra)にApache, MySQL, PHP環境を作ってWordPress動かしたら「データベース接続エラー」となった。

php.ini へのソケットの設定が必要だったもよう。

pdo_mysql.default_socket="/tmp/mysql.sock"

mysql.default_socket = "/tmp/mysql.sock"

mysqli.default_socket = "/tmp/mysql.sock"

それぞれの値は、初期は空だった。
なので、pdo、mysql、mysqli、共に同じソケットファイルを指定したら、エラーなく繋がるようになった。

Sierraは初期でMySQLはインストールされていないので、当然かな。
というより、こういう設定しないといけないっていうのを今回初めて知った。

UMLってどのくらい必要?

PHPを書いているけど、「クラス設計」というものをやったことがなかった。
いつもいきなりクラスを書き始める。
でも行き当たりばったりなので、自分的に複雑なシステムになると、無駄なものを作ってしまってやり直しとか、時間を浪費してしまうし安定性に欠けるし、良いことは無い。

そこをなんとか改善したい。そうだ、設計をちゃんとやるか!

と思ってクラス設計とその周辺について調べていたら、UML (Unified Modeling Language)という概念というか標準があることを知った。
それで、エンジニアの友達に「UMLって使ってます??」って何気に聞いてみたら「昔、書いたことはあるけどよく知らない」という答えが返ってくるし、そもそも今まで僕の周辺で話題になったことがなかったら、知らなくても良いのかなー・・と思ったりもした。

で、とりあえず本を買って読んでみた。

かんたんUML入門
かんたん UML入門[改訂2版]
http://gihyo.jp/book/2017/978-4-7741-9039-6

まず、この本のKindle版をゲットしたけど、Kindleに最適化されているので、とても読みやすい。

いろんな図の解説が詳しくされているのだけど、正直、途中で疲れた。(笑)
UMLに関してネットで調べてると、クラス図シーケンス図ぐらい覚えてれば良い、みたいなことを言っている人もいるようなので、真面目に取り組まないほうが良さそう。実際、読んでるだけでは理解できないので、自分の案件に直接関係する部分だけ、実際のクラスから逆に図を起こしてみると良いのかもしれない。

僕が見た感じだと、ステートマシン図なんかも、JavaScriptで何か作るときに書いてみると分かりやすくなるんじゃないかなーと、ふと思ったりした。

よく考えると、今まで作ってきたシステムの場合、画面図(遷移図)ぐらいは作っていたり、Webの遷移ってだいたい決まっていることが多いので、とくに図を書かなくてもなんとかなった部分はある。
管理画面などでも、ほとんど登録・編集・削除の繰り返しだったりするので、特殊な状態が沢山存在するわけでもないし。
だからどっちかっていうと、設計するというより「クラスを図示化して置いておく」というような保守目的で書くほうがメリットがあるんじゃないかなと思った。

というわけで、僕の場合は古いコードで書いていたシステムを近々、PHP7対応させようと思っているので、そのタイミングでクラス図を書いてみようかなと思っているところ。

iPadで Prompt 2 を使うとき 秘密鍵ファイルはiTunesで転送する

prompt

自分的にどれほど使うシーンがあるか疑問な面もあるけど、なんでも勉強だと思って Panic社のSSHクライアント Prompt 2 を iPad に入れてみた。1,800円のアプリ。

接続は最初の画面で接続情報を入力すればいい。
僕はサーバーに公開鍵を設定しているので秘密鍵ファイル(id_rsa)を指定しようとしたが、どうやったら指定できるのか最初、分からなかった。

・・・そもそもiPadのファイル管理がどうなってるかもよく分からないまま、Androidの感覚でファイルマネージャーのようなアプリを入れてみたわけだが、iOSの場合、アプリ専用のフォルダを作っちゃうだけで共有できなかった。アプリ間でファイル共有しようとすれば、例えばDropboxのようにAppleが許可している限られたアプリを使うしかないことが分った。
しかし、この Prompt 2 で秘密鍵ファイルをその方法で共有することはできなかった。

そして調べた。なんと iTunes を使うらしい。そうなんかー・・

iPadをMacに繋いで、iTunes > デバイスアイコン(自分のiPad) > ファイル共有
で App一覧から Prompt 2 を選んで、右のエリアに秘密鍵ファイル(id_rsa)をMacからドラッグしてきて落とす。
そうすると、上記のパスワードの右側にある鍵アイコンをクリックした時に、id_rsaファイルが表示されるので、それを選択すればOKと。そうなんかー・・

これでうまく接続できた。あとはMacからターミナルを使うのと同様。
とりあえずまだ実戦で使ってないので、今後なにか面白いことがあったらブログに書くかもしれない。

まったく余談だけど、

Bitbucket をアプリで見るために CodeBucket Pro という有料アプリ(240円)も入れてみたけど、こちらはおそらくpush, pullとかはできないで、単にBitbucket上の状況を管理できるツールのようだったので、僕の場合、特に要らなかったかな?と思っているところ。Bitbucketのサイトにブラウザからログインして使ってればそれで良さそうな気がした。(どうなんだろ?)

新年に向けての開発環境整備 (^^)

sourcetree

迎え撃つ新年は真のエンジニアになるために (^^) 年末年始は開発環境・ツールの見直しと、管理体制の強化 (^^) を実施しつつあるところ。
今日は12月23日で明日はクリスマスイブなわけだけど・・まだ年賀状も書いていないわけだけど・・
それで週末はいつも体を動かすためにお出かけしてカフェ巡りとか、デバイスの物色とか、しているわけだけど、それらも今日はお休みにして、環境整備にいそしんでおります。

だいたいの方針

(1) 開発データのクラウド管理(どこでもコード書けるように)
(2) リポジトリでの管理(上記同様とGitに馴れるため)
(3) 実行環境はVPS(実行環境の一元化)
(4) メンテしなくていいもののメンテフリー化

なんというか、(Twitterとか)周りのエンジニアさん(といっても約2、3名)と話を合わせるためにも(笑)自分も似た環境で生活している必要がある。
例えば「FTPなんかやめろ」と言われた。別にFTPはやってないけどFTPソフトは使ってるよ、FTPSまたはSFTPで転送してる。“Transmit” はとても便利だよ、昔から使ってるけど。だけどSFTPやろうとすると SSH接続 + 公開鍵 ぐらいは設定しないといけないし、それすら以前は出来てなかった。今はそれが出来るようになったから少しは進歩してる。

やはりどこでも作業できるようにしたいというのと、状況によって誰かに手伝ってもらうということも想定していきたいから、上記のような方針になった。

というわけで具体的なアンサー

(1)(2) Bitbucket および One Drive
(3) さくらVPS (CentOS6)
(4) WordPress.com

(2) に関しては、WordPressの「テーマ」も管理していこうと思っている。
自分のサイトはどうでもいいしメンテフリーの方向なので、クライアントさんのサイトでメンテが多いものから順にリポジトリ化していく。(デプロイまで自動化すべきかは様子見)
今までテーマだけを集めたことはなかったけど、IDEから選ぶ時とか、共通に使いたいコードとか参照するのは不便だった。なので同じディレクトリにテーマを並べるようにしたらきっと便利になるに違いない。それで基本、プラグインはいじらない。

(4) に関しては、自分のサイトも含めて、とりあえず発信出来たらいいレベルのものはクラウドサービスに移行させてメンテフリーにしておきたいなということ(ブログ幾つか持ってるので移行には少し時間かかりそう)

ちなみにコーディング環境は、NetBeansVisual Studio Code

これで新年は落ち着いて開発に傾倒していきたいなと。

つまずきがちなSSL対応

サイトをSSL化するのはいいけど、開発環境をSSL対応するのに結構、手間を食う。
というか、つまずくポイントが多い気がする。
最初、全然分からないから調べまくって、情報つなぎ合わせて理解しようとするけど、いろんな情報があるから泣きそうになった。(笑)

<自分的につまずいたポイント>
(一応、CentOS6 + Apache + バーチャルホスト使う)

(1) iptables

-A INPUT -p tcp --dport 443 -j ACCEPT

INPUTの許可としてはこれだけで良いと思うけど・・(OUTPUTは全部許可してる)
個人的には、これでポートスキャンして443が開いてなくてあたふたしたのだけど、実はそれは httpd.conf の記述ミスだったという・・(汗;

(2) httpd.conf

Listen 443

上記の個人的ミスは、Listen 443 を書いてなかったこと。Listen 80 だけしか書いてなかったのでこれも書くこと。

LoadModule ssl_module modules/mod_ssl.so

Include conf.d/vhosts.conf

モジュール組み込んでなかったらダメよね。
あと、バーチャルホストの .conf を別に書いてたらそれもね。

NameVirtualHost *:443

これもね。80だけじゃなくて443のも書く。httpd.conf はバラバラといろんな場所に書くとこある。

(3) vhosts.conf
バーチャルホストの .conf
別にファイル名は何でもいいけど、僕はこれにして conf.d の下に入れた。

<VirtualHost *:443>
  ・・・・・ (他の記述) ・・・・・
  SSLEngine on
  SSLCertificateFile /etc/httpd/conf/ssl.crt/sitename.crt
  SSLCertificateKeyFile /etc/httpd/conf/ssl.key/sitename.key
  ・・・・・ (他の記述) ・・・・・
</VirtualHost>

VirtualHost *:443 の記述と、中に証明書とキーのファイルパスを書くこと。

設定関係としてはこんなところか・・・

で、で、で、SSL証明書を準備するあたりが、最初ほんとに分からなくて、なんのこっちゃーって思ってたわけだけど、いわゆる「オレオレ証明書」というやつの作り方を調べて、ようやく出来たという次第。

とりあえず、この方の記事↓↓↓が新し目でスッキリとまとまっているもよう・・・
http://www.server-memo.net/server-setting/apache/apache-mod_ssl-sha2.html
ありがたし!

ちなみに、Chromeでアクセスして無理やり見ても、保持してくれないから(?)ページを見るたびに無理やり見ないといけない(笑)のが面倒くさい。
ゆえに僕は、Safariで1回無理やり見ると、キーチェーン(だったっけ?)に保存するか聞いてくるからそこで保存すると、とりあえず第三者認証されてない証明書として理解されるから、あとは普通にページを見て行ける。なのでSSLページをチェックするときはSafariで見てる。

ざっと書いたら以上だけど、ここまで出来るようになるのは結構、時間かかった。今、達成感みなぎりながらコーヒー飲んでる。