ESLint 〜 備忘録

ESLint とは

GitHub では、こんな感じに書いてある。

ESLintは、ECMAScript / JavaScriptコードで見つかったパターンを識別して報告するためのツールです。多くの点で、JSLintとJSHintに似ていますが、例外はいくつかあります。

  • ESLintは、JavaScriptの解析にEspreeを使用します。
  • ESLintはASTを使用してコード内のパターンを評価します。
  • ESLintは完全にプラグイン可能であり、すべてのルールがプラグインであり、実行時に追加することができます。

インストールと使い方

npm でインストールする。オススメはローカルにインストールすることだそうな。

プロジェクトなどでいろいろあるだろうから、やはりローカルでしょう。パスが通らないのが悲しいけど。

こんな感じで初期化。

設定

初期化すると .eslintrc というファイルができている。このファイルにこんな感じで設定を書いていく。

これがまた設定を書くのが面倒。適当なのを探すのが吉か?

プラグイン

とりあえず、node.js で使うので、それ用のプラグインを入れてみる。

再度設定

プラグインを読み込ませて("plugins": ["node"])、ES6 を指定して("es6": true)、node.js を指定して("node": true)。

ルールの説明

“node/exports-style”: “error”
module.exportsexports は「混ぜるな危険」です。
"node/exports-style"["error", "module.exports"]["error", "exports"] と使うやつを指定することもできる。
“node/no-deprecated-api”: “error”
node.js の非推奨 API を使うとエラーにする。
“node/no-deprecated-api”: “error”
node.js の非推奨 API を使うとエラーにする。
“node/no-missing-import”: “error”
存在しないファイルの import と export を禁止する。が、ES6 ではファイルの探し方がちゃんと決まっていないので将来的に変更があるよと書いてあった
“node/no-missing-require”: “error”
存在しないファイルに対しての require を禁止する(no-missing-import と似ているが使い分けがまだわからん)。
“node/no-unsupported-features”: “error”
指定した node.js のバージョンでサポートされていない構文の使用を禁止する。node.js のバージョンは package.json で指定してあるやつ("engines": {"node": ">=6.10.0"})。

間違っていたらゴメンなさい。

メールサーバ構築:必要そうなものを入れていく

tmux

ssh が切れたら悲しくなるので。

インストールし終わったら、管理ユーザで tmux に入ってから $ sudo su しておく。

ntp

時刻合わせ。

書き換えたのは以下の通り。NICT を参照している。

# ntpq -p で様子を見たら終わり。

ホスト名の設定

ホスト名を設定する。このあたりはバックアップはいらないと思う。

/etc/hostname の中身は FQDN にしておく。/etc/hosts も同様。

その他

何かあれば追記する。

メールサーバ構築:OS インストールと sshd, ufw の設定

Ubuntu 16.04 でメールサーバをたてる。

Ubuntu 16.04 のインストール

目標としては、Postfix が smtp サーバ、Dovecot で imap と pop を。Postgrey と SpamAssassin でスパム対策。Clam AntiVirus と amavisd-new でウイルス対策。管理は Postfix Admin でできたらいいなぁ。Roundcube で Web メールができたらなお良し。

Ubuntu は普通にインストールした(つもり)。インストール時につくられるユーザは管理ユーザとして使う。

sshd の設定

まず、sshd の設定をおこなう。コンソールから管理ユーザでログイン。でスーパーユーザになり、以降はスーパーユーザでの作業。

ファイルの変更はまずはこれだけ。待ち受けポートを変更する。

で、なんらかのターミナルアプリでつなげる(VPS を使っているので、なるべく早くターミナルアプリで操作したい)。
管理ユーザの authorized_keys に自分の公開鍵を追加する。パスワード認証は禁止。

authorized_keys の変更は以下のような感じ。

ufw の設定

ufw はデフォルト deny の設定にする。開く必要があるポートを考える。

ポート番号 プロトコル 備考
25 Simple Mail Transfer Protocol (SMTP)
80 Hypertext Transfer Protocol (HTTP)
110 Post Office Protocol v3 (POP3)
143 Internet Message Access Protocol (IMAP)
443 Hypertext Transfer Protocol over TLS/SSL (HTTPS)
465 Simple Mail Transfer Protocol over TLS/SSL (SMTPS)
993 Internet Message Access Protocol over TLS/SSL (IMAPS)
995 Post Office Protocol 3 over TLS/SSL (POP3S)
30000 Secure Shell (SSH) ssh のポート番号は変更している。

こんな感じ。とりあえず、設定。

確認したい場合は、# ufw status で。

ツールとか

先に入れておけばよかったツールとか。

画面は、

こんな感じです。

とりあえず、ここまで。

PHP の文字コード

いるんだか要らないんだか不明だけど。

PHP のタイムゾーン

PHP のタイムゾーンの設定。毎度マニュアルを見るのもバカらしいので。

Grunt を入れる(忘れてた)

npm で入れるという部分では、ウソではないんだけど。npm install -g grunt-cli で入ります。v1.2.0 が入りました。

適当なディレクトリをつくって、そこで作業します。

npm init で package.json を生成してちょっと手直し。まずは、

{
“name”: “test”,
“version”: “1.0.0”,
“description”: “for testing”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“author”: “ngn”,
“license”: “MIT”
}

こんな感じから。とりあえず npm install --save-dev grunt して、インストールした library の情報を package.json に吐き出してもらいます。

“devDependencies”: {
“grunt”: “^1.0.1”
}

こんなのが追加される。node_modules ディレクトリができていて、その中に grunt が入っているはずです。

Lambda 実行環境をつくる

node.js の環境をつくるの続き。

で、Lambda の実行環境と同じように動作するようにする。

Lambda ではデフォルトで ImageMagick が入っている。ということで、まずはその素地として sudo apt-get install imagemagick でImageMagick のインストールをおこなっておきます。

AWS 関連の開発ということで、AWS Command Line Interface が必要になります。この環境は Ubuntu の 14.04 なので Python のバージョンは Python 2.7.6 が入っています。これを使って入れます。

一応、AWS のドキュメント(Installing the AWS Command Line Interface)の通りに進めてみます。

$ python –version
Python 2.7.6
$ pip –help
プログラム ‘pip’ はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt-get install python-pip

ということで、pip が入っていません。wget https://bootstrap.pypa.io/get-pip.py でスクリプトをダウンロードして、sudo python2.7 get-pip.py でインストールします(Python のバージョンまで付けておいて、そのバージョンのモジュール(?)として入れておくみたいです)。これで、pip --help でヘルプが表示されるようになりました(インストールできました)。

で、本体のインストールは、sudo pip install awscli を実行します。

$ aws –version
aws-cli/1.10.41 Python/2.7.6 Linux/3.13.0-88-generic botocore/1.4.31

でインストールされていることが確認できます。あとは設定をおこなっておきましょう。

$ aws configure
AWS Access Key ID [None]: A…..Q
AWS Secret Access Key [None]: m…..t
Default region name [None]: ap-northeast-1
Default output format [None]: json

で OK です。

次は npm でいろいろ入れていきます。

node.js の環境をつくる

といっても、nvm を使って、GitHub のドキュメント通りにするだけ。

curl なら、curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash で、Wget なら wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash でインストール。Ubuntu なら wget は最初から入っているのでそちらを使えば良いでしょう。

=> Appending source string to /home/nakase/.bashrc
=> Close and reopen your terminal to start using nvm

と表示され、.bashrc に必要なことが追加されていることがわかります。

インストールが終わったら、nvm ls-remote でインストールできるバージョンを調べます。今回は AWS の Lqambda の開発のためなので v0.10.36 と v4.3.2 を入れておきます。

Lambda で使える node.js のバージョンは 0.10.33 というものを読んだことがあるんですが、AWS のドキュメントでは、

AWS Lambda supports the following runtime versions:

Node.js – v0.10.36, v4.3.2 (recommended)
Java – Java 8
Python – Python 2.7

とありました。細かいバージョンは上がっていっているんですかね?

実際のインストールは、nvm install v0.10.36nvm install v4.3.2 で。この順で入れたら、

$ node -v
v4.3.2

というような感じになります。バージョンの切替は、

$ nvm use v0.10.36
Now using node v0.10.36 (npm v1.4.28)

てな感じで。インストールされている node のバージョンは、

$ nvm ls
-> v0.10.36
v4.3.2
default -> v0.10.36
node -> stable (-> v4.3.2) (default)
stable -> 4.3 (-> v4.3.2) (default)
iojs -> N/A (default)

で調べることができます。

VirtualBox と Vagrant の動作確認

端末から VirtualBox を起動。Debian の netinst をインストールして、しばらく動かして、問題がないか確認。
アイコンをプレスしていつも表示されるようにしておく。

次に Vagrant の確認。
プラグインをインストールする。

sahara
sandbox モードが使えるようになる。ロールバックするのでレシピの開発時にあったら便利。
vagrant-omnibus
仮想環境に Chef を自動的にインストールする。
vagrant-cachier
apt-get や yum でのファイルのダウンロードをキャッシュする。仮想マシンをつくりなおしたりするときに高速になる。
vagrant-chef-zero
Vagrant から Chef Zero Server を立ち上げてくれる。
vagrant-vbox-snapshot
スナップショットをとることができる。

$ vagrant plugin install sahara
$ vagrant plugin install vagrant-omnibus
$ vagrant plugin install vagrant-cachier
$ vagrant plugin install vagrant-chef-zero
$ vagrant plugin install vagrant-vbox-snapshot

Chef は関係なしで、動かしてみる。

$ mkdir vagrant_test
$ cd vagrant_test
$ vagrant box add opscode-ubuntu-14.04 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_ubuntu-14.04_chef-provisionerless.box
$ vagrant init opscode-ubuntu-14.04
$ vi Vagrantfile
$ vagrant up
$ vagrant ssh

ssh できたらとりあえず OK。

VirtualBox と Vagrant と Chef Development Kit

前準備

$ sudo apt-get install dkms libsdl1.2debian

それぞれのファイルを用意する。

Oracle VM VirtualBox
https://www.virtualbox.org/
Vagrant
https://www.vagrantup.com/
Chef
https://www.chef.io/

インストールする。

$ sudo dpkg -i virtualbox-5.0_5.0.6-103037~Ubuntu~trusty_amd64.deb
$ sudo dpkg -i vagrant_1.7.4_x86_64.deb
$ sudo dpkg -i chefdk_0.9.0-1_amd64.deb