かばちんのエンジニアブログ

日々の経験の中で培った内容を備忘録も兼ねて記録していくブログです。少しでも誰かの役に立つために頑張って続けていけたらなと思います。

CoreCLRでNugetからライブラリを取り込む方法

CoreCLRを使うことでLinux上で.NETプロジェクトを動かすことができるようになりました。
空のプロジェクトからシステムを組んでいくにあたりどうしてもNugetからライブラリが欲しかったりすると思います。


もしくは、Windowsで作っていたプロジェクトを移植するにあたりNugetのライブラリを既に使っていた場合も同様に、
Nuget経由でのライブラリ取得をしたい場合が出てくると思います。


CoreCLRの情報がまだまだ少ないので、自分で試してみたNuget経由でのライブラリ取得方法をご紹介したいと思います。
紹介と言っても、やっているので設定ファイルを変更してコマンドをひとつ叩くだけですが。。

前提条件

・CoreCLRがどんなものか知っている
dotnet new や dotnet restore コマンドでプロジェクトを作成できることを知っている


設定ファイルの変更

CoreCLRの設定ファイルといえば project.json ファイルです。
このファイルはCoreCLRプロジェクトに関わる設定が書かれています。


CoreCLRバージョンの指定や、依存関係、フレームワークなどを指定できます。
今回は試しに Newtonsoft.JSON の 9.0.1 をNugetで取得する記述を追加してみます。

変更前

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    }
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

変更後

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.NETCore.App": {
      "type": "platform",
      "version": "1.0.0-rc2-3002702"
    },
    "Newtonsoft.Json": "9.0.1"  // この行を追加
  },
  "frameworks": {
    "netcoreapp1.0": {
      "imports": "dnxcore50"
    }
  }
}

Nugetからの取得

実際にライブラリを取得するには、プロジェクト作成時にも行ったであろう
dotnet restore コマンドを再度実行します。
すると下記のような感じで取り込まれます。

$ dotnet restore
log  : Restoring packages for /root/project.json...
info :   GET https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethostresolver/index.json
info :   GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json
info :   OK https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethostresolver/index.json 673ms
info :   OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/index.json 678ms  // Newtonsoft
info :   GET https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethost/index.json
info :   GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/9.0.1/newtonsoft.json.9.0.1.nupkg
info :   OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/9.0.1/newtonsoft.json.9.0.1.nupkg 172ms
info :   OK https://api.nuget.org/v3-flatcontainer/microsoft.netcore.dotnethost/index.json 664ms
log  : Installing Newtonsoft.Json 9.0.1.  // Newtonsoft
info : Committing restore...
log  : Writing lock file to disk. Path: /root/project.lock.json
log  : /root/project.json
log  : Restore completed in 2970ms.

NuGet Config files used:
    /root/.nuget/NuGet/NuGet.Config

Feeds used:
    https://api.nuget.org/v3/index.json

Installed:
    1 package(s) to /root/project.json

最後に

まだ実際に使えるかどうかまでは試していませんが、ひとまず取り込むことはできました。
これがうまく使えるようになるといろいろなライブラリが自由に使えるようになるので、
スムーズな開発を行うことができるようになりそうです。


※追記
実際に動くかどうか、簡単ですが試してみました。
kabatin.hateblo.jp

UnityでRedisを使いたい場合に便利なTeamDev.Redis

Unity to Redis

果たして需要があるのか分かりませんが、、、
UnityからRedisに対してアクセスする方法を残したいと思います。


今回僕がUnityからRedisに接続するために利用したライブラリはTeamDev.Redisというものです。
TeamDev C# Redis Client - Home


基本的にはnugetで利用されるものだとは思うのですが、Unityで使うにはDLLさえ手に入ればいいので
ひとまずこのnupkgファイルをダウンロードして、nupkgファイルはただのzipファイルなので拡張子を書き換えて
強制的に解凍して、中に入っているTeamDev.Redis.dllを抜き出しました。


解凍して出来たファイル群の中にlibフォルダがあり、その中にnet20とnet40というフォルダがあります。
Unityは.NET3.5ベースで作られているので、net20フォルダに入っているTeamDev.Redis.dllを利用します。


Unityでの使い方

このDLLをどのように使うかですが、とても簡単です。
UnityのAssetsフォルダ配下にどこでもいいのでとりあえずDLLファイルを入れます。


そしたら下記のようなスクリプトを作ってカメラにでもアタッチすれば動いてくれます。
(もちろんRedisサーバが別に存在している前提です)

using UnityEngine;
using TeamDev.Redis;

public class RedisTest : MonoBehaviour
{
	void Start ()
	{
		var redis = new RedisDataAccessProvider ();

		redis.Configuration.Host = "192.168.***.***";
		redis.Configuration.Port = 6379;
		redis.Connect ();

		redis.SendCommand (RedisCommand.SET, "key", "value");
		redis.WaitComplete ();

		redis.SendCommand (RedisCommand.GET, "key");
		var result = redis.ReadString ();
		Debug.Log("result = " + result);
	}
}


Redisサーバの指定やポートの指定などは、Configurationクラスが保持されているようです。


Redisへのアクセスは基本的にはSendCommandメソッドで、
なんのコマンドを実行するのかをEnumで指定し、
そのあとに文字列パラメータを指定します。


値をSETする時はなんとなく分かりやすくて使いやすいんですが、
値をGETする時はSendCommandでGETを送ったあと、ReadString()メソッドで値を取得するという手順のようです。


なんとなくしっくりこないですね。


LISTの扱い方

SendCommand以外にもアクセスする方法はいくつか用意されています。
例えばRedisといえばLIST。


LISTをキーを指定して初期化する

redis.List["key"].Clear();


LISTにキーを指定して追加する

redis.List["key"].Append("value");


LISTのキーを指定して件数を取得する

var count = redis.List["key"].Count;


LISTからキーを指定して1要素を取得する

var value = redis.List["key"].LeftPop();


LISTをキーを指定して全要素を取得する

var values = redis.List["key"].Values;

HASHの扱い方

もちろんHASHだって使えます。


HASHにハッシュキーを指定して、キーと値をセットする

redis.Hash["hashKey"].Set("key", "value");


HASHにキーと値をセットする(すでにキーが存在する場合)

redis.Hash["hashKey"]["key"] = "value";


HASHからハッシュキーとキーを指定して値を取得する

var value = redis.Hash["hashKey"]["key"];

または

var value = redis.Hash["hashKey"].Get("key");


HASHからハッシュキーを指定してキーをすべて取得する

redis.Hash["hashKey"].Keys;


HASHからハッシュキーを指定して値をすべて取得する

redis.Hash["hashKey"].Values;


HASHからハッシュキーを指定してキーと値のペアをすべて取得する

redis.Hash["hashKey"].Items;


HASHにハッシュキーとキーを指定して存在するか調べる

redis.Hash["hashKey"].ContainsKey("key");

などなど、いろいろな使い方ができそうです。


最後に

UnityからRedisを使う場面はほとんどないとは思いますが、
もし簡単に利用できるとしたらデバッグ機能なんかに役立つかもしれません。

CoreCLRのインストールとビルド、実行まで

最近必要に駆られてCoreCLRを触っております。


CoreCLRとはMicrosoft社が開発しているオープンソースで、
LinuxOS上で.NET Coreを動かすことができるフレームワークです。


簡単に説明すると、C#で書いたプログラムがそのままLinuxOS上で実行できるという代物です。
LinuxOS上ということなので、Linuxベースで作られているMacOSでももちろん実行することができます。


なんとCoreCLRはdockerにも対応しているので、インストールするのが面倒でかつ
dockerに慣れている方はdocker版を導入してみると良いかもしれません

docker run -it microsoft/dotnet:latest


今回はUbuntuでのインストール手順を説明したいと思います。


インストール

インストールはCoreCLRの公式サイトに分かりやすく手順が書いてありますので、
そちらを参照して頂いても大丈夫ですが、こちらにも記載したいと思います。
.NET - Powerful Open Source Development


Ubuntu 14.04 の場合
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
sudo apt-get update
Ubuntu 16.04 の場合
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list'
sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893
sudo apt-get update

上記コマンドを実行してapt-getリストをアップデートしたら、実際にCoreCLRをインストールします。

sudo apt-get install dotnet-dev-1.0.0-preview2-003121


これでCoreCLRのインストールが完了しました!
とても簡単ですね。


ビルド準備

CoreCLRでビルドするには、まず下記のようにプロジェクトの初期化を行います。

$> mkdir sample
$> cd sample

$> dotnet new
Created new C# project in /root/sample.

$> dotnet restore
log  : Restoring packages for /root/sample/project.json...
log  : Writing lock file to disk. Path: /root/sample/project.lock.json
log  : /root/sample/project.json
log  : Restore completed in 1335ms.

$> dotnet run
Project sample (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling sample for .NETCoreApp,Version=v1.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:01.9024996
 

Hello World!

ひとつずつ説明していきます。


まずは、mkdirでプロジェクトが格納されるフォルダを作成し、cdでその中に入ります。
ここは特に問題ないと思います。



次に dotnet new コマンド。
このコマンドを実行することにより、デフォルトのProgram.csファイルとproject.jsonファイルが作成されます。
Program.csとproject.jsonファイルの中身は下記のようになっています。

// Program.cs
using System;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

// project.json
{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": "dnxcore50"
    }
  }
}

Program.csはコンソールに「Hello World!」と出力するだけのシンプルなものになっています。
project.jsonはなにやらいろいろと設定されていますが、CoreCLRを動かすのに最低限必要なもののようです。
必要なフレームワークなどがある場合はこのファイルを編集して対応することができそうです。


次に dotnet restore コマンド。
このコマンドを実行するとproject.jsonファイルの設定に基づいて必要なファイルなどをダウンロードしてきます。
それと同時にproject.lock.jsonという中身の多い設定ファイルが作成されます。


最後に dotnet run コマンド。
このコマンドは読んで字の如くプログラムを実行してくれます。
ソースコード変更後の初回実行時に限りビルドも同時に行ってくれます。

ビルドのみを行いたい場合は下記コマンドにて行うことが可能です。

dotnet build

実行結果を見るとたしかに最下部のほうに「Hello World!」と表示されていますね!


最後に

今回はインストール手順とビルド、実行までの説明でした。


今後CoreCLRを使ってプロジェクトを進めていくにあたりいろいろと壁にぶつかることもあると思いますが、
これからCoreCLRを触る機会のある方たちに有用な情報として残していけたらなと思っています。


CoreCLRは2016年6月に1.0版がリリースされたので、今後ますます開発が進められて実用レベルに達する日も
遠くはないんじゃないかなぁと、期待も込めて思っています!


それでは。

Laravel5をLinuxで使う時にハマるポイント

f:id:kabatin:20160510153411p:plain

LinuxサーバでLaravel5を利用する時にだいたいの人がつまずくであろうポイントをまとめてみた。

ハマるポイント1

これを忘れてvendorフォルダが作成されておらず動かない。

composer install

ちなみに composer もインストールしなければならないので下記コマンドでインストールする。
インストールすると composer.phar というファイルになるので mv するなりして composer にするとよい。

curl -s http://getcomposer.org/installer | php

さらに、PHPもインストールされていない場合は下記コマンドでインストール。

sudo apt-get install php5-cli
ハマるポイント2

bootstrap、storageフォルダに対して777権限を付与していなくてエラーになる。
とにかくフォルダもファイルも777にしておけば動く。(セキュリティ面は自己責任で!)

chmod 777 -R bootstrap
chmod 777 -R storage
ハマるポイント3

.envファイルを作成していなくてエラーになる。
作成した後は中身も適切に変更すること。

cp -p .env_example .env
php artisan key:generate
ハマるポイント4

ページに「Whoops, looks like something went wrong.」が表示されて困る。
config/app.php のDEBUGモードをオンにすれば通常のスタックトレースが表示されるようになる。

vi config/app.php
まとめ

ほとんどのことはLaravel5のドキュメントを読めば解決するのでドキュメントはしっかり読みましょう。
(Laravelのドキュメントは英語しかなかった気がしますが、頑張れば読めるレベルだと思います。)

docker-compose のインストール

f:id:kabatin:20160222190902p:plain

Dockerを使っていると複数のコンテナを管理するのが大変になってきます。

そんな時に力を発揮するのが「docker-compose」です。



Docker では Dockerfile にてコンテナの内容を管理していましたが、

docker-compose では docker-compose.yml ファイルでコンテナを管理できます。


まずはインストールの仕方から。


前提条件

Macでの手順
MacVirtualBoxUbuntuがインストール済み
・Dockerもインストール済み


インストール手順

インストール手順は至って簡単で、curl 経由でスムーズにインストールすることが可能です。
/usr/local/bin フォルダに書き込み権限が必要なので、もし root ユーザ意外で権限が付いていない場合は事前に付与しましょう。

sudo chmod 777 /usr/local/bin


docker-compose のインストールをします。
1.7.0 の部分はバージョン情報なので、本家サイトで最新を確認して変更してください。

■公式サイト
docs.docker.com

sudo -i curl -L https://github.com/docker/compose/releases/download/1.7.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

インストールが終わると /usr/local/bin に docker-compose ファイルが作成された状態になります。
今度はこの実行ファイルに実行権限を付与してあげます。

sudo chmod +x /usr/local/bin/docker-compose

正常にインストールされたか確認します。
こんな感じにバージョン情報が表示されればインストール成功です。

docker-compose version
docker-compose version 1.6.2, build 4d72027
docker-py version: 1.7.2
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013


今回は簡単ですがインストール手順のみになります。

Docker + Laravel + MariaDB + Redis での環境構築

f:id:kabatin:20160222190902p:plain

Scalaの開発環境の次に、手堅くPHPの開発環境も作ることになりました。
その手順とハマったポイントなどを備忘録として書いていきたいと思います。

前提条件

Macでの手順
MacVirtualBoxUbuntuがインストール済み
・Dockerもインストール済み
・docker-composeもインストール済み

参考)VirtualBoxUbuntuのインストールや、Dockerのインストール手順はこちらを参照
kabatin.hateblo.jp

参考)docker-composeのインストール手順はこちらを参照
kabatin.hateblo.jp


各ソフトウェアのバージョン情報など

MacOSX 10.11.1
VirtualBox 5.0.14
Ubuntu 14.04 LTS
・Docker 1.10.2
PHP 5.5.9
・Laravel 5.2
MariaDB 10.1.12
・Redis 3.0.5


フォルダ構成

まず完成形のフォルダ構成はこちら

.
├── data
│   └── php
├── docker-compose.yml
├── server
│   └── docker
│       ├── mariadb
│       │   ├── Dockerfile
│       │   └── docker-entrypoint-initdb.d
│       │       └── configure.sh
│       ├── nginx
│       │   ├── Dockerfile
│       │   └── conf
│       │       └── default.conf
│       ├── php
│       │   └── Dockerfile
│       └── redis
│           └── redis.conf
└── storage-compose.yml
MariaDB と Redis

まずは比較的簡単なデータベースとRedisの設定から行います。

設定するファイルはメインの docker-compose.yml とは分けて、storage-compose.yml とします。
中身はこんな感じになっています。

version: '2'

services:

  db:
    build: server/docker/mariadb
    volumes:
      - ./data/mariadb:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_PASSWORD: password
      MYSQL_USER: user1
      MYSQL_DB: password
    entrypoint:
      /docker-entrypoint-initdb.d/configure.sh

  redis:
    image: redis:3.0.5
    volumes:
      - "./server/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf"
    entrypoint:
     - "redis-server"
     - "/usr/local/etc/redis/redis.conf"

MariaDB, Redis 共通

version

このバージョンは "2" じゃないとダメなようです。
決められたものなので、おまじないとして記述しましょう。

build

Dockerfile が置いてあるパスを指定します。
最初にお見せしたツリーを見ると MariaDB 用の Dockerfile の場所が指定されていることがわかります。

volumes

データ永続化のために、MariaDB のデータ置き場である /var/lib/mysql に対して、ローカルフォルダ ./data/mariadb をマウントしています。

environment

コンテナ内の環境変数を設定しています。

entrypoint

コンテナ起動時に実行するコマンドを指定します。
今回は /docker-entrypoint-initdb.d/configure.sh を指定していますが、これは Dockerfile 内で、
事前に用意したファイルをコンテナ内部へコピーしたものを指定しています。

Redis

build

Dockerfile が置いてあるパスを指定します。
最初にお見せしたツリーを見ると Redis 用の Dockerfile の場所が指定されていることがわかります。

volumes

事前に設定してある redis.conf ファイルをコンテナ内の対象ファイルにマウントしています。

entrypoint

コンテナ起動時に実行するコマンドを指定します。
redis-server に対して、volumes でマウントしたコンフィグファイルを指定して実行しています。



MariaDB の Dockerfile

FROM mariadb:10.1.12

COPY ./docker-entrypoint-initdb.d/* /docker-entrypoint-initdb.d/

VOLUME /etc/localtime:/etc/localtime:ro

RUN sed -i -e "s/\(\[mysqld\]\)/\1\ncharacter-set-server = utf8/g" /etc/mysql/my.cnf
RUN sed -i -e "s/\(\[client\]\)/\1\ndefault-character-set = utf8/g" /etc/mysql/my.cnf
RUN sed -i -e "s/\(\[mysqldump\]\)/\1\ndefault-character-set = utf8/g" /etc/mysql/my.cnf
RUN sed -i -e "s/\(\[mysql\]\)/\1\ndefault-character-set = utf8/g" /etc/mysql/my.cnf

RUN sed -i -e "s/^#bind-addresss*=s*0.0.0.0/bind-address=0.0.0.0/" /etc/mysql/my.cnf

FROM

mariadb イメージを利用しています。バージョン指定で 10.1.12 を利用。

COPY

事前に用意した configure.sh が入っているフォルダをコンテナ内へコピーしています。

VOLUME

時計をローカルに合わせています。
最後の「ro」は ReadOnly の略で読み取り専用にしてあります。

RUN

my.cnf に対して文字列痴漢を利用して設定変更を行っています。
上の4つは文字コードの設定、下は外部からの接続を許可するバインドアドレスの設定をしています。



Laravel と Nginx

次にLaravelとNginxの設定を行います。

設定するファイルはメインの docker-compose.yml です。
中身はこんな感じになっています。

version: '2'

services:

  php:
    build:
      context: server/docker/php
    volumes:
      - "${PWD}/data/php/develop:/var/www/html"
    environment:
      DB_HOST: db
      DB_PORT: 5432
      REDIS_HOST: redis
      REDIS_PORT: 6379

  nginx:
    build:
      context: server/docker/nginx
    ports:
      - "8080:80"
    links:
      - php

  db:
    extends:
      file: storage-compose.yml
      service: db
    expose:
     - "3306"

  redis:
    extends:
      file: storage-compose.yml
      service: redis
    expose:
     - "6379"

※新しく出てきたものだけ説明します。

Nginx

ports

外部からコンテナへのポートフォワードを設定します。
8080:80 と記述すると、コンテナのIPの 8080 ポートに対してアクセスが来たら
80 ポートにポートフォワードされるようになります。

links

他のコンテナとリンクします。
docker run コマンドで -lilnk を指定するのと同じです。

DB, Redis

extends

別の yml ファイルに設定されている内容を継承します。
file に指定するのが yml フィアルの名称で、service に指定するのがコンテナ名(サービス名)です。

expose

コンテナの指定ポートを外部へ公開する設定です。
80 を指定すると、外部からコンテナの 80 ポートへアクセスが可能になります。



Laravel の Dockerfile

FROM php:fpm
WORKDIR /var/www/html

FROM

php イメージの fpm を利用しています。
nginx でPHPを利用する場合はこの fpm バージョンが必要になります。

WORKDIR

コンテナにログインした時に最初に表示されるフォルダを指定します。



Nginx の Dockerfile

FROM nginx:1.9.12
ADD conf/default.conf /etc/nginx/conf.d

FROM

nginx イメージの 1.9.12 バージョンを利用しています。

ADD

事前に用意した nginx のコンフィグファイルを対象フォルダへコピーしています。




Nginx のコンフィグファイル

NginxとPHPのコンテナが別々なので、NginxへのアクセスをPHPコンテナへ流す必要がある。
そのためのNginxのコンフィグファイルはこんな感じで設定するとうまくいった。

server {
    listen       80 default;
    server_name  localhost;
    charset utf-8;
    root /var/www/html;

    #access_log /var/www/html/access.log;
    #error_log /var/www/html/error.log;

    access_log /dev/stdout;
    error_log  /dev/stdout;

    #rewrite ^(.+)/$ $1;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        root /var/www/html/public;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        #fastcgi_split_path_info ^(.+\.php)(.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}
フォルダ構成

もう一度フォルダ構成を載せておきます。

.
├── data
│   └── php
├── docker-compose.yml
├── server
│   └── docker
│       ├── mariadb
│       │   ├── Dockerfile
│       │   └── docker-entrypoint-initdb.d
│       │       └── configure.sh
│       ├── nginx
│       │   ├── Dockerfile
│       │   └── conf
│       │       └── default.conf
│       ├── php
│       │   └── Dockerfile
│       └── redis
│           └── redis.conf
└── storage-compose.yml


この状態で、ルートフォルダにて下記コマンドを実行すると正常にサービスが起動するはずです。

$ docker-compose build
$ docker-compose up -d

$ docker ps -a
ONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
01121a809ee9        laravel_db          "/docker-entrypoint-i"   2 seconds ago       Up 1 seconds        3306/tcp                        laravel_db_1
80802a0855e4        laravel_nginx       "nginx -g 'daemon off"   2 seconds ago       Up 2 seconds        443/tcp, 0.0.0.0:8080->80/tcp   laravel_nginx_1
31004578e508        laravel_php         "php-fpm"                2 seconds ago       Up 2 seconds        9000/tcp                        laravel_php_1
5b4b17aa0840        redis:3.0.5         "redis-server /usr/lo"   3 seconds ago       Up 2 seconds        6379/tcp                        laravel_redis_1

ハマった点

・NginxコンテナからPHPコンテナへルーティングするための、Nginxの設定が難しかった。
・Laravelのstorageフォルダ、bootstrapフォルダに対して、777権限を与えないと動かなかった。
 (Laravelの公式ドキュメントに権限付与してくださいってちゃんと書いてあった・・・)


まとめ

・DockerComposeは一度設定すると次回から起動・停止が非常に楽にできて便利だが、
 最初の構築するまでにひたすらつまずきポイントがあり、かなり時間を食ってしまう。
・DockerComposeで環境構築をするときは、まずひとつ1つのコンテナをしっかりと構築していくとうまくいきやすい。

ChatWork Send To ALL

f:id:kabatin:20160331164017p:plain


ブログを始めて間も無いのにすでに数週間も間が開いてしまいました…。

今日はちょっと珍しいことをしたので記事を書きたいと思います。


みなさん、チャットワーク使ってますか?

きっといろいろな企業の方がチャットワークを使われていることと思います。

チャットワークは非常に便利なので私も公私ともに使っておりとても助かっています。


今回試したこと

チャットワークの[TO]ボタンを押すと開く宛先追加ポップアップで、「すべて選択」を押した際に
縦長に宛先がズラーッと並べられてしまうものを、もっと見やすくしよう!

ということにチャレンジしてみました。

Chrome Store「ChatWork Send To ALL」
chrome.google.com




本来であればこんな感じに…

[TO] ● 相手の名前1
[TO] ● 相手の名前2
[TO] ● 相手の名前3
[TO] ● 相手の名前4
[TO] ● 相手の名前5
    ・
    ・
    ・


縦長にズラーッと並んでしまうのですが、今回作成した「ChatWork Send To ALL」をインストールすると

こんな感じに横並びにズラーッと並ぶようになります。

[TO] ● [TO] ● [TO] ● [TO] ● [TO] ● ・・・


f:id:kabatin:20160331164950p:plain


メリット

・見た目がすっきりします。
・全員にTOを付けて送る敷居が下がります。
・全員にちゃんとPUSH通知が飛びます。


デメリット

・表示がシンプルになったせいで乱用される可能性が増えた。
・従来の「すべて選択」機能を上書いているので、従来のまま使いたくなったらアンインストールが必要


まとめ

自分の所属する会社で実際に公開してみたところ、意外にも需要があった。
見た目がシンプルになるのはとても重要なことだと思う。

同じような不満を抱えている方は是非使ってみてください。