EddyStone(Mac)でURL送信しようとしたら18Byteまでしか送れなかったので、YOURLSも入れて短縮URLを実装した

# 0.はじめに

MacをEddyStone発信機にし、さらに同じMac上でYOURLSサービスも稼働させました。
社内LANでの利用を想定して構築しました。
つまづいたところとかいろいろありましたが、日本語のサイトがあまりなく解決に時間を要したので、手順等具体的に残します。

【環境】

|項目      | バージョン |
|:----------|:----------|
| 機種       | MacBook Pro |
| OS        | OS X EI Capitan  バージョン10.11.5 |
| Apache    | 2.4.18 |
| MySQL     | Ver 14.14 Distrib 5.7.13, for osx10.11 (x86_64) |
| PHP       | 5.5.34 |
| node.js   | v6.2.2 |
| YOURLS | v 1.7.1 |

# 1.EddyStoneを動かす

[たった2行!最も簡単にeddystoneでURLを送信する方法](http://qiita.com/kpkpkp/items/b8c22a6e8821e3b29530)を参考にさせていただき、記事どおりの手順で成功！(送信するURLはYahoo!にしています)
・・・全然具体的じゃねー :fearful: 
ここはつまずかなかったのでこんな感じで。


![EddyStone.png](https://qiita-image-store.s3.amazonaws.com/0/128324/6a54ee0c-6704-87fb-74a5-958cce50ee33.png)


# 2.MySQLにYOURLS用のDBを作る


    create database yourls;

# 3.YOURLSをダウンロード

[GitHub](https://github.com/YOURLS/YOURLS/releases)よりモジュールをダウンロードします。

![yourlsdownload.png](https://qiita-image-store.s3.amazonaws.com/0/128324/20c95918-577b-16c9-535c-2d1824c85e2b.png)

<font color="blue">「YOURLS-1.7.1」</font>という名前のフォルダでダウンロードできました。

# 4.YOURLSフォルダをapacheルートディレクトリ配下にコピーする

今回は、apacheルートディレクトリに<font color="blue">「yourls」</font>フォルダを作り、その配下に**YOURLS-1.7.1の中身**をコピーしました。

こんな感じのディレクトリ構成

ルートディレクトリ
　└**yourls**
　　├**admin**
　　├**css**
　　├**images**
　　├**includes**
　　├**js**
　　├**pages**
　　├**user**
　　├index.php
　　├readme.html
　　　　　　・
　　　　　　・

# 5.設定ファイルを作る

**user/sample-config.php**をコピーし、同じディレクトリに**config.php**という名前で貼り付け。

**config.php**を開き、以下の項目を修正する。

<font color="blue">**①**</font>2.で作った**yourls**データベースにアクセスできるユーザを指定
    
    /** MySQL database username */
    define( 'YOURLS_DB_USER', 'your db user name' );


<font color="blue">**②**</font>2.で作った**yourls**データベースにアクセスできるユーザのパスワードを指定 

    /** MySQL database password */
    define( 'YOURLS_DB_PASS', 'your db password' );

<font color="blue">**③**</font>2.で作ったデータベース名を指定

    /** The name of the database for YOURLS */
    define( 'YOURLS_DB_NAME', 'yourls' );

<font color="blue">**④**</font>ここでつまづきました。詳しくは次項で。

    /** MySQL hostname.
     ** If using a non standard port, specify it like 'hostname:port', eg. 'localhost:9999' or '127.0.0.1:666' */
    define( 'YOURLS_DB_HOST', 'localhost' );

localhostではなく

    define( 'YOURLS_DB_HOST', '127.0.0.1' );

にしました。

<font color="blue">**⑤**</font>YOURLSのURLを設定。今回はyoursフォルダ配下に作りましたので、以下。

    /** YOURLS installation URL -- all lowercase and with no trailing slash.
     ** If you define it to "http://sho.rt", don't use "http://www.sho.rt" in your browser (and vice-versa) */
    define( 'YOURLS_SITE', 'http://localhost/yourls' );

<font color="blue">**⑥**</font>cookieキーを[このページ](http://yourls.org/cookie)で表示されるものに設定。

    /** A random secret hash used to encrypt cookies. You don't have to remember it, make it long and complicated. Hint: copy from http://yourls.org/cookie **/
    define( 'YOURLS_COOKIEKEY', 'modify this text with something random' );




<font color="blue">**⑦**</font>管理ページにログインするユーザとパスワードを設定。

    /** Username(s) and password(s) allowed to access the site. Passwords either in plain text or as encrypted hashes
     ** YOURLS will auto encrypt plain text passwords in this file
     ** Read http://yourls.org/userpassword for more information */
    $yourls_user_passwords = array(
	'username' => 'password',
	// 'username2' => 'password2',
	// You can have one or more 'login'=>'password' lines
	);


他にも設定項目はありますが、必ず変更しないといけないのは以上。


# 6.YOURLSインストールページを表示

http://localhost/yourls/admin

あれ？
<img width="1025" alt="スクリーンショット 2016-06-30 14.30.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/3349c977-febf-63ca-793c-8d1282c57f24.png">

コマンドラインから「yourls」データベースに接続できてるのになんで？

必死に英語ページを~~翻訳~~解読し、試しに以下のphpを読み込ませてみた。

```php:test.php
$mysqli = new mysqli("localhost", "[username]", "[password]", "yourls", 3306);
echo $mysqli->connect_errno;
```

<img width="128" alt="スクリーンショット 2016-06-30 14.37.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/2cc31360-f043-3457-8d67-95d05e1cf757.png">

ちーーーん。
なんでエラーになーかや。

同じエラーをWindowsで経験されている方がいらっしゃった。どうもlocalhostがIPv6で解釈されているよう。

ふむ。ダメもとでやってみよう。

```php:test.php
$mysqli = new mysqli("127.0.0.1", "[username]", "[password]", "yourls", 3306);
echo $mysqli->connect_errno;
```

<img width="75" alt="スクリーンショット 2016-06-30 14.42.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/6dde84d3-6fbb-7f47-3212-2d15bf96dbc5.png">


まじかーーーーーー∑(ﾟДﾟ)

では早速**config.php**を

    define( 'YOURLS_DB_HOST', '127.0.0.1' );

にすると．．．


<img width="1009" alt="スクリーンショット 2016-06-30 14.46.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/64a5c022-0e44-91ba-0d9a-1a2447850021.png">


でーーーーたーーーーーー！！


# 7.YOURLSインストール

「Install YOURLS」をクリックするとみんな経験している

<img width="351" alt="スクリーンショット 2016-06-30 15.09.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/2f1abc7b-5142-afba-3e10-5ff285243e25.png">

これ。DBはうまく作れていそうなのでとりあえず後回し。

今回は社内向けに構築するため、ログインなんか手間でしょうがないので、ログインしてない一般ユーザ向けのトップページ**sample-public-front-page.txt**を使う。
そのままコピーして**index.php**にリネームすれば．．．


<img width="1028" alt="スクリーンショット 2016-06-30 17.12.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/04c45c0f-9ec7-4df3-c7e7-3bb959c40faf.png">

いった！！ログイン不要で誰でも作れる！


# 8.動作確認　．．．数日ハマる

試しにYahoo!の短縮URLを作ったけど

<img width="274" alt="スクリーンショット 2016-07-03 20.42.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/1ddde3b4-ebc8-0eb0-869e-4ba37c92714d.png">

<img width="403" alt="スクリーンショット 2016-07-03 20.44.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/51380c94-f0eb-e431-9d71-1d4b0eb87345.png">

ですよねー。世の中そんなに甘くはない。
次項に自分が確認した項目を挙げます。

# 9.Not Foundの場合の確認項目

<font color="blue">**①**</font>まず原因切り分けのため、URLを以下にしてアクセスしてみる。

    http://localhost/yourls/yourls-go.php?id=4

表示された。ということはリダイレクトがうまくいっていない模様。

<font color="blue">**②**</font>7項で.htaccessに関する警告が出ていたのを思いだし、そら動かねーわということで、**yourls/**に作成。

```text:.htaccess
# BEGIN YOURLS
<IfModule mod_rewrite.co>
RewriteEngine On
RewriteBase /yourls/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /yourls/yourls-loader.php [L]
# RewriteRule ^(.*)$ http://google.com [L]
</IfModule>
# END YOURLS
```

<font color="blue">**③**</font>まだ動かない。
.htaccess読み込まれてる？ということでhttpd.confに以下を追記しapache再起動。

```text:httpd.conf
<Directory "/Library/WebServer/Documents/yourls“>
    Options FollowSymLinks Multiviews
    MultiviewsMatch Any
    AllowOverride All
    Require all granted
</Directory>
```

<font color="blue">**④**</font>まだ動かない。
.htaccessにあるmod_rewrite読み込んでる？ということでhttpd.confの以下をコメント解除。

```text:httpd.conf
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
```

<font color="blue">**⑤**</font>動いた。。


# 10.日本語化

[ここ](https://github.com/luixxiul/YOURLS-ja_JP)に具体的に書いてあるのでそのとおりにやる。


# 11.短縮URLをランダムにする

連番はダサいのでランダム文字にする。
yourls/user/plugins/にプラグイン用のフォルダを作成する。

    mkdir random-keywords

[Github](https://github.com/YOURLS/random-keywords.git)から**plugin.php**をダウンロードし、作成したフォルダに配置する。
管理ページのプラグインに追加されるので、「有効にする」。

![yourlsプラグイン.png](https://qiita-image-store.s3.amazonaws.com/0/128324/cf1455b7-e679-7e78-ba00-37575c99f2be.png)

ついでにランダム文字数を変更する。初期値は５文字なので３文字に変更。

```php:plugin.php
$ozh_random_keyword['length'] = 3;
```

できた！
<img width="998" alt="スクリーンショット 2016-07-05 11.11.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/128324/e1458243-2382-627e-02de-10bed350cdb2.png">

# 12.さいごに

社内向けということで、ログイン不要にしたりランダム文字数を３にしたりサブディレクトリに構築したりでテキトーな感じになってます。

目的は<font color="blue">**EddyStoneでURLを送信する**</font>ことなので、
・「短縮URL」にしようとしているのにサブディレクトリにしてしまって後悔。直そうと思います。
・社内DNSにこのMacの定義を入れたり、さらに短縮URL化しなくては。