UbuntuにzshとvimとGoを設定する

zshはoh-my-zshというのを使います。vimはdeinでプラグインを入れます。Goはvim-goプラグインを入れます。

goのインストール

$ sudo -i
$ apt-get update
$ apt-get upgrade
$ apt-get install golang
$ which go
/usr/bin/go

zsh

zshのインストール

$ apt-get install zsh
$ which zsh
/usr/bin/zsh
$ chsh
Changing the login shell for hoge
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]: /usr/bin/zsh

oh-my-zshをインストール

$ sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

.zshrcの設定

$ vim .zshrc

.zshrcに下記を追加

export GOPATH=$HOME/go
export GOBIN=$HOME/go/bin
export PATH=$PATH:$HOME/go/bin
$ source .zshrc

Vimの設定

dein.vimをcloneする

$ cd
$ mkdir .vim
$ cd .vim
$ git clone https://github.com/Shougo/dein.vim.git

.vimrcを取得

$ cd
$ git clone https://github.com/endoyuta/vim_config.git
$ ln -s ~/vim_config/.vimrc

deinとプラグインのインストール

$ vim

vim-goプラグインの設定

vim内で、:GoInstallBinariesを実行。

:GoInstallBinaries

Go – Vim-goがうごかない

参考:vim-goをインストールしてみた(所要時間:15分)

環境

  • windows10
  • go1.8

.vimrcの設定

deinでvim-goプラグインをインストール設定した。

call dein#add('fatih/vim-go')

vim内で:GoInstallBinariesを実行

.vimrc設定変更後にvimを起動すると、vim-goがインストールされた上でvimが起動される。起動後に、:GoInstallBinariesを実行すると、vim-goに必要なgoのパッケージ?がインストールされるはずなんだけど、うまくいかない。

全部インストールに失敗するし、そもそも$GOPATH/binにインストールされるはずだと思うんだど、c/binにインストールしようとしている。どうも$GOPATH関連の設定読み込みがおかしいっぽい。下記のようなエラーがでる。

vim-go: gometalinter not found. Installing github.com/alecthomas/gometalinter to folder C/bin/
Error installing github.com/alecthomas/gometalinter: github.com/alecthomas/gometalinter (download)
cannot install, GOBIN must be an absolute path
vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder C/bin/
...

同じようなのがずっと続いて、結局エラーで終わる。C/binというのが出来てるわけでもない。$GOPATHの設定も問題ない。

解決策

.vimrcに下記を設定したら出来た。

let g:go_bin_path = $GOPATH.'/bin'
filetype plugin indent on

参考:https://github.com/fatih/vim-go/blob/master/doc/vim-go.txt

Windowsの場合の問題

上記解決策だと、Windowsの場合、:GoDefとかやると、$GOPATHの\をフォルダの区切り文字と認識せずおかしなフォルダパス設定になってうまく動作しなかった。かといって、パスをベタで書くのもいやだ。でもベタでとりあえず書いて一旦終了。
あと、:GoErrCheckとかやると、パス関連が変な表示になりエラーになる。まだいろいろ設定不備がありそうなので、あとで調べる。

追記:
.bashrcに下記を追加したら問題なく動作するようになった。

export GOPATH=$HOME/go
export GOROOT=/d/go
export GOBIN=$HOME/go/bin

Dockerの使い方(2)

シンプルなWEBアプリを構築してローカルブラウザで確認する。

$ docker run -dP training/webapp python app.py
$ docker ps -l

PORTSに下記が書いてある。
0.0.0.0:32768->5000/tcp
コンテナの5000ポートがdockerホストの32768に割り当てられている

$ docker-machine ip
192.168.99.100

ブラウザで192.168.99.100:32768を見るとHello Worldが表示された。

割り当てるポートを明示する場合

$ docker run -d -p 8080:5000 training/webapp python app.py

docker portで割り当て確認できる

$ docker port loving_snyder
5000/tcp -> 0.0.0.0:8080

コンテナのログを見る

 $ docker logs -f loving_snyder
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.99.1 - - [28/Mar/2017 11:37:56] "GET / HTTP/1.1" 200 -
192.168.99.1 - - [28/Mar/2017 11:37:56] "GET /favicon.ico HTTP/1.1" 404 -
192.168.99.1 - - [28/Mar/2017 11:37:57] "GET / HTTP/1.1" 200 -
192.168.99.1 - - [28/Mar/2017 11:37:58] "GET / HTTP/1.1" 200 -
192.168.99.1 - - [28/Mar/2017 11:37:58] "GET / HTTP/1.1" 200 -
192.168.99.1 - - [28/Mar/2017 11:37:59] "GET / HTTP/1.1" 200 -
192.168.99.1 - - [28/Mar/2017 11:37:59] "GET / HTTP/1.1" 200 -
192.168.99.1 - - [28/Mar/2017 11:38:14] "GET /users HTTP/1.1" 404 -

Dockerfileからdocker imageを作り、リポジトリに上げる。

$ mkdir hoge
$ cd hoge
$ vim Dockerfile

FROM ubuntu:16.04
MAINTAINER hoge<hoge@gmail.com>
RUN apt-get update && apt-get install -y ruby ruby-dev

$ docker build -t hoge/ruby:v1 .
$ docker iamges

タグつける
$ docker tag  c36bf8d96a58 hoge/ruby:devel 

ダイジェスト値
$ docker images --digests

$ docker login --username=hoge --email=hoge@gmail.com
$ docker push hoge/ruby

不要なコンテナを全部削除する。

停止中コンテナの一括削除

$ docker rm `docker ps -a -q`

Docker – 基本的な使い方

Windows10でDocker Toolboxを使っています。

Dockerのアップデート

今のバージョンを確認します。

$ docker -v

Docker version 1.12.2, build bb80604

まずDocker Toolbox自体をアップデートさせます。ここからWin用をダウンロードして実行したらできると思います。

$ docker -v

Docker version 17.03.0-ce, build 60ccb22
なんだこれは全然違う。半年も経ってないのに。

$ docker version
Client:
 Version:      17.03.0-ce
 API version:  1.24 (downgraded from 1.26)
 Go version:   go1.7.5
 Git commit:   60ccb22
 Built:        Thu Mar  2 01:11:00 2017
 OS/Arch:      windows/amd64

Server:
 Version:      1.12.2
 API version:  1.24 (minimum version )
 Go version:   go1.6.3
 Git commit:   bb80604
 Built:        Tue Oct 11 17:00:50 2016
 OS/Arch:      linux/amd64
 Experimental: false

Client/Serverのバージョンのようです。ちょっと前までは、docker -vとやるとサーバのバージョンが出てたけど、今はクライアントのバージョンがでているようです。

Dockerの使い方概要

Docker Hubからdockerイメージを探して、docker pullでイメージをダウンロードして、docker runでコンテナを作成・実行します。

Docker Hub

ここにDocker Hubがあります。沢山イメージがあります。

dockerイメージを落とす

docker pullコマンドでイメージをローカルに落とせます。docker pull rubyとやるとrubyのイメージがダウンロードされます。このrubyは何かというと、ここにあります。ruby:2.4.1というように、[:]の後にタグをつけることもできます。タグは、基本バージョンになります。latestというタグを使うと、最新版をpullできます。

$ docker pull ruby:latest

dockerイメージ一覧を確認する

docker imagesコマンドで、ローカルのイメージ一覧が確認できます。

$ docker images
REPOSITORY  TAG     IMAGE ID      CREATED     SIZE
ruby        latest  d2cee8adb148  5 days ago  678 M

コンテナを作成・実行する

docker runコマンドでコンテナを作ります。コマンドの使い方は下記です。

$ docker run [オプション] [–name {コンテナー名}] {イメージ名}[:{タグ名}] [コンテナーで実行するコマンド] [引数]

コンテナ名rubyのrubyイメージのコンテナを作成する場合下記になります。

$ docker run --name ruby ruby:latest

-i オプションをつけると、標準入力が開きます。rubyコンテナの標準入力を開いたらirbが起動しました。一度docker runで作成・実行したコンテナは、処理が終わるとすぐに停止しますが、コンテナとしては停止中の状態で存在しています。よって、再度上記docker runコマンドを実行すると下記のようなエラーになります。docker runコマンドはコンテナが存在しない状態で新たに作成する際に使用するコマンドです。

Error response from daemon: Conflict. The name “/ruby” is already in use by container 8504a9a10098ff4a5f3b680adc74ba625a3b39dd6cc332485d96d9cbbdac951f. You have to remove (or rename) that container to be able to reuse that name.

停止中のコンテナを再実行する場合は、docker startコマンドを利用します。使い方は下記になります。コンテナIDは、次のdockerコンテナの一覧を表示させるとCONTAINER IDというのが確認できます。

$ docker start [-i] {コンテナー名}|{コンテナーID}

先程のrubyコンテナの標準入力を開く場合は、下記のようにします。

$ dcoker start -i ruby

dockerコンテナの一覧を確認する

docker psコマンドを使います。-a オプションを使うと停止中コンテナも表示されます。

$ docker ps -a
CONTAINER ID   IMAGE        COMMAND  CREATED        STATUS                     PORTS  NAMES
8504a9a10098   ruby:latest  "irb"    2 minutes ago  Exited (0) 50 seconds ago         ruby

dockerコンテナを削除する

docker rmコマンドを使います。削除対象を指定するには、コンテナ名かコンテナIDを使います。

$ dcoker rm ruby

Python3 – Seleniumの使い方

Selenium
http://www.seleniumhq.org/

作業環境

私の環境は、下記です。
Windows10
Python3.5
Firefox 51.0.1
Chrome 56.0
ChromeDriver 2.27

Selenium WebDriver

SeleniumRCはJavascriptでブラウザを操作してたけどセキュリティ的に難しくなってSelenium WebDriverが主流になったそうです。WebDriverはブラウザの拡張機能やOSのネイティブ機能などを利用して操作するそうです。ブラウザのドライバに対して、JSON Wire ProtocolでHTTPリクエストを行うとブラウザが操作できるます。ドライバは各ブラウザ毎に異なります。

ドライバに対するリクエストは、一般的には各種プログラミング言語で作成します。使える言語は、公式だと、Java、Ruby、Python、C#、Javascript、PHP、Perlだそうです。その他非公式であったりするそうです。私はPythonでやってみようかなと思います。

Python用Seleniumモジュールをインストールする

pipでインストールできます。

$ pip install -U selenium

Python用のseleniumのAPIのドキュメントはここです。

chromeドライバのインストールと設定

Chrome Driverはこのページでダウンロードできます。ChromeDriver 2.27のchromedriver_win32.zipをダウンロードしました。展開して、chromedriver.exeを任意のフォルダに配置し、そのフォルダにパスを通しておきます。

Fireboxドライバのインストールと設定

Firefoxはブラウザをインストールしてあればドライバが使えると色々なところに書いてはあったのですが、Firefoxの新しいバージョンではそうでもないらしく、実際自分もエラーになってしまいました。下記のようなエラーが出る場合、ドライバが有効になっていない可能性があります。

AttributeError: 'Service' object has no attribute 'process'

上記のような場合は、ここからドライバをダウンロードしてみます。私は、geckodriver-v0.14.0-win64.zipをダウンロードして展開して、上記のchromeと同様に任意のフォルダにgeckodriver.exeを配置し、そのフォルダにパスを通しました。これで、Firefoxも動作するようになりました。

PythonでSeleniumを操作してみる

ブラウザを起動してURLを開く

from selenium import webdriver

#Firefox
fire = webdriver.Firefox()
fire.get('http://google.com')

#Chrome
chro = webdriver.Chrome()
chro.get('http://google.com')

要素の選択、入力、クリック

Googleに検索ワードを入力して検索ボタンを押すことで検索結果ページに遷移させてみます。

from selenium import webdriver

#Firefox
fire = webdriver.Firefox()
fire.get('http://google.com')
input = fire.find_element_by_id('lst-ib')
input.send_keys('Selenium Python3')
btn = fire.find_element_by_name('btnK')
btn.click()

#Chrome
chro = webdriver.Chrome()
chro.get('http://google.com')
input = chro.find_element_by_id('lst-ib')
input.send_keys('Selenium Python3')

chromeの場合は、検索ワードを入力したら勝手に検索結果のページに遷移したので、btnを取得・クリックしていません。

ログイン

上記と同じですが、ログインもしてみます。Twitterにログインします。

from selenium import webdriver

tw_user = 'hoge@hoge.com'
tw_pass = 'passwordpassword'

#Firefox
fire = webdriver.Firefox()
fire.get('https://twitter.com')
login = fire.find_element_by_class_name("StreamsLogin")
login.click()
input_user = fire.find_element_by_name('session[username_or_email]')
input_pass = fire.find_element_by_name('session[password]')
input_user.send_keys(tw_user)
input_pass.send_keys(tw_pass)
btn = fire.find_element_by_class_name('submit')
btn.click()

#Chrome
chro = webdriver.Chrome()
chro.get('https://twitter.com')
login = chro.find_element_by_class_name("StreamsLogin")
login.click()
input_user = chro.find_element_by_name('session[username_or_email]')
input_pass = chro.find_element_by_name('session[password]')
input_user.send_keys(tw_user)
input_pass.send_keys(tw_pass)
btn = chro.find_element_by_class_name('submit')
btn.click()

問題なくログインできるのですが、getでURLを開くと全て読み込むまで次に進まないようで、ログインボタンをクリックするまでにやたらと待たせれる点がいやです。解決方法があるか今度確認します。

参考:
第1回 Seleniumの仕組み
Seleniumとは―読み方、意味、WebDriverの使い方
Selenium Web DriverのPythonバインディングを使ってブラウザを操作する
5分でわかるSelenium IDEの使い方
Python で Selenium WebDriver を使ったブラウザテストをする方法
Webブラウザの自動操作 (Selenium with Rubyの実例集)

Ubuntu16.04にGitLabを入れる

Ubuntu 16.04にGitlabを入れていきたいと思います。

Gitlabのインストール

Gitlabのサイトに、OS毎のインストール方法が書いてありました。

$ sudo apt-get install curl openssh-server ca-certificates postfix
$ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
$ sudo apt-get install gitlab-ce
$ sudo gitlab-ctl reconfigure

ポート開ける

80ポートを開けます。

$ sudo ufw allow 80

ポートの衝突を回避する

ブラウザで見てもデフォルトのnginxの画面になる。既にnginx入れているのですが、これとは別にnginxを入れてるみたいでポートが衝突してるらいし。
参考:Ubuntu 14.04 に GitLabをインストールした

上記サイトのとおり、衝突してた。/etc/gitlab/gitlab.rbの下記に、変更したいポートを入れたら出来た。あとは、ufwでポートを開ける必要がある。

nginx['listen_port'] = nil

ブラウザでアクセスしたらGitlabのログイン画面が表示された。パスワード変更してrootでログインできた。

gitユーザでssh接続できるようにする

$ sudo vi /etc/ssh/sshd_config

AllowUsersにgitを追加します。

$ sudo service ssh restart

sshのポートを変えている場合は、gitlab.rbの下記を修正します。

gitlab_rails['gitlab_shell_ssh_port'] = 変更したポート

あとは、ローカルでキーを作成して、gitlabに登録して、.ssh/configを下記のような感じで修正します。

Host hoge.com
        HostName hoge.com
        User git
        IdentityFile C:\Users\hoge\.ssh\hoge_rsa
        Port 12345

メール送信設定

今回はgmailを新たに登録して、設定してみました。gmail登録後に、安全性の低いアプリに許可というのを設定する必要があります。あとは、gitlab.rbを下記のように設定します。

 21  gitlab_rails['time_zone'] = 'Asia/Tokyo'
 22  gitlab_rails['gitlab_email_enabled'] = true
 23  gitlab_rails['gitlab_email_from'] = 'hoge@gmail.com'
 24  gitlab_rails['gitlab_email_display_name'] = 'Hoge'
 25  gitlab_rails['gitlab_email_reply_to'] = 'hoge@gmail.com'

332  gitlab_rails['smtp_enable'] = true
333  gitlab_rails['smtp_address'] = "smtp.gmail.com"
334  gitlab_rails['smtp_port'] = 587
335  gitlab_rails['smtp_user_name'] = "hoge@gmail.com"
336  gitlab_rails['smtp_password'] = "GmailのPASSWORD"
337  gitlab_rails['smtp_domain'] = "smtp.gmail.com"
338  gitlab_rails['smtp_authentication'] = "login"
339  gitlab_rails['smtp_enable_starttls_auto'] = true
340  gitlab_rails['smtp_tls'] = false
341  gitlab_rails['smtp_openssl_verify_mode'] = 'peer'

reconfigure

$ sudo gitlab-ctl reconfigure

windows10のvisual studio codeでC言語開発環境をつくる

Visual studio codeはインストール済みです。visual studio codeは、ここからダウンロードできます。

コンパイラをインストールする

参考:WindowsでのC言語の開発環境(Eclipse)

まずは、コンパイラをMinGWからダウンロードします。mingw-get-setup.exeというのをダウンロードして、実行するとインストールが始まります。インストールを始めると、途中でMinCW Installation Managerという画面が出てきます。ここで、mingw32-baseと、mingw32-gcc-g++というのをチェックして、メニューのInstallation > Apply Changesをクリックして、チェックした2つをインストールします。

MinGW.org

PATHを通す

C:\MinGW\binにPATHを通します。細かいやり方はここに載っています。コマンドプロンプトで、gcc -vを実行して、バージョンがでたら成功です。

C:\>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/5.3.0/lto-wrapper.exe
Target: mingw32
Configured with: ../src/gcc-5.3.0/configure --build=x86_64-pc-linux-gnu --host=mingw32 --prefix=/mingw --disable-win32-registry --target=mingw32 --with-arch=i586 --enable-languages=c,c++,objc,obj-c++,fortran,ada --enable-static --enable-shared --enable-threads=posix --with-dwarf2 --disable-sjlj-exceptions --enable-version-specific-runtime-libs --enable-libstdcxx-debug --with-tune=generic --enable-libgomp --disable-libvtv --enable-nls
Thread model: posix
gcc version 5.3.0 (GCC)

visual studio codeの設定

visual studio codeを開いて、拡張機能からc/c++と検索したら出てくる、Microsoftが出してる、C/C++というのをインストール・有効化します。コード整形とか、デバッグ機能とか便利な機能を沢山提供してくれるようです。

code_c

あとは、必要に応じて追加していきます。ちなみに、Visual studio codeは、Ctl + @で、コマンドプロンプトが出現します。なので、何かcのファイルをつくって、コマンドプロンプトを開いて、gcc hoge.cとかやるとコンパイルができます。

TensorFlowのDockerのJupyterが動かない

TensorFlowのDockerは下記です。

$ docker run -it -p 8888:8888 gcr.io/tensorflow/tensorflow

dockerコンテナを実行したら、Jupyterが動いているのですが、Dockerをローカルブラウザで見る方法がわからないです。コンテナを実行したら下記のようなメッセージがでてきました。

$ docker run -it gcr.io/tensorflow/tensorflow:latest
[I 09:38:58.768 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[W 09:38:58.790 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[W 09:38:58.790 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using authentication. This is highly insecure and not recommended.
[I 09:38:58.794 NotebookApp] Serving notebooks from local directory: /notebooks
[I 09:38:58.795 NotebookApp] 0 active kernels
[I 09:38:58.795 NotebookApp] The Jupyter Notebook is running at: http://[all ip addresses on your system]:8888/
[I 09:38:58.795 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

下記に対処方法が書いてありました。dockerのipアドレスを確認して、それでアクセスすればできました。
参考:Unable to start TensorFlow within Docker, on Windows

$ docker-machine ip default
192.168.99.100

上記IPでアクセスします。

http://192.168.99.100:8888/notebooks

jupyter

Dockerの使い方 (Windows10)

DockerをWindows10で使えるようにする

参考:無償の「Docker for Windows」で手軽にLinuxコンテナを利用する (1/2)
参考:Windows10マシンにDocker Toolbox を入れて個人用の開発環境を作る

私は、windows10のHomeエディションで、Hyper-vというのが使えないので、Docker Toolboxを使いました。

Docker Toolboxをインストール

DOCKER TOOLBOXからダウンロードします。現状ではバージョンは、1.12.2でした。インストールして、Docker Quickstart Terminalを起動します。すると黒い画面にクジラがでてきました。
docker_install

これでインストール完了っぽい。

Dockerの使い方

基本的な使い方は、Docker Hubからイメージを取得して、それを基にコンテナを作成・実行するらしい。UbuntuでPython3を使えるようにしてみたいと思います。

Ubuntuのイメージをダウンロード

Docker Hubで色々なイメージを探せます。

$ docker pull ubuntu:latest

実行してみる

$ docker run -it ubuntu:latest /bin/bash

これでシェルが実行されました。exitで終了します。フォアグラウンドで実行するものは終了した時点でコンテナが消えるそうです。docker runで、コンテナの作成・実行が行われます。-itでフォアグラウンドでの実行を指定できます。イメージの次に何かを書くことで引数として渡せるようです。

バックグランド実行は、run -dです。バックグラウンド実行のコンテナを確認するには、docker psコマンドを実行します。

$ docker run -d nginx:latest
$ docker ps

実行中コンテナをストップするのは、docker stopです。ストップしてもデータが残っているので削除する場合は、docker rmです。ストップ中コンテナの確認は、docker ps -aで確認できます。docker rm -f でストップ&削除することもできます。container idの指定はidの先頭数文字でOKなようです。dockerイメージの削除も、docker rmiでできます。例えば、下記のようにします。

$ docker rmi nginx:latest

イメージをつくってみる

Dockerイメージを自分で作ってみます。docker buildというコマンドを使うそうです。Dockerfileというファイルに設定を書いて、それをdocker buildするとイメージが作成されるようです。

Dockerfile

FROM ubuntu:14.04
RUN apt-get update -y && apt-get install -y python3

Dockerfileを作成したら、docker buildコマンドでイメージを作ります。

$ docker build -t test/hoge:latest .
$ docker run -it test/hoge:latest /bin/bash
> python --version

とりあえずできました。pythonのバージョンは3.4.3でした。

あと、毎回終了するとまっさらになってしまうので、ローカル環境とマウントさせて、データを保存できるようにしたい。

$ docker run -it -v /c/Users/hoge/docker:/hogehoge test/hoge:latest

-v ローカルパス:サーバパスとやるとマウントできる。

pipもインストールする

上記のDockerfileを修正して、pipも使えるようにします。python3-pipをインストールします。

Dockerfile

FROM ubuntu:14.04
RUN apt-get update -y && apt-get install -y python3 python3-pip

その他困ったこと

同じ名前でbuildしたら昔のイメージが<none>という名前になって消せなくなった

参考:How to remove unused Docker containers and images

これで一括で消せる。Repositoryとか、Tagとかがになっても、Image IDがあるので、docker rmi {Image ID}とやれば消せた。

$ docker rmi $(docker images | grep "^<none>" | awk '{print $3}')

visual studio codeがフリーズする

利用開始3日目にして、visual studio codeがフリーズします。特定のプロジェクトを開くとフリーズします。原因不明。そもそもいくらタブを閉じても、フリーズ後に再度プロジェクトを開くと閉じたタブが全部開く。その中には消したファイルすらあり、たまに、そのようなファイルはありませんエラーまで出る。。

あと他のプロジェクトと違うのは、下のステータスバーに、looking for css classes on the workspace…といったメッセージが出続ける。これは拡張の機能だと思う。Zignd/HTML-CSS-Class-Completionこれっぽい。スター数とか結構少ないから、削除してみる。

どうも直ったっぽい。

eslint

ESLint

参考:ESLint 最初の一歩

ESLint は JavaScript のための静的検証ツールです。コードを実行する前に明らかなバグを見つけたり、括弧やスペースの使い方などのスタイルを統一したりするのに役立ちます。同様のツールとしては JSLint, JSHint 等があります。

インストール

$ npm i -D eslint

package.jsonの設定

グローバルインストールでないので、npmから実行できるようにします。
package.jsonのscriptsを下記のようにします。

"scripts": {
  "lint": "eslint src",
  "lint-init": "eslint --init"
},

初期化(設定ファイルの作成)

eslint –initで対話的に設定ファイルが作成できます。グローバルインストールでないので、eslint –initというコマンドがそのままは使えない為、上記で設定したnpmのscriptsを使います。設定ファイルの作成が終わったら、上記のlint-initは不要です。

$ npm run lint-init

色々聞かれたので、popularのAirBnBのjsonにとりあえずしてみました。設定ファイル、.eslintrc.jsonが出力されます。
.eslintrc.jsonの中身

{
    "extends": "airbnb",
    "plugins": [
        "react",
        "jsx-a11y",
        "import"
    ]
}

jsファイルを適当に作ってみる

hoge.js

function hoge(name){
    var msg = 'you are' + name;
    return msg
}
alert(hoge('Abe'));

使ってみる

$ npm run lint hoge.js

使えました。下記が表示されました。

  1:20  error    Missing space before opening brace               space-before-blocks
  1:21  error    Expected linebreaks to be 'LF' but found 'CRLF'  linebreak-style
  2:5   error    Expected indentation of 2 spaces but found 4     indent
  2:5   error    Unexpected var, use let or const instead         no-var
  2:15  error    Unexpected string concatenation                  prefer-template
  2:32  error    Expected linebreaks to be 'LF' but found 'CRLF'  linebreak-style
  3:5   error    Expected indentation of 2 spaces but found 4     indent
  3:15  error    Expected linebreaks to be 'LF' but found 'CRLF'  linebreak-style
  3:15  error    Missing semicolon                                semi
  4:2   error    Expected linebreaks to be 'LF' but found 'CRLF'  linebreak-style
  5:1   error    'alert' is not defined                           no-undef
  5:1   warning  Unexpected alert                                 no-alert
  5:20  error    Newline required at end of file but not found    eol-last

おー厳しい。

どんなルール設定にしたら最適なのでしょうか?
とりあえずAirbnbに合わせることはいいことだとは思いますが。あと、改行文字とか、ブロックの前にスペース空けるとかは、自動整形とかあると便利なのですが、あるのでしょうか?

結構Airbnbは人気みたい。
visual studio codeでは、Shift+Alt+Fで自動整形できる。拡張機能にeslintもあるし、eslintの設定は、eslintrc.jsonを読んでくれる。eslintはデフォルトで、node_modulesの中はみないとどこかに書いてあったんだけど、visual studio codeのeslint拡張は見ちゃうみたい。.eslintignoreで設定したら消えた。改行文字もvisual studio codeの設定変更した。これでエラー消えた。

Visual Studio CodeでCordova開発をする

無償のVisual Studio CodeがCordovaに対応。HTML5/JavaScriptでのモバイルアプリケーション開発が可能に

Visual Studio Code
とりあえずインストールした。

MacでもLinuxでも使える! 無償の Visual Studio Code を使用した Cordova 開発
拡張機能のCordova Toolsをインストールすればいいらしい。

大体使い方わかったけど、上記記事の最後に、「Visual Studio Code ではなく Visual Studio 2015 を使用することをお勧めします」と書いてあるので、Visual Studio 2015もインストールしてみる。

記事の中でも書いていますが、Windows をお使いの方で、マシンのリソースがそれなりにあるのであれば、Apache Cordova を使用した開発には Visual Studio Code ではなく Visual Studio 2015 を使用することをお勧めします。Visual Studio 2015 は、Cordova 開発環境の構築、プロジェクトの作成やコーディングの際の豊富な入力支援機能、プラグインの管理や複数のシミュレーターの提供など、さまざまな機能が IDE 統合されており、それらをシームレスに使用することができます。

Visual Studio Community

visual studio codeと2015の違いは、下記に書いてあった。
マイクロソフトのクロスプラットフォーム対応新コーディングツール「Visual Studio Code」
visual studio codeの方が軽量でマルチプラットフォーム対応。macやlinuxでも使える。でも至れり尽くせりなのは、2015。ただ、Cordovaの場合、macでも開発するだろうし、studio code使った方がいいかもしれない。両方試してみよう。

Xampp windows10 PHP sendmail 設定 (gmailを使う)

php.iniの設定と、sendmail.iniの設定をして、stunnelをインストールして、stunnel.confを設定する。

php.iniの設定

php.iniの場所は、xampp/php/php.ini
[mail function]という箇所を下記のようにする。

[mail function]
SMTP=localhost
smtp_port=465
sendmail_path = "D:\xampp\sendmail\sendmail.exe -t"
mail.add_x_header=On

sendamil.iniの設定

sendmail.iniの場所は、xampp/sendmail/sendmaill.ini

[sendmail]
smtp_server=localhost
smtp_port=25
smtp_ssl=none
auth_username=hogehoge@gmail.com
auth_password=hoge

stunnelのインストール

stunnel: Downloads

stunnel.confの設定

stunnel.confのバックアップをとっておき、中身を下記のようにする。

[gmail-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.gmail.com:465
verify = 2
CAfile = ca-certs.pem
checkHost = smtp.gmail.com
OCSPaia = yes

[ssmtp]
accept  = 465
connect = 25
cert = stunnel.pem

最後にXamppコントローラでApacheを再起動する。

vimでphpを使う

参考:VimでのPHP開発環境

PHP開発に便利なプラグイン

NeoBundleでプラグインを入れられるようになったので、上記を参考に、PHP開発に有用そうなプラグインを入れてみます。

Shougo/neocomplete.vim 関数名とか補完してくれるやつ。
Shougo/neosnippet.vim スニペット登録できるやつ。Shougo/neosnippet-snippetsも入れる必要があるらしい。
thinca/vim-ref PHPのマニュアルをvimで見られるやつ。テキストブラウザが必要らしい。
tomtom/tcomment_vim ファイルの種類に合わせて、適切なコメントアウトをしてくれるやつ。
AndrewRadev/splitjoin.vim 展開したり、1行にまとめたりできるやつ。
osyo-manga/vim-watchdogs 構文チェックしてくれるやつ。

NeoBundleでインストール

NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'nanotech/jellybeans.vim'
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'thinca/vim-ref'
NeoBundle 'tomtom/tcomment_vim'
NeoBundle 'AndrewRadev/splitjoin.vim'
NeoBundle 'osyo-manga/vim-watchdogs'

エラーなくインストールできた。
まだ他のサイトにも色々情報があり、全部調べて設定するのは結構大変そう。また今度やる。

参考:
VimでPHP開発環境を作成
vimのPHP開発環境

vim – NeoBundleでプラグイン管理する

参考:Vim pluginへの入門[NeoBundle.vim]

NeoBundleはプラグインを管理するやつ。使い方を上記サイトが書いてくれている。

NeoBundleの設定

vimrcに設定を書きます。

" neobundle settings                                                                                                                                            
if has('vim_starting')
    set nocompatible
    " neobundle をインストールしていない場合は自動インストール
    if !isdirectory(expand("~/.vim/bundle/neobundle.vim/"))
        echo "install neobundle..."
        " vim からコマンド呼び出しているだけ neobundle.vim のクローン
        :call system("git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim")
    endif
    " runtimepath の追加は必須
    set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

call neobundle#begin(expand('~/.vim/bundle'))
let g:neobundle_default_git_protocol='https'

NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'nanotech/jellybeans.vim'


NeoBundleCheck
call neobundle#end()
filetype plugin indent on

call neobundle#beginと、call neobundle#end()の間に、NeoBundle ‘nanotech/jellybeans.vim’とかって書いていけばいいっぽい。