Imamoto Diary

IT業界にひっそり生息している可愛い女の子です。

ng-japanに参加してきました!

3/21(土)に開催されたAngularJSのカンファレンス、ng-japanに参加してきました!

ngjapan.org

AngularJSの中の人3名を招いてのセッションを含め、とてつもなく濃い内容で非常に楽しかったです。

間違いなくAngularJS初級者の私ですが、AngularJSの未来にワクワクしましたし、今後も使われ続けていくだろうという安心感を覚えました。

ただメインセッションに集中しすぎて尋常じゃなく疲れてしまったので、途中退出したのが心残りでした。。

多分いろいろ間違ってると思いますが、セッション中に色々メモを取ったので備忘として貼り付けます。

続きを読む

ホスト名が原因でMacのMySQL起動に失敗した話と、その後の対応について

今日あったことをメモ。

MacBookAirにHomebrewで入れたMySQLが、起動済みだったはずなのに何故か落ちていました。

$ mysql.server status
 ERROR! MySQL is not running

仕方ないので再度起動をしようとしましたが、何故か起動できず。。

$ mysql.server start
Starting MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/hogehogenoair.pid).

訳が分からずpsコマンドで一応確認してみると、以下のような結果に。

$ ps aux | grep mysql
imamoto         2849   0.0  0.0  2432784    604 s002  S+   12:48AM   0:00.00 grep mysql
imamoto         2819   0.0 10.9  3118408 457736 s002  S    12:43AM   0:00.69 /usr/local/Cellar/mysql/5.6.22/bin/mysqld <以下略>
imamoto         2735   0.0  0.0  2444628   1116 s002  S    12:43AM   0:00.02 /bin/sh /usr/local/Cellar/mysql/5.6.22/bin/mysqld_safe <以下略>

※実行結果はイメージです

なんかいる!!!mysql起動してる!!

その後、一旦実行中のプロセスをkillして再びmysql.server startを試みるも先ほどと同じエラーでやはり失敗。

続いて、起動時のエラーメッセージに含まれていたpidファイル(/usr/local/var/mysql/hogehogenoair.pid)が存在するのか確認してみます。

$ ls -la /usr/local/var/mysql
-rw-r-----   1 hogehoge  admin     92775  3  3 10:26 hogehogenoair.err
-rw-r-----   1 hogehoge  admin     76509  3  4 00:43 hogehoge-no-MacBook-Air.local.err
-rw-rw----   1 hogehoge  admin         5  3  4 00:43 hogehoge-no-MacBook-Air.local.pid
<以下略>

すると、探していたpidファイルの代わりにhogehoge-no-MacBook-Air.local.pidが見つかりました。

pid拡張子の前についているhogehoge-no-MacBook-Air.localとは、普段自分のmacで使われているホスト名です。

ここで念のためホスト名を確認してみます。

$ uname -n
hogehogenoair

ホ、ホスト名が変わってる。。。

これを見て、おそらく原因はホスト名が変わってしまったことにあるのではないかと思い色々と調べてみると、こんな記事を見つけました。

Macのホスト名の設定

この記事によると、macでは接続するネットワークによってホスト名が変更されてしまうことがあるとのこと。

今日は普段と違って私物のスマホテザリングを使っていたので、ホスト名が変わってしまっていたようです。

ホスト名を固定にしたかったので、記事を参考に/etc/hostconfigに以下の一行を加えてmacを再起動しました。

HOSTNAME=hogehoge-no-MacBook-Air.local

これでテザリング中でもホスト名は固定されたので、mysql.server startで無事MySQLが起動できました。

ただ、、他にも良い方法がありそうな香りがプンプンします。

知っている方がいたら教えてください。。

Laravelのartisanでサーバを立ち上げた時にプライベートIPでアクセスできない問題と、その対処法

以前ハマったことを備忘を兼ねてメモです。

LaravelでPHPのビルトインサーバを立ち上げる

サーバサイドでLaravelを使っている場合、ローカルでWebサーバの設定をしなくても以下のコマンドでPHPのビルトインサーバを立ち上げてページを確認することができます。

$ php artisan serve

デフォルトだとlocalhost:8000でサーバが起動しますが、オプションを付けるとポートを変更することもできます。

以下のコマンドで起動すればポート8080を使用できます。

$ php artisan serve --port 8080

プライベートIPでのアクセスができない問題

基本はlocalhost:8000へのアクセスで一切問題ないのですが、自分のローカル環境の状態を他のデバイスから見たくなったりすることもあります。

例えば同じ現場での複数人の作業時や、スマホでの表示確認の場合などです。

そんな時はプライベートIP(例えば192.168.0.3:8000)へアクセスしたいのですが、デフォルトの設定で起動するとホスト名がlocalhostで固定されてしまうのでプライベートIPでアクセスすることができません。

プライベートIPでアクセスする方法

PHPビルトインウェブサーバーのドキュメントに以下の記述があります。

ウェブサーバーを、任意のインターフェイスからポート 8000 でアクセスできるようにするには、このようにします。

$ php -S 0.0.0.0:8000

これにならって、artisanコマンドのオプションでホスト名を以下のように0.0.0.0にしてあげると、プライベートIPでアクセスが可能な状態でサーバが起動します。

$ php artisan serve --host 0.0.0.0

この方法だと任意のインターフェイスからアクセス可能にしてくれるので、プライベートIPはもちろん、localhost:8000からでもアクセスすることができます。

これで無事解決できました。

LaravelのBladeテンプレートエンジンとAngularJSにおける二重の波括弧の競合と、その解決方法

サーバ側でLaravelフレームワーク、クライアント側でAngularJSを使う際に少しハマったのでメモです。

クライアント側でAngularJSを使用した時に以下のようにHTML内に二重波括弧を書くと
AngularJSのテンプレートエンジン機能によって囲まれた変数の値に置き換えてくれます。
(この表記法をエクスプレッションといいます)

<!-- {{ name }}の部分が置き換わります -->
<div ng-controller="NameController">
    <p class="name">私の名前は{{ name }}です。</p>
</div>

しかしLaravelのBladeテンプレートエンジンでも全く同じ記法でViewに渡された変数を参照して書き出すことになっている為、
レスポンスを返す前にBladeの記法として解釈&変換をしてしまいます。
なのでBladeを適用させるファイル(*.blade.php)にこのHTMLを記載すると「nameなんて変数知らないからエラーやで」とサーバ側から怒られてしまいます。

そんな時は以下のようにエクスプレッションの直前に"@"を付け加えれば良いみたいです。

<!-- name.blade.php -->
<div ng-controller="NameController">
    <p class="name">私の名前は@{{ name }}です。</p>
</div>

この書き方をすれば、LaravelはViewに渡された変数の値と置き換える代わりに"@"を消してレスポンスを返してくれます。