//ルートにアクセスされたら/archiveにリダイレクトする

エイリーの備忘録

開発について書いていこうと思っています。

俺用vimチートシート

この記事は、私の私による私のためのvimの操作方法を記述した記事です。
随時更新予定です。

この記事を書く背景

最近、vimのコマンドを覚えれなくなってきたので、メモが欲しいけど、持ち歩くのはめんどくさいし、どこからでも見やすいブログがいいと思ったのでここに書きます!

前提環境

vimがインストールされているmaclinux
windowsだと、インストールスクリプトを走らせるだけでも苦労しそうだから、知らんw

vimの設定とプラグインをインストール

$curl https://raw.githubusercontent.com/youmjww/vimSetup/master/vimSetup.sh | sh

操作方法

特に記述がない限り、ノーマルモードで実行お願いします。
独自カラムは、導入したプラグインの挙動だったり、独自に設定したショートカットだったりします。

モード変更

コマンド 内容 独自
a カーソルの次の位置でインサートモード
i カーソルがある位置でインサートモード
v ビジュアルモード
Esc(連打) ノーマルモード

カーソル移動

1ずつ移動
コマンド 内容 独自
k 上へ移動
j 下へ移動
h 左へ移動
l 右へ移動
複数まとめて移動
コマンド 内容 独自
G 一番下へ移動
gg 一番上へ移動
H 行の左端へ移動
L 行の右端へ移動

ファイル操作

コマンド 内容 独自
:w 変更を保存する
:q ファイルを閉じる
:q! 保存していなくても、強制的にファイルを閉じる
:wq ファイルを保存して閉じる
:wa 開いているファイルの変更をすべて保存
:qa 開いているすべてのファイルを閉じる
:wqa ファイルをすべて保存してファイルを閉じる

コピペ

コマンド 内容 独自
(ビジュアルモードで範囲指定後)y コピー  
dd 一行カット
x 一文字カット
p ペースト

検索

コマンド 内容 独自
:Ag 検索ワード カレントディレクトリ以下のソースから文字列の検索
Control + p ファイル名検索
?[文字列] カーソル位置より上方向に[文字列]を検索
/[文字列] カーソル位置より下方向に[文字列]を検索
n 次の候補へ移動
N 前の候補へ移動
F3キー 検索ハイライトを解除

その他コマンド

コマンド 内容 独自
space + f ファイルエクスプローラーを開く
:数字 指定された行へジャンプ
ci' シングルクォートの間を削除してインサートモード
ci" ダブルクォートの間を削除してインサートモード
ci( 丸括弧の間を削除してインサートモード

あとがき

vimに結構慣れてきて、自己流ながらvimを勉強しながら使っているのですが、やはりvimは奥が深く、使っていて楽しいです。まだまだvimは使いこなせていないですが、これからどんどん使って(私にとって)可愛いvimにしていこうと思います。
最後に一言: vimたんかわいいよ///

vimプラグインマネージャのインストール

何回も同じことをやってるので、備忘録として書きます。
vimプラグインを手動で管理するのは面倒なので、プラグインマネージャを使うと便利(らしい)

確認済み環境

ubuntu16.04
centOS バージョン不明
maxOS X 10.12.5(Sierra)

NeoBundleをcloneしてくる

# プラグインインストール用のディレクトリを作成
# mkdirに-pオプションを付けることでサブディレクトリも同時に作れる
$mkdir -p ~/.vim/bundle

# プラグインマネージャをcloneしてくる
$git clone git://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

.vimrcの設定

vimrcを開く

$vim ~/.vimrc

vimrcの先頭に追記

" プラグインの管理のやつ
if &compatible
  set nocompatible
endif

set runtimepath+=~/.vim/bundle/neobundle.vim/
call neobundle#begin(expand('~/.vim/bundle/'))
NeoBundleFetch 'Shougo/neobundle.vim'

" 追加プラグイン
" ファイルエクスプローラ
NeoBundle 'scrooloose/nerdtree'


NeoBundleCheck

プラグインを追加する場合は、NeoBundleCheckより前に使用したいプラグインを追記するとvimを開いた時に自動的にインストールしてくれます。

あとがき

最近vimを使わざる得ない事があり、vimを使っているとだんだん慣れてきて、もっといい環境を整えれないものかと思う今日このごろ。
とりあえず、vimVScodeレベルで使えるようにしたいです・・・
あと、環境が変わるたびにプラグインマネージャをインストールするのがめんどくさいのでどうにか自動化したいものです・・・

npm install でつまずいたのでメモ

あれ?いつも通りnpmでパッケージをインストールしようとすると404エラーが出るぞ・・・
スペルはgithubの公式からコピペしてるから間違えていないはず・・・と思い、いろいろ調べてやってみたことのメモです。

npmのバージョン確認

とりあえず、npmのバージョンが古いのかと思いバージョンを確認してみました。

npm -v

#結果
3.5.2

うーん今回使いたいパッケージはnpm4.15.2って書いてあるな。
俺、npmをインストールたのどんだけ前なんだろと思いつつnpmを更新することに。

npmのアップデート

とりあえずaptでインストールしたはずだからaptでアップデートできると思いやってみました。

$sudo apt update
$sudo apt upgrade npm
$npm -v
#結果
変わらず3.5.2

ん?aptで更新をかけたのに変わってないぞ・・・
じゃあ、npmでnpmの更新ができるみたいだから試してみよう。

$npm install -g npm

すると・・・
f:id:youmjww:20170517001548p:plain
なんでやw
npmのリポジトリは登録されているはずだろw
これはもしかしてリポジトリの登録が何かの拍子で解除されてしまったのかな?
とりあえず、リポジトリのリストを確認してみましょう。

npmレジストリの確認

$npm config get registry
#結果
null

あーレジストリがnullになってる・・・
そりゃインストール出来ないわな・・・
うん。
じゃあ登録しなおしてやってみるか

npmレジストリの登録

$npm set registry http://registry.npmjs.org/

これで登録出来たはず・・・

もう一回npmの更新を試みている

とりあえず、テストも兼ねてnpmの更新をしてみたいと思います。

$npm install -g npm

お!今度は通ったぞ!
じゃあnpmのバージョンが何になったか確認してみよう!

$npm -v

#結果
3.5.2

あれ・・・バージョンが上がってない・・・
とりあえずこれでもう一回目的のパッケージがインストールできるか試してみるかと思い試してみると、ちゃんとインストールできました。
どうやら原因はレジストリの登録が何故かnullになっていたからみたいですね・・・

あとがき

なんか途中からnpmのトラブルシューティングみたいになってましたけど、目的は達成できたので良しとしますw
まさかレジストリの登録が変わっていてnullになっているとは思いませんでしたw
でも、更新をかけてもnpmのバージョンが上がらなかったのは何故なんだろ・・・
ubuntu16.04で使えるバージョンだと今のバージョンが最新なのかな・・・
まあいいやw
目的は達成できたから今回は良しとしましょう。

ubuntuでrpmパッケージを使う

あれ?debian用のパッケージは転がってるけどubuntu用のパッケージが無い・・・
rpmでしか転がってない・・・コンバートしたら使えるんだ・・・コンバートしよう!

コンバート用のパッケージをインストール

$sudo apt update
$sudo apt install alien dpkg-dev debhelper build-essential

コンバートしてインストールする

コンバー

$sudo alien <rpmのパッケージ名>.rpm

インストール

ここはいつも通りですよね。
dpkgでサクッと行きましょう

$sudo dpkg -i <コンバートしたrpm>.deb

あとがき

以上!RedHat系のパッケージをubuntuで使う方法でした。

meteorのプロジェクトをpassengerで二回目以降のデプロイ

meteorのプロジェクトの二回目以降のデプロイ方法を書かせていただきます。
初回のデプロイと二回目のデプロイは微妙にすることが違うのでご注意ください。

一回目の場合は下記記事をご参照ください。
youmjww.hatenablog.jp


この記事は、前回同様
Deploying a Meteor app on Ubuntu 16.10 (with APT) on a Linux/Unix production server with Passenger open source in Standalone mode - Passenger + Meteor deployment tutorial - Passenger Library
上記サイトを参考にして筆者が実際に構築をし、必要と思われるものを書き出しています。

前提環境

ディストリービュージョン:ubuntuまたはdebian
サーバー:passenger
Meteorのバージョンが1.4以上

デプロイ前の準備

meteorのプロジェクトをビルドしてサーバーに送信する

まず、ローカル環境でmeteorのパッケージをビルドします。

#ローカル環境
#ビルド
$meteor build --server-only ../new_package && mv ../new_package/*.tar.gz package.tar.gz

#ファイルをアップロード
$scp package.tar.gz adminuser@yourserver:~/

サーバーにログイン

$ssh myappuser@yourserver.com

デプロイ

tarの解凍

$mkdir -p /var/www/myapp/tmp
$cd /var/www/myapp/tmp
$tar xzf ~/package.tar.gz

passengerの設定ファイルをコピー

このファイルは何回も使いまわすのでどこかにバックアップを取っておいたほうがいいかも知れないですね。

$cp /var/www/myapp/bundle/Passengerfile.json /var/www/myapp/tmp/bundle/

依存関係のインストー

$cd /var/www/myapp/tmp/bundle/programs/server
$npm install --production
$npm prune --production

アプリを更新する

もしちゃんと更新できなかった時のためにバックアップを取っておきます。

$mv /var/www/myapp/bundle /var/www/myapp/bundle.old
$mv /var/www/myapp/tmp/bundle /var/www/myapp/bundle
$passenger-config restart-app /var/www/myapp/bundle

古いバージョンを削除

新しいバージョンのアプリが動いているのを確認できたら古い方は削除してください。

$rm -rf /var/www/myapp/bundle.old

あとがき

passengerでアプリをデプロイするのって結構手間ですよねw
と言っても私はapacheでデプロイなどは経験がないのでなんとも言えないですけどw
私は実際に使う時はもうめんどくさいのでこのページをまるまるスクリプトにして実行をかけていましたw
今度はどんなネタで記事を書こうかなwそろそろネタ切れ感がしてやばいですw
でも、毎日更新をしていることによってブログのモチベーションがあるのも事実だし、毎日更新は崩したくないな・・・

meteorのプロジェクトをpassengerで1回目のデプロイをする

今回はmeteorのプロジェクトの1位回目のデプロイ方法を書かせていただきます。
日本語の記事って少なすぎて泣けてきますよね・・・
エンジニアなら英語の記事ぐらい読めろって言われますが、まだ苦手です・・・

この記事は、
Deploying a Meteor app on Debian 8 (with APT) on a Linux/Unix production server with Passenger open source in Standalone mode - Passenger + Meteor deployment tutorial - Passenger Library
上記サイトを参考にして筆者が実際に構築をし、必要と思われるものを書き出しています。

passengerのインストー

まだpassenger(webサーバー)をインストールしていなければ、下記の記事を参考にpassengerをインストールしてください。
youmjww.hatenablog.jp

前提環境

ディストリービュージョン:ubuntuまたはdebian
サーバー:passenger
sudo権限が使える
Meteorのバージョンが1.4以上

デプロイ前の準備

meteorをビルドしてサーバーに送信する

まず、ローカル環境でmeteorのパッケージをビルドします。

#ローカル環境
#ビルド
$meteor build --server-only ../new_package && mv ../new_package/*.tar.gz package.tar.gz

#ファイルをアップロード
$scp package.tar.gz adminuser@yourserver:~/

appユーザの作成

ここからは特に指示がない限りサーバー上で作業を行ってください。

#ローカル
#サーバーに接続
$ssh adminuser@yourserver

私、セキュリティの事はよくわからないのですが専用のユーザを作って操作してるのが安全らしいですね。よくわからんけど・・・

#appユーザーの作成
$sudo adduser myappuser

meteorのパッケージを抽出する

$sudo mkdir -p /var/www/myapp

$cd /var/www/myapp
$tar xzf ~/package.tar.gz
$chown -R myappuser: .

アプリ環境を用意する

MongoDBのインストー

#aptのリポジトリを追加
$sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6

$echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list

#リポジトリを追加したのでパッケージリストに更新をかける
$sudo apt update

$sudo apt install -y mongodb-org

依存関係のインストー

#myappuserに切り替え
$su myappuser

#依存関係のインストール
$cd /var/www/myapp/bundle/programs/server
$npm install --production

passengerの設定

サーバーの設定を行います。

$cd /var/www/myapp/bundle
$vim Passengerfile.json

Passengerfile.jsonに下記の内容を入力してください。

{
  // Tell Passenger that this is a Meteor app.
  "app_type": "node",
  "startup_file": "main.js",
  "envvars": {
    // Tell your app where MongoDB is
    "MONGO_URL": "mongodb://localhost:27017/myappdb",
    // Tell your app what its root URL is
    "ROOT_URL": "http://yourserver.com",
  },
  // Store log and PID file in parent directory
  "log_file": "../passenger.log",
  "pid_file": "../passenger.pid"
  // Run the app in a production environment. The default value is "development".
  "environment": "production",
  // Run Passenger on port 80, the standard HTTP port.
  "port": 80,
  // Tell Passenger to daemonize into the background.
  "daemonize": true,
  // Tell Passenger to run the app as the given user. Only has effect
  // if Passenger was started with root privileges.
  "user": "myappuser"
}

ROOT_URLはページのルートURLを指定してください。

passengerを起動する

#今はadminuserからmyappuserにスイッチしている状態のはずなのでadminuserに戻る
$exit

#passengerのスタート
$cd /var/www/myapp/bundle
$sudo passenger start

サーバがちゃんと動いているかテストする

#ローカル環境
$curl http://yourserver.com/
#これでちゃんと立っていたらHTMLファイルが帰ってくるはずです。

あとがき

これでpassengerの初期設定などは完了しました。
ただ、私も英語が得意なわけではないので解説などはざっくりしています。
ああ・・・英語できるようになりたい・・・

ubuntuにpassenger standaloneを構築する

英語の記事が多く、自分で使う時もよく迷うので備忘録として書きます

前提環境

ディストリビューションubuntuまたはdebian
sudoが使える

node.jsのインストール

node.jsのインストール

$sudo apt update
$sudo apt install -y curl apt-transport-https ca-certificates &&
&curl --fail -ssL -o setup-nodejs https://deb.nodesource.com/setup_4.x &&
  sudo bash setup-nodejs &&
  sudo apt-get install -y nodejs build-essential

passengerのインストール

# リポジトリの信用情報を取得
$sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
$sudo apt install -y apt-transport-https ca-certificates

# リポジトリを追加
$sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger xenial main > /etc/apt/sources.list.d/passenger.list'
$sudo apt update

# passengerのインストール
$sudo apt install -y passenger

正しくインストールされたか確認

$sudo /usr/bin/passenger-config validate-install
# 実行結果
 * Checking whether this Phusion Passenger install is in PATH... ✓
 * Checking whether there are no other Phusion Passenger installations... ✓


以上でパッセンジャー自身のインストールは終了です。
明日の記事でmeteorと連携を行い、デプロイ環境の構築を書きたいと思います。